From 380369e1c4f2229c90ecfdadbd1bda3bbf105d39 Mon Sep 17 00:00:00 2001 From: Paul Date: Sun, 6 Jun 2021 10:31:06 +0100 Subject: [PATCH] Servers: Route for fetching server invites. --- src/routes/servers/invites_fetch.rs | 53 +++++++++++++++++++++++++++++ src/routes/servers/mod.rs | 5 ++- 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/routes/servers/invites_fetch.rs diff --git a/src/routes/servers/invites_fetch.rs b/src/routes/servers/invites_fetch.rs new file mode 100644 index 00000000..f55dce7e --- /dev/null +++ b/src/routes/servers/invites_fetch.rs @@ -0,0 +1,53 @@ +use crate::database::*; +use crate::util::result::{Error, Result}; + +use rocket_contrib::json::JsonValue; +use serde::{Serialize, Deserialize}; +use mongodb::bson::{doc, from_document}; +use futures::StreamExt; + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct ServerInvite { + #[serde(rename = "_id")] + code: String, + creator: String, + channel: String, +} + +#[get("//invites")] +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_manage_server() { + Err(Error::MissingPermission)? + } + + let mut cursor = get_collection("invites") + .find( + doc! { + "server": target.id + }, + None, + ) + .await + .map_err(|_| Error::DatabaseError { + operation: "find", + with: "invites", + })?; + + let mut invites = vec![]; + while let Some(result) = cursor.next().await { + if let Ok(doc) = result { + if let Ok(invite) = from_document::(doc) { + invites.push(invite); + } + } + } + + Ok(json!(invites)) +} diff --git a/src/routes/servers/mod.rs b/src/routes/servers/mod.rs index b668399d..bfc704f1 100644 --- a/src/routes/servers/mod.rs +++ b/src/routes/servers/mod.rs @@ -9,6 +9,8 @@ mod channel_create; mod members_fetch; +mod invites_fetch; + pub fn routes() -> Vec { routes![ server_create::req, @@ -16,6 +18,7 @@ pub fn routes() -> Vec { server_fetch::req, server_edit::req, channel_create::req, - members_fetch::req + members_fetch::req, + invites_fetch::req ] }