2023-11-14 23:59:45 +00:00
|
|
|
use crate::{instance::federation_config, utils::generate_object_id};
|
2023-11-14 23:16:51 +00:00
|
|
|
use error::Error;
|
|
|
|
use tracing::log::LevelFilter;
|
|
|
|
|
2023-11-14 23:59:45 +00:00
|
|
|
use activitypub_federation::config::FederationMiddleware;
|
|
|
|
use axum::{
|
|
|
|
routing::{get, post},
|
|
|
|
Router, Server,
|
|
|
|
};
|
|
|
|
|
|
|
|
use crate::federation::routes::http_get_user;
|
|
|
|
use crate::federation::routes::http_post_user_inbox;
|
|
|
|
use std::net::ToSocketAddrs;
|
|
|
|
use tracing::info;
|
|
|
|
|
2023-11-14 23:16:51 +00:00
|
|
|
mod error;
|
2023-11-14 23:59:45 +00:00
|
|
|
mod federation;
|
2023-11-14 23:16:51 +00:00
|
|
|
mod instance;
|
|
|
|
mod utils;
|
|
|
|
|
|
|
|
#[tokio::main]
|
|
|
|
async fn main() -> Result<(), Error> {
|
|
|
|
env_logger::builder()
|
|
|
|
.filter_level(LevelFilter::Warn)
|
|
|
|
.filter_module("activitypub_federation", LevelFilter::Info)
|
|
|
|
.filter_module("fediwiki", LevelFilter::Info)
|
|
|
|
.init();
|
|
|
|
|
2023-11-14 23:59:45 +00:00
|
|
|
let config = federation_config("localhost:8001", "alpha".to_string()).await?;
|
|
|
|
|
|
|
|
let hostname = config.domain();
|
|
|
|
info!("Listening with axum on {hostname}");
|
|
|
|
let config = config.clone();
|
|
|
|
let app = Router::new()
|
|
|
|
.route("/:user/inbox", post(http_post_user_inbox))
|
|
|
|
.route("/:user", get(http_get_user))
|
|
|
|
.layer(FederationMiddleware::new(config));
|
|
|
|
|
|
|
|
let addr = hostname
|
|
|
|
.to_socket_addrs()?
|
|
|
|
.next()
|
|
|
|
.expect("Failed to lookup domain name");
|
|
|
|
let server = Server::bind(&addr).serve(app.into_make_service());
|
2023-11-14 23:16:51 +00:00
|
|
|
|
2023-11-14 23:59:45 +00:00
|
|
|
tokio::spawn(server);
|
2023-11-14 23:16:51 +00:00
|
|
|
Ok(())
|
2023-11-14 22:41:58 +00:00
|
|
|
}
|