diff options
author | Felix Ableitner <me@nutomic.com> | 2020-05-28 15:20:12 +0200 |
---|---|---|
committer | Felix Ableitner <me@nutomic.com> | 2020-05-28 15:20:12 +0200 |
commit | 8f9bd1fef7fe9abee04ef54672faad588823ddab (patch) | |
tree | f798f603101fabcd7fe6bd1059461468ce41f17c /server/src/apub/shared_inbox.rs | |
parent | ce0a37cdf1e6cceb029b033caf1369863e2075ae (diff) |
get some more things working
Diffstat (limited to 'server/src/apub/shared_inbox.rs')
-rw-r--r-- | server/src/apub/shared_inbox.rs | 52 |
1 files changed, 30 insertions, 22 deletions
diff --git a/server/src/apub/shared_inbox.rs b/server/src/apub/shared_inbox.rs index 9e8e893f..6322e7fc 100644 --- a/server/src/apub/shared_inbox.rs +++ b/server/src/apub/shared_inbox.rs @@ -5,8 +5,10 @@ use crate::{ post::PostResponse, }, apub::{ + activities::{populate_object_props, send_activity}, extensions::signatures::verify, - fetcher::get_or_fetch_and_upsert_remote_user, + fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user}, + ActorType, FromApub, GroupExt, PageExt, @@ -30,16 +32,18 @@ use crate::{ UserOperation, }, }; -use activitystreams::{activity::{Create, Delete, Dislike, Like, Remove, Undo, Update}, object::Note, BaseBox, Base, Activity}; +use activitystreams::{ + activity::{Announce, Create, Delete, Dislike, Like, Remove, Undo, Update}, + object::Note, + Activity, + Base, + BaseBox, +}; use actix_web::{web, HttpRequest, HttpResponse, Result}; use diesel::PgConnection; use failure::{Error, _core::fmt::Debug}; use log::debug; use serde::{Deserialize, Serialize}; -use crate::apub::fetcher::get_or_fetch_and_upsert_remote_community; -use crate::apub::activities::{populate_object_props, send_activity}; -use crate::apub::ActorType; -use activitystreams::activity::Announce; #[serde(untagged)] #[derive(Serialize, Deserialize, Debug)] @@ -92,7 +96,12 @@ impl SharedAcceptedObjects { SharedAcceptedObjects::Remove(r) => &r.object_props, SharedAcceptedObjects::Announce(a) => &a.object_props, }; - oprops.get_cc_xsd_any_uri().unwrap().to_owned().to_string() + oprops + .get_many_cc_xsd_any_uris() + .unwrap() + .next() + .unwrap() + .to_string() } } @@ -112,40 +121,42 @@ pub async fn shared_inbox( let object = activity.object().cloned().unwrap(); let sender = &activity.sender(); let cc = &activity.cc(); + // TODO: this is hacky, we should probably send the community id directly somehow + let to = cc.replace("/followers", ""); match get_or_fetch_and_upsert_remote_user(&sender.to_string(), &conn) { Ok(u) => verify(&request, &u), Err(_) => { let c = get_or_fetch_and_upsert_remote_community(&sender.to_string(), &conn)?; verify(&request, &c) - }, + } }?; match (activity, object.kind()) { (SharedAcceptedObjects::Create(c), Some("Page")) => { // TODO: first check that it is addressed to a local community receive_create_post(&c, &conn, chat_server)?; - do_announce(*c, cc, sender, conn) + do_announce(*c, &to, sender, conn) } (SharedAcceptedObjects::Update(u), Some("Page")) => { receive_update_post(&u, &conn, chat_server)?; - do_announce(*u, &cc, &sender, conn) + do_announce(*u, &to, &sender, conn) } (SharedAcceptedObjects::Like(l), Some("Page")) => { receive_like_post(&l, &conn, chat_server)?; - do_announce(*l, &cc, &sender, conn) + do_announce(*l, &to, &sender, conn) } (SharedAcceptedObjects::Dislike(d), Some("Page")) => { receive_dislike_post(&d, &conn, chat_server)?; - do_announce(*d, &cc, &sender, conn) + do_announce(*d, &to, &sender, conn) } (SharedAcceptedObjects::Delete(d), Some("Page")) => { receive_delete_post(&d, &conn, chat_server)?; - do_announce(*d, &cc, &sender, conn) + do_announce(*d, &to, &sender, conn) } (SharedAcceptedObjects::Remove(r), Some("Page")) => { receive_remove_post(&r, &conn, chat_server)?; - do_announce(*r, &cc, &sender, conn) + do_announce(*r, &to, &sender, conn) } (SharedAcceptedObjects::Create(c), Some("Note")) => { receive_create_comment(&c, &conn, chat_server) @@ -1505,18 +1516,19 @@ pub fn do_announce<A>( conn: &PgConnection, ) -> Result<HttpResponse, Error> where - A: Activity + Base + Serialize, + A: Activity + Base + Serialize + Debug, { dbg!(&community_uri); // TODO: this fails for some reason let community = Community::read_from_actor_id(conn, &community_uri)?; - insert_activity(&conn, -1, &activity, false)?; + // TODO: need to add boolean param is_local_activity + //insert_activity(&conn, -1, &activity, false)?; let mut announce = Announce::default(); populate_object_props( &mut announce.object_props, - vec!(community.get_followers_url()), + vec![community.get_followers_url()], &format!("{}/announce/{}", community.actor_id, uuid::Uuid::new_v4()), )?; announce @@ -1536,11 +1548,7 @@ where dbg!(&announce); dbg!(&to); - send_activity( - &announce, - &community, - to, - )?; + send_activity(&announce, &community, to)?; Ok(HttpResponse::Ok().finish()) } |