38 lines
1016 B
Rust
38 lines
1016 B
Rust
use sqlx::PgPool;
|
|
use uuid::Uuid;
|
|
|
|
use crate::{
|
|
logs::{LogAction, LogEntry},
|
|
users::{User, UserError},
|
|
};
|
|
|
|
pub async fn initialise_reserved_users_if_needed(pool: &PgPool) -> Result<(), UserError> {
|
|
let mut tx = pool.begin().await?;
|
|
|
|
let systemuser_exists = sqlx::query("SELECT handle FROM users WHERE id = $1")
|
|
.bind(Uuid::nil())
|
|
.fetch_optional(&mut *tx)
|
|
.await?
|
|
.is_some();
|
|
|
|
if !systemuser_exists {
|
|
let u = User::create_systemuser(&mut *tx).await?;
|
|
LogEntry::new(&mut *tx, u, LogAction::Initialize).await?;
|
|
}
|
|
|
|
let infradmin_exists = sqlx::query("SELECT handle FROM users WHERE id = $1")
|
|
.bind(Uuid::max())
|
|
.fetch_optional(&mut *tx)
|
|
.await?
|
|
.is_some();
|
|
|
|
if !infradmin_exists {
|
|
User::create_infradmin(&mut *tx).await?;
|
|
let u = User::get_by_id(&mut *tx, Uuid::max()).await?;
|
|
LogEntry::new(&mut *tx, u, LogAction::RegenInfradmin).await?;
|
|
}
|
|
|
|
tx.commit().await?;
|
|
Ok(())
|
|
}
|