Merge pull request 'Update to latest activitystreams' (#1) from asonix/lemmy:federation into federation

This commit is contained in:
nutomic 2020-03-19 01:23:15 +00:00
commit 875ed79f3f
7 changed files with 241 additions and 231 deletions

394
server/Cargo.lock generated vendored

File diff suppressed because it is too large Load diff

2
server/Cargo.toml vendored
View file

@ -9,7 +9,7 @@ diesel = { version = "1.4.2", features = ["postgres","chrono", "r2d2", "64-colum
diesel_migrations = "1.4.0"
dotenv = "0.15.0"
bcrypt = "0.6.1"
activitystreams = "0.5.0-alpha.7"
activitystreams = "0.5.0-alpha.10"
chrono = { version = "0.4.7", features = ["serde"] }
failure = "0.1.5"
serde_json = { version = "1.0.45", features = ["preserve_order"]}

View file

@ -4,9 +4,12 @@ use crate::db::community::Community;
use crate::db::community_view::CommunityFollowerView;
use crate::db::establish_unpooled_connection;
use crate::db::post_view::{PostQueryBuilder, PostView};
use activitystreams::collection::apub::OrderedCollection;
use activitystreams::collection::OrderedCollection;
use activitystreams::{
actor::apub::Group, collection::apub::UnorderedCollection, context,
actor::{properties::ApActorProperties, Group},
collection::UnorderedCollection,
context,
ext::Extensible,
object::properties::ObjectProperties,
};
use actix_web::body::Body;
@ -50,13 +53,14 @@ pub async fn get_apub_community(
oprops.set_summary_xsd_string(d)?;
}
group
.ap_actor_props
let mut actor_props = ApActorProperties::default();
actor_props
.set_inbox(format!("{}/inbox", &base_url))?
.set_outbox(format!("{}/outbox", &base_url))?
.set_followers(format!("{}/followers", &base_url))?;
Ok(create_apub_response(serde_json::to_string(&group)?))
Ok(create_apub_response(&group.extend(actor_props)))
}
pub async fn get_apub_community_followers(
@ -79,7 +83,7 @@ pub async fn get_apub_community_followers(
collection
.collection_props
.set_total_items(community_followers.len() as u64)?;
Ok(create_apub_response(serde_json::to_string(&collection)?))
Ok(create_apub_response(&collection))
}
pub async fn get_apub_community_outbox(
@ -111,5 +115,5 @@ pub async fn get_apub_community_outbox(
)?
.set_total_items(community_posts.len() as u64)?;
Ok(create_apub_response(serde_json::to_string(&collection)?))
Ok(create_apub_response(&collection))
}

View file

@ -8,10 +8,13 @@ use actix_web::body::Body;
use actix_web::HttpResponse;
use url::Url;
fn create_apub_response(json_data: String) -> HttpResponse<Body> {
fn create_apub_response<T>(json: &T) -> HttpResponse<Body>
where
T: serde::ser::Serialize,
{
HttpResponse::Ok()
.content_type("application/activity+json")
.body(json_data)
.json(json)
}
enum EndpointType {

View file

@ -1,7 +1,7 @@
use crate::apub::{create_apub_response, make_apub_endpoint, EndpointType};
use crate::convert_datetime;
use crate::db::post_view::PostView;
use activitystreams::{object::apub::Page, object::properties::ObjectProperties};
use activitystreams::{object::properties::ObjectProperties, object::Page};
use actix_web::body::Body;
use actix_web::web::Path;
use actix_web::{web, HttpResponse};
@ -22,9 +22,7 @@ pub async fn get_apub_post(
let id = info.post_id.parse::<i32>()?;
// TODO: shows error: missing field `user_name`
let post = PostView::read(&&db.get()?, id, None)?;
Ok(create_apub_response(serde_json::to_string(
&post.as_page()?,
)?))
Ok(create_apub_response(&post.as_page()?))
}
impl PostView {

View file

@ -8,10 +8,11 @@ use crate::db::post_view::PostView;
use crate::naive_now;
use crate::routes::nodeinfo::{NodeInfo, NodeInfoWellKnown};
use crate::settings::Settings;
use activitystreams::actor::apub::Group;
use activitystreams::collection::apub::{OrderedCollection, UnorderedCollection};
use activitystreams::object::apub::Page;
use activitystreams::actor::{properties::ApActorProperties, Group};
use activitystreams::collection::{OrderedCollection, UnorderedCollection};
use activitystreams::ext::Ext;
use activitystreams::object::ObjectBox;
use activitystreams::object::Page;
use failure::Error;
use log::warn;
use serde::Deserialize;
@ -71,8 +72,9 @@ where
}
pub fn get_remote_community_posts(identifier: &str) -> Result<GetPostsResponse, Error> {
let community = fetch_remote_object::<Group>(&get_remote_community_uri(identifier))?;
let outbox_uri = &community.ap_actor_props.get_outbox().to_string();
let community =
fetch_remote_object::<Ext<Group, ApActorProperties>>(&get_remote_community_uri(identifier))?;
let outbox_uri = &community.extension.get_outbox().to_string();
let outbox = fetch_remote_object::<OrderedCollection>(outbox_uri)?;
let items = outbox.collection_props.get_many_items_object_boxs();
@ -125,13 +127,10 @@ pub fn get_remote_community_posts(identifier: &str) -> Result<GetPostsResponse,
}
pub fn get_remote_community(identifier: &str) -> Result<GetCommunityResponse, failure::Error> {
let community = fetch_remote_object::<Group>(&get_remote_community_uri(identifier))?;
let followers_uri = &community
.ap_actor_props
.get_followers()
.unwrap()
.to_string();
let outbox_uri = &community.ap_actor_props.get_outbox().to_string();
let community =
fetch_remote_object::<Ext<Group, ApActorProperties>>(&get_remote_community_uri(identifier))?;
let followers_uri = &community.extension.get_followers().unwrap().to_string();
let outbox_uri = &community.extension.get_outbox().to_string();
let outbox = fetch_remote_object::<OrderedCollection>(outbox_uri)?;
let followers = fetch_remote_object::<UnorderedCollection>(followers_uri)?;
// TODO: this is only for testing until we can call that function from GetPosts
@ -146,26 +145,26 @@ pub fn get_remote_community(identifier: &str) -> Result<GetCommunityResponse, fa
id: 1337, //community.object_props.get_id()
name: identifier.to_string(),
title: community
.object_props
.as_ref()
.get_name_xsd_string()
.unwrap()
.to_string(),
description: community
.object_props
.as_ref()
.get_summary_xsd_string()
.map(|s| s.to_string()),
category_id: -1,
creator_id: -1, //community.object_props.get_attributed_to_xsd_any_uri()
removed: false,
published: community
.object_props
.as_ref()
.get_published()
.unwrap()
.as_ref()
.naive_local()
.to_owned(),
updated: community
.object_props
.as_ref()
.get_updated()
.map(|u| u.as_ref().to_owned().naive_local()),
deleted: false,

View file

@ -1,7 +1,12 @@
use crate::apub::{create_apub_response, make_apub_endpoint, EndpointType};
use crate::convert_datetime;
use crate::db::user::User_;
use activitystreams::{actor::apub::Person, context, object::properties::ObjectProperties};
use activitystreams::{
actor::{properties::ApActorProperties, Person},
context,
ext::Extensible,
object::properties::ObjectProperties,
};
use actix_web::body::Body;
use actix_web::web::Path;
use actix_web::HttpResponse;
@ -38,12 +43,13 @@ pub async fn get_apub_user(
oprops.set_name_xsd_string(i.to_owned())?;
}
person
.ap_actor_props
let mut actor_props = ApActorProperties::default();
actor_props
.set_inbox(format!("{}/inbox", &base_url))?
.set_outbox(format!("{}/outbox", &base_url))?
.set_following(format!("{}/following", &base_url))?
.set_liked(format!("{}/liked", &base_url))?;
Ok(create_apub_response(serde_json::to_string(&person)?))
Ok(create_apub_response(&person.extend(actor_props)))
}