wip: add former_type to tombstone
This commit is contained in:
parent
c43f06124a
commit
770dcbdc49
5 changed files with 21 additions and 9 deletions
|
@ -39,7 +39,7 @@ impl ToApub for Comment {
|
||||||
|
|
||||||
impl ToTombstone for Comment {
|
impl ToTombstone for Comment {
|
||||||
fn to_tombstone(&self) -> Result<Tombstone, Error> {
|
fn to_tombstone(&self) -> Result<Tombstone, Error> {
|
||||||
create_tombstone(self.deleted, &self.ap_id, self.published, self.updated)
|
create_tombstone(self.deleted, &self.ap_id, self.published, self.updated, NoteType.to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
use super::*;
|
use super::*;
|
||||||
|
use activitystreams::actor::kind::GroupType;
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
pub struct CommunityQuery {
|
pub struct CommunityQuery {
|
||||||
|
@ -49,7 +50,7 @@ impl ToApub for Community {
|
||||||
|
|
||||||
impl ToTombstone for Community {
|
impl ToTombstone for Community {
|
||||||
fn to_tombstone(&self) -> Result<Tombstone, Error> {
|
fn to_tombstone(&self) -> Result<Tombstone, Error> {
|
||||||
create_tombstone(self.deleted, &self.actor_id, self.published, self.updated)
|
create_tombstone(self.deleted, &self.actor_id, self.published, self.updated, GroupType.to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,9 @@ use activitystreams::{
|
||||||
object::{properties::ObjectProperties, Note, Page, Tombstone},
|
object::{properties::ObjectProperties, Note, Page, Tombstone},
|
||||||
public, BaseBox,
|
public, BaseBox,
|
||||||
};
|
};
|
||||||
|
use activitystreams::object::kind::{NoteType, PageType};
|
||||||
|
use crate::api::community::CommunityResponse;
|
||||||
|
use crate::websocket::server::SendCommunityRoomMessage;
|
||||||
use actix_web::body::Body;
|
use actix_web::body::Body;
|
||||||
use actix_web::web::Path;
|
use actix_web::web::Path;
|
||||||
use actix_web::{web, HttpRequest, HttpResponse, Result};
|
use actix_web::{web, HttpRequest, HttpResponse, Result};
|
||||||
|
@ -64,6 +67,7 @@ use chrono::NaiveDateTime;
|
||||||
use fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user};
|
use fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user};
|
||||||
use signatures::verify;
|
use signatures::verify;
|
||||||
use signatures::{sign, PublicKey, PublicKeyExtension};
|
use signatures::{sign, PublicKey, PublicKeyExtension};
|
||||||
|
use activitystreams::primitives::XsdString;
|
||||||
|
|
||||||
type GroupExt = Ext<Ext<Group, ApActorProperties>, PublicKeyExtension>;
|
type GroupExt = Ext<Ext<Group, ApActorProperties>, PublicKeyExtension>;
|
||||||
type PersonExt = Ext<Ext<Person, ApActorProperties>, PublicKeyExtension>;
|
type PersonExt = Ext<Ext<Person, ApActorProperties>, PublicKeyExtension>;
|
||||||
|
@ -87,6 +91,7 @@ where
|
||||||
.content_type(APUB_JSON_CONTENT_TYPE)
|
.content_type(APUB_JSON_CONTENT_TYPE)
|
||||||
.json(data)
|
.json(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_apub_tombstone_response<T>(data: &T) -> HttpResponse<Body>
|
fn create_apub_tombstone_response<T>(data: &T) -> HttpResponse<Body>
|
||||||
where
|
where
|
||||||
T: Serialize,
|
T: Serialize,
|
||||||
|
@ -158,6 +163,7 @@ fn create_tombstone(
|
||||||
object_id: &str,
|
object_id: &str,
|
||||||
published: NaiveDateTime,
|
published: NaiveDateTime,
|
||||||
updated: Option<NaiveDateTime>,
|
updated: Option<NaiveDateTime>,
|
||||||
|
former_type: String,
|
||||||
) -> Result<Tombstone, Error> {
|
) -> Result<Tombstone, Error> {
|
||||||
if deleted {
|
if deleted {
|
||||||
let mut tombstone = Tombstone::default();
|
let mut tombstone = Tombstone::default();
|
||||||
|
@ -165,12 +171,13 @@ fn create_tombstone(
|
||||||
tombstone
|
tombstone
|
||||||
.object_props
|
.object_props
|
||||||
.set_id(object_id)?
|
.set_id(object_id)?
|
||||||
.set_published(convert_datetime(published))?;
|
.set_published(convert_datetime(published));
|
||||||
if let Some(updated) = updated {
|
if let Some(updated) = updated {
|
||||||
tombstone
|
tombstone
|
||||||
.object_props
|
.object_props
|
||||||
.set_updated(convert_datetime(updated))?;
|
.set_updated(convert_datetime(updated))?;
|
||||||
}
|
}
|
||||||
|
tombstone.tombstone_props.set_former_type_object_box(XsdString::from_string(former_type))?;
|
||||||
Ok(tombstone)
|
Ok(tombstone)
|
||||||
} else {
|
} else {
|
||||||
Err(format_err!(
|
Err(format_err!(
|
||||||
|
|
|
@ -61,7 +61,7 @@ impl ToApub for Post {
|
||||||
|
|
||||||
impl ToTombstone for Post {
|
impl ToTombstone for Post {
|
||||||
fn to_tombstone(&self) -> Result<Tombstone, Error> {
|
fn to_tombstone(&self) -> Result<Tombstone, Error> {
|
||||||
create_tombstone(self.deleted, &self.ap_id, self.published, self.updated)
|
create_tombstone(self.deleted, &self.ap_id, self.published, self.updated, PageType.to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::api::community::CommunityResponse;
|
|
||||||
use crate::websocket::server::SendCommunityRoomMessage;
|
|
||||||
|
|
||||||
#[serde(untagged)]
|
#[serde(untagged)]
|
||||||
#[derive(Serialize, Deserialize, Debug)]
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
|
@ -66,8 +64,7 @@ pub async fn shared_inbox(
|
||||||
receive_dislike_comment(&d, &request, &conn, chat_server)
|
receive_dislike_comment(&d, &request, &conn, chat_server)
|
||||||
}
|
}
|
||||||
(SharedAcceptedObjects::Delete(d), Some("Tombstone")) => {
|
(SharedAcceptedObjects::Delete(d), Some("Tombstone")) => {
|
||||||
// TODO: is this deleting a community, post, comment or what?
|
receive_delete(&d, &request, &conn, chat_server)
|
||||||
receive_delete_community(&d, &request, &conn, chat_server)
|
|
||||||
}
|
}
|
||||||
_ => Err(format_err!("Unknown incoming activity type.")),
|
_ => Err(format_err!("Unknown incoming activity type.")),
|
||||||
}
|
}
|
||||||
|
@ -511,7 +508,7 @@ fn receive_dislike_comment(
|
||||||
Ok(HttpResponse::Ok().finish())
|
Ok(HttpResponse::Ok().finish())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn receive_delete_community(
|
fn receive_delete(
|
||||||
delete: &Delete,
|
delete: &Delete,
|
||||||
request: &HttpRequest,
|
request: &HttpRequest,
|
||||||
conn: &PgConnection,
|
conn: &PgConnection,
|
||||||
|
@ -524,6 +521,13 @@ fn receive_delete_community(
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.to_owned()
|
.to_owned()
|
||||||
.to_concrete::<Tombstone>()?;
|
.to_concrete::<Tombstone>()?;
|
||||||
|
// TODO: not sure how to handle formerType (should be a string)
|
||||||
|
// https://www.w3.org/TR/activitystreams-vocabulary/#dfn-formertype
|
||||||
|
let former_type: &str = tombstone.tombstone_props.get_former_type_object_box().unwrap().to_concrete::<String>();
|
||||||
|
match former_type {
|
||||||
|
"Group" => {},
|
||||||
|
d => return Err(format_err!("Delete type {} not supported", d)),
|
||||||
|
}
|
||||||
let community_apub_id = tombstone.object_props.get_id().unwrap().to_string();
|
let community_apub_id = tombstone.object_props.get_id().unwrap().to_string();
|
||||||
|
|
||||||
let community = Community::read_from_actor_id(conn, &community_apub_id)?;
|
let community = Community::read_from_actor_id(conn, &community_apub_id)?;
|
||||||
|
|
Loading…
Reference in a new issue