From 4b741c37595a04da99118a3c26de02f253d91cd2 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Mon, 27 Apr 2020 19:21:41 -0400 Subject: Adding a better switching for activity kinds for the shared inbox. --- server/src/apub/shared_inbox.rs | 153 ++++++++++++++++++---------------------- 1 file changed, 67 insertions(+), 86 deletions(-) (limited to 'server/src/apub/shared_inbox.rs') diff --git a/server/src/apub/shared_inbox.rs b/server/src/apub/shared_inbox.rs index f0cfc990..d720681f 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 { // 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 { - 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::()?; - 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::()?; - 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::()?; -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() @@ -91,16 +86,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 { + let note = create + .create_props + .get_object_base_box() + .to_owned() + .unwrap() + .to_owned() + .to_concrete::()?; + let user_uri = create .create_props .get_actor_xsd_any_uri() @@ -129,51 +131,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 { - 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::()?; - - 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::()?; - 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 { + let page = update + .update_props + .get_object_base_box() + .to_owned() + .unwrap() + .to_owned() + .to_concrete::()?; + let user_uri = update .update_props .get_actor_xsd_any_uri() @@ -198,16 +172,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 { + let note = update + .update_props + .get_object_base_box() + .to_owned() + .unwrap() + .to_owned() + .to_concrete::()?; + let user_uri = update .update_props .get_actor_xsd_any_uri() @@ -237,5 +218,5 @@ fn receive_update_comment( my_id: None, }); - Ok(()) + Ok(HttpResponse::Ok().finish()) } -- cgit v1.2.3