more fixes
This commit is contained in:
parent
d6e2119277
commit
52206998aa
4 changed files with 85 additions and 45 deletions
|
@ -34,9 +34,6 @@ use diesel::{
|
|||
use failure::Error;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::str::FromStr;
|
||||
use crate::apub::get_apub_protocol_string;
|
||||
use crate::db::community::Community;
|
||||
use url::Url;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct CreatePost {
|
||||
|
@ -193,17 +190,7 @@ impl Perform for Oper<CreatePost> {
|
|||
}
|
||||
};
|
||||
|
||||
// TODO: we should be able to remove Post::update_ap_id with this
|
||||
let community = Url::parse(&Community::read(&conn, data.community_id)?.actor_id)?;
|
||||
let apub_id =
|
||||
format!(
|
||||
"{}://{}/{}/{}",
|
||||
get_apub_protocol_string(),
|
||||
community.domain().ok_or(format_err!("community has invalid domain"))?,
|
||||
"post",
|
||||
inserted_post.id
|
||||
);
|
||||
let updated_post = match Post::update_ap_id(&conn, inserted_post.id, &apub_id) {
|
||||
let updated_post = match Post::update_ap_id(&conn, inserted_post.id) {
|
||||
Ok(post) => post,
|
||||
Err(_e) => return Err(APIError::err("couldnt_create_post").into()),
|
||||
};
|
||||
|
|
|
@ -183,34 +183,92 @@ pub async fn shared_inbox(
|
|||
(SharedAcceptedObjects::Undo(u), Some("Delete")) => receive_undo_delete(&u, &conn, chat_server),
|
||||
(SharedAcceptedObjects::Undo(u), Some("Remove")) => receive_undo_remove(&u, &conn, chat_server),
|
||||
(SharedAcceptedObjects::Undo(u), Some("Like")) => receive_undo_like(&u, &conn, chat_server),
|
||||
(SharedAcceptedObjects::Announce(_a), Some("Create")) => {
|
||||
let create = object.into_concrete::<Create>()?;
|
||||
receive_create_post(&create, &conn, chat_server)
|
||||
}
|
||||
(SharedAcceptedObjects::Announce(_a), Some("Update")) => {
|
||||
let update = object.into_concrete::<Update>()?;
|
||||
receive_update_post(&update, &conn, chat_server)
|
||||
}
|
||||
(SharedAcceptedObjects::Announce(_a), Some("Like")) => {
|
||||
let like = object.into_concrete::<Like>()?;
|
||||
receive_like_post(&like, &conn, chat_server)
|
||||
}
|
||||
(SharedAcceptedObjects::Announce(_a), Some("Dislike")) => {
|
||||
let dislike = object.into_concrete::<Dislike>()?;
|
||||
receive_dislike_post(&dislike, &conn, chat_server)
|
||||
}
|
||||
(SharedAcceptedObjects::Announce(_a), Some("Delete")) => {
|
||||
let delete = object.into_concrete::<Delete>()?;
|
||||
receive_delete_post(&delete, &conn, chat_server)
|
||||
}
|
||||
(SharedAcceptedObjects::Announce(_a), Some("Remove")) => {
|
||||
let remove = object.into_concrete::<Remove>()?;
|
||||
receive_remove_post(&remove, &conn, chat_server)
|
||||
}
|
||||
(SharedAcceptedObjects::Announce(a), _) => receive_announce(a, &conn, chat_server),
|
||||
_ => Err(format_err!("Unknown incoming activity type.")),
|
||||
}
|
||||
}
|
||||
|
||||
fn receive_announce(
|
||||
announce: Box<Announce>,
|
||||
conn: &PgConnection,
|
||||
chat_server: ChatServerParam,
|
||||
) -> Result<HttpResponse, Error> {
|
||||
let object = announce
|
||||
.announce_props
|
||||
.get_object_base_box()
|
||||
.unwrap()
|
||||
.to_owned();
|
||||
// TODO: too much copy paste
|
||||
// TODO: we should log all unhandled events
|
||||
match object.kind() {
|
||||
Some("Create") => {
|
||||
let create = object.into_concrete::<Create>()?;
|
||||
let inner_object = create.create_props.get_object_base_box().unwrap();
|
||||
match inner_object.kind() {
|
||||
Some("Page") => receive_create_post(&create, &conn, chat_server),
|
||||
Some("Note") => receive_create_comment(&create, &conn, chat_server),
|
||||
_ => Ok(HttpResponse::NotImplemented().finish()),
|
||||
}
|
||||
}
|
||||
Some("Update") => {
|
||||
let update = object.into_concrete::<Update>()?;
|
||||
let inner_object = update.update_props.get_object_base_box().unwrap();
|
||||
match inner_object.kind() {
|
||||
Some("Page") => receive_update_post(&update, &conn, chat_server),
|
||||
Some("Note") => receive_update_comment(&update, &conn, chat_server),
|
||||
_ => Ok(HttpResponse::NotImplemented().finish()),
|
||||
}
|
||||
}
|
||||
Some("Like") => {
|
||||
let like = object.into_concrete::<Like>()?;
|
||||
let inner_object = like.like_props.get_object_base_box().unwrap();
|
||||
match inner_object.kind() {
|
||||
Some("Page") => receive_like_post(&like, &conn, chat_server),
|
||||
Some("Note") => receive_like_comment(&like, &conn, chat_server),
|
||||
_ => Ok(HttpResponse::NotImplemented().finish()),
|
||||
}
|
||||
}
|
||||
Some("Dislike") => {
|
||||
let dislike = object.into_concrete::<Dislike>()?;
|
||||
let inner_object = dislike.dislike_props.get_object_base_box().unwrap();
|
||||
match inner_object.kind() {
|
||||
Some("Page") => receive_dislike_post(&dislike, &conn, chat_server),
|
||||
Some("Note") => receive_dislike_comment(&dislike, &conn, chat_server),
|
||||
_ => Ok(HttpResponse::NotImplemented().finish()),
|
||||
}
|
||||
}
|
||||
Some("Delete") => {
|
||||
let delete = object.into_concrete::<Delete>()?;
|
||||
let inner_object = delete.delete_props.get_object_base_box().unwrap();
|
||||
match inner_object.kind() {
|
||||
Some("Page") => receive_delete_post(&delete, &conn, chat_server),
|
||||
Some("Note") => receive_delete_comment(&delete, &conn, chat_server),
|
||||
_ => Ok(HttpResponse::NotImplemented().finish()),
|
||||
}
|
||||
}
|
||||
Some("Remove") => {
|
||||
let remove = object.into_concrete::<Remove>()?;
|
||||
let inner_object = remove.remove_props.get_object_base_box().unwrap();
|
||||
match inner_object.kind() {
|
||||
Some("Page") => receive_remove_post(&remove, &conn, chat_server),
|
||||
Some("Note") => receive_remove_comment(&remove, &conn, chat_server),
|
||||
_ => Ok(HttpResponse::NotImplemented().finish()),
|
||||
}
|
||||
}
|
||||
Some("Undo") => {
|
||||
let undo = object.into_concrete::<Undo>()?;
|
||||
let inner_object = undo.undo_props.get_object_base_box().unwrap();
|
||||
match inner_object.kind() {
|
||||
Some("Delete") => receive_undo_delete(&undo, &conn, chat_server),
|
||||
Some("Remove") => receive_undo_remove(&undo, &conn, chat_server),
|
||||
Some("Like") => receive_undo_like(&undo, &conn, chat_server),
|
||||
_ => Ok(HttpResponse::NotImplemented().finish()),
|
||||
}
|
||||
}
|
||||
_ => Ok(HttpResponse::NotImplemented().finish()),
|
||||
}
|
||||
}
|
||||
|
||||
fn receive_create_post(
|
||||
create: &Create,
|
||||
conn: &PgConnection,
|
||||
|
@ -1518,8 +1576,6 @@ pub fn do_announce<A>(
|
|||
where
|
||||
A: Activity + Base + Serialize + Debug,
|
||||
{
|
||||
dbg!(&community_uri);
|
||||
// TODO: this fails for some reason
|
||||
let community = Community::read_from_actor_id(conn, &community_uri)?;
|
||||
|
||||
// TODO: need to add boolean param is_local_activity
|
||||
|
@ -1545,9 +1601,6 @@ where
|
|||
// this seems to be the "easiest" stable alternative for remove_item()
|
||||
to.retain(|x| *x != sending_user.get_shared_inbox_url());
|
||||
|
||||
dbg!(&announce);
|
||||
dbg!(&to);
|
||||
|
||||
send_activity(&announce, &community, to)?;
|
||||
|
||||
Ok(HttpResponse::Ok().finish())
|
||||
|
|
|
@ -124,7 +124,7 @@ fn post_updates_2020_04_03(conn: &PgConnection) -> Result<(), Error> {
|
|||
.load::<Post>(conn)?;
|
||||
|
||||
for cpost in &incorrect_posts {
|
||||
Post::update_ap_id(&conn, cpost.id, todo!())?;
|
||||
Post::update_ap_id(&conn, cpost.id)?;
|
||||
}
|
||||
|
||||
info!("{} post rows updated.", incorrect_posts.len());
|
||||
|
|
|
@ -75,7 +75,7 @@ impl Post {
|
|||
post.filter(ap_id.eq(object_id)).first::<Self>(conn)
|
||||
}
|
||||
|
||||
pub fn update_ap_id(conn: &PgConnection, post_id: i32, ap_id: &str) -> Result<Self, Error> {
|
||||
pub fn update_ap_id(conn: &PgConnection, post_id: i32) -> Result<Self, Error> {
|
||||
use crate::schema::post::dsl::*;
|
||||
|
||||
let apid = make_apub_endpoint(EndpointType::Post, &post_id.to_string()).to_string();
|
||||
|
|
Loading…
Reference in a new issue