mirror of
https://git.asonix.dog/asonix/relay.git
synced 2024-12-29 22:00:31 +00:00
Generic 'prepare_activity'
This commit is contained in:
parent
e8ed464e62
commit
cb4d99cdc5
1 changed files with 60 additions and 44 deletions
104
src/inbox.rs
104
src/inbox.rs
|
@ -9,12 +9,14 @@ use crate::{
|
||||||
use activitystreams::{
|
use activitystreams::{
|
||||||
activity::apub::{Accept, Announce, Follow, Undo},
|
activity::apub::{Accept, Announce, Follow, Undo},
|
||||||
context,
|
context,
|
||||||
|
object::properties::ObjectProperties,
|
||||||
primitives::XsdAnyUri,
|
primitives::XsdAnyUri,
|
||||||
};
|
};
|
||||||
use actix_web::{web, HttpResponse};
|
use actix_web::{web, HttpResponse};
|
||||||
use futures::join;
|
use futures::join;
|
||||||
use http_signature_normalization_actix::middleware::SignatureVerified;
|
use http_signature_normalization_actix::middleware::SignatureVerified;
|
||||||
use log::error;
|
use log::error;
|
||||||
|
use std::convert::TryInto;
|
||||||
|
|
||||||
fn public() -> XsdAnyUri {
|
fn public() -> XsdAnyUri {
|
||||||
"https://www.w3.org/ns/activitystreams#Public"
|
"https://www.w3.org/ns/activitystreams#Public"
|
||||||
|
@ -196,25 +198,24 @@ fn generate_undo_follow(
|
||||||
my_id: &XsdAnyUri,
|
my_id: &XsdAnyUri,
|
||||||
) -> Result<Undo, MyError> {
|
) -> Result<Undo, MyError> {
|
||||||
let mut undo = Undo::default();
|
let mut undo = Undo::default();
|
||||||
let mut follow = Follow::default();
|
|
||||||
|
|
||||||
follow
|
|
||||||
.object_props
|
|
||||||
.set_id(state.generate_url(UrlKind::Activity))?;
|
|
||||||
follow
|
|
||||||
.follow_props
|
|
||||||
.set_actor_xsd_any_uri(actor_id.clone())?
|
|
||||||
.set_object_xsd_any_uri(actor_id.clone())?;
|
|
||||||
|
|
||||||
undo.object_props
|
|
||||||
.set_id(state.generate_url(UrlKind::Activity))?
|
|
||||||
.set_many_to_xsd_any_uris(vec![actor_id.clone()])?
|
|
||||||
.set_context_xsd_any_uri(context())?;
|
|
||||||
undo.undo_props
|
undo.undo_props
|
||||||
.set_object_object_box(follow)?
|
.set_actor_xsd_any_uri(my_id.clone())?
|
||||||
.set_actor_xsd_any_uri(my_id.clone())?;
|
.set_object_object_box({
|
||||||
|
let mut follow = Follow::default();
|
||||||
|
|
||||||
Ok(undo)
|
follow
|
||||||
|
.object_props
|
||||||
|
.set_id(state.generate_url(UrlKind::Activity))?;
|
||||||
|
follow
|
||||||
|
.follow_props
|
||||||
|
.set_actor_xsd_any_uri(actor_id.clone())?
|
||||||
|
.set_object_xsd_any_uri(actor_id.clone())?;
|
||||||
|
|
||||||
|
follow
|
||||||
|
})?;
|
||||||
|
|
||||||
|
prepare_activity(undo, state.generate_url(UrlKind::Actor), actor_id.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate a type that says "Look at this object"
|
// Generate a type that says "Look at this object"
|
||||||
|
@ -225,18 +226,16 @@ fn generate_announce(
|
||||||
) -> Result<Announce, MyError> {
|
) -> Result<Announce, MyError> {
|
||||||
let mut announce = Announce::default();
|
let mut announce = Announce::default();
|
||||||
|
|
||||||
announce
|
|
||||||
.object_props
|
|
||||||
.set_context_xsd_any_uri(context())?
|
|
||||||
.set_many_to_xsd_any_uris(vec![state.generate_url(UrlKind::Followers)])?
|
|
||||||
.set_id(activity_id.clone())?;
|
|
||||||
|
|
||||||
announce
|
announce
|
||||||
.announce_props
|
.announce_props
|
||||||
.set_object_xsd_any_uri(object_id.clone())?
|
.set_object_xsd_any_uri(object_id.clone())?
|
||||||
.set_actor_xsd_any_uri(state.generate_url(UrlKind::Actor))?;
|
.set_actor_xsd_any_uri(state.generate_url(UrlKind::Actor))?;
|
||||||
|
|
||||||
Ok(announce)
|
prepare_activity(
|
||||||
|
announce,
|
||||||
|
activity_id.clone(),
|
||||||
|
state.generate_url(UrlKind::Followers),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate a type that says "I want to follow you"
|
// Generate a type that says "I want to follow you"
|
||||||
|
@ -247,18 +246,16 @@ fn generate_follow(
|
||||||
) -> Result<Follow, MyError> {
|
) -> Result<Follow, MyError> {
|
||||||
let mut follow = Follow::default();
|
let mut follow = Follow::default();
|
||||||
|
|
||||||
follow
|
|
||||||
.object_props
|
|
||||||
.set_id(state.generate_url(UrlKind::Activity))?
|
|
||||||
.set_many_to_xsd_any_uris(vec![actor_id.clone()])?
|
|
||||||
.set_context_xsd_any_uri(context())?;
|
|
||||||
|
|
||||||
follow
|
follow
|
||||||
.follow_props
|
.follow_props
|
||||||
.set_object_xsd_any_uri(actor_id.clone())?
|
.set_object_xsd_any_uri(actor_id.clone())?
|
||||||
.set_actor_xsd_any_uri(my_id.clone())?;
|
.set_actor_xsd_any_uri(my_id.clone())?;
|
||||||
|
|
||||||
Ok(follow)
|
prepare_activity(
|
||||||
|
follow,
|
||||||
|
state.generate_url(UrlKind::Activity),
|
||||||
|
actor_id.clone(),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate a type that says "I accept your follow request"
|
// Generate a type that says "I accept your follow request"
|
||||||
|
@ -269,24 +266,43 @@ fn generate_accept_follow(
|
||||||
my_id: &XsdAnyUri,
|
my_id: &XsdAnyUri,
|
||||||
) -> Result<Accept, MyError> {
|
) -> Result<Accept, MyError> {
|
||||||
let mut accept = Accept::default();
|
let mut accept = Accept::default();
|
||||||
let mut follow = Follow::default();
|
|
||||||
|
|
||||||
follow.object_props.set_id(input_id.clone())?;
|
|
||||||
follow
|
|
||||||
.follow_props
|
|
||||||
.set_object_xsd_any_uri(my_id.clone())?
|
|
||||||
.set_actor_xsd_any_uri(actor_id.clone())?;
|
|
||||||
|
|
||||||
accept
|
|
||||||
.object_props
|
|
||||||
.set_id(state.generate_url(UrlKind::Activity))?
|
|
||||||
.set_many_to_xsd_any_uris(vec![actor_id.clone()])?;
|
|
||||||
accept
|
accept
|
||||||
.accept_props
|
.accept_props
|
||||||
.set_object_object_box(follow)?
|
.set_actor_xsd_any_uri(my_id.clone())?
|
||||||
.set_actor_xsd_any_uri(my_id.clone())?;
|
.set_object_object_box({
|
||||||
|
let mut follow = Follow::default();
|
||||||
|
|
||||||
Ok(accept)
|
follow.object_props.set_id(input_id.clone())?;
|
||||||
|
follow
|
||||||
|
.follow_props
|
||||||
|
.set_object_xsd_any_uri(my_id.clone())?
|
||||||
|
.set_actor_xsd_any_uri(actor_id.clone())?;
|
||||||
|
|
||||||
|
follow
|
||||||
|
})?;
|
||||||
|
|
||||||
|
prepare_activity(
|
||||||
|
accept,
|
||||||
|
state.generate_url(UrlKind::Activity),
|
||||||
|
actor_id.clone(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn prepare_activity<T, U, V>(
|
||||||
|
mut t: T,
|
||||||
|
id: impl TryInto<XsdAnyUri, Error = U>,
|
||||||
|
to: impl TryInto<XsdAnyUri, Error = V>,
|
||||||
|
) -> Result<T, MyError>
|
||||||
|
where
|
||||||
|
T: AsMut<ObjectProperties>,
|
||||||
|
MyError: From<U> + From<V>,
|
||||||
|
{
|
||||||
|
t.as_mut()
|
||||||
|
.set_id(id.try_into()?)?
|
||||||
|
.set_many_to_xsd_any_uris(vec![to.try_into()?])?
|
||||||
|
.set_context_xsd_any_uri(context())?;
|
||||||
|
Ok(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn get_inboxes(
|
async fn get_inboxes(
|
||||||
|
|
Loading…
Reference in a new issue