From f5fe650b86dfe233ceba2c84975a842f58bf5ff3 Mon Sep 17 00:00:00 2001 From: Felix Date: Tue, 21 Apr 2020 22:45:01 +0200 Subject: [PATCH] Change apub IDs to be consistent with html urls --- server/src/apub/fetcher.rs | 2 +- server/src/apub/mod.rs | 6 ++-- server/src/routes/federation.rs | 55 ++++++++++++++++----------------- 3 files changed, 30 insertions(+), 33 deletions(-) diff --git a/server/src/apub/fetcher.rs b/server/src/apub/fetcher.rs index 71453a2a4..ed98434b4 100644 --- a/server/src/apub/fetcher.rs +++ b/server/src/apub/fetcher.rs @@ -73,7 +73,7 @@ where // TODO: this function should return a future let timeout = Duration::from_secs(60); let text = Request::get(url.as_str()) - .header("Accept", APUB_JSON_CONTENT_TYPE) + .header("Content-Type", APUB_JSON_CONTENT_TYPE) .connect_timeout(timeout) .timeout(timeout) .body(())? diff --git a/server/src/apub/mod.rs b/server/src/apub/mod.rs index 8d5df8a8b..846458977 100644 --- a/server/src/apub/mod.rs +++ b/server/src/apub/mod.rs @@ -18,7 +18,7 @@ use url::Url; type GroupExt = Ext, PublicKeyExtension>; type PersonExt = Ext, PublicKeyExtension>; -static APUB_JSON_CONTENT_TYPE: &str = "application/activity+json"; +pub static APUB_JSON_CONTENT_TYPE: &str = "application/activity+json"; pub enum EndpointType { Community, @@ -47,14 +47,14 @@ pub fn make_apub_endpoint(endpoint_type: EndpointType, name: &str) -> Url { let point = match endpoint_type { EndpointType::Community => "c", EndpointType::User => "u", - EndpointType::Post => "p", + EndpointType::Post => "post", // TODO I have to change this else my update advanced_migrations crashes the // server if a comment exists. EndpointType::Comment => "comment", }; Url::parse(&format!( - "{}://{}/federation/{}/{}", + "{}://{}/{}/{}", get_apub_protocol_string(), Settings::get().hostname, point, diff --git a/server/src/routes/federation.rs b/server/src/routes/federation.rs index bde4a2d0c..3a14cbc2e 100644 --- a/server/src/routes/federation.rs +++ b/server/src/routes/federation.rs @@ -1,38 +1,35 @@ use super::*; -use crate::apub; +use crate::apub::community::*; +use crate::apub::community_inbox::community_inbox; +use crate::apub::post::get_apub_post; +use crate::apub::user::*; +use crate::apub::user_inbox::user_inbox; +use crate::apub::APUB_JSON_CONTENT_TYPE; pub fn config(cfg: &mut web::ServiceConfig) { if Settings::get().federation.enabled { println!("federation enabled, host is {}", Settings::get().hostname); cfg - // TODO: check the user/community params for these - .route( - "/federation/c/{community_name}/inbox", - web::post().to(apub::community_inbox::community_inbox), + .service( + web::scope("/") + .guard(guard::Header("Content-Type", 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), + ) + .route( + "/c/{community_name}/outbox", + web::get().to(get_apub_community_outbox), + ) + .route("/u/{user_name}", web::get().to(get_apub_user)) + .route("/post/{post_id}", web::get().to(get_apub_post)), ) - .route( - "/federation/u/{user_name}/inbox", - web::post().to(apub::user_inbox::user_inbox), - ) - .route( - "/federation/c/{community_name}", - web::get().to(apub::community::get_apub_community_http), - ) - .route( - "/federation/c/{community_name}/followers", - web::get().to(apub::community::get_apub_community_followers), - ) - .route( - "/federation/c/{community_name}/outbox", - web::get().to(apub::community::get_apub_community_outbox), - ) - .route( - "/federation/u/{user_name}", - web::get().to(apub::user::get_apub_user), - ) - .route( - "/federation/p/{post_id}", - web::get().to(apub::post::get_apub_post), - ); + // Inboxes dont work with the header guard for some reason. + .route("/c/{community_name}/inbox", web::post().to(community_inbox)) + .route("/u/{user_name}/inbox", web::post().to(user_inbox)); } }