feat: add admin channel deletion endpoint

This commit is contained in:
ispik
2026-04-18 19:31:38 +03:00
parent 80b749d6fc
commit 533cc5835a
5 changed files with 51 additions and 5 deletions

View File

@@ -290,6 +290,7 @@ auto_derived! {
Discover = 16, Discover = 16,
ManageAccounts = 17, ManageAccounts = 17,
ManageChannels = 18,
} }
pub enum AdminAuditItemActions { pub enum AdminAuditItemActions {
@@ -324,6 +325,9 @@ auto_derived! {
// Accounts // Accounts
DeleteAccount, DeleteAccount,
DisableAccount, DisableAccount,
// Channels
DeleteChannel,
} }
// Joiner payloads // Joiner payloads
@@ -373,6 +377,7 @@ impl AdminAuditItemActions {
AdminAuditItemActions::ServerFetchMembers => false, AdminAuditItemActions::ServerFetchMembers => false,
AdminAuditItemActions::DeleteAccount => true, AdminAuditItemActions::DeleteAccount => true,
AdminAuditItemActions::DisableAccount => true, AdminAuditItemActions::DisableAccount => true,
AdminAuditItemActions::DeleteChannel => true,
} }
} }
} }

View File

@@ -0,0 +1,40 @@
use crate::routes::admin::util::{
create_audit_action, flatten_authorized_user, user_has_permission,
};
use revolt_database::{util::reference::Reference, AdminAuthorization, Database};
use revolt_models::v0;
use revolt_result::{create_error, Result};
use rocket::State;
use rocket_empty::EmptyResponse;
#[openapi(tag = "Admin")]
#[delete("/admin/channels/<channel_id>?<case>")]
pub async fn admin_delete_channel(
db: &State<Database>,
auth: AdminAuthorization,
channel_id: Reference<'_>,
case: Option<&str>,
) -> Result<EmptyResponse> {
let user = flatten_authorized_user(&auth);
if !user_has_permission(user, v0::AdminUserPermissionFlags::ManageAccounts) {
return Err(create_error!(MissingPermission {
permission: "ManageAccounts".to_string()
}));
}
let target = channel_id.as_channel(&db).await?;
target.delete(&db).await?;
create_audit_action(
&db,
&user.id,
v0::AdminAuditItemActions::DeleteChannel,
case,
Some(channel_id.id),
None,
)
.await?;
Ok(EmptyResponse)
}

View File

@@ -1,3 +1,3 @@
mod channel_delete; pub mod channel_delete;
mod channel_edit; pub mod channel_edit;
mod channel_wipe; pub mod channel_wipe;

View File

@@ -1,2 +1,2 @@
mod actions; pub mod actions;
mod fetch; pub mod fetch;

View File

@@ -40,5 +40,6 @@ pub fn routes() -> (Vec<Route>, OpenApi) {
servers::actions::server_remove_members::admin_server_remove_members, servers::actions::server_remove_members::admin_server_remove_members,
accounts::account_delete::admin_account_delete, accounts::account_delete::admin_account_delete,
accounts::account_disable::admin_account_disable, accounts::account_disable::admin_account_disable,
channels::actions::channel_delete::admin_delete_channel,
] ]
} }