]> Untitled Git - lemmy.git/blob - server/src/apub.rs
Adding emoji support.
[lemmy.git] / server / src / apub.rs
1 extern crate activitypub;
2 use self::activitypub::{context, actor::Person};
3 use crate::db::user::User_;
4
5 impl User_ {
6   pub fn person(&self) -> Person {
7     use crate::{Settings, to_datetime_utc};
8     let base_url = &format!("{}/user/{}", Settings::get().api_endpoint(), self.name);
9     let mut person  = Person::default();
10     person.object_props.set_context_object(context()).ok();
11     person.object_props.set_id_string(base_url.to_string()).ok();
12     person.object_props.set_name_string(self.name.to_owned()).ok();
13     person.object_props.set_published_utctime(to_datetime_utc(self.published)).ok();
14     if let Some(i) = self.updated {
15       person.object_props.set_updated_utctime(to_datetime_utc(i)).ok();
16     }
17     // person.object_props.summary = self.summary;
18
19     person.ap_actor_props.set_inbox_string(format!("{}/inbox", &base_url)).ok();
20     person.ap_actor_props.set_outbox_string(format!("{}/outbox", &base_url)).ok();
21     person.ap_actor_props.set_following_string(format!("{}/following", &base_url)).ok();
22     person.ap_actor_props.set_liked_string(format!("{}/liked", &base_url)).ok();
23     if let Some(i) = &self.preferred_username {
24       person.ap_actor_props.set_preferred_username_string(i.to_string()).ok();
25     }
26
27     person
28   }
29 }
30
31 #[cfg(test)]
32 mod tests {
33   use super::User_;
34   use crate::naive_now;
35
36   #[test]
37   fn test_person() {
38     let expected_user = User_ {
39       id: 52,
40       name: "thom".into(),
41       fedi_name: "rrf".into(),
42       preferred_username: None,
43       password_encrypted: "here".into(),
44       email: None,
45       icon: None,
46       published: naive_now(),
47       admin: false,
48       banned: false,
49       updated: None,
50       show_nsfw: false,
51     };
52
53     let person = expected_user.person();
54     assert_eq!("rrr/api/v1/user/thom", person.object_props.id_string().unwrap());
55     let json = serde_json::to_string_pretty(&person).unwrap();
56     println!("{}", json);
57
58   }
59 }
60