Files
stoatchat/src/routes/servers/ban_create.rs
2022-02-22 20:34:23 +00:00

49 lines
1.1 KiB
Rust

use revolt_quark::{
models::{ServerBan, User},
perms, Db, Error, Permission, Ref, Result,
};
use rocket::serde::json::Json;
use serde::{Deserialize, Serialize};
use validator::Validate;
#[derive(Validate, Serialize, Deserialize)]
pub struct Data {
#[validate(length(min = 1, max = 1024))]
reason: Option<String>,
}
#[put("/<server>/bans/<target>", data = "<data>")]
pub async fn req(
db: &Db,
user: User,
server: Ref,
target: Ref,
data: Json<Data>,
) -> Result<Json<ServerBan>> {
let data = data.into_inner();
data.validate()
.map_err(|error| Error::FailedValidation { error })?;
let server = server.as_server(db).await?;
if !perms(&user)
.server(&server)
.calc(db)
.await
.can_ban_members()
{
return Error::from_permission(Permission::BanMembers);
}
let member = target.as_member(db, &server.id).await?;
// ! FIXME_PERMISSIONS
let ban = ServerBan {
id: member.id,
reason: data.reason,
};
db.insert_ban(&ban).await?;
Ok(Json(ban))
}