Bump reqwest version.

Add mark server as read route.
Mark servers as read on join.
This commit is contained in:
Paul
2021-08-07 12:26:25 +01:00
parent fdba2d9e15
commit e7065cbf1d
7 changed files with 135 additions and 12 deletions

71
Cargo.lock generated
View File

@@ -1327,6 +1327,19 @@ dependencies = [
"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]]
name = "ident_case"
version = "1.0.1"
@@ -1688,7 +1701,7 @@ dependencies = [
"pbkdf2",
"percent-encoding",
"rand 0.7.3",
"reqwest",
"reqwest 0.10.10",
"rustls 0.17.0",
"serde",
"serde_bytes",
@@ -2515,7 +2528,7 @@ dependencies = [
[[package]]
name = "rauth"
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 = [
"chrono",
"handlebars",
@@ -2525,7 +2538,7 @@ dependencies = [
"mongodb",
"nanoid 0.3.0",
"regex",
"reqwest",
"reqwest 0.11.4",
"rocket",
"rust-argon2",
"serde",
@@ -2620,14 +2633,12 @@ dependencies = [
"http-body 0.3.1",
"hyper 0.13.10",
"hyper-rustls",
"hyper-tls",
"ipnet",
"js-sys",
"lazy_static",
"log",
"mime",
"mime_guess",
"native-tls",
"percent-encoding",
"pin-project-lite 0.2.4",
"rustls 0.18.1",
@@ -2636,7 +2647,6 @@ dependencies = [
"serde_urlencoded",
"tokio 0.2.25",
"tokio-rustls 0.14.1",
"tokio-tls",
"url",
"wasm-bindgen",
"wasm-bindgen-futures",
@@ -2645,6 +2655,41 @@ dependencies = [
"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]]
name = "resolv-conf"
version = "0.7.0"
@@ -2682,7 +2727,7 @@ dependencies = [
"phf",
"rauth",
"regex",
"reqwest",
"reqwest 0.11.4",
"rocket",
"rocket-governor",
"rocket_cors",
@@ -3460,6 +3505,16 @@ dependencies = [
"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]]
name = "tokio-rustls"
version = "0.13.1"
@@ -3975,7 +4030,7 @@ dependencies = [
"futures",
"http",
"hyper 0.13.10",
"hyper-tls",
"hyper-tls 0.4.3",
"lazy_static",
"log",
"native-tls",

View File

@@ -39,14 +39,14 @@ validator = { version = "0.11", features = ["derive"] }
# async
futures = "0.3.8"
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"] }
# internal util
web-push = "0.7.2"
many-to-many = "0.1.2"
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"] }
# web

View File

@@ -1,3 +1,3 @@
#!/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

View File

@@ -10,6 +10,7 @@ use mongodb::bson::to_document;
use mongodb::bson::Document;
use rocket::serde::json::Value;
use serde::{Deserialize, Serialize};
use ulid::Ulid;
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct MemberCompositeKey {
@@ -246,7 +247,48 @@ impl Server {
.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": &current_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<()> {
// Check if user is banned.
if get_collection("server_bans")
.find_one(
doc! {
@@ -265,6 +307,7 @@ impl Server {
return Err(Error::Banned);
}
// Add user to server.
get_collection("server_members")
.insert_one(
doc! {
@@ -281,12 +324,14 @@ impl Server {
with: "server_members",
})?;
// Announce that user joined server.
ClientboundNotification::ServerMemberJoin {
id: self.id.clone(),
user: id.to_string(),
}
.publish(self.id.clone());
// Broadcast join message.
if let Some(channels) = &self.system_messages {
if let Some(cid) = &channels.user_joined {
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(())
}

View File

@@ -4,6 +4,7 @@ mod server_create;
mod server_delete;
mod server_edit;
mod server_fetch;
mod server_ack;
mod channel_create;
@@ -30,6 +31,7 @@ pub fn routes() -> Vec<Route> {
server_delete::req,
server_fetch::req,
server_edit::req,
server_ack::req,
channel_create::req,
member_fetch_all::req,
member_remove::req,

View 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
}

View File

@@ -1 +1 @@
pub const VERSION: &str = "0.5.1-alpha.22";
pub const VERSION: &str = "0.5.1-alpha.23";