mirror of
https://github.com/LemmyNet/lemmy.git
synced 2025-02-24 06:36:28 +00:00
58 lines
2 KiB
Rust
58 lines
2 KiB
Rust
use activitypub_federation::config::FederationConfig;
|
|
use clap::Parser;
|
|
use lemmy_api_common::request::build_user_agent;
|
|
use lemmy_apub::{VerifyUrlData, FEDERATION_HTTP_FETCH_LIMIT};
|
|
use lemmy_db_schema::utils::build_db_pool;
|
|
use lemmy_federate::Opts;
|
|
use lemmy_utils::{error::LemmyErrorExt2, settings::SETTINGS, REQWEST_TIMEOUT};
|
|
use reqwest::Client;
|
|
use reqwest_middleware::ClientBuilder;
|
|
use reqwest_tracing::TracingMiddleware;
|
|
use tokio::signal::unix::SignalKind;
|
|
|
|
#[tokio::main]
|
|
async fn main() -> anyhow::Result<()> {
|
|
tracing_subscriber::fmt::init();
|
|
let opts = Opts::parse();
|
|
let settings = SETTINGS.to_owned();
|
|
// TODO: wait until migrations are applied? or are they safe from race conditions and i can just call run_migrations here as well?
|
|
let pool = build_db_pool(&settings).await.into_anyhow()?;
|
|
let user_agent = build_user_agent(&settings);
|
|
let reqwest_client = Client::builder()
|
|
.user_agent(user_agent.clone())
|
|
.timeout(REQWEST_TIMEOUT)
|
|
.connect_timeout(REQWEST_TIMEOUT)
|
|
.build()?;
|
|
|
|
let client = ClientBuilder::new(reqwest_client.clone())
|
|
.with(TracingMiddleware::default())
|
|
.build();
|
|
|
|
let federation_config = FederationConfig::builder()
|
|
.domain(settings.hostname.clone())
|
|
.app_data(())
|
|
.client(client.clone())
|
|
.http_fetch_limit(FEDERATION_HTTP_FETCH_LIMIT)
|
|
.http_signature_compat(true)
|
|
.url_verifier(Box::new(VerifyUrlData(pool.clone())))
|
|
.build()
|
|
.await?;
|
|
let mut interrupt = tokio::signal::unix::signal(SignalKind::interrupt())?;
|
|
let mut terminate = tokio::signal::unix::signal(SignalKind::terminate())?;
|
|
|
|
let task =
|
|
lemmy_federate::start_stop_federation_workers_cancellable(opts, pool, federation_config);
|
|
tokio::select! {
|
|
_ = tokio::signal::ctrl_c() => {
|
|
tracing::warn!("Received ctrl-c, shutting down gracefully...");
|
|
}
|
|
_ = interrupt.recv() => {
|
|
tracing::warn!("Received interrupt, shutting down gracefully...");
|
|
}
|
|
_ = terminate.recv() => {
|
|
tracing::warn!("Received terminate, shutting down gracefully...");
|
|
}
|
|
}
|
|
task.cancel().await?;
|
|
Ok(())
|
|
}
|