Files
stoatchat/crates/delta/src/routes/invites/invite_delete.rs
Zomatree 502203d37c feat: Audit Logs (#466)
* fix: squash audit log branch changes

Signed-off-by: Zomatree <me@zomatree.live>

* feat: emoji edit + pronoun

Signed-off-by: Zomatree <me@zomatree.live>

* fix: use tokio instead of async-std

Signed-off-by: Zomatree <me@zomatree.live>

* feat: add slowmode to audit log

Signed-off-by: Zomatree <me@zomatree.live>

* chore: update comments on permissions

Signed-off-by: Zomatree <me@zomatree.live>

---------

Signed-off-by: Zomatree <me@zomatree.live>
2026-07-13 13:39:28 -07:00

57 lines
1.6 KiB
Rust

use revolt_database::{
util::{permissions::DatabasePermissionQuery, reference::Reference},
AuditLogEntryAction, Database, Invite, User,
};
use revolt_permissions::{calculate_server_permissions, ChannelPermission};
use revolt_result::Result;
use rocket::State;
use rocket_empty::EmptyResponse;
use crate::util::audit_log_reason::AuditLogReason;
/// # Delete Invite
///
/// Delete an invite by its id.
#[openapi(tag = "Invites")]
#[delete("/<target>")]
pub async fn delete(
db: &State<Database>,
user: User,
reason: AuditLogReason,
target: Reference<'_>,
) -> Result<EmptyResponse> {
let invite = target.as_invite(db).await?;
if user.id == invite.creator() {
db.delete_invite(invite.code()).await?;
} else {
match invite {
Invite::Server {
code,
server,
channel,
creator,
..
} => {
let server = db.fetch_server(&server).await?;
let mut query = DatabasePermissionQuery::new(db, &user).server(&server);
calculate_server_permissions(&mut query)
.await
.throw_if_lacking_channel_permission(ChannelPermission::ManageServer)?;
db.delete_invite(&code).await?;
AuditLogEntryAction::InviteDelete {
invite: code,
channel,
}
.insert(db, server.id, reason, user.id, Some(creator))
.await;
}
_ => unreachable!(),
}
}
Ok(EmptyResponse)
}