Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects
init_admin.rs 1.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • Pierre Jarriges's avatar
    Pierre Jarriges committed
    use crate::model::Administrator;
    use crate::AppState;
    use wither::{bson::doc, prelude::Model};
    
    /// Creates the default administrator if it doesn't already exists and returns a Result.
    pub async fn create_default_admin_if_none(app_state: &AppState) -> Result<(), String> {
        let admin_username = app_state.env.default_admin_username.to_owned();
        let admin_password = app_state.env.default_admin_password.to_owned();
    
        let admin = Administrator::from_values(app_state, admin_username, admin_password);
    
        let admin_doc = doc! {
            "username": &admin.username,
            "password_hash": &admin.password_hash
        };
    
        match Administrator::find_one(&app_state.db, admin_doc, None).await {
            Ok(found_user) => match found_user {
                Some(_) => Ok(()),
                None => {
                    println!("Kuadrado admin will be created");
                    match app_state
                        .db
                        .collection_with_type::<Administrator>("administrators")
                        .insert_one(admin, None)
                        .await
                    {
                        Ok(_) => Ok(()),
                        Err(e) => Err(format!("Error creating administrator: {:?}", e)),
                    }
                }
            },
            Err(e) => Err(format!("Error creating administrator: {:?}", e)),
        }
    }