Bump reqwest version.
Add mark server as read route. Mark servers as read on join.
This commit is contained in:
71
Cargo.lock
generated
71
Cargo.lock
generated
@@ -1327,6 +1327,19 @@ dependencies = [
|
|||||||
"tokio-tls",
|
"tokio-tls",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hyper-tls"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
|
||||||
|
dependencies = [
|
||||||
|
"bytes 1.0.1",
|
||||||
|
"hyper 0.14.11",
|
||||||
|
"native-tls",
|
||||||
|
"tokio 1.9.0",
|
||||||
|
"tokio-native-tls",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ident_case"
|
name = "ident_case"
|
||||||
version = "1.0.1"
|
version = "1.0.1"
|
||||||
@@ -1688,7 +1701,7 @@ dependencies = [
|
|||||||
"pbkdf2",
|
"pbkdf2",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"rand 0.7.3",
|
"rand 0.7.3",
|
||||||
"reqwest",
|
"reqwest 0.10.10",
|
||||||
"rustls 0.17.0",
|
"rustls 0.17.0",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_bytes",
|
"serde_bytes",
|
||||||
@@ -2515,7 +2528,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "rauth"
|
name = "rauth"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
source = "git+https://gitlab.insrt.uk/insert/rauth?rev=840ad003263fd5570aba4866e7d72e4fc1b3e95a#840ad003263fd5570aba4866e7d72e4fc1b3e95a"
|
source = "git+https://gitlab.insrt.uk/insert/rauth?rev=19bef300ecc269c028e3d746f0a2f09842d3b37b#19bef300ecc269c028e3d746f0a2f09842d3b37b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"handlebars",
|
"handlebars",
|
||||||
@@ -2525,7 +2538,7 @@ dependencies = [
|
|||||||
"mongodb",
|
"mongodb",
|
||||||
"nanoid 0.3.0",
|
"nanoid 0.3.0",
|
||||||
"regex",
|
"regex",
|
||||||
"reqwest",
|
"reqwest 0.11.4",
|
||||||
"rocket",
|
"rocket",
|
||||||
"rust-argon2",
|
"rust-argon2",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -2620,14 +2633,12 @@ dependencies = [
|
|||||||
"http-body 0.3.1",
|
"http-body 0.3.1",
|
||||||
"hyper 0.13.10",
|
"hyper 0.13.10",
|
||||||
"hyper-rustls",
|
"hyper-rustls",
|
||||||
"hyper-tls",
|
|
||||||
"ipnet",
|
"ipnet",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"log",
|
"log",
|
||||||
"mime",
|
"mime",
|
||||||
"mime_guess",
|
"mime_guess",
|
||||||
"native-tls",
|
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"pin-project-lite 0.2.4",
|
"pin-project-lite 0.2.4",
|
||||||
"rustls 0.18.1",
|
"rustls 0.18.1",
|
||||||
@@ -2636,7 +2647,6 @@ dependencies = [
|
|||||||
"serde_urlencoded",
|
"serde_urlencoded",
|
||||||
"tokio 0.2.25",
|
"tokio 0.2.25",
|
||||||
"tokio-rustls 0.14.1",
|
"tokio-rustls 0.14.1",
|
||||||
"tokio-tls",
|
|
||||||
"url",
|
"url",
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
"wasm-bindgen-futures",
|
"wasm-bindgen-futures",
|
||||||
@@ -2645,6 +2655,41 @@ dependencies = [
|
|||||||
"winreg 0.7.0",
|
"winreg 0.7.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "reqwest"
|
||||||
|
version = "0.11.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "246e9f61b9bb77df069a947682be06e31ac43ea37862e244a69f177694ea6d22"
|
||||||
|
dependencies = [
|
||||||
|
"base64 0.13.0",
|
||||||
|
"bytes 1.0.1",
|
||||||
|
"encoding_rs",
|
||||||
|
"futures-core",
|
||||||
|
"futures-util",
|
||||||
|
"http",
|
||||||
|
"http-body 0.4.2",
|
||||||
|
"hyper 0.14.11",
|
||||||
|
"hyper-tls 0.5.0",
|
||||||
|
"ipnet",
|
||||||
|
"js-sys",
|
||||||
|
"lazy_static",
|
||||||
|
"log",
|
||||||
|
"mime",
|
||||||
|
"native-tls",
|
||||||
|
"percent-encoding",
|
||||||
|
"pin-project-lite 0.2.4",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
"serde_urlencoded",
|
||||||
|
"tokio 1.9.0",
|
||||||
|
"tokio-native-tls",
|
||||||
|
"url",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"wasm-bindgen-futures",
|
||||||
|
"web-sys",
|
||||||
|
"winreg 0.7.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "resolv-conf"
|
name = "resolv-conf"
|
||||||
version = "0.7.0"
|
version = "0.7.0"
|
||||||
@@ -2682,7 +2727,7 @@ dependencies = [
|
|||||||
"phf",
|
"phf",
|
||||||
"rauth",
|
"rauth",
|
||||||
"regex",
|
"regex",
|
||||||
"reqwest",
|
"reqwest 0.11.4",
|
||||||
"rocket",
|
"rocket",
|
||||||
"rocket-governor",
|
"rocket-governor",
|
||||||
"rocket_cors",
|
"rocket_cors",
|
||||||
@@ -3460,6 +3505,16 @@ dependencies = [
|
|||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio-native-tls"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
|
||||||
|
dependencies = [
|
||||||
|
"native-tls",
|
||||||
|
"tokio 1.9.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio-rustls"
|
name = "tokio-rustls"
|
||||||
version = "0.13.1"
|
version = "0.13.1"
|
||||||
@@ -3975,7 +4030,7 @@ dependencies = [
|
|||||||
"futures",
|
"futures",
|
||||||
"http",
|
"http",
|
||||||
"hyper 0.13.10",
|
"hyper 0.13.10",
|
||||||
"hyper-tls",
|
"hyper-tls 0.4.3",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"log",
|
"log",
|
||||||
"native-tls",
|
"native-tls",
|
||||||
|
|||||||
@@ -39,14 +39,14 @@ validator = { version = "0.11", features = ["derive"] }
|
|||||||
# async
|
# async
|
||||||
futures = "0.3.8"
|
futures = "0.3.8"
|
||||||
chrono = "0.4.15"
|
chrono = "0.4.15"
|
||||||
reqwest = { version = "0.10.8", features = ["json"] }
|
reqwest = { version = "0.11.4", features = ["json"] }
|
||||||
async-std = { version = "1.8.0", features = ["tokio1", "tokio02", "attributes"] }
|
async-std = { version = "1.8.0", features = ["tokio1", "tokio02", "attributes"] }
|
||||||
|
|
||||||
# internal util
|
# internal util
|
||||||
web-push = "0.7.2"
|
web-push = "0.7.2"
|
||||||
many-to-many = "0.1.2"
|
many-to-many = "0.1.2"
|
||||||
lettre = "0.10.0-alpha.4"
|
lettre = "0.10.0-alpha.4"
|
||||||
rauth = { git = "https://gitlab.insrt.uk/insert/rauth", rev = "840ad003263fd5570aba4866e7d72e4fc1b3e95a" }
|
rauth = { git = "https://gitlab.insrt.uk/insert/rauth", rev = "19bef300ecc269c028e3d746f0a2f09842d3b37b" }
|
||||||
hive_pubsub = { git = "https://gitlab.insrt.uk/insert/hive", rev = "a89826df2b30166220e68a6ed01a58b751456604", features = ["mongo"] }
|
hive_pubsub = { git = "https://gitlab.insrt.uk/insert/hive", rev = "a89826df2b30166220e68a6ed01a58b751456604", features = ["mongo"] }
|
||||||
|
|
||||||
# web
|
# web
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
export version=0.5.1-alpha.22
|
export version=0.5.1-alpha.23
|
||||||
echo "pub const VERSION: &str = \"${version}\";" > src/version.rs
|
echo "pub const VERSION: &str = \"${version}\";" > src/version.rs
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ use mongodb::bson::to_document;
|
|||||||
use mongodb::bson::Document;
|
use mongodb::bson::Document;
|
||||||
use rocket::serde::json::Value;
|
use rocket::serde::json::Value;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use ulid::Ulid;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||||
pub struct MemberCompositeKey {
|
pub struct MemberCompositeKey {
|
||||||
@@ -246,7 +247,48 @@ impl Server {
|
|||||||
.collect::<Vec<String>>())
|
.collect::<Vec<String>>())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn mark_as_read(&self, id: &str) -> Result<()> {
|
||||||
|
let current_time = Ulid::new().to_string();
|
||||||
|
let unreads = get_collection("channel_unreads");
|
||||||
|
|
||||||
|
unreads.delete_many(
|
||||||
|
doc! {
|
||||||
|
"_id.channel": {
|
||||||
|
"$in": &self.channels
|
||||||
|
},
|
||||||
|
"_id.user": &id
|
||||||
|
},
|
||||||
|
None
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.map_err(|_| Error::DatabaseError {
|
||||||
|
operation: "delete_many",
|
||||||
|
with: "channel_unreads",
|
||||||
|
})?;
|
||||||
|
|
||||||
|
unreads.insert_many(
|
||||||
|
self.channels
|
||||||
|
.iter()
|
||||||
|
.map(|channel| doc! {
|
||||||
|
"_id": {
|
||||||
|
"channel": channel,
|
||||||
|
"user": &id
|
||||||
|
},
|
||||||
|
"last_id": ¤t_time
|
||||||
|
})
|
||||||
|
.collect::<Vec<Document>>(),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.map_err(|_| Error::DatabaseError {
|
||||||
|
operation: "update_many",
|
||||||
|
with: "channel_unreads",
|
||||||
|
})
|
||||||
|
.map(|_| ())
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn join_member(&self, id: &str) -> Result<()> {
|
pub async fn join_member(&self, id: &str) -> Result<()> {
|
||||||
|
// Check if user is banned.
|
||||||
if get_collection("server_bans")
|
if get_collection("server_bans")
|
||||||
.find_one(
|
.find_one(
|
||||||
doc! {
|
doc! {
|
||||||
@@ -265,6 +307,7 @@ impl Server {
|
|||||||
return Err(Error::Banned);
|
return Err(Error::Banned);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add user to server.
|
||||||
get_collection("server_members")
|
get_collection("server_members")
|
||||||
.insert_one(
|
.insert_one(
|
||||||
doc! {
|
doc! {
|
||||||
@@ -281,12 +324,14 @@ impl Server {
|
|||||||
with: "server_members",
|
with: "server_members",
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
|
// Announce that user joined server.
|
||||||
ClientboundNotification::ServerMemberJoin {
|
ClientboundNotification::ServerMemberJoin {
|
||||||
id: self.id.clone(),
|
id: self.id.clone(),
|
||||||
user: id.to_string(),
|
user: id.to_string(),
|
||||||
}
|
}
|
||||||
.publish(self.id.clone());
|
.publish(self.id.clone());
|
||||||
|
|
||||||
|
// Broadcast join message.
|
||||||
if let Some(channels) = &self.system_messages {
|
if let Some(channels) = &self.system_messages {
|
||||||
if let Some(cid) = &channels.user_joined {
|
if let Some(cid) = &channels.user_joined {
|
||||||
let channel = Ref::from_unchecked(cid.clone()).fetch_channel().await?;
|
let channel = Ref::from_unchecked(cid.clone()).fetch_channel().await?;
|
||||||
@@ -296,6 +341,9 @@ impl Server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mark entire server as read.
|
||||||
|
self.mark_as_read(&id).await?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ mod server_create;
|
|||||||
mod server_delete;
|
mod server_delete;
|
||||||
mod server_edit;
|
mod server_edit;
|
||||||
mod server_fetch;
|
mod server_fetch;
|
||||||
|
mod server_ack;
|
||||||
|
|
||||||
mod channel_create;
|
mod channel_create;
|
||||||
|
|
||||||
@@ -30,6 +31,7 @@ pub fn routes() -> Vec<Route> {
|
|||||||
server_delete::req,
|
server_delete::req,
|
||||||
server_fetch::req,
|
server_fetch::req,
|
||||||
server_edit::req,
|
server_edit::req,
|
||||||
|
server_ack::req,
|
||||||
channel_create::req,
|
channel_create::req,
|
||||||
member_fetch_all::req,
|
member_fetch_all::req,
|
||||||
member_remove::req,
|
member_remove::req,
|
||||||
|
|||||||
18
src/routes/servers/server_ack.rs
Normal file
18
src/routes/servers/server_ack.rs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
use crate::database::*;
|
||||||
|
use crate::util::result::{Error, Result};
|
||||||
|
|
||||||
|
#[put("/<target>/ack")]
|
||||||
|
pub async fn req(user: User, target: Ref) -> Result<()> {
|
||||||
|
let target = target.fetch_server().await?;
|
||||||
|
|
||||||
|
let perm = permissions::PermissionCalculator::new(&user)
|
||||||
|
.with_server(&target)
|
||||||
|
.for_server()
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
if !perm.get_view() {
|
||||||
|
Err(Error::MissingPermission)?
|
||||||
|
}
|
||||||
|
|
||||||
|
target.mark_as_read(&user.id).await
|
||||||
|
}
|
||||||
@@ -1 +1 @@
|
|||||||
pub const VERSION: &str = "0.5.1-alpha.22";
|
pub const VERSION: &str = "0.5.1-alpha.23";
|
||||||
|
|||||||
Reference in New Issue
Block a user