utoipa user management endpoints

This commit is contained in:
Antoine Gersant 2025-01-14 18:09:43 -08:00
parent 1c3ba3d709
commit 23facd96b9
2 changed files with 42 additions and 7 deletions
src/server

View file

@ -35,10 +35,9 @@ pub fn router() -> OpenApiRouter<App> {
.routes(routes!(post_trigger_index))
.routes(routes!(get_index_status))
// User management
.route("/user", post(post_user))
.route("/user/{name}", delete(delete_user))
.route("/user/{name}", put(put_user))
.route("/users", get(get_users))
.routes(routes!(post_user))
.routes(routes!(delete_user, put_user))
.routes(routes!(get_users))
// File browser
.route("/browse", get(get_browse_root))
.route("/browse/{*path}", get(get_browse))
@ -229,6 +228,13 @@ async fn post_auth(
Ok(Json(authorization))
}
#[utoipa::path(
get,
path = "/users",
responses(
(status = 200, body = Vec<dto::User>),
),
)]
async fn get_users(
_admin_rights: AdminRights,
State(config_manager): State<config::Manager>,
@ -238,6 +244,16 @@ async fn get_users(
Ok(Json(users))
}
#[utoipa::path(
post,
path = "/user",
request_body = dto::NewUser,
responses(
(status = 200),
(status = 400),
(status = 409)
)
)]
async fn post_user(
_admin_rights: AdminRights,
State(config_manager): State<config::Manager>,
@ -249,6 +265,16 @@ async fn post_user(
Ok(())
}
#[utoipa::path(
put,
path = "/user/{name}",
request_body = dto::UserUpdate,
responses(
(status = 200),
(status = 404),
(status = 409)
)
)]
async fn put_user(
admin_rights: AdminRights,
State(config_manager): State<config::Manager>,
@ -272,6 +298,15 @@ async fn put_user(
Ok(())
}
#[utoipa::path(
delete,
path = "/user/{name}",
responses(
(status = 200),
(status = 404),
(status = 409)
)
)]
async fn delete_user(
admin_rights: AdminRights,
State(config_manager): State<config::Manager>,

View file

@ -106,7 +106,7 @@ pub struct SavePlaylistInput {
pub tracks: Vec<PathBuf>,
}
#[derive(Serialize, Deserialize)]
#[derive(Serialize, Deserialize, ToSchema)]
pub struct User {
pub name: String,
pub is_admin: bool,
@ -121,14 +121,14 @@ impl From<config::User> for User {
}
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
pub struct NewUser {
pub name: String,
pub password: String,
pub admin: bool,
}
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
pub struct UserUpdate {
pub new_password: Option<String>,
pub new_is_admin: Option<bool>,