summaryrefslogtreecommitdiffstats
path: root/server/src/apub/shared_inbox.rs
diff options
context:
space:
mode:
authorDessalines <tyhou13@gmx.com>2020-04-27 19:21:41 -0400
committerDessalines <tyhou13@gmx.com>2020-04-27 19:21:41 -0400
commit4b741c37595a04da99118a3c26de02f253d91cd2 (patch)
tree75a04419e6ed422c9c4debc221ce54e818a45b52 /server/src/apub/shared_inbox.rs
parent9c30b37d57ee241ea1b4f1cbc5f6ee0d631c5acf (diff)
Adding a better switching for activity kinds for the shared inbox.
Diffstat (limited to 'server/src/apub/shared_inbox.rs')
-rw-r--r--server/src/apub/shared_inbox.rs153
1 files changed, 67 insertions, 86 deletions
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<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, &note, &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()
@@ -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<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()
@@ -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<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, &note, &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()
@@ -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<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()
@@ -237,5 +218,5 @@ fn receive_update_comment(
my_id: None,
});
- Ok(())
+ Ok(HttpResponse::Ok().finish())
}