commit e31c481
default
·
2023-04-30 04:49:51 +0000 UTC
parent ede4d6f
actor_get() returns an actor message for local users.
1 files changed,
+21,
-5
M
data.c
M
data.c
+21,
-5
1@@ -1287,27 +1287,43 @@ int is_hidden(snac *snac, const char *id)
2 }
3
4
5-int actor_add(snac *snac, const char *actor, d_char *msg)
6+int actor_add(snac *snac, const char *actor, xs_dict *msg)
7 /* adds an actor */
8 {
9 return object_add_ow(actor, msg);
10 }
11
12
13-int actor_get(snac *snac, const char *actor, d_char **data)
14+int actor_get(snac *snac1, const char *actor, xs_dict **data)
15 /* returns an already downloaded actor */
16 {
17 int status = 200;
18- d_char *d;
19+ xs_dict *d;
20
21- if (strcmp(actor, snac->actor) == 0) {
22+ if (strcmp(actor, snac1->actor) == 0) {
23 /* this actor */
24 if (data)
25- *data = msg_actor(snac);
26+ *data = msg_actor(snac1);
27
28 return status;
29 }
30
31+ if (xs_startswith(actor, srv_baseurl)) {
32+ /* it's a (possible) local user */
33+ xs *l = xs_split(actor, "/");
34+ const char *uid = xs_list_get(l, -1);
35+ snac user;
36+
37+ if (!xs_is_null(uid) && user_open(&user, uid)) {
38+ if (data)
39+ *data = msg_actor(&user);
40+
41+ user_free(&user);
42+ }
43+ else
44+ return 404;
45+ }
46+
47 /* read the object */
48 if (!valid_status(status = object_get(actor, &d)))
49 return status;