Refactor activitypub::actor module
This commit is contained in:
parent
8da194e8a2
commit
a5e3bef70c
6 changed files with 25 additions and 22 deletions
|
@ -1,7 +1,6 @@
|
|||
use serde::{Deserialize, Serialize};
|
||||
use serde_json::{json, Value};
|
||||
|
||||
use crate::config::Config;
|
||||
use crate::errors::ConversionError;
|
||||
use crate::models::profiles::types::{DbActorProfile, ExtraField};
|
||||
use crate::models::users::types::User;
|
||||
|
@ -103,7 +102,7 @@ impl Actor {
|
|||
}
|
||||
|
||||
impl DbActorProfile {
|
||||
pub fn actor(&self) -> Result<Option<Actor>, ConversionError> {
|
||||
pub fn remote_actor(&self) -> Result<Option<Actor>, ConversionError> {
|
||||
let actor = match self.actor_json {
|
||||
Some(ref value) => {
|
||||
let actor: Actor = serde_json::from_value(value.clone())
|
||||
|
@ -116,16 +115,18 @@ impl DbActorProfile {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn get_actor_object(
|
||||
config: &Config,
|
||||
pub type ActorKeyError = rsa::pkcs8::Error;
|
||||
|
||||
pub fn get_local_actor(
|
||||
user: &User,
|
||||
) -> Result<Actor, rsa::pkcs8::Error> {
|
||||
instance_url: &str,
|
||||
) -> Result<Actor, ActorKeyError> {
|
||||
let username = &user.profile.username;
|
||||
let id = get_actor_url(&config.instance_url(), &username);
|
||||
let inbox = get_inbox_url(&config.instance_url(), &username);
|
||||
let outbox = get_outbox_url(&config.instance_url(), &username);
|
||||
let followers = get_followers_url(&config.instance_url(), &username);
|
||||
let following = get_following_url(&config.instance_url(), &username);
|
||||
let id = get_actor_url(instance_url, username);
|
||||
let inbox = get_inbox_url(instance_url, username);
|
||||
let outbox = get_outbox_url(instance_url, username);
|
||||
let followers = get_followers_url(instance_url, username);
|
||||
let following = get_following_url(instance_url, username);
|
||||
|
||||
let private_key = deserialize_private_key(&user.private_key)?;
|
||||
let public_key_pem = get_public_key_pem(&private_key)?;
|
||||
|
@ -141,7 +142,7 @@ pub fn get_actor_object(
|
|||
Some(file_name) => {
|
||||
let image = Image {
|
||||
object_type: IMAGE.to_string(),
|
||||
url: get_file_url(&config.instance_url(), file_name),
|
||||
url: get_file_url(instance_url, file_name),
|
||||
};
|
||||
Some(image)
|
||||
},
|
||||
|
@ -151,7 +152,7 @@ pub fn get_actor_object(
|
|||
Some(file_name) => {
|
||||
let image = Image {
|
||||
object_type: IMAGE.to_string(),
|
||||
url: get_file_url(&config.instance_url(), file_name),
|
||||
url: get_file_url(instance_url, file_name),
|
||||
};
|
||||
Some(image)
|
||||
},
|
||||
|
|
|
@ -289,7 +289,7 @@ pub async fn receive_activity(
|
|||
&activity.actor,
|
||||
&config.media_dir(),
|
||||
).await?;
|
||||
let source_actor = source_profile.actor().ok().flatten()
|
||||
let source_actor = source_profile.remote_actor().ok().flatten()
|
||||
.ok_or(HttpError::InternalError)?;
|
||||
let target_actor_id = match activity.object.as_str() {
|
||||
Some(object_id) => object_id.to_owned(),
|
||||
|
|
|
@ -12,7 +12,7 @@ use crate::http_signatures::verify::verify_http_signature;
|
|||
use crate::models::posts::queries::get_thread;
|
||||
use crate::models::users::queries::get_user_by_name;
|
||||
use super::activity::{create_note, OrderedCollection};
|
||||
use super::actor::get_actor_object;
|
||||
use super::actor::get_local_actor;
|
||||
use super::constants::ACTIVITY_CONTENT_TYPE;
|
||||
use super::receiver::receive_activity;
|
||||
|
||||
|
@ -48,7 +48,7 @@ async fn get_actor(
|
|||
) -> Result<HttpResponse, HttpError> {
|
||||
let db_client = &**get_database_client(&db_pool).await?;
|
||||
let user = get_user_by_name(db_client, &username).await?;
|
||||
let actor = get_actor_object(&config, &user)
|
||||
let actor = get_local_actor(&user, &config.instance_url())
|
||||
.map_err(|_| HttpError::InternalError)?;
|
||||
let response = HttpResponse::Ok()
|
||||
.content_type(ACTIVITY_CONTENT_TYPE)
|
||||
|
|
|
@ -140,7 +140,7 @@ pub async fn verify_http_signature(
|
|||
},
|
||||
},
|
||||
};
|
||||
let actor = actor_profile.actor().ok().flatten()
|
||||
let actor = actor_profile.remote_actor().ok().flatten()
|
||||
.ok_or(VerificationError::ActorError)?;
|
||||
|
||||
let public_key = deserialize_public_key(&actor.public_key.public_key_pem)?;
|
||||
|
|
|
@ -171,7 +171,8 @@ async fn follow(
|
|||
let db_client = &mut **get_database_client(&db_pool).await?;
|
||||
let current_user = get_current_user(db_client, auth.token()).await?;
|
||||
let profile = get_profile_by_id(db_client, &account_id).await?;
|
||||
let maybe_remote_actor = profile.actor().map_err(|_| HttpError::InternalError)?;
|
||||
let maybe_remote_actor = profile.remote_actor()
|
||||
.map_err(|_| HttpError::InternalError)?;
|
||||
let relationship = if let Some(remote_actor) = maybe_remote_actor {
|
||||
// Remote follow
|
||||
let request = follows::create_follow_request(db_client, ¤t_user.id, &profile.id).await?;
|
||||
|
@ -199,7 +200,8 @@ async fn unfollow(
|
|||
let db_client = &mut **get_database_client(&db_pool).await?;
|
||||
let current_user = get_current_user(db_client, auth.token()).await?;
|
||||
let target_profile = get_profile_by_id(db_client, &account_id).await?;
|
||||
let maybe_remote_actor = target_profile.actor().map_err(|_| HttpError::InternalError)?;
|
||||
let maybe_remote_actor = target_profile.remote_actor()
|
||||
.map_err(|_| HttpError::InternalError)?;
|
||||
let relationship = if let Some(remote_actor) = maybe_remote_actor {
|
||||
// Remote follow
|
||||
let follow_request = follows::get_follow_request_by_path(
|
||||
|
|
|
@ -82,21 +82,21 @@ async fn create_status(
|
|||
let followers = get_followers(db_client, ¤t_user.id).await?;
|
||||
let mut recipients: Vec<Actor> = Vec::new();
|
||||
for follower in followers {
|
||||
let maybe_remote_actor = follower.actor()
|
||||
let maybe_remote_actor = follower.remote_actor()
|
||||
.map_err(|_| HttpError::InternalError)?;
|
||||
if let Some(remote_actor) = maybe_remote_actor {
|
||||
recipients.push(remote_actor);
|
||||
};
|
||||
};
|
||||
if let Some(in_reply_to) = maybe_in_reply_to {
|
||||
let maybe_remote_actor = in_reply_to.author.actor()
|
||||
let maybe_remote_actor = in_reply_to.author.remote_actor()
|
||||
.map_err(|_| HttpError::InternalError)?;
|
||||
if let Some(remote_actor) = maybe_remote_actor {
|
||||
recipients.push(remote_actor);
|
||||
}
|
||||
}
|
||||
for profile in post.mentions.iter() {
|
||||
let maybe_remote_actor = profile.actor()
|
||||
let maybe_remote_actor = profile.remote_actor()
|
||||
.map_err(|_| HttpError::InternalError)?;
|
||||
if let Some(remote_actor) = maybe_remote_actor {
|
||||
recipients.push(remote_actor);
|
||||
|
@ -174,7 +174,7 @@ async fn favourite(
|
|||
get_actions_for_post(db_client, ¤t_user.id, &mut post).await?;
|
||||
|
||||
if reaction_created {
|
||||
let maybe_remote_actor = post.author.actor()
|
||||
let maybe_remote_actor = post.author.remote_actor()
|
||||
.map_err(|_| HttpError::InternalError)?;
|
||||
if let Some(remote_actor) = maybe_remote_actor {
|
||||
// Federate
|
||||
|
|
Loading…
Reference in a new issue