From b3bdf403cf3980805066ec64edd747f36bf183dc Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 12 Aug 2021 14:28:46 +0100 Subject: [PATCH] Add delete route for bots. Closes #8. --- src/routes/bots/delete.rs | 63 +++++++++++++++++++++++++++++++++++++++ src/routes/bots/edit.rs | 7 ++--- src/routes/bots/mod.rs | 2 ++ 3 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 src/routes/bots/delete.rs diff --git a/src/routes/bots/delete.rs b/src/routes/bots/delete.rs new file mode 100644 index 00000000..629cec92 --- /dev/null +++ b/src/routes/bots/delete.rs @@ -0,0 +1,63 @@ +use crate::database::*; +use crate::notifications::events::ClientboundNotification; +use crate::util::result::{Error, Result}; + +use mongodb::bson::doc; + +#[delete("/")] +pub async fn delete_bot(user: User, target: Ref) -> Result<()> { + let bot = target.fetch_bot().await?; + if bot.owner != user.id { + return Err(Error::MissingPermission); + } + + let username = format!("Deleted User {}", &bot.id); + get_collection("users") + .update_one( + doc! { + "_id": &bot.id + }, + doc! { + "$set": { + "username": &username, + "flags": 2 + }, + "$unset": { + "avatar": 1, + "status": 1, + "profile": 1 + } + }, + None + ) + .await + .map_err(|_| Error::DatabaseError { + with: "user", + operation: "update_one" + })?; + + ClientboundNotification::UserUpdate { + id: target.id.clone(), + data: json!({ + "username": username, + "flags": 2 + }), + clear: None, + } + .publish_as_user(target.id.clone()); + + get_collection("bots") + .delete_one( + doc! { + "_id": &bot.id + }, + None + ) + .await + .map_err(|_| Error::DatabaseError { + with: "bot", + operation: "delete_one" + })?; + + Ok(()) +} diff --git a/src/routes/bots/edit.rs b/src/routes/bots/edit.rs index 5a235783..75396bd6 100644 --- a/src/routes/bots/edit.rs +++ b/src/routes/bots/edit.rs @@ -39,11 +39,8 @@ pub async fn edit_bot(user: User, target: Ref, data: Json) -> Result<()> { } let bot = target.fetch_bot().await?; - - if !bot.public { - if bot.owner != user.id { - return Err(Error::BotIsPrivate); - } + if bot.owner != user.id { + return Err(Error::MissingPermission); } if let Some(name) = &data.name { diff --git a/src/routes/bots/mod.rs b/src/routes/bots/mod.rs index 8f9889a8..4b91b3bb 100644 --- a/src/routes/bots/mod.rs +++ b/src/routes/bots/mod.rs @@ -6,6 +6,7 @@ mod fetch_public; mod fetch; mod fetch_owned; mod edit; +mod delete; pub fn routes() -> Vec { routes![ @@ -15,5 +16,6 @@ pub fn routes() -> Vec { fetch::fetch_bot, fetch_owned::fetch_owned_bots, edit::edit_bot, + delete::delete_bot, ] }