use activitypub_federation::config::FederationConfig; use url::Url; use crate::{ config::{Config, Environment}, server::state::AppState, }; pub async fn add_federation( state: AppState, config: &Config, ) -> anyhow::Result> { let url = match config.server.environment { Environment::Dev => { format!("http://{}", config.server.domain) } Environment::Prod => { format!("https://{}", config.server.domain) } }; let mut url = Url::parse(&url)?; if Environment::Dev == config.server.environment { let _ = url.set_port(Some(config.server.port)); } let mut ap_id = url.clone(); { let mut ps = ap_id.path_segments_mut().expect("path segments in url"); ps.push("users"); ps.push(&config.server.system_name); } // let user = if let Some(user) = state.users_service.get_by_ap_id(ap_id.as_str()).await? { // user // } else { // let mut inbox = ap_id.clone(); // { // let mut ps = inbox.path_segments_mut().expect("path segments in url"); // ps.push("inbox"); // } // state // .users_service // .create_user( // &ap_id, // &config.server.system_name, // PersonType::Service, // &inbox, // true, // ) // .await? // }; // // let user = User::from(user); let config = FederationConfig::builder() .domain(url.domain().expect("system domain")) //.signed_fetch_actor(&user) .app_data(state) .build() .await?; Ok(config) }