diff --git a/module.nix b/module.nix index 18daec4..1c86084 100644 --- a/module.nix +++ b/module.nix @@ -44,25 +44,25 @@ let }; }; dbconfone = lib.mkIf cfg.database.createLocally { - systemd.services.lysandap.serviceConfig.Environment = { - DATABASE_URL = "postgresql:///${cfg.database.user}@localhost/${cfg.database.dbname}"; - "PORT" = "${toString cfg.port}"; - "ADDRESS" = "${cfg.address}:${toString cfg.port}"; - "FEDERATED_DOMAIN" = cfg.domain; - "SERVICE_SCALE" = toString cfg.serviceScale; - "LOCAL_USER_NAME" = "example"; - }; + systemd.services.lysandap.serviceConfig.Environment = { + DATABASE_URL = "postgresql:///${cfg.database.user}@localhost/${cfg.database.dbname}"; + "PORT" = "${toString cfg.port}"; + "ADDRESS" = "${cfg.address}:${toString cfg.port}"; + "FEDERATED_DOMAIN" = cfg.domain; + "SERVICE_SCALE" = toString cfg.serviceScale; + "LOCAL_USER_NAME" = "example"; + }; }; dbconftwo = lib.mkIf (cfg.database.createLocally == false) { - systemd.services.lysandap.serviceConfig.Environment = { - DATABASE_URL = "postgresql://${cfg.database.user}:${cfg.database.passwordFile}@${cfg.database.host}:${toString cfg.database.port}/${cfg.database.dbname}"; - "PORT" = "${toString cfg.port}"; - "ADDRESS" = "${cfg.address}:${toString cfg.port}"; - "FEDERATED_DOMAIN" = cfg.domain; - "SERVICE_SCALE" = toString cfg.serviceScale; - "LOCAL_USER_NAME" = "example"; - }; + systemd.services.lysandap.serviceConfig.Environment = { + DATABASE_URL = "postgresql://${cfg.database.user}:${cfg.database.passwordFile}@${cfg.database.host}:${toString cfg.database.port}/${cfg.database.dbname}"; + "PORT" = "${toString cfg.port}"; + "ADDRESS" = "${cfg.address}:${toString cfg.port}"; + "FEDERATED_DOMAIN" = cfg.domain; + "SERVICE_SCALE" = toString cfg.serviceScale; + "LOCAL_USER_NAME" = "example"; }; + }; nginxConfig = lib.mkIf cfg.nginx.enable { services.nginx = let diff --git a/src/activities/create_post.rs b/src/activities/create_post.rs index 2a929bc..514f9a6 100644 --- a/src/activities/create_post.rs +++ b/src/activities/create_post.rs @@ -78,4 +78,4 @@ impl ActivityHandler for CreatePost { post::Model::from_json(self.object, data).await?; Ok(()) } -} \ No newline at end of file +} diff --git a/src/database.rs b/src/database.rs index 8b9b3e6..fcfe3e7 100644 --- a/src/database.rs +++ b/src/database.rs @@ -3,7 +3,10 @@ use crate::{entities::user, error::Error, objects::person::DbUser, LOCAL_USER_NA use anyhow::anyhow; use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter}; use serde::{Deserialize, Serialize}; -use std::{env, sync::{Arc, Mutex}}; +use std::{ + env, + sync::{Arc, Mutex}, +}; #[derive(Debug, Clone)] pub struct Config {} @@ -24,7 +27,10 @@ pub struct Database { impl State { pub async fn local_user(&self) -> Result { let user = User::find() - .filter(user::Column::Username.eq(env::var("LOCAL_USER_NAME").unwrap_or(LOCAL_USER_NAME.to_string()))) + .filter( + user::Column::Username + .eq(env::var("LOCAL_USER_NAME").unwrap_or(LOCAL_USER_NAME.to_string())), + ) .one(self.database_connection.as_ref()) .await? .unwrap(); diff --git a/src/main.rs b/src/main.rs index 1179c16..670ebc5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,13 @@ use activitypub_federation::{ - config::{Data, FederationConfig, FederationMiddleware}, fetch::{object_id::ObjectId, webfinger::webfinger_resolve_actor}, http_signatures::generate_actor_keypair, traits::Actor + config::{Data, FederationConfig, FederationMiddleware}, + fetch::{object_id::ObjectId, webfinger::webfinger_resolve_actor}, + http_signatures::generate_actor_keypair, + traits::Actor, }; use activitystreams_kinds::public; -use actix_web::{get, http::KeepAlive, middleware, post, web, App, Error, HttpResponse, HttpServer}; +use actix_web::{ + get, http::KeepAlive, middleware, post, web, App, Error, HttpResponse, HttpServer, +}; use actix_web_prom::PrometheusMetricsBuilder; use async_once::AsyncOnce; use chrono::{DateTime, Utc}; @@ -23,12 +28,15 @@ use tokio::signal; use tracing::{info, instrument::WithSubscriber}; use url::Url; -use crate::{activities::create_post::CreatePost, database::{Config, State}, objects::post::{Mention, Note}}; use crate::entities::user; use crate::utils::generate_object_id; +use crate::{ + activities::create_post::CreatePost, + database::{Config, State}, + objects::post::{Mention, Note}, +}; use lazy_static::lazy_static; - mod activities; mod database; mod entities; @@ -67,7 +75,9 @@ async fn post_manually( ) -> actix_web::Result { let local_user = state.local_user().await?; let data = FEDERATION_CONFIG.get().unwrap(); - let creator = webfinger_resolve_actor::(path.0.as_str(), &data.to_request_data()).await?; + let creator = + webfinger_resolve_actor::(path.0.as_str(), &data.to_request_data()) + .await?; let mention = Mention { href: Url::parse(&creator.id)?, @@ -85,7 +95,12 @@ async fn post_manually( in_reply_to: None, }; - CreatePost::send(note, creator.shared_inbox_or_inbox(), &data.to_request_data()).await?; + CreatePost::send( + note, + creator.shared_inbox_or_inbox(), + &data.to_request_data(), + ) + .await?; Ok(HttpResponse::Ok().json(Response { health: true })) } @@ -93,10 +108,11 @@ async fn post_manually( const DOMAIN_DEF: &str = "example.com"; const LOCAL_USER_NAME: &str = "example"; -lazy_static!{ +lazy_static! { static ref SERVER_URL: String = env::var("LISTEN").unwrap_or("127.0.0.1:8080".to_string()); static ref DATABASE_URL: String = env::var("DATABASE_URL").expect("DATABASE_URL must be set"); - static ref USERNAME: String = env::var("LOCAL_USER_NAME").unwrap_or(LOCAL_USER_NAME.to_string()); + static ref USERNAME: String = + env::var("LOCAL_USER_NAME").unwrap_or(LOCAL_USER_NAME.to_string()); static ref DOMAIN: String = env::var("FEDERATED_DOMAIN").unwrap_or(DOMAIN_DEF.to_string()); } @@ -107,8 +123,16 @@ static FEDERATION_CONFIG: OnceLock> = OnceLock::new(); async fn main() -> actix_web::Result<(), anyhow::Error> { env_logger::init_from_env(env_logger::Env::new().default_filter_or("info")); - let ap_id = Url::parse(&format!("https://{}/{}", DOMAIN.to_string(), &USERNAME.to_string()))?; - let inbox = Url::parse(&format!("https://{}/{}/inbox", DOMAIN.to_string(), &USERNAME.to_string()))?; + let ap_id = Url::parse(&format!( + "https://{}/{}", + DOMAIN.to_string(), + &USERNAME.to_string() + ))?; + let inbox = Url::parse(&format!( + "https://{}/{}/inbox", + DOMAIN.to_string(), + &USERNAME.to_string() + ))?; let keypair = generate_actor_keypair()?; let user = entities::user::ActiveModel { @@ -131,7 +155,8 @@ async fn main() -> actix_web::Result<(), anyhow::Error> { info!("Connected to database: {:?}", db); - DB.set(db).expect("We were not able to save the DB conn into memory"); + DB.set(db) + .expect("We were not able to save the DB conn into memory"); let db = DB.get().unwrap(); diff --git a/src/objects/person.rs b/src/objects/person.rs index 6d699bb..3e7e013 100644 --- a/src/objects/person.rs +++ b/src/objects/person.rs @@ -13,9 +13,9 @@ use activitypub_federation::{ traits::{ActivityHandler, Actor, Object}, }; use chrono::{prelude, DateTime, Utc}; +use entities::prelude::User; use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, Set}; use serde::{Deserialize, Serialize}; -use entities::prelude::User; use std::fmt::Debug; use tracing::info; use url::Url; @@ -123,7 +123,8 @@ impl Object for user::Model { ) -> Result { let query = User::find() .filter(user::Column::Id.eq(json.id.inner().as_str())) - .one(_data.database_connection.as_ref()).await?; + .one(_data.database_connection.as_ref()) + .await?; if let Some(user) = query { return Ok(user); }