From cb8e2e929400e4e24d9e949e866d37aa8e41a2c1 Mon Sep 17 00:00:00 2001 From: Kitaiti Makoto Date: Sun, 13 Feb 2022 17:41:52 +0900 Subject: [PATCH] Implement User::to_activity() --- plume-models/src/users.rs | 52 +++++++++++++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/plume-models/src/users.rs b/plume-models/src/users.rs index c626a45d..0d5ef10d 100644 --- a/plume-models/src/users.rs +++ b/plume-models/src/users.rs @@ -12,9 +12,13 @@ use activitypub::{ Activity, CustomObject, Endpoint, }; use activitystreams::{ - activity::Delete as Delete07, actor::AsApActor, - collection::OrderedCollection as OrderedCollection07, iri_string::types::IriString, - object::AsObject as _, prelude::*, + activity::Delete as Delete07, + actor::AsApActor, + actor::{ApActor as ApActor07, Endpoints as Endpoints07, Person as Person07}, + collection::OrderedCollection as OrderedCollection07, + iri_string::types::IriString, + object::{AsObject as _, Image as Image07}, + prelude::*, }; use chrono::{NaiveDateTime, Utc}; use diesel::{self, BelongingToDsl, ExpressionMethods, OptionalExtension, QueryDsl, RunQueryDsl}; @@ -30,8 +34,8 @@ use plume_common::{ inbox::{AsActor, AsObject, AsObject07, FromId, FromId07}, request::get, sign::{gen_keypair, Error as SignError, Result as SignResult, Signer}, - ActivityStream, ApSignature, CustomPerson as CustomPerson07, Id, IntoId, PublicKey, - ToAsString, ToAsUri, PUBLIC_VISIBILITY, + ActivityStream, ApSignature, ApSignature07, CustomPerson as CustomPerson07, Id, IntoId, + PublicKey, PublicKey07, ToAsString, ToAsUri, PUBLIC_VISIBILITY, }, utils, }; @@ -808,6 +812,44 @@ impl User { Ok(CustomPerson::new(actor, ap_signature)) } + pub fn to_activity07(&self, conn: &Connection) -> Result { + let mut actor = ApActor07::new(self.inbox_url.parse()?, Person07::new()); + let ap_url = self.ap_url.parse::()?; + actor.set_id(ap_url.clone()); + actor.set_name(self.display_name.clone()); + actor.set_summary(self.summary_html.get().clone()); + actor.set_url(ap_url.clone()); + actor.set_inbox(self.inbox_url.parse()?); + actor.set_outbox(self.outbox_url.parse()?); + actor.set_preferred_username(self.username.clone()); + actor.set_followers(self.followers_endpoint.parse()?); + + if let Some(shared_inbox_url) = self.shared_inbox_url.clone() { + let endpoints = Endpoints07 { + shared_inbox: Some(shared_inbox_url.parse::()?), + ..Endpoints07::default() + }; + actor.set_endpoints(endpoints); + } + + let pub_key = PublicKey07 { + id: format!("{}#main-key", self.ap_url).parse()?, + owner: ap_url, + public_key_pem: self.public_key.clone(), + }; + let ap_signature = ApSignature07 { + public_key: pub_key, + }; + + if let Some(avatar_id) = self.avatar_id { + let mut avatar = Image07::new(); + avatar.set_url(Media::get(conn, avatar_id)?.url()?.parse::()?); + actor.set_icon(avatar.into_any_base()?); + } + + Ok(CustomPerson07::new(actor, ap_signature)) + } + pub fn delete_activity(&self, conn: &Connection) -> Result { let mut del = Delete::default();