mirror of
https://github.com/versia-pub/activitypub.git
synced 2025-12-06 06:38:20 +01:00
format files
This commit is contained in:
parent
07337ffe2f
commit
9acf6578bf
32
module.nix
32
module.nix
|
|
@ -44,25 +44,25 @@ let
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
dbconfone = lib.mkIf cfg.database.createLocally {
|
dbconfone = lib.mkIf cfg.database.createLocally {
|
||||||
systemd.services.lysandap.serviceConfig.Environment = {
|
systemd.services.lysandap.serviceConfig.Environment = {
|
||||||
DATABASE_URL = "postgresql:///${cfg.database.user}@localhost/${cfg.database.dbname}";
|
DATABASE_URL = "postgresql:///${cfg.database.user}@localhost/${cfg.database.dbname}";
|
||||||
"PORT" = "${toString cfg.port}";
|
"PORT" = "${toString cfg.port}";
|
||||||
"ADDRESS" = "${cfg.address}:${toString cfg.port}";
|
"ADDRESS" = "${cfg.address}:${toString cfg.port}";
|
||||||
"FEDERATED_DOMAIN" = cfg.domain;
|
"FEDERATED_DOMAIN" = cfg.domain;
|
||||||
"SERVICE_SCALE" = toString cfg.serviceScale;
|
"SERVICE_SCALE" = toString cfg.serviceScale;
|
||||||
"LOCAL_USER_NAME" = "example";
|
"LOCAL_USER_NAME" = "example";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
dbconftwo = lib.mkIf (cfg.database.createLocally == false) {
|
dbconftwo = lib.mkIf (cfg.database.createLocally == false) {
|
||||||
systemd.services.lysandap.serviceConfig.Environment = {
|
systemd.services.lysandap.serviceConfig.Environment = {
|
||||||
DATABASE_URL = "postgresql://${cfg.database.user}:${cfg.database.passwordFile}@${cfg.database.host}:${toString cfg.database.port}/${cfg.database.dbname}";
|
DATABASE_URL = "postgresql://${cfg.database.user}:${cfg.database.passwordFile}@${cfg.database.host}:${toString cfg.database.port}/${cfg.database.dbname}";
|
||||||
"PORT" = "${toString cfg.port}";
|
"PORT" = "${toString cfg.port}";
|
||||||
"ADDRESS" = "${cfg.address}:${toString cfg.port}";
|
"ADDRESS" = "${cfg.address}:${toString cfg.port}";
|
||||||
"FEDERATED_DOMAIN" = cfg.domain;
|
"FEDERATED_DOMAIN" = cfg.domain;
|
||||||
"SERVICE_SCALE" = toString cfg.serviceScale;
|
"SERVICE_SCALE" = toString cfg.serviceScale;
|
||||||
"LOCAL_USER_NAME" = "example";
|
"LOCAL_USER_NAME" = "example";
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
};
|
||||||
nginxConfig = lib.mkIf cfg.nginx.enable {
|
nginxConfig = lib.mkIf cfg.nginx.enable {
|
||||||
services.nginx =
|
services.nginx =
|
||||||
let
|
let
|
||||||
|
|
|
||||||
|
|
@ -78,4 +78,4 @@ impl ActivityHandler for CreatePost {
|
||||||
post::Model::from_json(self.object, data).await?;
|
post::Model::from_json(self.object, data).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,10 @@ use crate::{entities::user, error::Error, objects::person::DbUser, LOCAL_USER_NA
|
||||||
use anyhow::anyhow;
|
use anyhow::anyhow;
|
||||||
use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter};
|
use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::{env, sync::{Arc, Mutex}};
|
use std::{
|
||||||
|
env,
|
||||||
|
sync::{Arc, Mutex},
|
||||||
|
};
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct Config {}
|
pub struct Config {}
|
||||||
|
|
@ -24,7 +27,10 @@ pub struct Database {
|
||||||
impl State {
|
impl State {
|
||||||
pub async fn local_user(&self) -> Result<user::Model, Error> {
|
pub async fn local_user(&self) -> Result<user::Model, Error> {
|
||||||
let user = User::find()
|
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())
|
.one(self.database_connection.as_ref())
|
||||||
.await?
|
.await?
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
|
||||||
47
src/main.rs
47
src/main.rs
|
|
@ -1,8 +1,13 @@
|
||||||
use activitypub_federation::{
|
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 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 actix_web_prom::PrometheusMetricsBuilder;
|
||||||
use async_once::AsyncOnce;
|
use async_once::AsyncOnce;
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
|
|
@ -23,12 +28,15 @@ use tokio::signal;
|
||||||
use tracing::{info, instrument::WithSubscriber};
|
use tracing::{info, instrument::WithSubscriber};
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
use crate::{activities::create_post::CreatePost, database::{Config, State}, objects::post::{Mention, Note}};
|
|
||||||
use crate::entities::user;
|
use crate::entities::user;
|
||||||
use crate::utils::generate_object_id;
|
use crate::utils::generate_object_id;
|
||||||
|
use crate::{
|
||||||
|
activities::create_post::CreatePost,
|
||||||
|
database::{Config, State},
|
||||||
|
objects::post::{Mention, Note},
|
||||||
|
};
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
|
|
||||||
|
|
||||||
mod activities;
|
mod activities;
|
||||||
mod database;
|
mod database;
|
||||||
mod entities;
|
mod entities;
|
||||||
|
|
@ -67,7 +75,9 @@ async fn post_manually(
|
||||||
) -> actix_web::Result<HttpResponse, error::Error> {
|
) -> actix_web::Result<HttpResponse, error::Error> {
|
||||||
let local_user = state.local_user().await?;
|
let local_user = state.local_user().await?;
|
||||||
let data = FEDERATION_CONFIG.get().unwrap();
|
let data = FEDERATION_CONFIG.get().unwrap();
|
||||||
let creator = webfinger_resolve_actor::<State, user::Model>(path.0.as_str(), &data.to_request_data()).await?;
|
let creator =
|
||||||
|
webfinger_resolve_actor::<State, user::Model>(path.0.as_str(), &data.to_request_data())
|
||||||
|
.await?;
|
||||||
|
|
||||||
let mention = Mention {
|
let mention = Mention {
|
||||||
href: Url::parse(&creator.id)?,
|
href: Url::parse(&creator.id)?,
|
||||||
|
|
@ -85,7 +95,12 @@ async fn post_manually(
|
||||||
in_reply_to: None,
|
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 }))
|
Ok(HttpResponse::Ok().json(Response { health: true }))
|
||||||
}
|
}
|
||||||
|
|
@ -93,10 +108,11 @@ async fn post_manually(
|
||||||
const DOMAIN_DEF: &str = "example.com";
|
const DOMAIN_DEF: &str = "example.com";
|
||||||
const LOCAL_USER_NAME: &str = "example";
|
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 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 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());
|
static ref DOMAIN: String = env::var("FEDERATED_DOMAIN").unwrap_or(DOMAIN_DEF.to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -107,8 +123,16 @@ static FEDERATION_CONFIG: OnceLock<FederationConfig<State>> = OnceLock::new();
|
||||||
async fn main() -> actix_web::Result<(), anyhow::Error> {
|
async fn main() -> actix_web::Result<(), anyhow::Error> {
|
||||||
env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
|
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 ap_id = Url::parse(&format!(
|
||||||
let inbox = Url::parse(&format!("https://{}/{}/inbox", DOMAIN.to_string(), &USERNAME.to_string()))?;
|
"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 keypair = generate_actor_keypair()?;
|
||||||
|
|
||||||
let user = entities::user::ActiveModel {
|
let user = entities::user::ActiveModel {
|
||||||
|
|
@ -131,7 +155,8 @@ async fn main() -> actix_web::Result<(), anyhow::Error> {
|
||||||
|
|
||||||
info!("Connected to database: {:?}", db);
|
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();
|
let db = DB.get().unwrap();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,9 +13,9 @@ use activitypub_federation::{
|
||||||
traits::{ActivityHandler, Actor, Object},
|
traits::{ActivityHandler, Actor, Object},
|
||||||
};
|
};
|
||||||
use chrono::{prelude, DateTime, Utc};
|
use chrono::{prelude, DateTime, Utc};
|
||||||
|
use entities::prelude::User;
|
||||||
use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, Set};
|
use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, Set};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use entities::prelude::User;
|
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
use tracing::info;
|
use tracing::info;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
@ -123,7 +123,8 @@ impl Object for user::Model {
|
||||||
) -> Result<Self, Self::Error> {
|
) -> Result<Self, Self::Error> {
|
||||||
let query = User::find()
|
let query = User::find()
|
||||||
.filter(user::Column::Id.eq(json.id.inner().as_str()))
|
.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 {
|
if let Some(user) = query {
|
||||||
return Ok(user);
|
return Ok(user);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue