diff --git a/src/database/entities/message.rs b/src/database/entities/message.rs index 177c5304928450f9899caeb2bc4a1e7a282c2e3d..a5b6eb9fa677a5b44411c3a046ff2cbf45613a1e 100644 --- a/src/database/entities/message.rs +++ b/src/database/entities/message.rs @@ -1,4 +1,4 @@ -use crate::util::variables::{VAPID_PRIVATE_KEY, USE_JANUARY}; +use crate::util::variables::{USE_JANUARY, VAPID_PRIVATE_KEY}; use crate::{ database::*, notifications::{events::ClientboundNotification, websocket::is_online}, @@ -297,12 +297,13 @@ impl Message { let channel = self.channel.clone(); ClientboundNotification::MessageDelete { id: self.id.clone(), - channel: self.channel.clone() + channel: self.channel.clone(), } .publish(channel); if let Some(attachments) = &self.attachments { - let attachment_ids: Vec<String> = attachments.iter().map(|f| f.id.to_string()).collect(); + let attachment_ids: Vec<String> = + attachments.iter().map(|f| f.id.to_string()).collect(); get_collection("attachments") .update_one( doc! { diff --git a/src/database/entities/autumn.rs b/src/database/entities/microservice/autumn.rs similarity index 100% rename from src/database/entities/autumn.rs rename to src/database/entities/microservice/autumn.rs diff --git a/src/database/entities/january.rs b/src/database/entities/microservice/january.rs similarity index 100% rename from src/database/entities/january.rs rename to src/database/entities/microservice/january.rs diff --git a/src/database/entities/microservice/mod.rs b/src/database/entities/microservice/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..334ed6f040f2881bfdd00f4d0fd51b9767214acc --- /dev/null +++ b/src/database/entities/microservice/mod.rs @@ -0,0 +1,2 @@ +pub mod autumn; +pub mod january; \ No newline at end of file diff --git a/src/database/entities/mod.rs b/src/database/entities/mod.rs index d384f5d08b0ea8c073e5ffcc7b1490e671bfa0a8..358b2ea41c3d1dd3e633d1d6a6a091242cb71f26 100644 --- a/src/database/entities/mod.rs +++ b/src/database/entities/mod.rs @@ -1,9 +1,11 @@ -mod autumn; +mod microservice; mod channel; -mod january; mod message; mod server; mod user; +mod sync; + +use microservice::*; pub use autumn::*; pub use channel::*; @@ -11,3 +13,4 @@ pub use january::*; pub use message::*; pub use server::*; pub use user::*; +pub use sync::*; diff --git a/src/database/entities/sync.rs b/src/database/entities/sync.rs new file mode 100644 index 0000000000000000000000000000000000000000..d905c690a7125e1c84155f99fc59759d1d8003e4 --- /dev/null +++ b/src/database/entities/sync.rs @@ -0,0 +1,3 @@ +use std::collections::HashMap; + +pub type UserSettings = HashMap<String, (i64, String)>; diff --git a/src/database/entities/user.rs b/src/database/entities/user.rs index 6648ad1aec5b997bd169fe935926a3c2129a57d2..f9c1605512cf71526fcd97d88c134a972ae65ea1 100644 --- a/src/database/entities/user.rs +++ b/src/database/entities/user.rs @@ -4,11 +4,11 @@ use mongodb::{ bson::{doc, from_document}, options::FindOptions, }; -use serde::{Deserialize, Serialize}; -use validator::Validate; use num_enum::TryFromPrimitive; -use ulid::Ulid; +use serde::{Deserialize, Serialize}; use std::ops; +use ulid::Ulid; +use validator::Validate; use crate::database::permissions::user::UserPermissions; use crate::database::*; @@ -65,7 +65,7 @@ pub enum Badges { Developer = 1, Translator = 2, Supporter = 4, - EarlyAdopter = 256 + EarlyAdopter = 256, } impl_op_ex_commutative!(+ |a: &i32, b: &Badges| -> i32 { *a | *b as i32 }); diff --git a/src/database/migrations/scripts.rs b/src/database/migrations/scripts.rs index e08595990fba6357f89accea4c2e7d4ebfa8914b..8e28d7d70dd330ec0517a625a416795df5f42aff 100644 --- a/src/database/migrations/scripts.rs +++ b/src/database/migrations/scripts.rs @@ -1,9 +1,12 @@ use crate::database::{get_collection, get_db}; -use log::info; use futures::StreamExt; +use log::info; +use mongodb::{ + bson::{doc, from_document}, + options::FindOptions, +}; use serde::{Deserialize, Serialize}; -use mongodb::{bson::{doc, from_document}, options::FindOptions}; #[derive(Serialize, Deserialize)] struct MigrationInfo { @@ -92,34 +95,36 @@ pub async fn run_migrations(revision: i32) -> i32 { info!("Running migration [revision 3 / 2021-05-25]: Support multiple file uploads, add channel_unreads and user_settings."); let messages = get_collection("messages"); - let mut cursor = messages.find( - doc! { - "attachment": { - "$exists": 1 - } - }, - FindOptions::builder() - .projection(doc! { - "_id": 1, - "attachments": [ "$attachment" ] - }) - .build() - ) - .await - .expect("Failed to fetch messages."); + let mut cursor = messages + .find( + doc! { + "attachment": { + "$exists": 1 + } + }, + FindOptions::builder() + .projection(doc! { + "_id": 1, + "attachments": [ "$attachment" ] + }) + .build(), + ) + .await + .expect("Failed to fetch messages."); while let Some(result) = cursor.next().await { let doc = result.unwrap(); let id = doc.get_str("_id").unwrap(); let attachments = doc.get_array("attachments").unwrap(); - messages.update_one( - doc! { "_id": id }, - doc! { "$unset": { "attachment": 1 }, "$set": { "attachments": attachments } }, - None - ) - .await - .unwrap(); + messages + .update_one( + doc! { "_id": id }, + doc! { "$unset": { "attachment": 1 }, "$set": { "attachments": attachments } }, + None, + ) + .await + .unwrap(); } get_db() diff --git a/src/routes/channels/edit_channel.rs b/src/routes/channels/edit_channel.rs index d032377f7a517cbe8155665eb19a1d6bad0f8236..5b2fbd25c1beef8c79b9423439cfeba15b73a78d 100644 --- a/src/routes/channels/edit_channel.rs +++ b/src/routes/channels/edit_channel.rs @@ -111,7 +111,10 @@ pub async fn req(user: User, target: Ref, data: Json<Data>) -> Result<()> { Message::create( "00000000000000000000000000".to_string(), id.clone(), - Content::SystemMessage(SystemMessage::ChannelRenamed { name, by: user.id.clone() }), + Content::SystemMessage(SystemMessage::ChannelRenamed { + name, + by: user.id.clone(), + }), ) .publish(&target) .await @@ -122,7 +125,9 @@ pub async fn req(user: User, target: Ref, data: Json<Data>) -> Result<()> { Message::create( "00000000000000000000000000".to_string(), id.clone(), - Content::SystemMessage(SystemMessage::ChannelDescriptionChanged { by: user.id.clone() }), + Content::SystemMessage(SystemMessage::ChannelDescriptionChanged { + by: user.id.clone(), + }), ) .publish(&target) .await diff --git a/src/routes/channels/message_query.rs b/src/routes/channels/message_query.rs index 3206f23ff9c8e4aa4a00d96667144069dac306e8..b0ca01c5c08a1be7f15fe18a8d545227ec254aaa 100644 --- a/src/routes/channels/message_query.rs +++ b/src/routes/channels/message_query.rs @@ -28,7 +28,7 @@ pub struct Options { #[validate(length(min = 26, max = 26))] after: Option<String>, sort: Option<Sort>, - include_users: Option<bool> + include_users: Option<bool>, } #[get("/<target>/messages?<options..>")] diff --git a/src/routes/channels/message_send.rs b/src/routes/channels/message_send.rs index 38c529d22c14936519437544d23f53a7720d344a..60591fa0e683b518ef4de8f7279f9f7c4b476efa 100644 --- a/src/routes/channels/message_send.rs +++ b/src/routes/channels/message_send.rs @@ -59,7 +59,9 @@ pub async fn req(user: User, target: Ref, message: Json<Data>) -> Result<JsonVal let id = Ulid::new().to_string(); let attachments = if let Some(attachment_id) = &message.attachment { - Some(vec![ File::find_and_use(attachment_id, "attachments", "message", &id).await? ]) + Some(vec![ + File::find_and_use(attachment_id, "attachments", "message", &id).await?, + ]) } else { None }; diff --git a/src/routes/root.rs b/src/routes/root.rs index d14ff388e42b167160cd7b5305275cbfc43ecb5d..c1f40087c8088aa870e0b7a4f158fc754d25dcf3 100644 --- a/src/routes/root.rs +++ b/src/routes/root.rs @@ -1,6 +1,7 @@ use crate::util::variables::{ - APP_URL, JANUARY_URL, AUTUMN_URL, DISABLE_REGISTRATION, EXTERNAL_WS_URL, HCAPTCHA_SITEKEY, INVITE_ONLY, - USE_AUTUMN, USE_JANUARY, USE_EMAIL, USE_HCAPTCHA, USE_VOSO, VAPID_PUBLIC_KEY, VOSO_URL, VOSO_WS_HOST, + APP_URL, AUTUMN_URL, DISABLE_REGISTRATION, EXTERNAL_WS_URL, HCAPTCHA_SITEKEY, INVITE_ONLY, + JANUARY_URL, USE_AUTUMN, USE_EMAIL, USE_HCAPTCHA, USE_JANUARY, USE_VOSO, VAPID_PUBLIC_KEY, + VOSO_URL, VOSO_WS_HOST, }; use mongodb::bson::doc; diff --git a/src/util/result.rs b/src/util/result.rs index e130c96c1e0bf1ac3d6bc631a28f6d9ccdcd8681..8b39c95489ff46639d2d5de5cb55cebdc4637fef 100644 --- a/src/util/result.rs +++ b/src/util/result.rs @@ -29,13 +29,17 @@ pub enum Error { CannotEditMessage, EmptyMessage, CannotRemoveYourself, - GroupTooLarge { max: usize }, + GroupTooLarge { + max: usize, + }, AlreadyInGroup, NotInGroup, // ? General errors. TooManyIds, - FailedValidation { error: ValidationErrors }, + FailedValidation { + error: ValidationErrors, + }, DatabaseError { operation: &'static str, with: &'static str,