2024-04-18 04:03:52 +02:00
|
|
|
use super::entities::prelude::User;
|
2024-05-03 20:50:43 +02:00
|
|
|
use crate::{entities::user, error::Error, objects::person::DbUser, LOCAL_USER_NAME};
|
2024-04-09 19:48:18 +02:00
|
|
|
use anyhow::anyhow;
|
2024-05-03 20:50:43 +02:00
|
|
|
use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter};
|
2024-04-15 01:07:15 +02:00
|
|
|
use serde::{Deserialize, Serialize};
|
2024-05-03 20:50:43 +02:00
|
|
|
use std::{env, sync::{Arc, Mutex}};
|
2024-04-09 19:48:18 +02:00
|
|
|
|
2024-04-18 03:41:52 +02:00
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
|
pub struct Config {}
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
|
pub struct State {
|
|
|
|
|
pub database_connection: Arc<DatabaseConnection>,
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-18 04:27:22 +02:00
|
|
|
pub type StateHandle = State;
|
2024-04-09 19:48:18 +02:00
|
|
|
|
|
|
|
|
/// Our "database" which contains all known users (local and federated)
|
2024-04-16 19:53:24 +02:00
|
|
|
#[derive(Debug)]
|
2024-04-09 19:48:18 +02:00
|
|
|
pub struct Database {
|
|
|
|
|
pub users: Mutex<Vec<DbUser>>,
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-18 03:41:52 +02:00
|
|
|
impl State {
|
|
|
|
|
pub async fn local_user(&self) -> Result<user::Model, Error> {
|
2024-04-18 04:03:52 +02:00
|
|
|
let user = User::find()
|
2024-05-03 20:50:43 +02:00
|
|
|
.filter(user::Column::Username.eq(env::var("LOCAL_USER_NAME").unwrap_or(LOCAL_USER_NAME.to_string())))
|
2024-04-18 04:03:52 +02:00
|
|
|
.one(self.database_connection.as_ref())
|
|
|
|
|
.await?
|
|
|
|
|
.unwrap();
|
2024-04-18 03:41:52 +02:00
|
|
|
Ok(user.clone())
|
2024-04-09 19:48:18 +02:00
|
|
|
}
|
|
|
|
|
|
2024-04-18 03:41:52 +02:00
|
|
|
pub async fn read_user(&self, name: &str) -> Result<user::Model, Error> {
|
|
|
|
|
let db_user = self.local_user().await?;
|
|
|
|
|
if name == db_user.username {
|
2024-04-09 19:48:18 +02:00
|
|
|
Ok(db_user)
|
|
|
|
|
} else {
|
2024-05-03 20:12:56 +02:00
|
|
|
Err(anyhow!("Invalid user {name} // {0}", db_user.username).into())
|
2024-04-09 19:48:18 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|