* 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>
57 lines
1.6 KiB
Rust
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)
|
|
}
|