about summary refs log tree commit diff stats
path: root/crates/rocie-server/src/api/set/no_auth
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-03-19 02:42:02 +0100
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-03-19 02:42:02 +0100
commit6df299c87ba8faab75626d04392f874ec642c8dc (patch)
tree64744ae2dea2c726d72589ce290e88679e60c564 /crates/rocie-server/src/api/set/no_auth
parentchore(rocie-client): Re-generate the client api (diff)
downloadserver-6df299c87ba8faab75626d04392f874ec642c8dc.zip
feat(rocie-server): Provide default units (and other changes)
Diffstat (limited to 'crates/rocie-server/src/api/set/no_auth')
-rw-r--r--crates/rocie-server/src/api/set/no_auth/user.rs43
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))