add: ability to ip block users from their profile

This commit is contained in:
trisua 2025-06-28 13:15:37 -04:00
parent a799c777ea
commit 0163391380
12 changed files with 241 additions and 20 deletions

View file

@ -314,3 +314,64 @@ pub async fn following_request(
Err(e) => Json(e.into()),
}
}
pub async fn ip_block_profile_request(
jar: CookieJar,
Extension(data): Extension<State>,
Path(id): Path<usize>,
) -> impl IntoResponse {
let data = &(data.read().await).0;
let user = match get_user_from_token!(jar, data, oauth::AppScope::UserCreateIpBlock) {
Some(ua) => ua,
None => return Json(Error::NotAllowed.into()),
};
// get other user
let other_user = match data.get_user_by_id(id).await {
Ok(x) => x,
Err(e) => return Json(e.into()),
};
for (ip, _, _) in other_user.tokens {
// check for an existing ip block
if data
.get_ipblock_by_initiator_receiver(user.id, &ip)
.await
.is_ok()
{
continue;
}
// create ip block
if let Err(e) = data.create_ipblock(IpBlock::new(user.id, ip)).await {
return Json(e.into());
}
}
Json(ApiReturn {
ok: true,
message: "IP(s) blocked".to_string(),
payload: (),
})
}
pub async fn remove_ip_block_request(
jar: CookieJar,
Extension(data): Extension<State>,
Path(id): Path<usize>,
) -> impl IntoResponse {
let data = &(data.read().await).0;
let user = match get_user_from_token!(jar, data, oauth::AppScope::UserManageBlocks) {
Some(ua) => ua,
None => return Json(Error::NotAllowed.into()),
};
match data.delete_ipblock(id, user).await {
Ok(_) => Json(ApiReturn {
ok: true,
message: "IP unblocked".to_string(),
payload: (),
}),
Err(e) => Json(e.into()),
}
}