summaryrefslogtreecommitdiffstats
path: root/server/src/apub/community.rs
diff options
context:
space:
mode:
authorFelix <me@nutomic.com>2020-03-12 01:01:25 +0100
committerFelix <me@nutomic.com>2020-03-12 01:01:25 +0100
commit54172bd322c5aef4ff7243a3ece316c8bbf80c2c (patch)
tree8d2bced971aa9fde57262e654b57061f751cb8eb /server/src/apub/community.rs
parent8867fa1d52967c3755eabf677654c3bb04b0fd67 (diff)
updated to activitystreams 0.4.0-alpha.3
Diffstat (limited to 'server/src/apub/community.rs')
-rw-r--r--server/src/apub/community.rs88
1 files changed, 52 insertions, 36 deletions
diff --git a/server/src/apub/community.rs b/server/src/apub/community.rs
index 877534b3..bbb9da6e 100644
--- a/server/src/apub/community.rs
+++ b/server/src/apub/community.rs
@@ -1,54 +1,64 @@
-use crate::apub::group_wrapper::GroupHelper;
use crate::apub::make_apub_endpoint;
+use crate::convert_datetime;
use crate::db::community::Community;
use crate::db::community_view::CommunityFollowerView;
use crate::db::establish_unpooled_connection;
-use activitypub::{actor::Group, collection::UnorderedCollection, context};
+use activitystreams::{
+ actor::apub::Group, collection::apub::UnorderedCollection, context,
+ object::properties::ObjectProperties,
+};
use actix_web::body::Body;
use actix_web::web::Path;
use actix_web::HttpResponse;
+use failure::Error;
use serde::Deserialize;
-use serde_json::{Value};
impl Community {
- pub fn as_group(&self) -> Group {
+ pub fn as_group(&self) -> Result<Group, Error> {
let base_url = make_apub_endpoint("c", &self.id);
let mut group = Group::default();
-
- group.object_props.set_context_object(context()).ok();
- Group::set_id(&mut group, &base_url);
-
- Group::set_title(&mut group, &self.title);
- Group::set_published(&mut group, self.published);
- Group::set_updated(&mut group, self.updated);
- Group::set_creator_id(&mut group, make_apub_endpoint("u", &self.creator_id));
-
- Group::set_description(&mut group, &self.description);
-
- group.ap_actor_props.inbox = Value::String(format!("{}/inbox", &base_url));
- group.ap_actor_props.outbox = Value::String(format!("{}/outbox", &base_url));
- group.ap_actor_props.followers = Some(Value::String(format!("{}/followers", &base_url)));
+ let oprops: &mut ObjectProperties = group.as_mut();
+
+ oprops
+ .set_context_xsd_any_uri(context())?
+ .set_id(base_url.to_owned())?
+ .set_name_xsd_string(self.title.to_owned())?
+ .set_published(convert_datetime(self.published))?
+ .set_attributed_to_xsd_any_uri(make_apub_endpoint("u", &self.creator_id))?;
+
+ if let Some(u) = self.updated.to_owned() {
+ oprops.set_updated(convert_datetime(u))?;
+ }
+ if let Some(d) = self.description.to_owned() {
+ oprops.set_summary_xsd_string(d)?;
+ }
group
+ .ap_actor_props
+ .set_inbox(format!("{}/inbox", &base_url))?
+ .set_outbox(format!("{}/outbox", &base_url))?
+ .set_followers(format!("{}/followers", &base_url))?;
+
+ Ok(group)
}
- pub fn followers_as_collection(&self) -> UnorderedCollection {
+ pub fn followers_as_collection(&self) -> Result<UnorderedCollection, Error> {
let base_url = make_apub_endpoint("c", &self.name);
- let mut collection = UnorderedCollection::default();
- collection.object_props.set_context_object(context()).ok();
- collection.object_props.set_id_string(base_url).ok();
-
let connection = establish_unpooled_connection();
//As we are an object, we validated that the community id was valid
let community_followers = CommunityFollowerView::for_community(&connection, self.id).unwrap();
+ let mut collection = UnorderedCollection::default();
+ let oprops: &mut ObjectProperties = collection.as_mut();
+ oprops
+ .set_context_xsd_any_uri(context())?
+ .set_id(base_url)?;
collection
.collection_props
- .set_total_items_u64(community_followers.len() as u64)
- .unwrap();
- collection
+ .set_total_items(community_followers.len() as u64)?;
+ Ok(collection)
}
}
@@ -57,26 +67,32 @@ pub struct CommunityQuery {
community_name: String,
}
-pub async fn get_apub_community(info: Path<CommunityQuery>) -> HttpResponse<Body> {
+pub async fn get_apub_community(info: Path<CommunityQuery>) -> Result<HttpResponse<Body>, Error> {
let connection = establish_unpooled_connection();
if let Ok(community) = Community::read_from_name(&connection, info.community_name.to_owned()) {
- HttpResponse::Ok()
- .content_type("application/activity+json")
- .body(serde_json::to_string(&community.as_group()).unwrap())
+ Ok(
+ HttpResponse::Ok()
+ .content_type("application/activity+json")
+ .body(serde_json::to_string(&community.as_group()?).unwrap()),
+ )
} else {
- HttpResponse::NotFound().finish()
+ Ok(HttpResponse::NotFound().finish())
}
}
-pub async fn get_apub_community_followers(info: Path<CommunityQuery>) -> HttpResponse<Body> {
+pub async fn get_apub_community_followers(
+ info: Path<CommunityQuery>,
+) -> Result<HttpResponse<Body>, Error> {
let connection = establish_unpooled_connection();
if let Ok(community) = Community::read_from_name(&connection, info.community_name.to_owned()) {
- HttpResponse::Ok()
- .content_type("application/activity+json")
- .body(serde_json::to_string(&community.followers_as_collection()).unwrap())
+ Ok(
+ HttpResponse::Ok()
+ .content_type("application/activity+json")
+ .body(serde_json::to_string(&community.followers_as_collection()?).unwrap()),
+ )
} else {
- HttpResponse::NotFound().finish()
+ Ok(HttpResponse::NotFound().finish())
}
}