Compare commits
2 commits
c2b5f6568f
...
0e0c590e4d
Author | SHA1 | Date | |
---|---|---|---|
0e0c590e4d | |||
ba2442e786 |
3 changed files with 26 additions and 15 deletions
|
@ -25,8 +25,8 @@ pub async fn get(
|
||||||
|
|
||||||
let mut conn = app_state.pool.get().await?;
|
let mut conn = app_state.pool.get().await?;
|
||||||
|
|
||||||
let member = Member::check_membership(&mut conn, uuid, guild_uuid).await?;
|
let caller = Member::check_membership(&mut conn, uuid, guild_uuid).await?;
|
||||||
member
|
caller
|
||||||
.check_permission(&app_state, Permissions::BanMember)
|
.check_permission(&app_state, Permissions::BanMember)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
|
@ -34,3 +34,22 @@ pub async fn get(
|
||||||
|
|
||||||
Ok((StatusCode::OK, Json(all_guild_bans)))
|
Ok((StatusCode::OK, Json(all_guild_bans)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn unban(
|
||||||
|
State(app_state): State<Arc<AppState>>,
|
||||||
|
Path((guild_uuid, user_uuid)): Path<(Uuid, Uuid)>,
|
||||||
|
Extension(CurrentUser(uuid)): Extension<CurrentUser<Uuid>>,
|
||||||
|
) -> Result<impl IntoResponse, Error> {
|
||||||
|
global_checks(&app_state, uuid).await?;
|
||||||
|
|
||||||
|
let mut conn = app_state.pool.get().await?;
|
||||||
|
|
||||||
|
let caller = Member::check_membership(&mut conn, uuid, guild_uuid).await?;
|
||||||
|
caller.check_permission(&app_state, Permissions::BanMember).await?;
|
||||||
|
|
||||||
|
let ban = GuildBan::fetch_one(&mut conn, guild_uuid, user_uuid).await?;
|
||||||
|
|
||||||
|
ban.unban(&mut conn).await?;
|
||||||
|
|
||||||
|
Ok(StatusCode::OK)
|
||||||
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ use axum::{
|
||||||
extract::{Multipart, Path, State},
|
extract::{Multipart, Path, State},
|
||||||
http::StatusCode,
|
http::StatusCode,
|
||||||
response::IntoResponse,
|
response::IntoResponse,
|
||||||
routing::{get, patch, post},
|
routing::{get, patch, post, delete},
|
||||||
};
|
};
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
@ -45,6 +45,7 @@ pub fn router() -> Router<Arc<AppState>> {
|
||||||
.route("/members", get(members::get))
|
.route("/members", get(members::get))
|
||||||
// Bans
|
// Bans
|
||||||
.route("/bans", get(bans::get))
|
.route("/bans", get(bans::get))
|
||||||
|
.route("/bans/{uuid}", delete(bans::unban))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// `GET /api/v1/guilds/{uuid}` DESCRIPTION
|
/// `GET /api/v1/guilds/{uuid}` DESCRIPTION
|
||||||
|
|
|
@ -6,11 +6,7 @@ use serde::{Deserialize, Serialize};
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
AppState, Conn,
|
error::Error, objects::{GuildBan, Me, Permissions, Role}, schema::{guild_bans, guild_members}, AppState, Conn
|
||||||
error::Error,
|
|
||||||
objects::{Me, Permissions, Role},
|
|
||||||
schema::guild_bans,
|
|
||||||
schema::guild_members,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{User, load_or_empty};
|
use super::{User, load_or_empty};
|
||||||
|
@ -169,15 +165,10 @@ impl Member {
|
||||||
) -> Result<Self, Error> {
|
) -> Result<Self, Error> {
|
||||||
let mut conn = app_state.pool.get().await?;
|
let mut conn = app_state.pool.get().await?;
|
||||||
|
|
||||||
use guild_bans::dsl;
|
let banned = GuildBan::fetch_one(&mut conn, guild_uuid, user_uuid).await;
|
||||||
let banned = dsl::guild_bans
|
|
||||||
.filter(guild_bans::guild_uuid.eq(guild_uuid))
|
|
||||||
.filter(guild_bans::user_uuid.eq(user_uuid))
|
|
||||||
.execute(&mut conn)
|
|
||||||
.await;
|
|
||||||
match banned {
|
match banned {
|
||||||
Ok(_) => Err(Error::Forbidden("User banned".to_string())),
|
Ok(_) => Err(Error::Forbidden("User banned".to_string())),
|
||||||
Err(diesel::result::Error::NotFound) => Ok(()),
|
Err(Error::SqlError(diesel::result::Error::NotFound)) => Ok(()),
|
||||||
Err(e) => Err(e.into()),
|
Err(e) => Err(e.into()),
|
||||||
}?;
|
}?;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue