relay/src/main.rs

118 lines
3.3 KiB
Rust
Raw Normal View History

use actix_web::{
middleware::{Compress, Logger},
web, App, HttpServer,
};
2020-03-15 02:05:40 +00:00
mod apub;
mod args;
mod config;
2020-03-23 22:17:53 +00:00
mod data;
mod db;
2020-03-16 03:36:46 +00:00
mod error;
mod jobs;
2020-03-23 17:38:39 +00:00
mod middleware;
mod requests;
2020-03-23 17:38:39 +00:00
mod routes;
2020-03-15 02:05:40 +00:00
2020-03-20 18:40:18 +00:00
use self::{
args::Args,
config::Config,
2021-02-10 04:05:06 +00:00
data::{ActorCache, MediaCache, State},
db::Db,
jobs::{create_server, create_workers},
2020-07-10 20:07:47 +00:00
middleware::{DebugPayload, RelayResolver},
2020-03-23 17:38:39 +00:00
routes::{actor, inbox, index, nodeinfo, nodeinfo_meta, statics},
2020-03-20 18:40:18 +00:00
};
2020-03-20 04:06:16 +00:00
2020-03-15 02:05:40 +00:00
#[actix_rt::main]
async fn main() -> Result<(), anyhow::Error> {
dotenv::dotenv().ok();
let config = Config::build()?;
2020-03-15 22:37:53 +00:00
if config.debug() {
2020-03-26 14:22:57 +00:00
std::env::set_var(
"RUST_LOG",
2021-02-10 04:05:06 +00:00
"debug,h2=info,trust_dns_resolver=info,trust_dns_proto=info,rustls=info,html5ever=info",
2020-03-26 14:22:57 +00:00
)
} else {
std::env::set_var("RUST_LOG", "info")
}
if config.pretty_log() {
pretty_env_logger::init();
} else {
env_logger::init();
}
2020-04-21 17:07:39 +00:00
let db = Db::build(&config)?;
2020-03-15 02:05:40 +00:00
let args = Args::new();
2021-02-10 04:05:06 +00:00
if !args.blocks().is_empty() || !args.allowed().is_empty() {
if args.undo() {
2021-02-10 04:05:06 +00:00
db.remove_blocks(args.blocks().to_vec()).await?;
db.remove_allows(args.allowed().to_vec()).await?;
} else {
2021-02-10 04:05:06 +00:00
db.add_blocks(args.blocks().to_vec()).await?;
db.add_allows(args.allowed().to_vec()).await?;
}
return Ok(());
}
2021-02-10 04:05:06 +00:00
let media = MediaCache::new(db.clone());
let state = State::build(config.clone(), db.clone()).await?;
2020-03-23 22:17:53 +00:00
let actors = ActorCache::new(db.clone());
2020-07-11 01:00:31 +00:00
let job_server = create_server();
2020-03-15 02:05:40 +00:00
2021-02-10 04:05:06 +00:00
create_workers(
db.clone(),
state.clone(),
actors.clone(),
job_server.clone(),
media.clone(),
config.clone(),
);
2020-03-23 00:07:36 +00:00
let bind_address = config.bind_address();
2020-03-15 02:05:40 +00:00
HttpServer::new(move || {
App::new()
.wrap(Compress::default())
2020-03-15 22:37:53 +00:00
.wrap(Logger::default())
2020-03-19 22:19:05 +00:00
.data(db.clone())
2020-03-15 02:05:40 +00:00
.data(state.clone())
2020-03-18 04:35:20 +00:00
.data(state.requests())
2020-03-23 22:17:53 +00:00
.data(actors.clone())
.data(config.clone())
.data(job_server.clone())
.data(media.clone())
2020-03-15 02:05:40 +00:00
.service(web::resource("/").route(web::get().to(index)))
.service(web::resource("/media/{path}").route(web::get().to(routes::media)))
.service(
web::resource("/inbox")
.wrap(config.digest_middleware())
.wrap(config.signature_middleware(
state.requests(),
actors.clone(),
state.clone(),
))
2020-07-10 20:34:18 +00:00
.wrap(DebugPayload(config.debug()))
2020-03-23 17:38:39 +00:00
.route(web::post().to(inbox)),
)
2020-03-23 17:38:39 +00:00
.service(web::resource("/actor").route(web::get().to(actor)))
.service(web::resource("/nodeinfo/2.0.json").route(web::get().to(nodeinfo)))
2020-03-19 19:05:16 +00:00
.service(
web::scope("/.well-known")
2020-04-21 19:12:10 +00:00
.service(actix_webfinger::scoped::<RelayResolver>())
2020-03-23 17:38:39 +00:00
.service(web::resource("/nodeinfo").route(web::get().to(nodeinfo_meta))),
2020-03-19 19:05:16 +00:00
)
2020-03-23 17:38:39 +00:00
.service(web::resource("/static/{filename}").route(web::get().to(statics)))
2020-03-15 02:05:40 +00:00
})
.bind(bind_address)?
2020-03-15 02:05:40 +00:00
.run()
.await?;
Ok(())
}
2020-03-20 18:40:18 +00:00
include!(concat!(env!("OUT_DIR"), "/templates.rs"));