forked from alemi/upub
feat: added command to follow relays
This commit is contained in:
parent
460f801136
commit
32707bda0c
1 changed files with 36 additions and 0 deletions
36
src/main.rs
36
src/main.rs
|
@ -14,6 +14,7 @@ use clap::{Parser, Subcommand};
|
||||||
use sea_orm::{ConnectOptions, Database, EntityTrait, IntoActiveModel};
|
use sea_orm::{ConnectOptions, Database, EntityTrait, IntoActiveModel};
|
||||||
|
|
||||||
pub use errors::UpubResult as Result;
|
pub use errors::UpubResult as Result;
|
||||||
|
use server::fetcher::Fetcher;
|
||||||
use tower_http::{cors::CorsLayer, trace::TraceLayer};
|
use tower_http::{cors::CorsLayer, trace::TraceLayer};
|
||||||
|
|
||||||
use crate::server::fetcher::Fetchable;
|
use crate::server::fetcher::Fetchable;
|
||||||
|
@ -65,6 +66,12 @@ enum CliCommand {
|
||||||
/// store fetched object in local db
|
/// store fetched object in local db
|
||||||
save: bool,
|
save: bool,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/// follow a remote relay
|
||||||
|
Relay {
|
||||||
|
/// actor url, same as with pleroma
|
||||||
|
actor: String,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
|
@ -98,6 +105,35 @@ async fn main() {
|
||||||
CliCommand::Fetch { uri, save } => fetch(db, args.domain, uri, save)
|
CliCommand::Fetch { uri, save } => fetch(db, args.domain, uri, save)
|
||||||
.await.expect("error fetching object"),
|
.await.expect("error fetching object"),
|
||||||
|
|
||||||
|
CliCommand::Relay { actor } => {
|
||||||
|
let ctx = server::Context::new(db, args.domain)
|
||||||
|
.await.expect("failed creating server context");
|
||||||
|
|
||||||
|
let relay = ctx.fetch_user(&actor)
|
||||||
|
.await.expect("could not fetch relay actor");
|
||||||
|
let inbox = relay.inbox.expect("relay has no inbox to deliver to");
|
||||||
|
|
||||||
|
let aid = ctx.aid(uuid::Uuid::new_v4().to_string());
|
||||||
|
|
||||||
|
let activity_model = model::activity::Model {
|
||||||
|
id: aid.clone(),
|
||||||
|
activity_type: apb::ActivityType::Follow,
|
||||||
|
actor: ctx.base(),
|
||||||
|
object: Some(actor),
|
||||||
|
target: None,
|
||||||
|
published: chrono::Utc::now(),
|
||||||
|
cc: model::Audience::default(),
|
||||||
|
bcc: model::Audience::default(),
|
||||||
|
to: model::Audience::default(),
|
||||||
|
bto: model::Audience::default(),
|
||||||
|
};
|
||||||
|
model::activity::Entity::insert(activity_model.into_active_model())
|
||||||
|
.exec(ctx.db()).await.expect("could not insert activity in db");
|
||||||
|
|
||||||
|
ctx.dispatch(&ctx.base(), vec![inbox], &aid, None).await
|
||||||
|
.expect("could not dispatch follow");
|
||||||
|
},
|
||||||
|
|
||||||
CliCommand::Serve => {
|
CliCommand::Serve => {
|
||||||
let ctx = server::Context::new(db, args.domain)
|
let ctx = server::Context::new(db, args.domain)
|
||||||
.await.expect("failed creating server context");
|
.await.expect("failed creating server context");
|
||||||
|
|
Loading…
Reference in a new issue