diff options
Diffstat (limited to 'crates/rocie-server/src/api/set')
| -rw-r--r-- | crates/rocie-server/src/api/set/no_auth/user.rs | 43 |
1 files changed, 35 insertions, 8 deletions
diff --git a/crates/rocie-server/src/api/set/no_auth/user.rs b/crates/rocie-server/src/api/set/no_auth/user.rs index 7ca865c..69758a7 100644 --- a/crates/rocie-server/src/api/set/no_auth/user.rs +++ b/crates/rocie-server/src/api/set/no_auth/user.rs @@ -6,9 +6,13 @@ use utoipa::ToSchema; use crate::{ api::set::auth::user::UserStub, app::App, - storage::sql::{ - insert::Operations, - user::{PasswordHash, User, UserId}, + storage::{ + migrate::migrate_db, + sql::{ + config::Config, + insert::Operations, + user::{PasswordHash, User, UserId}, + }, }, }; @@ -84,6 +88,14 @@ async fn logout(user: Identity) -> impl Responder { HttpResponse::Ok() } +#[derive(ToSchema, Deserialize)] +struct ProvisionInfo { + user: UserStub, + + /// Whether we should apply the default configuration. + use_defaults: bool, +} + /// Provision this instance. /// /// This only works, if no users exist yet. @@ -104,24 +116,39 @@ async fn logout(user: Identity) -> impl Responder { body = String ) ), - request_body = UserStub, + request_body = ProvisionInfo, )] #[post("/provision")] async fn provision( request: HttpRequest, app: web::Data<App>, - new_user: web::Json<UserStub>, + info: web::Json<ProvisionInfo>, ) -> Result<impl Responder> { if User::get_all(&app).await?.is_empty() { - let user = new_user.into_inner(); + let info = info.into_inner(); let mut ops = Operations::new("register user (during provisioning)"); - let password_hash = PasswordHash::from_password(&user.password); - let user = User::register(user.name, password_hash, user.description, &mut ops); + let password_hash = PasswordHash::from_password(&info.user.password); + let user = User::register( + info.user.name, + password_hash, + info.user.description, + &mut ops, + ); ops.apply(&app).await?; + if info.use_defaults { + let mut ops = + Operations::new("Set should use defaults on config (during provisioning)"); + let mut config = Config::get(&app).await?; + config.set_use_default(true, &mut ops); + ops.apply(&app).await?; + + migrate_db(&app).await?; + } + Identity::login(&request.extensions(), user.id.to_string())?; Ok(HttpResponse::Ok().json(user.id)) |
