use crate::apub::{ comment::get_apub_comment, community::*, community_inbox::community_inbox, post::get_apub_post, shared_inbox::shared_inbox, user::*, user_inbox::user_inbox, APUB_JSON_CONTENT_TYPE, }; use actix_web::*; use http_signature_normalization_actix::digest::middleware::VerifyDigest; use lemmy_utils::settings::Settings; use sha2::{Digest, Sha256}; pub fn config(cfg: &mut web::ServiceConfig) { if Settings::get().federation.enabled { println!("federation enabled, host is {}", Settings::get().hostname); let digest_verifier = VerifyDigest::new(Sha256::new()); cfg .service( web::scope("/") .guard(guard::Header("Accept", APUB_JSON_CONTENT_TYPE)) .route( "/c/{community_name}", web::get().to(get_apub_community_http), ) .route( "/c/{community_name}/followers", web::get().to(get_apub_community_followers), ) // TODO This is only useful for history which we aren't doing right now // .route( // "/c/{community_name}/outbox", // web::get().to(get_apub_community_outbox), // ) .route("/u/{user_name}", web::get().to(get_apub_user_http)) .route("/post/{post_id}", web::get().to(get_apub_post)) .route("/comment/{comment_id}", web::get().to(get_apub_comment)), ) // Inboxes dont work with the header guard for some reason. .service( web::resource("/c/{community_name}/inbox") .wrap(digest_verifier.clone()) .route(web::post().to(community_inbox)), ) .service( web::resource("/u/{user_name}/inbox") .wrap(digest_verifier.clone()) .route(web::post().to(user_inbox)), ) .service( web::resource("/inbox") .wrap(digest_verifier) .route(web::post().to(shared_inbox)), ); } }