|
|
|
@ -7,6 +7,7 @@ use crate::{
|
|
|
|
|
extensions::page_extension::PageExtension,
|
|
|
|
|
fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user},
|
|
|
|
|
get_apub_protocol_string,
|
|
|
|
|
shared_inbox::do_announce,
|
|
|
|
|
ActorType,
|
|
|
|
|
ApubLikeableType,
|
|
|
|
|
ApubObjectType,
|
|
|
|
@ -25,14 +26,19 @@ use crate::{
|
|
|
|
|
routes::DbPoolParam,
|
|
|
|
|
Settings,
|
|
|
|
|
};
|
|
|
|
|
use activitystreams::{activity::{Create, Delete, Dislike, Like, Remove, Undo, Update}, context, object::{kind::PageType, properties::ObjectProperties, AnyImage, Image, Page, Tombstone}, BaseBox, Activity, Base};
|
|
|
|
|
use activitystreams::{
|
|
|
|
|
activity::{Create, Delete, Dislike, Like, Remove, Undo, Update},
|
|
|
|
|
context,
|
|
|
|
|
object::{kind::PageType, properties::ObjectProperties, AnyImage, Image, Page, Tombstone},
|
|
|
|
|
Activity,
|
|
|
|
|
Base,
|
|
|
|
|
BaseBox,
|
|
|
|
|
};
|
|
|
|
|
use activitystreams_ext::Ext1;
|
|
|
|
|
use actix_web::{body::Body, web::Path, HttpResponse, Result};
|
|
|
|
|
use diesel::PgConnection;
|
|
|
|
|
use failure::Error;
|
|
|
|
|
use failure::{Error, _core::fmt::Debug};
|
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
|
use crate::apub::shared_inbox::do_announce;
|
|
|
|
|
use failure::_core::fmt::Debug;
|
|
|
|
|
|
|
|
|
|
#[derive(Deserialize)]
|
|
|
|
|
pub struct PostQuery {
|
|
|
|
@ -236,9 +242,7 @@ impl ApubObjectType for Post {
|
|
|
|
|
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
|
|
|
|
|
.set_object_base_box(BaseBox::from_concrete(page)?)?;
|
|
|
|
|
|
|
|
|
|
insert_activity(&conn, creator.id, &create, true)?;
|
|
|
|
|
|
|
|
|
|
Post::send_post(creator, conn, &community, create)?;
|
|
|
|
|
Post::send_post_activity(creator, conn, &community, create)?;
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -259,9 +263,7 @@ impl ApubObjectType for Post {
|
|
|
|
|
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
|
|
|
|
|
.set_object_base_box(BaseBox::from_concrete(page)?)?;
|
|
|
|
|
|
|
|
|
|
insert_activity(&conn, creator.id, &update, true)?;
|
|
|
|
|
|
|
|
|
|
Post::send_post(creator, conn, &community, update)?;
|
|
|
|
|
Post::send_post_activity(creator, conn, &community, update)?;
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -282,11 +284,9 @@ impl ApubObjectType for Post {
|
|
|
|
|
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
|
|
|
|
|
.set_object_base_box(BaseBox::from_concrete(page)?)?;
|
|
|
|
|
|
|
|
|
|
insert_activity(&conn, self.creator_id, &delete, true)?;
|
|
|
|
|
|
|
|
|
|
let community = Community::read(conn, self.community_id)?;
|
|
|
|
|
|
|
|
|
|
Post::send_post(creator, conn, &community, delete)?;
|
|
|
|
|
Post::send_post_activity(creator, conn, &community, delete)?;
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -323,10 +323,8 @@ impl ApubObjectType for Post {
|
|
|
|
|
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
|
|
|
|
|
.set_object_base_box(delete)?;
|
|
|
|
|
|
|
|
|
|
insert_activity(&conn, self.creator_id, &undo, true)?;
|
|
|
|
|
|
|
|
|
|
let community = Community::read(conn, self.community_id)?;
|
|
|
|
|
Post::send_post(creator, conn, &community, undo)?;
|
|
|
|
|
Post::send_post_activity(creator, conn, &community, undo)?;
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -347,11 +345,9 @@ impl ApubObjectType for Post {
|
|
|
|
|
.set_actor_xsd_any_uri(mod_.actor_id.to_owned())?
|
|
|
|
|
.set_object_base_box(BaseBox::from_concrete(page)?)?;
|
|
|
|
|
|
|
|
|
|
insert_activity(&conn, mod_.id, &remove, true)?;
|
|
|
|
|
|
|
|
|
|
let community = Community::read(conn, self.community_id)?;
|
|
|
|
|
|
|
|
|
|
Post::send_post(mod_, conn, &community, remove)?;
|
|
|
|
|
Post::send_post_activity(mod_, conn, &community, remove)?;
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
fn send_undo_remove(&self, mod_: &User_, conn: &PgConnection) -> Result<(), Error> {
|
|
|
|
@ -386,15 +382,12 @@ impl ApubObjectType for Post {
|
|
|
|
|
.set_actor_xsd_any_uri(mod_.actor_id.to_owned())?
|
|
|
|
|
.set_object_base_box(remove)?;
|
|
|
|
|
|
|
|
|
|
insert_activity(&conn, mod_.id, &undo, true)?;
|
|
|
|
|
|
|
|
|
|
let community = Community::read(conn, self.community_id)?;
|
|
|
|
|
Post::send_post(mod_, conn, &community, undo)?;
|
|
|
|
|
Post::send_post_activity(mod_, conn, &community, undo)?;
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
impl ApubLikeableType for Post {
|
|
|
|
|
fn send_like(&self, creator: &User_, conn: &PgConnection) -> Result<(), Error> {
|
|
|
|
|
let page = self.to_apub(conn)?;
|
|
|
|
@ -412,9 +405,7 @@ impl ApubLikeableType for Post {
|
|
|
|
|
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
|
|
|
|
|
.set_object_base_box(BaseBox::from_concrete(page)?)?;
|
|
|
|
|
|
|
|
|
|
insert_activity(&conn, creator.id, &like, true)?;
|
|
|
|
|
|
|
|
|
|
send_activity(&like, creator, vec!(community.get_inbox_url()))?;
|
|
|
|
|
Post::send_post_activity(&creator, &conn, &community, like)?;
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -434,9 +425,7 @@ impl ApubLikeableType for Post {
|
|
|
|
|
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
|
|
|
|
|
.set_object_base_box(BaseBox::from_concrete(page)?)?;
|
|
|
|
|
|
|
|
|
|
insert_activity(&conn, creator.id, &dislike, true)?;
|
|
|
|
|
|
|
|
|
|
send_activity(&dislike, creator, vec!(community.get_inbox_url()))?;
|
|
|
|
|
Post::send_post_activity(&creator, &conn, &community, dislike)?;
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -472,28 +461,28 @@ impl ApubLikeableType for Post {
|
|
|
|
|
.set_actor_xsd_any_uri(creator.actor_id.to_owned())?
|
|
|
|
|
.set_object_base_box(like)?;
|
|
|
|
|
|
|
|
|
|
insert_activity(&conn, creator.id, &undo, true)?;
|
|
|
|
|
|
|
|
|
|
send_activity(&undo, creator, vec!(community.get_inbox_url()))?;
|
|
|
|
|
Post::send_post_activity(&creator, &conn, &community, undo)?;
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl Post {
|
|
|
|
|
fn send_post<A>(creator: &User_, conn: &PgConnection, community: &Community, activity: A) -> Result<(), Error>
|
|
|
|
|
where
|
|
|
|
|
A: Activity + Base + Serialize + Debug {
|
|
|
|
|
fn send_post_activity<A>(
|
|
|
|
|
creator: &User_,
|
|
|
|
|
conn: &PgConnection,
|
|
|
|
|
community: &Community,
|
|
|
|
|
activity: A,
|
|
|
|
|
) -> Result<(), Error>
|
|
|
|
|
where
|
|
|
|
|
A: Activity + Base + Serialize + Debug,
|
|
|
|
|
{
|
|
|
|
|
insert_activity(&conn, creator.id, &activity, true)?;
|
|
|
|
|
|
|
|
|
|
// if this is a local community, we need to do an announce from the community instead
|
|
|
|
|
if community.local {
|
|
|
|
|
do_announce(activity, &community.actor_id, &creator.actor_id, conn)?;
|
|
|
|
|
} else {
|
|
|
|
|
send_activity(
|
|
|
|
|
&activity,
|
|
|
|
|
creator,
|
|
|
|
|
vec![community.get_shared_inbox_url()],
|
|
|
|
|
)?;
|
|
|
|
|
send_activity(&activity, creator, vec![community.get_shared_inbox_url()])?;
|
|
|
|
|
}
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|