Convert comments to new apub lib (including comment activities)

This commit is contained in:
Felix Ableitner 2020-07-14 16:09:13 +02:00
parent ef8118f40f
commit 2d4c41d2be
11 changed files with 241 additions and 388 deletions

View file

@ -157,10 +157,28 @@ impl UserView {
pub fn admins(conn: &PgConnection) -> Result<Vec<Self>, Error> { pub fn admins(conn: &PgConnection) -> Result<Vec<Self>, Error> {
use super::user_view::user_fast::dsl::*; use super::user_view::user_fast::dsl::*;
use diesel::sql_types::{Text, Nullable}; use diesel::sql_types::{Nullable, Text};
user_fast user_fast
// The select is necessary here to not get back emails // The select is necessary here to not get back emails
.select((id, actor_id, name, avatar, "".into_sql::<Nullable<Text>>(), matrix_user_id, bio, local, admin, banned, show_avatars, send_notifications_to_email, published, number_of_posts, post_score, number_of_comments, comment_score)) .select((
id,
actor_id,
name,
avatar,
"".into_sql::<Nullable<Text>>(),
matrix_user_id,
bio,
local,
admin,
banned,
show_avatars,
send_notifications_to_email,
published,
number_of_posts,
post_score,
number_of_comments,
comment_score,
))
.filter(admin.eq(true)) .filter(admin.eq(true))
.order_by(published) .order_by(published)
.load::<Self>(conn) .load::<Self>(conn)
@ -168,9 +186,28 @@ impl UserView {
pub fn banned(conn: &PgConnection) -> Result<Vec<Self>, Error> { pub fn banned(conn: &PgConnection) -> Result<Vec<Self>, Error> {
use super::user_view::user_fast::dsl::*; use super::user_view::user_fast::dsl::*;
use diesel::sql_types::{Text, Nullable}; use diesel::sql_types::{Nullable, Text};
user_fast user_fast
.select((id, actor_id, name, avatar, "".into_sql::<Nullable<Text>>(), matrix_user_id, bio, local, admin, banned, show_avatars, send_notifications_to_email, published, number_of_posts, post_score, number_of_comments, comment_score)) .select((
.filter(banned.eq(true)).load::<Self>(conn) id,
actor_id,
name,
avatar,
"".into_sql::<Nullable<Text>>(),
matrix_user_id,
bio,
local,
admin,
banned,
show_avatars,
send_notifications_to_email,
published,
number_of_posts,
post_score,
number_of_comments,
comment_score,
))
.filter(banned.eq(true))
.load::<Self>(conn)
} }
} }

View file

@ -1,33 +1,27 @@
use crate::{ use crate::{
apub::{ apub::{
activities::{populate_object_props, send_activity_to_community}, activities::send_activity_to_community,
create_apub_response, create_apub_response, create_apub_tombstone_response, create_tombstone, fetch_webfinger_url,
create_apub_tombstone_response,
create_tombstone,
fetch_webfinger_url,
fetcher::{ fetcher::{
get_or_fetch_and_insert_remote_comment, get_or_fetch_and_insert_remote_comment, get_or_fetch_and_insert_remote_post,
get_or_fetch_and_insert_remote_post,
get_or_fetch_and_upsert_remote_user, get_or_fetch_and_upsert_remote_user,
}, },
ActorType, ActorType, ApubLikeableType, ApubObjectType, FromApub, ToApub,
ApubLikeableType,
ApubObjectType,
FromApub,
ToApub,
}, },
blocking, blocking,
routes::DbPoolParam, routes::DbPoolParam,
DbPool, DbPool, LemmyError,
LemmyError,
}; };
use activitystreams::{ use activitystreams_new::{
activity::{Create, Delete, Dislike, Like, Remove, Undo, Update}, activity::{Create, Delete, Dislike, Like, Remove, Undo, Update},
base::AnyBase,
context, context,
link::Mention, link::Mention,
object::{kind::NoteType, properties::ObjectProperties, Note}, object::{kind::NoteType, Note, Tombstone},
prelude::*,
primitives::XsdAnyUri,
public,
}; };
use activitystreams_new::object::Tombstone;
use actix_web::{body::Body, client::Client, web::Path, HttpResponse}; use actix_web::{body::Body, client::Client, web::Path, HttpResponse};
use itertools::Itertools; use itertools::Itertools;
use lemmy_db::{ use lemmy_db::{
@ -40,6 +34,8 @@ use lemmy_db::{
use lemmy_utils::{convert_datetime, scrape_text_for_mentions, MentionData}; use lemmy_utils::{convert_datetime, scrape_text_for_mentions, MentionData};
use log::debug; use log::debug;
use serde::Deserialize; use serde::Deserialize;
use serde_json::Error;
use std::str::FromStr;
#[derive(Deserialize)] #[derive(Deserialize)]
pub struct CommentQuery { pub struct CommentQuery {
@ -66,8 +62,7 @@ impl ToApub for Comment {
type Response = Note; type Response = Note;
async fn to_apub(&self, pool: &DbPool) -> Result<Note, LemmyError> { async fn to_apub(&self, pool: &DbPool) -> Result<Note, LemmyError> {
let mut comment = Note::default(); let mut comment = Note::new();
let oprops: &mut ObjectProperties = comment.as_mut();
let creator_id = self.creator_id; let creator_id = self.creator_id;
let creator = blocking(pool, move |conn| User_::read(conn, creator_id)).await??; let creator = blocking(pool, move |conn| User_::read(conn, creator_id)).await??;
@ -88,18 +83,18 @@ impl ToApub for Comment {
in_reply_to_vec.push(parent_comment.ap_id); in_reply_to_vec.push(parent_comment.ap_id);
} }
oprops comment
// Not needed when the Post is embedded in a collection (like for community outbox) // Not needed when the Post is embedded in a collection (like for community outbox)
.set_context_xsd_any_uri(context())? .set_context(context())
.set_id(self.ap_id.to_owned())? .set_id(self.ap_id.parse::<XsdAnyUri>()?)
.set_published(convert_datetime(self.published))? .set_published(convert_datetime(self.published).into())
.set_to_xsd_any_uri(community.actor_id)? .set_to(community.actor_id)
.set_many_in_reply_to_xsd_any_uris(in_reply_to_vec)? .set_many_in_reply_tos(in_reply_to_vec)
.set_content_xsd_string(self.content.to_owned())? .set_content(self.content.to_owned())
.set_attributed_to_xsd_any_uri(creator.actor_id)?; .set_attributed_to(creator.actor_id);
if let Some(u) = self.updated { if let Some(u) = self.updated {
oprops.set_updated(convert_datetime(u))?; comment.set_updated(convert_datetime(u).into());
} }
Ok(comment) Ok(comment)
@ -125,12 +120,22 @@ impl FromApub for CommentForm {
client: &Client, client: &Client,
pool: &DbPool, pool: &DbPool,
) -> Result<CommentForm, LemmyError> { ) -> Result<CommentForm, LemmyError> {
let oprops = &note.object_props; let creator_actor_id = &note
let creator_actor_id = &oprops.get_attributed_to_xsd_any_uri().unwrap().to_string(); .attributed_to()
.unwrap()
.as_single_xsd_any_uri()
.unwrap();
let creator = get_or_fetch_and_upsert_remote_user(&creator_actor_id, client, pool).await?; let creator = get_or_fetch_and_upsert_remote_user(creator_actor_id, client, pool).await?;
let mut in_reply_tos = oprops.get_many_in_reply_to_xsd_any_uris().unwrap(); let mut in_reply_tos = note
.in_reply_to
.as_ref()
.unwrap()
.as_many()
.unwrap()
.iter()
.map(|i| i.as_xsd_any_uri().unwrap());
let post_ap_id = in_reply_tos.next().unwrap().to_string(); let post_ap_id = in_reply_tos.next().unwrap().to_string();
// This post, or the parent comment might not yet exist on this server yet, fetch them. // This post, or the parent comment might not yet exist on this server yet, fetch them.
@ -153,20 +158,20 @@ impl FromApub for CommentForm {
creator_id: creator.id, creator_id: creator.id,
post_id: post.id, post_id: post.id,
parent_id, parent_id,
content: oprops content: note
.get_content_xsd_string() .content()
.map(|c| c.to_string()) .unwrap()
.unwrap(), .as_single_xsd_string()
.unwrap()
.to_string(),
removed: None, removed: None,
read: None, read: None,
published: oprops published: note
.get_published() .published()
.map(|u| u.as_ref().to_owned().naive_local()),
updated: oprops
.get_updated()
.map(|u| u.as_ref().to_owned().naive_local()), .map(|u| u.as_ref().to_owned().naive_local()),
updated: note.updated().map(|u| u.as_ref().to_owned().naive_local()),
deleted: None, deleted: None,
ap_id: oprops.get_id().unwrap().to_string(), ap_id: note.id().unwrap().to_string(),
local: false, local: false,
}) })
} }
@ -193,16 +198,14 @@ impl ApubObjectType for Comment {
collect_non_local_mentions_and_addresses(&self.content, &community, client, pool).await?; collect_non_local_mentions_and_addresses(&self.content, &community, client, pool).await?;
let id = format!("{}/create/{}", self.ap_id, uuid::Uuid::new_v4()); let id = format!("{}/create/{}", self.ap_id, uuid::Uuid::new_v4());
let mut create = Create::new(); let mut create = Create::new(creator.actor_id.to_owned(), note.into_any_base()?);
populate_object_props(&mut create.object_props, maa.addressed_ccs, &id)?;
// Set the mention tags
create.object_props.set_many_tag_base_boxes(maa.tags)?;
create create
.create_props .set_context(context())
.set_actor_xsd_any_uri(creator.actor_id.to_owned())? .set_id(XsdAnyUri::from_str(&id)?)
.set_object_base_box(note)?; .set_to(public())
.set_many_ccs(maa.addressed_ccs.to_owned())
// Set the mention tags
.set_many_tags(maa.get_tags()?);
send_activity_to_community(&creator, &community, maa.inboxes, create, client, pool).await?; send_activity_to_community(&creator, &community, maa.inboxes, create, client, pool).await?;
Ok(()) Ok(())
@ -227,16 +230,14 @@ impl ApubObjectType for Comment {
collect_non_local_mentions_and_addresses(&self.content, &community, client, pool).await?; collect_non_local_mentions_and_addresses(&self.content, &community, client, pool).await?;
let id = format!("{}/update/{}", self.ap_id, uuid::Uuid::new_v4()); let id = format!("{}/update/{}", self.ap_id, uuid::Uuid::new_v4());
let mut update = Update::new(); let mut update = Update::new(creator.actor_id.to_owned(), note.into_any_base()?);
populate_object_props(&mut update.object_props, maa.addressed_ccs, &id)?;
// Set the mention tags
update.object_props.set_many_tag_base_boxes(maa.tags)?;
update update
.update_props .set_context(context())
.set_actor_xsd_any_uri(creator.actor_id.to_owned())? .set_id(XsdAnyUri::from_str(&id)?)
.set_object_base_box(note)?; .set_to(public())
.set_many_ccs(maa.addressed_ccs.to_owned())
// Set the mention tags
.set_many_tags(maa.get_tags()?);
send_activity_to_community(&creator, &community, maa.inboxes, update, client, pool).await?; send_activity_to_community(&creator, &community, maa.inboxes, update, client, pool).await?;
Ok(()) Ok(())
@ -257,18 +258,12 @@ impl ApubObjectType for Comment {
let community = blocking(pool, move |conn| Community::read(conn, community_id)).await??; let community = blocking(pool, move |conn| Community::read(conn, community_id)).await??;
let id = format!("{}/delete/{}", self.ap_id, uuid::Uuid::new_v4()); let id = format!("{}/delete/{}", self.ap_id, uuid::Uuid::new_v4());
let mut delete = Delete::default(); let mut delete = Delete::new(creator.actor_id.to_owned(), note.into_any_base()?);
populate_object_props(
&mut delete.object_props,
vec![community.get_followers_url()],
&id,
)?;
delete delete
.delete_props .set_context(context())
.set_actor_xsd_any_uri(creator.actor_id.to_owned())? .set_id(XsdAnyUri::from_str(&id)?)
.set_object_base_box(note)?; .set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
send_activity_to_community( send_activity_to_community(
&creator, &creator,
@ -298,34 +293,22 @@ impl ApubObjectType for Comment {
// Generate a fake delete activity, with the correct object // Generate a fake delete activity, with the correct object
let id = format!("{}/delete/{}", self.ap_id, uuid::Uuid::new_v4()); let id = format!("{}/delete/{}", self.ap_id, uuid::Uuid::new_v4());
let mut delete = Delete::default(); let mut delete = Delete::new(creator.actor_id.to_owned(), note.into_any_base()?);
populate_object_props(
&mut delete.object_props,
vec![community.get_followers_url()],
&id,
)?;
delete delete
.delete_props .set_context(context())
.set_actor_xsd_any_uri(creator.actor_id.to_owned())? .set_id(XsdAnyUri::from_str(&id)?)
.set_object_base_box(note)?; .set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
// TODO // TODO
// Undo that fake activity // Undo that fake activity
let undo_id = format!("{}/undo/delete/{}", self.ap_id, uuid::Uuid::new_v4()); let undo_id = format!("{}/undo/delete/{}", self.ap_id, uuid::Uuid::new_v4());
let mut undo = Undo::default(); let mut undo = Undo::new(creator.actor_id.to_owned(), delete.into_any_base()?);
populate_object_props(
&mut undo.object_props,
vec![community.get_followers_url()],
&undo_id,
)?;
undo undo
.undo_props .set_context(context())
.set_actor_xsd_any_uri(creator.actor_id.to_owned())? .set_id(XsdAnyUri::from_str(&undo_id)?)
.set_object_base_box(delete)?; .set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
send_activity_to_community( send_activity_to_community(
&creator, &creator,
@ -354,18 +337,12 @@ impl ApubObjectType for Comment {
let community = blocking(pool, move |conn| Community::read(conn, community_id)).await??; let community = blocking(pool, move |conn| Community::read(conn, community_id)).await??;
let id = format!("{}/remove/{}", self.ap_id, uuid::Uuid::new_v4()); let id = format!("{}/remove/{}", self.ap_id, uuid::Uuid::new_v4());
let mut remove = Remove::default(); let mut remove = Remove::new(mod_.actor_id.to_owned(), note.into_any_base()?);
populate_object_props(
&mut remove.object_props,
vec![community.get_followers_url()],
&id,
)?;
remove remove
.remove_props .set_context(context())
.set_actor_xsd_any_uri(mod_.actor_id.to_owned())? .set_id(XsdAnyUri::from_str(&id)?)
.set_object_base_box(note)?; .set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
send_activity_to_community( send_activity_to_community(
&mod_, &mod_,
@ -395,33 +372,21 @@ impl ApubObjectType for Comment {
// Generate a fake delete activity, with the correct object // Generate a fake delete activity, with the correct object
let id = format!("{}/remove/{}", self.ap_id, uuid::Uuid::new_v4()); let id = format!("{}/remove/{}", self.ap_id, uuid::Uuid::new_v4());
let mut remove = Remove::default(); let mut remove = Remove::new(mod_.actor_id.to_owned(), note.into_any_base()?);
populate_object_props(
&mut remove.object_props,
vec![community.get_followers_url()],
&id,
)?;
remove remove
.remove_props .set_context(context())
.set_actor_xsd_any_uri(mod_.actor_id.to_owned())? .set_id(XsdAnyUri::from_str(&id)?)
.set_object_base_box(note)?; .set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
// Undo that fake activity // Undo that fake activity
let undo_id = format!("{}/undo/remove/{}", self.ap_id, uuid::Uuid::new_v4()); let undo_id = format!("{}/undo/remove/{}", self.ap_id, uuid::Uuid::new_v4());
let mut undo = Undo::default(); let mut undo = Undo::new(mod_.actor_id.to_owned(), remove.into_any_base()?);
populate_object_props(
&mut undo.object_props,
vec![community.get_followers_url()],
&undo_id,
)?;
undo undo
.undo_props .set_context(context())
.set_actor_xsd_any_uri(mod_.actor_id.to_owned())? .set_id(XsdAnyUri::from_str(&undo_id)?)
.set_object_base_box(remove)?; .set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
send_activity_to_community( send_activity_to_community(
&mod_, &mod_,
@ -454,16 +419,12 @@ impl ApubLikeableType for Comment {
let id = format!("{}/like/{}", self.ap_id, uuid::Uuid::new_v4()); let id = format!("{}/like/{}", self.ap_id, uuid::Uuid::new_v4());
let mut like = Like::new(); let mut like = Like::new(creator.actor_id.to_owned(), note.into_any_base()?);
populate_object_props(
&mut like.object_props,
vec![community.get_followers_url()],
&id,
)?;
like like
.like_props .set_context(context())
.set_actor_xsd_any_uri(creator.actor_id.to_owned())? .set_id(XsdAnyUri::from_str(&id)?)
.set_object_base_box(note)?; .set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
send_activity_to_community( send_activity_to_community(
&creator, &creator,
@ -493,16 +454,12 @@ impl ApubLikeableType for Comment {
let id = format!("{}/dislike/{}", self.ap_id, uuid::Uuid::new_v4()); let id = format!("{}/dislike/{}", self.ap_id, uuid::Uuid::new_v4());
let mut dislike = Dislike::new(); let mut dislike = Dislike::new(creator.actor_id.to_owned(), note.into_any_base()?);
populate_object_props(
&mut dislike.object_props,
vec![community.get_followers_url()],
&id,
)?;
dislike dislike
.dislike_props .set_context(context())
.set_actor_xsd_any_uri(creator.actor_id.to_owned())? .set_id(XsdAnyUri::from_str(&id)?)
.set_object_base_box(note)?; .set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
send_activity_to_community( send_activity_to_community(
&creator, &creator,
@ -532,32 +489,22 @@ impl ApubLikeableType for Comment {
let id = format!("{}/dislike/{}", self.ap_id, uuid::Uuid::new_v4()); let id = format!("{}/dislike/{}", self.ap_id, uuid::Uuid::new_v4());
let mut like = Like::new(); let mut like = Like::new(creator.actor_id.to_owned(), note.into_any_base()?);
populate_object_props(
&mut like.object_props,
vec![community.get_followers_url()],
&id,
)?;
like like
.like_props .set_context(context())
.set_actor_xsd_any_uri(creator.actor_id.to_owned())? .set_id(XsdAnyUri::from_str(&id)?)
.set_object_base_box(note)?; .set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
// TODO // TODO
// Undo that fake activity // Undo that fake activity
let undo_id = format!("{}/undo/like/{}", self.ap_id, uuid::Uuid::new_v4()); let undo_id = format!("{}/undo/like/{}", self.ap_id, uuid::Uuid::new_v4());
let mut undo = Undo::default(); let mut undo = Undo::new(creator.actor_id.to_owned(), like.into_any_base()?);
populate_object_props(
&mut undo.object_props,
vec![community.get_followers_url()],
&undo_id,
)?;
undo undo
.undo_props .set_context(context())
.set_actor_xsd_any_uri(creator.actor_id.to_owned())? .set_id(XsdAnyUri::from_str(&undo_id)?)
.set_object_base_box(like)?; .set_to(public())
.set_many_ccs(vec![community.get_followers_url()]);
send_activity_to_community( send_activity_to_community(
&creator, &creator,
@ -578,6 +525,16 @@ struct MentionsAndAddresses {
tags: Vec<Mention>, tags: Vec<Mention>,
} }
impl MentionsAndAddresses {
fn get_tags(&self) -> Result<Vec<AnyBase>, Error> {
self
.tags
.iter()
.map(|t| t.to_owned().into_any_base())
.collect::<Result<Vec<AnyBase>, Error>>()
}
}
/// This takes a comment, and builds a list of to_addresses, inboxes, /// This takes a comment, and builds a list of to_addresses, inboxes,
/// and mention tags, so they know where to be sent to. /// and mention tags, so they know where to be sent to.
/// Addresses are the users / addresses that go in the cc field. /// Addresses are the users / addresses that go in the cc field.
@ -604,17 +561,14 @@ async fn collect_non_local_mentions_and_addresses(
// TODO should it be fetching it every time? // TODO should it be fetching it every time?
if let Ok(actor_id) = fetch_webfinger_url(mention, client).await { if let Ok(actor_id) = fetch_webfinger_url(mention, client).await {
debug!("mention actor_id: {}", actor_id); debug!("mention actor_id: {}", actor_id);
addressed_ccs.push(actor_id.to_owned()); addressed_ccs.push(actor_id.to_owned().to_string());
let mention_user = get_or_fetch_and_upsert_remote_user(&actor_id, client, pool).await?; let mention_user = get_or_fetch_and_upsert_remote_user(&actor_id, client, pool).await?;
let shared_inbox = mention_user.get_shared_inbox_url(); let shared_inbox = mention_user.get_shared_inbox_url();
mention_inboxes.push(shared_inbox); mention_inboxes.push(shared_inbox);
let mut mention_tag = Mention::new(); let mut mention_tag = Mention::new();
mention_tag mention_tag.set_href(actor_id).set_name(mention.full_name());
.link_props
.set_href(actor_id)?
.set_name_xsd_string(mention.full_name())?;
tags.push(mention_tag); tags.push(mention_tag);
} }
} }

View file

@ -1,28 +1,18 @@
use crate::{ use crate::{
apub::{ apub::{
activities::{populate_object_props, send_activity}, activities::{populate_object_props, send_activity},
create_apub_response, create_apub_response, create_apub_tombstone_response, create_tombstone,
create_apub_tombstone_response,
create_tombstone,
extensions::group_extensions::GroupExtension, extensions::group_extensions::GroupExtension,
fetcher::get_or_fetch_and_upsert_remote_user, fetcher::get_or_fetch_and_upsert_remote_user,
get_shared_inbox, get_shared_inbox, insert_activity, ActorType, FromApub, GroupExt, ToApub,
insert_activity,
ActorType,
FromApub,
GroupExt,
ToApub,
}, },
blocking, blocking,
routes::DbPoolParam, routes::DbPoolParam,
DbPool, DbPool, LemmyError,
LemmyError,
}; };
use activitystreams::{ use activitystreams::{
activity::{Accept, Announce, Delete, Remove, Undo}, activity::{Accept, Announce, Delete, Remove, Undo},
Activity, Activity, Base, BaseBox,
Base,
BaseBox,
}; };
use activitystreams_ext::Ext2; use activitystreams_ext::Ext2;
use activitystreams_new::{ use activitystreams_new::{
@ -378,7 +368,7 @@ impl FromApub for CommunityForm {
.as_xsd_any_uri() .as_xsd_any_uri()
.unwrap(); .unwrap();
let creator = get_or_fetch_and_upsert_remote_user(creator_uri.as_str(), client, pool).await?; let creator = get_or_fetch_and_upsert_remote_user(creator_uri, client, pool).await?;
Ok(CommunityForm { Ok(CommunityForm {
name: group.name().unwrap().as_single_xsd_string().unwrap().into(), name: group.name().unwrap().as_single_xsd_string().unwrap().into(),

View file

@ -71,7 +71,7 @@ pub async fn community_inbox(
&community.name, &input &community.name, &input
); );
let follow = input.follow()?; let follow = input.follow()?;
let user_uri = follow.actor.as_single_xsd_any_uri().unwrap().to_string(); let user_uri = follow.actor.as_single_xsd_any_uri().unwrap();
let community_uri = follow.object.as_single_xsd_any_uri().unwrap().to_string(); let community_uri = follow.object.as_single_xsd_any_uri().unwrap().to_string();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, &client, &db).await?; let user = get_or_fetch_and_upsert_remote_user(&user_uri, &client, &db).await?;

View file

@ -4,11 +4,9 @@ use crate::{
blocking, blocking,
request::{retry, RecvError}, request::{retry, RecvError},
routes::nodeinfo::{NodeInfo, NodeInfoWellKnown}, routes::nodeinfo::{NodeInfo, NodeInfoWellKnown},
DbPool, DbPool, LemmyError,
LemmyError,
}; };
use activitystreams::object::Note; use activitystreams_new::{base::BaseExt, object::Note, prelude::*, primitives::XsdAnyUri};
use activitystreams_new::{base::BaseExt, prelude::*, primitives::XsdAnyUri};
use actix_web::client::Client; use actix_web::client::Client;
use chrono::NaiveDateTime; use chrono::NaiveDateTime;
use diesel::{result::Error::NotFound, PgConnection}; use diesel::{result::Error::NotFound, PgConnection};
@ -22,9 +20,7 @@ use lemmy_db::{
post_view::PostView, post_view::PostView,
user::{UserForm, User_}, user::{UserForm, User_},
user_view::UserView, user_view::UserView,
Crud, Crud, Joinable, SearchType,
Joinable,
SearchType,
}; };
use lemmy_utils::get_apub_protocol_string; use lemmy_utils::get_apub_protocol_string;
use log::debug; use log::debug;
@ -139,7 +135,7 @@ pub async fn search_by_apub_id(
let response = match fetch_remote_object::<SearchAcceptedObjects>(client, &query_url).await? { let response = match fetch_remote_object::<SearchAcceptedObjects>(client, &query_url).await? {
SearchAcceptedObjects::Person(p) => { SearchAcceptedObjects::Person(p) => {
let user_uri = p.inner.id().unwrap().to_string(); let user_uri = p.inner.id().unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?; let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -173,16 +169,11 @@ pub async fn search_by_apub_id(
response response
} }
SearchAcceptedObjects::Comment(c) => { SearchAcceptedObjects::Comment(c) => {
let post_url = c let post_url = c.in_reply_to.as_ref().unwrap().as_many().unwrap();
.object_props
.get_many_in_reply_to_xsd_any_uris()
.unwrap()
.next()
.unwrap()
.to_string();
// TODO: also fetch parent comments if any // TODO: also fetch parent comments if any
let post = fetch_remote_object(client, &Url::parse(&post_url)?).await?; let x = post_url.first().unwrap().as_xsd_any_uri().unwrap();
let post = fetch_remote_object(client, x.as_url()).await?;
let post_form = PostForm::from_apub(&post, client, pool).await?; let post_form = PostForm::from_apub(&post, client, pool).await?;
let comment_form = CommentForm::from_apub(&c, client, pool).await?; let comment_form = CommentForm::from_apub(&c, client, pool).await?;
@ -200,13 +191,13 @@ pub async fn search_by_apub_id(
/// Check if a remote user exists, create if not found, if its too old update it.Fetch a user, insert/update it in the database and return the user. /// Check if a remote user exists, create if not found, if its too old update it.Fetch a user, insert/update it in the database and return the user.
pub async fn get_or_fetch_and_upsert_remote_user( pub async fn get_or_fetch_and_upsert_remote_user(
apub_id: &str, apub_id: &XsdAnyUri,
client: &Client, client: &Client,
pool: &DbPool, pool: &DbPool,
) -> Result<User_, LemmyError> { ) -> Result<User_, LemmyError> {
let apub_id_owned = apub_id.to_owned(); let apub_id_owned = apub_id.to_owned();
let user = blocking(pool, move |conn| { let user = blocking(pool, move |conn| {
User_::read_from_actor_id(conn, &apub_id_owned) User_::read_from_actor_id(conn, apub_id_owned.as_str())
}) })
.await?; .await?;
@ -214,7 +205,7 @@ pub async fn get_or_fetch_and_upsert_remote_user(
// If its older than a day, re-fetch it // If its older than a day, re-fetch it
Ok(u) if !u.local && should_refetch_actor(u.last_refreshed_at) => { Ok(u) if !u.local && should_refetch_actor(u.last_refreshed_at) => {
debug!("Fetching and updating from remote user: {}", apub_id); debug!("Fetching and updating from remote user: {}", apub_id);
let person = fetch_remote_object::<PersonExt>(client, &Url::parse(apub_id)?).await?; let person = fetch_remote_object::<PersonExt>(client, apub_id.as_url()).await?;
let mut uf = UserForm::from_apub(&person, client, pool).await?; let mut uf = UserForm::from_apub(&person, client, pool).await?;
uf.last_refreshed_at = Some(naive_now()); uf.last_refreshed_at = Some(naive_now());
@ -225,7 +216,7 @@ pub async fn get_or_fetch_and_upsert_remote_user(
Ok(u) => Ok(u), Ok(u) => Ok(u),
Err(NotFound {}) => { Err(NotFound {}) => {
debug!("Fetching and creating remote user: {}", apub_id); debug!("Fetching and creating remote user: {}", apub_id);
let person = fetch_remote_object::<PersonExt>(client, &Url::parse(apub_id)?).await?; let person = fetch_remote_object::<PersonExt>(client, apub_id.as_url()).await?;
let uf = UserForm::from_apub(&person, client, pool).await?; let uf = UserForm::from_apub(&person, client, pool).await?;
let user = blocking(pool, move |conn| User_::create(conn, &uf)).await??; let user = blocking(pool, move |conn| User_::create(conn, &uf)).await??;
@ -293,7 +284,7 @@ pub async fn get_or_fetch_and_upsert_remote_community(
let mut creator_and_moderators = Vec::new(); let mut creator_and_moderators = Vec::new();
for uri in creator_and_moderator_uris { for uri in creator_and_moderator_uris {
let c_or_m = get_or_fetch_and_upsert_remote_user(uri.as_str(), client, pool).await?; let c_or_m = get_or_fetch_and_upsert_remote_user(uri, client, pool).await?;
creator_and_moderators.push(c_or_m); creator_and_moderators.push(c_or_m);
} }

View file

@ -19,8 +19,7 @@ use crate::{
blocking, blocking,
request::{retry, RecvError}, request::{retry, RecvError},
routes::webfinger::WebFingerResponse, routes::webfinger::WebFingerResponse,
DbPool, DbPool, LemmyError,
LemmyError,
}; };
use activitystreams_ext::{Ext1, Ext2}; use activitystreams_ext::{Ext1, Ext2};
use activitystreams_new::{ use activitystreams_new::{
@ -28,6 +27,7 @@ use activitystreams_new::{
actor::{ApActor, Group, Person}, actor::{ApActor, Group, Person},
object::{Page, Tombstone}, object::{Page, Tombstone},
prelude::*, prelude::*,
primitives::XsdAnyUri,
}; };
use actix_web::{body::Body, client::Client, HttpResponse}; use actix_web::{body::Body, client::Client, HttpResponse};
use chrono::NaiveDateTime; use chrono::NaiveDateTime;
@ -36,6 +36,7 @@ use lemmy_db::{activity::do_insert_activity, user::User_};
use lemmy_utils::{convert_datetime, get_apub_protocol_string, settings::Settings, MentionData}; use lemmy_utils::{convert_datetime, get_apub_protocol_string, settings::Settings, MentionData};
use log::debug; use log::debug;
use serde::Serialize; use serde::Serialize;
use std::str::FromStr;
use url::Url; use url::Url;
type GroupExt = Ext2<ApActor<Group>, GroupExtension, PublicKeyExtension>; type GroupExt = Ext2<ApActor<Group>, GroupExtension, PublicKeyExtension>;
@ -310,7 +311,7 @@ pub trait ActorType {
pub async fn fetch_webfinger_url( pub async fn fetch_webfinger_url(
mention: &MentionData, mention: &MentionData,
client: &Client, client: &Client,
) -> Result<String, LemmyError> { ) -> Result<XsdAnyUri, LemmyError> {
let fetch_url = format!( let fetch_url = format!(
"{}://{}/.well-known/webfinger?resource=acct:{}@{}", "{}://{}/.well-known/webfinger?resource=acct:{}@{}",
get_apub_protocol_string(), get_apub_protocol_string(),
@ -335,6 +336,8 @@ pub async fn fetch_webfinger_url(
link link
.href .href
.to_owned() .to_owned()
.map(|u| XsdAnyUri::from_str(&u))
.transpose()?
.ok_or_else(|| format_err!("No href found.").into()) .ok_or_else(|| format_err!("No href found.").into())
} }

View file

@ -1,22 +1,14 @@
use crate::{ use crate::{
apub::{ apub::{
activities::{populate_object_props, send_activity_to_community}, activities::{populate_object_props, send_activity_to_community},
create_apub_response, create_apub_response, create_apub_tombstone_response, create_tombstone,
create_apub_tombstone_response,
create_tombstone,
extensions::page_extension::PageExtension, extensions::page_extension::PageExtension,
fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user}, fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user},
ActorType, ActorType, ApubLikeableType, ApubObjectType, FromApub, PageExt, ToApub,
ApubLikeableType,
ApubObjectType,
FromApub,
PageExt,
ToApub,
}, },
blocking, blocking,
routes::DbPoolParam, routes::DbPoolParam,
DbPool, DbPool, LemmyError,
LemmyError,
}; };
use activitystreams::{ use activitystreams::{
activity::{Create, Delete, Dislike, Like, Remove, Undo, Update}, activity::{Create, Delete, Dislike, Like, Remove, Undo, Update},
@ -166,8 +158,7 @@ impl FromApub for PostForm {
.as_ref() .as_ref()
.unwrap() .unwrap()
.as_single_xsd_any_uri() .as_single_xsd_any_uri()
.unwrap() .unwrap();
.as_str();
let creator = get_or_fetch_and_upsert_remote_user(creator_actor_id, client, pool).await?; let creator = get_or_fetch_and_upsert_remote_user(creator_actor_id, client, pool).await?;

View file

@ -1,16 +1,9 @@
use crate::{ use crate::{
apub::{ apub::{
activities::send_activity, activities::send_activity, create_tombstone, fetcher::get_or_fetch_and_upsert_remote_user,
create_tombstone, insert_activity, ApubObjectType, FromApub, ToApub,
fetcher::get_or_fetch_and_upsert_remote_user,
insert_activity,
ApubObjectType,
FromApub,
ToApub,
}, },
blocking, blocking, DbPool, LemmyError,
DbPool,
LemmyError,
}; };
use activitystreams::{ use activitystreams::{
activity::{Create, Delete, Undo, Update}, activity::{Create, Delete, Undo, Update},
@ -76,11 +69,11 @@ impl FromApub for PrivateMessageForm {
pool: &DbPool, pool: &DbPool,
) -> Result<PrivateMessageForm, LemmyError> { ) -> Result<PrivateMessageForm, LemmyError> {
let oprops = &note.object_props; let oprops = &note.object_props;
let creator_actor_id = &oprops.get_attributed_to_xsd_any_uri().unwrap().to_string(); let creator_actor_id = &oprops.get_attributed_to_xsd_any_uri().unwrap();
let creator = get_or_fetch_and_upsert_remote_user(&creator_actor_id, client, pool).await?; let creator = get_or_fetch_and_upsert_remote_user(&creator_actor_id, client, pool).await?;
let recipient_actor_id = &oprops.get_to_xsd_any_uri().unwrap().to_string(); let recipient_actor_id = &oprops.get_to_xsd_any_uri().unwrap();
let recipient = get_or_fetch_and_upsert_remote_user(&recipient_actor_id, client, pool).await?; let recipient = get_or_fetch_and_upsert_remote_user(&recipient_actor_id, client, pool).await?;

View file

@ -8,15 +8,10 @@ use crate::{
community::do_announce, community::do_announce,
extensions::signatures::verify, extensions::signatures::verify,
fetcher::{ fetcher::{
get_or_fetch_and_insert_remote_comment, get_or_fetch_and_insert_remote_comment, get_or_fetch_and_insert_remote_post,
get_or_fetch_and_insert_remote_post, get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user,
get_or_fetch_and_upsert_remote_community,
get_or_fetch_and_upsert_remote_user,
}, },
insert_activity, insert_activity, FromApub, GroupExt, PageExt,
FromApub,
GroupExt,
PageExt,
}, },
blocking, blocking,
routes::{ChatServerParam, DbPoolParam}, routes::{ChatServerParam, DbPoolParam},
@ -24,16 +19,13 @@ use crate::{
server::{SendComment, SendCommunityRoomMessage, SendPost}, server::{SendComment, SendCommunityRoomMessage, SendPost},
UserOperation, UserOperation,
}, },
DbPool, DbPool, LemmyError,
LemmyError,
}; };
use activitystreams::{ use activitystreams::{
activity::{Announce, Create, Delete, Dislike, Like, Remove, Undo, Update}, activity::{Announce, Create, Delete, Dislike, Like, Remove, Undo, Update},
object::Note, Activity, Base, BaseBox,
Activity,
Base,
BaseBox,
}; };
use activitystreams_new::{object::Note, primitives::XsdAnyUri};
use actix_web::{client::Client, web, HttpRequest, HttpResponse}; use actix_web::{client::Client, web, HttpRequest, HttpResponse};
use lemmy_db::{ use lemmy_db::{
comment::{Comment, CommentForm, CommentLike, CommentLikeForm}, comment::{Comment, CommentForm, CommentLike, CommentLikeForm},
@ -43,8 +35,7 @@ use lemmy_db::{
naive_now, naive_now,
post::{Post, PostForm, PostLike, PostLikeForm}, post::{Post, PostForm, PostLike, PostLikeForm},
post_view::PostView, post_view::PostView,
Crud, Crud, Likeable,
Likeable,
}; };
use lemmy_utils::scrape_text_for_mentions; use lemmy_utils::scrape_text_for_mentions;
use log::debug; use log::debug;
@ -77,7 +68,7 @@ impl SharedAcceptedObjects {
SharedAcceptedObjects::Announce(a) => a.announce_props.get_object_base_box(), SharedAcceptedObjects::Announce(a) => a.announce_props.get_object_base_box(),
} }
} }
fn sender(&self) -> String { fn sender(&self) -> XsdAnyUri {
let uri = match self { let uri = match self {
SharedAcceptedObjects::Create(c) => c.create_props.get_actor_xsd_any_uri(), SharedAcceptedObjects::Create(c) => c.create_props.get_actor_xsd_any_uri(),
SharedAcceptedObjects::Update(u) => u.update_props.get_actor_xsd_any_uri(), SharedAcceptedObjects::Update(u) => u.update_props.get_actor_xsd_any_uri(),
@ -88,7 +79,7 @@ impl SharedAcceptedObjects {
SharedAcceptedObjects::Remove(r) => r.remove_props.get_actor_xsd_any_uri(), SharedAcceptedObjects::Remove(r) => r.remove_props.get_actor_xsd_any_uri(),
SharedAcceptedObjects::Announce(a) => a.announce_props.get_actor_xsd_any_uri(), SharedAcceptedObjects::Announce(a) => a.announce_props.get_actor_xsd_any_uri(),
}; };
uri.unwrap().clone().to_string() uri.unwrap().clone()
} }
fn cc(&self) -> String { fn cc(&self) -> String {
// TODO: there is probably an easier way to do this // TODO: there is probably an easier way to do this
@ -133,7 +124,7 @@ pub async fn shared_inbox(
let to = cc.replace("/followers", ""); let to = cc.replace("/followers", "");
// TODO: this is ugly // TODO: this is ugly
match get_or_fetch_and_upsert_remote_user(&sender.to_string(), &client, pool).await { match get_or_fetch_and_upsert_remote_user(sender, &client, pool).await {
Ok(u) => verify(&request, &u)?, Ok(u) => verify(&request, &u)?,
Err(_) => { Err(_) => {
let c = get_or_fetch_and_upsert_remote_community(&sender.to_string(), &client, pool).await?; let c = get_or_fetch_and_upsert_remote_community(&sender.to_string(), &client, pool).await?;
@ -219,7 +210,7 @@ pub async fn shared_inbox(
async fn announce_activity_if_valid<A>( async fn announce_activity_if_valid<A>(
activity: A, activity: A,
community_uri: &str, community_uri: &str,
sender: &str, sender: &XsdAnyUri,
client: &Client, client: &Client,
pool: &DbPool, pool: &DbPool,
) -> Result<HttpResponse, LemmyError> ) -> Result<HttpResponse, LemmyError>
@ -344,11 +335,7 @@ async fn receive_create_post(
.to_owned() .to_owned()
.into_concrete::<PageExt>()?; .into_concrete::<PageExt>()?;
let user_uri = create let user_uri = create.create_props.get_actor_xsd_any_uri().unwrap();
.create_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?; let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -390,11 +377,7 @@ async fn receive_create_comment(
.to_owned() .to_owned()
.into_concrete::<Note>()?; .into_concrete::<Note>()?;
let user_uri = create let user_uri = create.create_props.get_actor_xsd_any_uri().unwrap();
.create_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?; let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -449,11 +432,7 @@ async fn receive_update_post(
.to_owned() .to_owned()
.into_concrete::<PageExt>()?; .into_concrete::<PageExt>()?;
let user_uri = update let user_uri = update.update_props.get_actor_xsd_any_uri().unwrap();
.update_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?; let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -495,7 +474,7 @@ async fn receive_like_post(
.to_owned() .to_owned()
.into_concrete::<PageExt>()?; .into_concrete::<PageExt>()?;
let user_uri = like.like_props.get_actor_xsd_any_uri().unwrap().to_string(); let user_uri = like.like_props.get_actor_xsd_any_uri().unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?; let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -546,11 +525,7 @@ async fn receive_dislike_post(
.to_owned() .to_owned()
.into_concrete::<PageExt>()?; .into_concrete::<PageExt>()?;
let user_uri = dislike let user_uri = dislike.dislike_props.get_actor_xsd_any_uri().unwrap();
.dislike_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?; let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -601,11 +576,7 @@ async fn receive_update_comment(
.to_owned() .to_owned()
.into_concrete::<Note>()?; .into_concrete::<Note>()?;
let user_uri = update let user_uri = update.update_props.get_actor_xsd_any_uri().unwrap();
.update_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?; let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -660,7 +631,7 @@ async fn receive_like_comment(
.to_owned() .to_owned()
.into_concrete::<Note>()?; .into_concrete::<Note>()?;
let user_uri = like.like_props.get_actor_xsd_any_uri().unwrap().to_string(); let user_uri = like.like_props.get_actor_xsd_any_uri().unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?; let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -718,11 +689,7 @@ async fn receive_dislike_comment(
.to_owned() .to_owned()
.into_concrete::<Note>()?; .into_concrete::<Note>()?;
let user_uri = dislike let user_uri = dislike.dislike_props.get_actor_xsd_any_uri().unwrap();
.dislike_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?; let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -772,11 +739,7 @@ async fn receive_delete_community(
pool: &DbPool, pool: &DbPool,
chat_server: ChatServerParam, chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> { ) -> Result<HttpResponse, LemmyError> {
let user_uri = delete let user_uri = delete.delete_props.get_actor_xsd_any_uri().unwrap();
.delete_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let group = delete let group = delete
.delete_props .delete_props
@ -849,11 +812,7 @@ async fn receive_remove_community(
pool: &DbPool, pool: &DbPool,
chat_server: ChatServerParam, chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> { ) -> Result<HttpResponse, LemmyError> {
let mod_uri = remove let mod_uri = remove.remove_props.get_actor_xsd_any_uri().unwrap();
.remove_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let group = remove let group = remove
.remove_props .remove_props
@ -926,11 +885,7 @@ async fn receive_delete_post(
pool: &DbPool, pool: &DbPool,
chat_server: ChatServerParam, chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> { ) -> Result<HttpResponse, LemmyError> {
let user_uri = delete let user_uri = delete.delete_props.get_actor_xsd_any_uri().unwrap();
.delete_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let page = delete let page = delete
.delete_props .delete_props
@ -992,11 +947,7 @@ async fn receive_remove_post(
pool: &DbPool, pool: &DbPool,
chat_server: ChatServerParam, chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> { ) -> Result<HttpResponse, LemmyError> {
let mod_uri = remove let mod_uri = remove.remove_props.get_actor_xsd_any_uri().unwrap();
.remove_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let page = remove let page = remove
.remove_props .remove_props
@ -1058,11 +1009,7 @@ async fn receive_delete_comment(
pool: &DbPool, pool: &DbPool,
chat_server: ChatServerParam, chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> { ) -> Result<HttpResponse, LemmyError> {
let user_uri = delete let user_uri = delete.delete_props.get_actor_xsd_any_uri().unwrap();
.delete_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let note = delete let note = delete
.delete_props .delete_props
@ -1126,11 +1073,7 @@ async fn receive_remove_comment(
pool: &DbPool, pool: &DbPool,
chat_server: ChatServerParam, chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> { ) -> Result<HttpResponse, LemmyError> {
let mod_uri = remove let mod_uri = remove.remove_props.get_actor_xsd_any_uri().unwrap();
.remove_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let note = remove let note = remove
.remove_props .remove_props
@ -1254,11 +1197,7 @@ async fn receive_undo_delete_comment(
pool: &DbPool, pool: &DbPool,
chat_server: ChatServerParam, chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> { ) -> Result<HttpResponse, LemmyError> {
let user_uri = delete let user_uri = delete.delete_props.get_actor_xsd_any_uri().unwrap();
.delete_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let note = delete let note = delete
.delete_props .delete_props
@ -1322,11 +1261,7 @@ async fn receive_undo_remove_comment(
pool: &DbPool, pool: &DbPool,
chat_server: ChatServerParam, chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> { ) -> Result<HttpResponse, LemmyError> {
let mod_uri = remove let mod_uri = remove.remove_props.get_actor_xsd_any_uri().unwrap();
.remove_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let note = remove let note = remove
.remove_props .remove_props
@ -1390,11 +1325,7 @@ async fn receive_undo_delete_post(
pool: &DbPool, pool: &DbPool,
chat_server: ChatServerParam, chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> { ) -> Result<HttpResponse, LemmyError> {
let user_uri = delete let user_uri = delete.delete_props.get_actor_xsd_any_uri().unwrap();
.delete_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let page = delete let page = delete
.delete_props .delete_props
@ -1456,11 +1387,7 @@ async fn receive_undo_remove_post(
pool: &DbPool, pool: &DbPool,
chat_server: ChatServerParam, chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> { ) -> Result<HttpResponse, LemmyError> {
let mod_uri = remove let mod_uri = remove.remove_props.get_actor_xsd_any_uri().unwrap();
.remove_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let page = remove let page = remove
.remove_props .remove_props
@ -1522,11 +1449,7 @@ async fn receive_undo_delete_community(
pool: &DbPool, pool: &DbPool,
chat_server: ChatServerParam, chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> { ) -> Result<HttpResponse, LemmyError> {
let user_uri = delete let user_uri = delete.delete_props.get_actor_xsd_any_uri().unwrap();
.delete_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let group = delete let group = delete
.delete_props .delete_props
@ -1599,11 +1522,7 @@ async fn receive_undo_remove_community(
pool: &DbPool, pool: &DbPool,
chat_server: ChatServerParam, chat_server: ChatServerParam,
) -> Result<HttpResponse, LemmyError> { ) -> Result<HttpResponse, LemmyError> {
let mod_uri = remove let mod_uri = remove.remove_props.get_actor_xsd_any_uri().unwrap();
.remove_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let group = remove let group = remove
.remove_props .remove_props
@ -1713,7 +1632,7 @@ async fn receive_undo_like_comment(
.to_owned() .to_owned()
.into_concrete::<Note>()?; .into_concrete::<Note>()?;
let user_uri = like.like_props.get_actor_xsd_any_uri().unwrap().to_string(); let user_uri = like.like_props.get_actor_xsd_any_uri().unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?; let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
@ -1767,7 +1686,7 @@ async fn receive_undo_like_post(
.to_owned() .to_owned()
.into_concrete::<PageExt>()?; .into_concrete::<PageExt>()?;
let user_uri = like.like_props.get_actor_xsd_any_uri().unwrap().to_string(); let user_uri = like.like_props.get_actor_xsd_any_uri().unwrap();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?; let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;

View file

@ -1,18 +1,12 @@
use crate::{ use crate::{
api::claims::Claims, api::claims::Claims,
apub::{ apub::{
activities::send_activity, activities::send_activity, create_apub_response, insert_activity, ActorType, FromApub,
create_apub_response, PersonExt, ToApub,
insert_activity,
ActorType,
FromApub,
PersonExt,
ToApub,
}, },
blocking, blocking,
routes::DbPoolParam, routes::DbPoolParam,
DbPool, DbPool, LemmyError,
LemmyError,
}; };
use activitystreams_ext::Ext1; use activitystreams_ext::Ext1;
use activitystreams_new::{ use activitystreams_new::{

View file

@ -3,14 +3,12 @@ use crate::{
apub::{ apub::{
extensions::signatures::verify, extensions::signatures::verify,
fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user}, fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user},
insert_activity, insert_activity, FromApub,
FromApub,
}, },
blocking, blocking,
routes::{ChatServerParam, DbPoolParam}, routes::{ChatServerParam, DbPoolParam},
websocket::{server::SendUserRoomMessage, UserOperation}, websocket::{server::SendUserRoomMessage, UserOperation},
DbPool, DbPool, LemmyError,
LemmyError,
}; };
use activitystreams::{ use activitystreams::{
activity::{Accept, Create, Delete, Undo, Update}, activity::{Accept, Create, Delete, Undo, Update},
@ -23,8 +21,7 @@ use lemmy_db::{
private_message::{PrivateMessage, PrivateMessageForm}, private_message::{PrivateMessage, PrivateMessageForm},
private_message_view::PrivateMessageView, private_message_view::PrivateMessageView,
user::User_, user::User_,
Crud, Crud, Followable,
Followable,
}; };
use log::debug; use log::debug;
use serde::Deserialize; use serde::Deserialize;
@ -124,11 +121,7 @@ async fn receive_create_private_message(
.to_owned() .to_owned()
.into_concrete::<Note>()?; .into_concrete::<Note>()?;
let user_uri = create let user_uri = create.create_props.get_actor_xsd_any_uri().unwrap();
.create_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?; let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
verify(request, &user)?; verify(request, &user)?;
@ -176,11 +169,7 @@ async fn receive_update_private_message(
.to_owned() .to_owned()
.into_concrete::<Note>()?; .into_concrete::<Note>()?;
let user_uri = update let user_uri = update.update_props.get_actor_xsd_any_uri().unwrap();
.update_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?; let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
verify(request, &user)?; verify(request, &user)?;
@ -236,11 +225,7 @@ async fn receive_delete_private_message(
.to_owned() .to_owned()
.into_concrete::<Note>()?; .into_concrete::<Note>()?;
let user_uri = delete let user_uri = delete.delete_props.get_actor_xsd_any_uri().unwrap();
.delete_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?; let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
verify(request, &user)?; verify(request, &user)?;
@ -316,11 +301,7 @@ async fn receive_undo_delete_private_message(
.to_owned() .to_owned()
.into_concrete::<Note>()?; .into_concrete::<Note>()?;
let user_uri = delete let user_uri = delete.delete_props.get_actor_xsd_any_uri().unwrap();
.delete_props
.get_actor_xsd_any_uri()
.unwrap()
.to_string();
let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?; let user = get_or_fetch_and_upsert_remote_user(&user_uri, client, pool).await?;
verify(request, &user)?; verify(request, &user)?;