Adding a better switching for activity kinds for the shared inbox.
This commit is contained in:
parent
f090db2def
commit
0ea8f0e254
2 changed files with 67 additions and 90 deletions
|
@ -16,11 +16,7 @@ use activitystreams::{
|
||||||
context,
|
context,
|
||||||
endpoint::EndpointProperties,
|
endpoint::EndpointProperties,
|
||||||
ext::{Ext, Extensible, Extension},
|
ext::{Ext, Extensible, Extension},
|
||||||
object::{
|
object::{properties::ObjectProperties, Note, Page},
|
||||||
kind::{NoteType, PageType},
|
|
||||||
properties::ObjectProperties,
|
|
||||||
Note, Page,
|
|
||||||
},
|
|
||||||
public, BaseBox,
|
public, BaseBox,
|
||||||
};
|
};
|
||||||
use actix_web::body::Body;
|
use actix_web::body::Body;
|
||||||
|
|
|
@ -7,6 +7,15 @@ pub enum SharedAcceptedObjects {
|
||||||
Update(Update),
|
Update(Update),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl SharedAcceptedObjects {
|
||||||
|
fn object(&self) -> Option<&BaseBox> {
|
||||||
|
match self {
|
||||||
|
SharedAcceptedObjects::Create(c) => c.create_props.get_object_base_box(),
|
||||||
|
SharedAcceptedObjects::Update(u) => u.update_props.get_object_base_box(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Handler for all incoming activities to user inboxes.
|
/// Handler for all incoming activities to user inboxes.
|
||||||
pub async fn shared_inbox(
|
pub async fn shared_inbox(
|
||||||
request: HttpRequest,
|
request: HttpRequest,
|
||||||
|
@ -15,59 +24,45 @@ pub async fn shared_inbox(
|
||||||
chat_server: ChatServerParam,
|
chat_server: ChatServerParam,
|
||||||
) -> Result<HttpResponse, Error> {
|
) -> Result<HttpResponse, Error> {
|
||||||
// TODO: would be nice if we could do the signature check here, but we cant access the actor property
|
// TODO: would be nice if we could do the signature check here, but we cant access the actor property
|
||||||
let input = input.into_inner();
|
let activity = input.into_inner();
|
||||||
let conn = &db.get().unwrap();
|
let conn = &db.get().unwrap();
|
||||||
|
|
||||||
let json = serde_json::to_string(&input)?;
|
let json = serde_json::to_string(&activity)?;
|
||||||
debug!("Shared inbox received activity: {:?}", &json);
|
debug!("Shared inbox received activity: {}", json);
|
||||||
|
|
||||||
match input {
|
let object = activity.object().cloned().unwrap();
|
||||||
SharedAcceptedObjects::Create(c) => handle_create(&c, &request, &conn, chat_server),
|
|
||||||
SharedAcceptedObjects::Update(u) => handle_update(&u, &request, &conn, chat_server),
|
match (activity, object.kind()) {
|
||||||
|
(SharedAcceptedObjects::Create(c), Some("Note")) => {
|
||||||
|
receive_create_comment(&c, &request, &conn, chat_server)
|
||||||
|
}
|
||||||
|
(SharedAcceptedObjects::Create(c), Some("Page")) => {
|
||||||
|
receive_create_post(&c, &request, &conn, chat_server)
|
||||||
|
}
|
||||||
|
(SharedAcceptedObjects::Update(u), Some("Note")) => {
|
||||||
|
receive_update_comment(&u, &request, &conn, chat_server)
|
||||||
|
}
|
||||||
|
(SharedAcceptedObjects::Update(u), Some("Page")) => {
|
||||||
|
receive_update_post(&u, &request, &conn, chat_server)
|
||||||
|
}
|
||||||
|
_ => Err(format_err!("Unknown incoming activity type.")),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Handle create activities and insert them in the database.
|
fn receive_create_post(
|
||||||
fn handle_create(
|
|
||||||
create: &Create,
|
create: &Create,
|
||||||
request: &HttpRequest,
|
request: &HttpRequest,
|
||||||
conn: &PgConnection,
|
conn: &PgConnection,
|
||||||
chat_server: ChatServerParam,
|
chat_server: ChatServerParam,
|
||||||
) -> Result<HttpResponse, Error> {
|
) -> Result<HttpResponse, Error> {
|
||||||
let base_box = create.create_props.get_object_base_box().unwrap();
|
let page = create
|
||||||
|
.create_props
|
||||||
|
.get_object_base_box()
|
||||||
|
.to_owned()
|
||||||
|
.unwrap()
|
||||||
|
.to_owned()
|
||||||
|
.to_concrete::<Page>()?;
|
||||||
|
|
||||||
if base_box.is_kind(PageType) {
|
|
||||||
let page = create
|
|
||||||
.create_props
|
|
||||||
.get_object_base_box()
|
|
||||||
.to_owned()
|
|
||||||
.unwrap()
|
|
||||||
.to_owned()
|
|
||||||
.to_concrete::<Page>()?;
|
|
||||||
receive_create_post(&create, &page, &request, &conn, chat_server)?;
|
|
||||||
} else if base_box.is_kind(NoteType) {
|
|
||||||
let note = create
|
|
||||||
.create_props
|
|
||||||
.get_object_base_box()
|
|
||||||
.to_owned()
|
|
||||||
.unwrap()
|
|
||||||
.to_owned()
|
|
||||||
.to_concrete::<Note>()?;
|
|
||||||
receive_create_comment(&create, ¬e, &request, &conn, chat_server)?;
|
|
||||||
} else {
|
|
||||||
return Err(format_err!("Unknown base box type"));
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(HttpResponse::Ok().finish())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn receive_create_post(
|
|
||||||
create: &Create,
|
|
||||||
page: &Page,
|
|
||||||
request: &HttpRequest,
|
|
||||||
conn: &PgConnection,
|
|
||||||
chat_server: ChatServerParam,
|
|
||||||
) -> Result<(), Error> {
|
|
||||||
let user_uri = create
|
let user_uri = create
|
||||||
.create_props
|
.create_props
|
||||||
.get_actor_xsd_any_uri()
|
.get_actor_xsd_any_uri()
|
||||||
|
@ -91,16 +86,23 @@ fn receive_create_post(
|
||||||
my_id: None,
|
my_id: None,
|
||||||
});
|
});
|
||||||
|
|
||||||
Ok(())
|
Ok(HttpResponse::Ok().finish())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn receive_create_comment(
|
fn receive_create_comment(
|
||||||
create: &Create,
|
create: &Create,
|
||||||
note: &Note,
|
|
||||||
request: &HttpRequest,
|
request: &HttpRequest,
|
||||||
conn: &PgConnection,
|
conn: &PgConnection,
|
||||||
chat_server: ChatServerParam,
|
chat_server: ChatServerParam,
|
||||||
) -> Result<(), Error> {
|
) -> Result<HttpResponse, Error> {
|
||||||
|
let note = create
|
||||||
|
.create_props
|
||||||
|
.get_object_base_box()
|
||||||
|
.to_owned()
|
||||||
|
.unwrap()
|
||||||
|
.to_owned()
|
||||||
|
.to_concrete::<Note>()?;
|
||||||
|
|
||||||
let user_uri = create
|
let user_uri = create
|
||||||
.create_props
|
.create_props
|
||||||
.get_actor_xsd_any_uri()
|
.get_actor_xsd_any_uri()
|
||||||
|
@ -129,51 +131,23 @@ fn receive_create_comment(
|
||||||
my_id: None,
|
my_id: None,
|
||||||
});
|
});
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Handle create activities and insert them in the database.
|
|
||||||
fn handle_update(
|
|
||||||
update: &Update,
|
|
||||||
request: &HttpRequest,
|
|
||||||
conn: &PgConnection,
|
|
||||||
chat_server: ChatServerParam,
|
|
||||||
) -> Result<HttpResponse, Error> {
|
|
||||||
let base_box = update.update_props.get_object_base_box().unwrap();
|
|
||||||
|
|
||||||
if base_box.is_kind(PageType) {
|
|
||||||
let page = update
|
|
||||||
.update_props
|
|
||||||
.get_object_base_box()
|
|
||||||
.to_owned()
|
|
||||||
.unwrap()
|
|
||||||
.to_owned()
|
|
||||||
.to_concrete::<Page>()?;
|
|
||||||
|
|
||||||
receive_update_post(&update, &page, &request, &conn, chat_server)?;
|
|
||||||
} else if base_box.is_kind(NoteType) {
|
|
||||||
let note = update
|
|
||||||
.update_props
|
|
||||||
.get_object_base_box()
|
|
||||||
.to_owned()
|
|
||||||
.unwrap()
|
|
||||||
.to_owned()
|
|
||||||
.to_concrete::<Note>()?;
|
|
||||||
receive_update_comment(&update, ¬e, &request, &conn, chat_server)?;
|
|
||||||
} else {
|
|
||||||
return Err(format_err!("Unknown base box type"));
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(HttpResponse::Ok().finish())
|
Ok(HttpResponse::Ok().finish())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn receive_update_post(
|
fn receive_update_post(
|
||||||
update: &Update,
|
update: &Update,
|
||||||
page: &Page,
|
|
||||||
request: &HttpRequest,
|
request: &HttpRequest,
|
||||||
conn: &PgConnection,
|
conn: &PgConnection,
|
||||||
chat_server: ChatServerParam,
|
chat_server: ChatServerParam,
|
||||||
) -> Result<(), Error> {
|
) -> Result<HttpResponse, Error> {
|
||||||
|
let page = update
|
||||||
|
.update_props
|
||||||
|
.get_object_base_box()
|
||||||
|
.to_owned()
|
||||||
|
.unwrap()
|
||||||
|
.to_owned()
|
||||||
|
.to_concrete::<Page>()?;
|
||||||
|
|
||||||
let user_uri = update
|
let user_uri = update
|
||||||
.update_props
|
.update_props
|
||||||
.get_actor_xsd_any_uri()
|
.get_actor_xsd_any_uri()
|
||||||
|
@ -198,16 +172,23 @@ fn receive_update_post(
|
||||||
my_id: None,
|
my_id: None,
|
||||||
});
|
});
|
||||||
|
|
||||||
Ok(())
|
Ok(HttpResponse::Ok().finish())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn receive_update_comment(
|
fn receive_update_comment(
|
||||||
update: &Update,
|
update: &Update,
|
||||||
note: &Note,
|
|
||||||
request: &HttpRequest,
|
request: &HttpRequest,
|
||||||
conn: &PgConnection,
|
conn: &PgConnection,
|
||||||
chat_server: ChatServerParam,
|
chat_server: ChatServerParam,
|
||||||
) -> Result<(), Error> {
|
) -> Result<HttpResponse, Error> {
|
||||||
|
let note = update
|
||||||
|
.update_props
|
||||||
|
.get_object_base_box()
|
||||||
|
.to_owned()
|
||||||
|
.unwrap()
|
||||||
|
.to_owned()
|
||||||
|
.to_concrete::<Note>()?;
|
||||||
|
|
||||||
let user_uri = update
|
let user_uri = update
|
||||||
.update_props
|
.update_props
|
||||||
.get_actor_xsd_any_uri()
|
.get_actor_xsd_any_uri()
|
||||||
|
@ -237,5 +218,5 @@ fn receive_update_comment(
|
||||||
my_id: None,
|
my_id: None,
|
||||||
});
|
});
|
||||||
|
|
||||||
Ok(())
|
Ok(HttpResponse::Ok().finish())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue