]> Untitled Git - lemmy.git/blob - server/src/apub.rs
Spanish translations
[lemmy.git] / server / src / apub.rs
1 extern crate activitypub;
2 use self::activitypub::{actor::Person, context};
3 use crate::db::user::User_;
4
5 impl User_ {
6   pub fn person(&self) -> Person {
7     use crate::{to_datetime_utc, Settings};
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
13       .object_props
14       .set_name_string(self.name.to_owned())
15       .ok();
16     person
17       .object_props
18       .set_published_utctime(to_datetime_utc(self.published))
19       .ok();
20     if let Some(i) = self.updated {
21       person
22         .object_props
23         .set_updated_utctime(to_datetime_utc(i))
24         .ok();
25     }
26     // person.object_props.summary = self.summary;
27
28     person
29       .ap_actor_props
30       .set_inbox_string(format!("{}/inbox", &base_url))
31       .ok();
32     person
33       .ap_actor_props
34       .set_outbox_string(format!("{}/outbox", &base_url))
35       .ok();
36     person
37       .ap_actor_props
38       .set_following_string(format!("{}/following", &base_url))
39       .ok();
40     person
41       .ap_actor_props
42       .set_liked_string(format!("{}/liked", &base_url))
43       .ok();
44     if let Some(i) = &self.preferred_username {
45       person
46         .ap_actor_props
47         .set_preferred_username_string(i.to_string())
48         .ok();
49     }
50
51     person
52   }
53 }
54
55 #[cfg(test)]
56 mod tests {
57   use super::User_;
58   use crate::naive_now;
59
60   #[test]
61   fn test_person() {
62     let expected_user = User_ {
63       id: 52,
64       name: "thom".into(),
65       fedi_name: "rrf".into(),
66       preferred_username: None,
67       password_encrypted: "here".into(),
68       email: None,
69       icon: None,
70       published: naive_now(),
71       admin: false,
72       banned: false,
73       updated: None,
74       show_nsfw: false,
75       theme: "darkly".into(),
76     };
77
78     let person = expected_user.person();
79     assert_eq!(
80       "rrr/api/v1/user/thom",
81       person.object_props.id_string().unwrap()
82     );
83     let json = serde_json::to_string_pretty(&person).unwrap();
84     println!("{}", json);
85   }
86 }