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;