BasicOIDC/src/controllers/admin_api.rs

74 lines
1.9 KiB
Rust
Raw Normal View History

2022-11-19 12:38:24 +00:00
use crate::actors::users_actor;
2022-04-07 15:57:10 +00:00
use actix::Addr;
2022-11-11 11:26:02 +00:00
use actix_web::{web, HttpResponse, Responder};
2022-04-07 15:57:10 +00:00
2022-04-08 15:54:51 +00:00
use crate::actors::users_actor::{DeleteUserRequest, FindUserByUsername, UsersActor};
2022-11-19 12:38:24 +00:00
use crate::data::action_logger::{Action, ActionLogger};
2024-03-27 20:03:49 +00:00
use crate::data::critical_route::CriticalRoute;
2022-04-08 15:54:51 +00:00
use crate::data::current_user::CurrentUser;
use crate::data::user::UserID;
2024-02-19 18:11:13 +00:00
use crate::utils::string_utils;
2022-04-07 15:57:10 +00:00
#[derive(serde::Deserialize)]
pub struct FindUserNameReq {
username: String,
}
#[derive(serde::Serialize)]
struct FindUserResult {
user_id: Option<String>,
}
2022-11-11 11:26:02 +00:00
pub async fn find_username(
2024-03-27 20:03:49 +00:00
_critical: CriticalRoute,
2022-11-11 11:26:02 +00:00
req: web::Form<FindUserNameReq>,
users: web::Data<Addr<UsersActor>>,
) -> impl Responder {
2024-02-19 18:11:13 +00:00
if !string_utils::is_acceptable_login(&req.username) {
return HttpResponse::BadRequest().json("Invalid login!");
}
2022-11-11 11:26:02 +00:00
let res = users
.send(FindUserByUsername(req.0.username))
.await
.unwrap();
2022-04-07 15:57:10 +00:00
HttpResponse::Ok().json(FindUserResult {
2022-11-11 11:26:02 +00:00
user_id: res.0.map(|r| r.uid.0),
2022-04-07 15:57:10 +00:00
})
2022-04-08 15:54:51 +00:00
}
#[derive(serde::Deserialize)]
pub struct DeleteUserReq {
user_id: UserID,
}
2022-11-11 11:26:02 +00:00
pub async fn delete_user(
2024-03-27 20:03:49 +00:00
_critical: CriticalRoute,
2022-11-11 11:26:02 +00:00
user: CurrentUser,
req: web::Form<DeleteUserReq>,
users: web::Data<Addr<UsersActor>>,
2022-11-19 12:38:24 +00:00
action_logger: ActionLogger,
2022-11-11 11:26:02 +00:00
) -> impl Responder {
2022-04-08 15:54:51 +00:00
if user.uid == req.user_id {
return HttpResponse::BadRequest().body("You can not remove your own account!");
}
2022-11-19 12:38:24 +00:00
let user = match users
.send(users_actor::GetUserRequest(req.user_id.clone()))
.await
.unwrap()
.0
{
None => return HttpResponse::NotFound().body("Could not find a user to remove!"),
Some(u) => u,
};
2022-04-08 15:54:51 +00:00
let res = users.send(DeleteUserRequest(req.0.user_id)).await.unwrap();
2022-11-19 15:46:40 +00:00
if res {
2022-11-19 12:38:24 +00:00
action_logger.log(Action::AdminDeleteUser(&user));
2022-04-08 15:54:51 +00:00
HttpResponse::Ok().finish()
} else {
HttpResponse::InternalServerError().finish()
}
}