autter-core 2.0.2

Autter authentication service for Shrimpcamp
Documentation
mod audit_log;
mod ip_bans;
mod notifications;
mod organization_memberships;
mod organizations;
mod permissions_lists;
mod properties;
mod sql;
mod user_warnings;
mod users;

use std::collections::HashMap;

use crate::config::Config;
use buckets_core::{Config as BucketsConfig, DataManager as BucketsManager};
use oiseau::{execute, postgres::DataManager as OiseauManager, postgres::Result as PgResult};
use tetratto_core2::model::{Error, Result};

#[derive(Clone)]
pub struct DataManager(pub OiseauManager<Config>, pub BucketsManager);

impl DataManager {
    /// Create a new [`DataManager`].
    pub async fn new(config: Config) -> PgResult<Self> {
        let buckets_manager = BucketsManager::new(BucketsConfig {
            directory: format!("{}/{}", config.dirs.media, "uploads"),
            bucket_defaults: HashMap::new(),
            database: config.database.clone(),
            banned_hosts: vec![config.host.clone()],
        })
        .await
        .expect("failed to create buckets manager");

        Ok(Self(OiseauManager::new(config).await?, buckets_manager))
    }

    /// Initialize tables.
    pub async fn init(&self) -> Result<()> {
        let conn = match self.0.connect().await {
            Ok(c) => c,
            Err(e) => return Err(Error::DatabaseConnection(e.to_string())),
        };

        execute!(&conn, sql::CREATE_TABLE_USERS).unwrap();
        execute!(&conn, sql::CREATE_TABLE_NOTIFICATIONS).unwrap();
        execute!(&conn, sql::CREATE_TABLE_AUDIT_LOG).unwrap();
        execute!(&conn, sql::CREATE_TABLE_IP_BANS).unwrap();
        execute!(&conn, sql::CREATE_TABLE_USER_WARNINGS).unwrap();
        execute!(&conn, sql::CREATE_TABLE_PROPERTIES).unwrap();
        execute!(&conn, sql::CREATE_TABLE_ORGANIZATIONS).unwrap();
        execute!(&conn, sql::CREATE_TABLE_ORGANIZATION_MEMBERSHIPS).unwrap();
        execute!(&conn, sql::CREATE_TABLE_PERMISSIONS_LISTS).unwrap();
        execute!(&conn, sql::ADD_USERS_PRINCIPAL_ORG_FKEY).unwrap();

        for x in sql::VERSION_MIGRATIONS.split(";") {
            execute!(&conn, x).unwrap();
        }

        Ok(())
    }
}