activitypub/src/database.rs

43 lines
1.2 KiB
Rust
Raw Normal View History

2024-04-18 04:03:52 +02:00
use super::entities::prelude::User;
use crate::{entities::user, error::Error, objects::person::DbUser, LOCAL_USER_NAME};
2024-04-09 19:48:18 +02:00
use anyhow::anyhow;
use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter};
2024-04-15 01:07:15 +02:00
use serde::{Deserialize, Serialize};
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()
.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
}
}
}