Add CLI command for re-fetching actors

This commit is contained in:
silverpill 2022-05-22 00:07:01 +00:00
parent 28ccd19c34
commit f2e61dd9a3
4 changed files with 26 additions and 2 deletions

View file

@ -142,7 +142,7 @@ pub async fn fetch_profile(
fetch_profile_by_actor_id(instance, actor_url, media_dir).await fetch_profile_by_actor_id(instance, actor_url, media_dir).await
} }
async fn fetch_actor( pub async fn fetch_actor(
instance: &Instance, instance: &Instance,
actor_url: &str, actor_url: &str,
) -> Result<Actor, FetchError> { ) -> Result<Actor, FetchError> {

View file

@ -25,6 +25,14 @@ pub async fn handle_update_person(
if actor.id != activity.actor { if actor.id != activity.actor {
return Err(ValidationError("actor ID mismatch").into()); return Err(ValidationError("actor ID mismatch").into());
}; };
update_actor(db_client, media_dir, actor).await
}
pub async fn update_actor(
db_client: &impl GenericClient,
media_dir: &Path,
actor: Actor,
) -> Result<(), ImportError> {
let profile = get_profile_by_actor_id(db_client, &actor.id).await?; let profile = get_profile_by_actor_id(db_client, &actor.id).await?;
let (avatar, banner) = fetch_avatar_and_banner(&actor, media_dir).await let (avatar, banner) = fetch_avatar_and_banner(&actor, media_dir).await
.map_err(|_| ValidationError("failed to fetch image"))?; .map_err(|_| ValidationError("failed to fetch image"))?;

View file

@ -4,7 +4,7 @@ mod collections;
pub mod constants; pub mod constants;
pub mod deliverer; pub mod deliverer;
pub mod fetcher; pub mod fetcher;
mod inbox; pub mod inbox;
mod receiver; mod receiver;
pub mod views; pub mod views;
mod vocabulary; mod vocabulary;

View file

@ -2,6 +2,8 @@ use chrono::{Duration, Utc};
use clap::Parser; use clap::Parser;
use uuid::Uuid; use uuid::Uuid;
use mitra::activitypub::fetcher::fetchers::fetch_actor;
use mitra::activitypub::inbox::update_person::update_actor;
use mitra::config; use mitra::config;
use mitra::database::create_database_client; use mitra::database::create_database_client;
use mitra::database::migrate::apply_migrations; use mitra::database::migrate::apply_migrations;
@ -31,6 +33,7 @@ enum SubCommand {
GenerateInviteCode(GenerateInviteCode), GenerateInviteCode(GenerateInviteCode),
ListInviteCodes(ListInviteCodes), ListInviteCodes(ListInviteCodes),
RefetchActor(RefetchActor),
DeleteProfile(DeleteProfile), DeleteProfile(DeleteProfile),
DeletePost(DeletePost), DeletePost(DeletePost),
DeleteExtraneousPosts(DeleteExtraneousPosts), DeleteExtraneousPosts(DeleteExtraneousPosts),
@ -61,6 +64,13 @@ struct GenerateInviteCode;
#[derive(Parser)] #[derive(Parser)]
struct ListInviteCodes; struct ListInviteCodes;
/// Re-fetch actor profile by actor ID
#[derive(Parser)]
struct RefetchActor {
#[clap(short)]
id: String,
}
/// Delete profile /// Delete profile
#[derive(Parser)] #[derive(Parser)]
struct DeleteProfile { struct DeleteProfile {
@ -130,6 +140,12 @@ async fn main() {
println!("{}", code); println!("{}", code);
}; };
}, },
SubCommand::RefetchActor(subopts) => {
let actor_id = subopts.id;
let actor = fetch_actor(&config.instance(), &actor_id).await.unwrap();
update_actor(db_client, &config.media_dir(), actor).await.unwrap();
println!("profile updated");
},
SubCommand::DeleteProfile(subopts) => { SubCommand::DeleteProfile(subopts) => {
let deletion_queue = delete_profile(db_client, &subopts.id).await.unwrap(); let deletion_queue = delete_profile(db_client, &subopts.id).await.unwrap();
deletion_queue.process(&config).await; deletion_queue.process(&config).await;