diff options
author | Dessalines <tyhou13@gmx.com> | 2020-04-28 10:10:05 -0400 |
---|---|---|
committer | Dessalines <tyhou13@gmx.com> | 2020-04-28 10:10:05 -0400 |
commit | b60c7bbae7e605d43c93cb7b153d96982d97765b (patch) | |
tree | 696734606d9a16b9698003839762465c4ca98fde /server/src/apub | |
parent | 70060c27b2f40ef2de0c0ea37d3d69e202ab8c02 (diff) | |
parent | 07a9d84ed08d85847ebe15fa68e20a2763508046 (diff) |
Merge branch 'federation' into add_activity_table
Diffstat (limited to 'server/src/apub')
-rw-r--r-- | server/src/apub/comment.rs | 3 | ||||
-rw-r--r-- | server/src/apub/mod.rs | 10 | ||||
-rw-r--r-- | server/src/apub/shared_inbox.rs | 153 |
3 files changed, 70 insertions, 96 deletions
diff --git a/server/src/apub/comment.rs b/server/src/apub/comment.rs index d108b2ee..731f44ab 100644 --- a/server/src/apub/comment.rs +++ b/server/src/apub/comment.rs @@ -23,9 +23,6 @@ impl ToApub for Comment { // Not needed when the Post is embedded in a collection (like for community outbox) .set_context_xsd_any_uri(context())? .set_id(self.ap_id.to_owned())? - // Use summary field to be consistent with mastodon content warning. - // https://mastodon.xyz/@Louisa/103987265222901387.json - // .set_summary_xsd_string(self.name.to_owned())? .set_published(convert_datetime(self.published))? .set_to_xsd_any_uri(community.actor_id)? .set_many_in_reply_to_xsd_any_uris(in_reply_to_vec)? diff --git a/server/src/apub/mod.rs b/server/src/apub/mod.rs index 77d42b82..6abe7ee7 100644 --- a/server/src/apub/mod.rs +++ b/server/src/apub/mod.rs @@ -16,11 +16,7 @@ use activitystreams::{ context, endpoint::EndpointProperties, ext::{Ext, Extensible, Extension}, - object::{ - kind::{NoteType, PageType}, - properties::ObjectProperties, - Note, Page, - }, + object::{properties::ObjectProperties, Note, Page}, public, BaseBox, }; use actix_web::body::Body; @@ -184,12 +180,12 @@ pub trait ActorType { // and a user can't be followed (yet) #[allow(unused_variables)] fn send_follow(&self, follow_actor_id: &str, conn: &PgConnection) -> Result<(), Error> { - Ok(()) + Err(format_err!("Follow not implemented.")) } #[allow(unused_variables)] fn send_accept_follow(&self, follow: &Follow, conn: &PgConnection) -> Result<(), Error> { - Ok(()) + Err(format_err!("Accept not implemented.")) } // TODO default because there is no user following yet. diff --git a/server/src/apub/shared_inbox.rs b/server/src/apub/shared_inbox.rs index 9ce227e5..02244726 100644 --- a/server/src/apub/shared_inbox.rs +++ b/server/src/apub/shared_inbox.rs @@ -7,6 +7,15 @@ pub enum SharedAcceptedObjects { Update(Update), } +impl SharedAcceptedObjects { + fn object(&self) -> Option<&BaseBox> { + match self { + SharedAcceptedObjects::Create(c) => c.create_props.get_object_base_box(), + SharedAcceptedObjects::Update(u) => u.update_props.get_object_base_box(), + } + } +} + /// Handler for all incoming activities to user inboxes. pub async fn shared_inbox( request: HttpRequest, @@ -15,59 +24,45 @@ pub async fn shared_inbox( chat_server: ChatServerParam, ) -> Result<HttpResponse, Error> { // TODO: would be nice if we could do the signature check here, but we cant access the actor property - let input = input.into_inner(); + let activity = input.into_inner(); let conn = &db.get().unwrap(); - let json = serde_json::to_string(&input)?; - debug!("Shared inbox received activity: {:?}", &json); - - match input { - SharedAcceptedObjects::Create(c) => handle_create(&c, &request, &conn, chat_server), - SharedAcceptedObjects::Update(u) => handle_update(&u, &request, &conn, chat_server), + let json = serde_json::to_string(&activity)?; + debug!("Shared inbox received activity: {}", json); + + let object = activity.object().cloned().unwrap(); + + match (activity, object.kind()) { + (SharedAcceptedObjects::Create(c), Some("Note")) => { + receive_create_comment(&c, &request, &conn, chat_server) + } + (SharedAcceptedObjects::Create(c), Some("Page")) => { + receive_create_post(&c, &request, &conn, chat_server) + } + (SharedAcceptedObjects::Update(u), Some("Note")) => { + receive_update_comment(&u, &request, &conn, chat_server) + } + (SharedAcceptedObjects::Update(u), Some("Page")) => { + receive_update_post(&u, &request, &conn, chat_server) + } + _ => Err(format_err!("Unknown incoming activity type.")), } } -/// Handle create activities and insert them in the database. -fn handle_create( +fn receive_create_post( create: &Create, request: &HttpRequest, conn: &PgConnection, chat_server: ChatServerParam, ) -> Result<HttpResponse, Error> { - let base_box = create.create_props.get_object_base_box().unwrap(); - - if base_box.is_kind(PageType) { - let page = create - .create_props - .get_object_base_box() - .to_owned() - .unwrap() - .to_owned() - .to_concrete::<Page>()?; - receive_create_post(&create, &page, &request, &conn, chat_server)?; - } else if base_box.is_kind(NoteType) { - let note = create - .create_props - .get_object_base_box() - .to_owned() - .unwrap() - .to_owned() - .to_concrete::<Note>()?; - receive_create_comment(&create, ¬e, &request, &conn, chat_server)?; - } else { - return Err(format_err!("Unknown base box type")); - } - - Ok(HttpResponse::Ok().finish()) -} + let page = create + .create_props + .get_object_base_box() + .to_owned() + .unwrap() + .to_owned() + .to_concrete::<Page>()?; -fn receive_create_post( - create: &Create, - page: &Page, - request: &HttpRequest, - conn: &PgConnection, - chat_server: ChatServerParam, -) -> Result<(), Error> { let user_uri = create .create_props .get_actor_xsd_any_uri() @@ -100,16 +95,23 @@ fn receive_create_post( my_id: None, }); - Ok(()) + Ok(HttpResponse::Ok().finish()) } fn receive_create_comment( create: &Create, - note: &Note, request: &HttpRequest, conn: &PgConnection, chat_server: ChatServerParam, -) -> Result<(), Error> { +) -> Result<HttpResponse, Error> { + let note = create + .create_props + .get_object_base_box() + .to_owned() + .unwrap() + .to_owned() + .to_concrete::<Note>()?; + let user_uri = create .create_props .get_actor_xsd_any_uri() @@ -147,51 +149,23 @@ fn receive_create_comment( my_id: None, }); - Ok(()) -} - -/// Handle create activities and insert them in the database. -fn handle_update( - update: &Update, - request: &HttpRequest, - conn: &PgConnection, - chat_server: ChatServerParam, -) -> Result<HttpResponse, Error> { - let base_box = update.update_props.get_object_base_box().unwrap(); - - if base_box.is_kind(PageType) { - let page = update - .update_props - .get_object_base_box() - .to_owned() - .unwrap() - .to_owned() - .to_concrete::<Page>()?; - - receive_update_post(&update, &page, &request, &conn, chat_server)?; - } else if base_box.is_kind(NoteType) { - let note = update - .update_props - .get_object_base_box() - .to_owned() - .unwrap() - .to_owned() - .to_concrete::<Note>()?; - receive_update_comment(&update, ¬e, &request, &conn, chat_server)?; - } else { - return Err(format_err!("Unknown base box type")); - } - Ok(HttpResponse::Ok().finish()) } fn receive_update_post( update: &Update, - page: &Page, request: &HttpRequest, conn: &PgConnection, chat_server: ChatServerParam, -) -> Result<(), Error> { +) -> Result<HttpResponse, Error> { + let page = update + .update_props + .get_object_base_box() + .to_owned() + .unwrap() + .to_owned() + .to_concrete::<Page>()?; + let user_uri = update .update_props .get_actor_xsd_any_uri() @@ -225,16 +199,23 @@ fn receive_update_post( my_id: None, }); - Ok(()) + Ok(HttpResponse::Ok().finish()) } fn receive_update_comment( update: &Update, - note: &Note, request: &HttpRequest, conn: &PgConnection, chat_server: ChatServerParam, -) -> Result<(), Error> { +) -> Result<HttpResponse, Error> { + let note = update + .update_props + .get_object_base_box() + .to_owned() + .unwrap() + .to_owned() + .to_concrete::<Note>()?; + let user_uri = update .update_props .get_actor_xsd_any_uri() @@ -273,5 +254,5 @@ fn receive_update_comment( my_id: None, }); - Ok(()) + Ok(HttpResponse::Ok().finish()) } |