commit 5e3c50d

default  ·  2023-03-02 07:43:50 +0000 UTC
parent eb0c7ea
New inbox collection functions.
4 files changed,  +42, -16
M data.c
M snac.h
+2, -16
 1@@ -117,22 +117,8 @@ int actor_request(snac *snac, char *actor, d_char **data)
 2         }
 3     }
 4 
 5-#if 0
 6-    if (valid_status(status) && data && *data) {
 7-        xs *fn = xs_fmt("%s/inboxes.lst", srv_basedir);
 8-        FILE *f;
 9-
10-        if ((f = fopen(fn, "a")) != NULL) {
11-            char *v;
12-            if (!xs_is_null(v = xs_dict_get(*data, "endpoints")) &&
13-                !xs_is_null(v = xs_dict_get(v, "sharedInbox"))) {
14-                fprintf(f, "%s\n", v);
15-            }
16-
17-            fclose(f);
18-        }
19-    }
20-#endif
21+    if (valid_status(status) && data && *data)
22+        inbox_add_by_actor(*data);
23 
24     return status;
25 }
M data.c
+34, -0
 1@@ -96,6 +96,9 @@ int srv_open(char *basedir, int auto_upgrade)
 2     xs *qdir = xs_fmt("%s/queue", srv_basedir);
 3     mkdirx(qdir);
 4 
 5+    xs *ibdir = xs_fmt("%s/inboxes", srv_basedir);
 6+    mkdirx(ibdir);
 7+
 8 #ifdef __OpenBSD__
 9     char *v = xs_dict_get(srv_config, "disable_openbsd_security");
10 
11@@ -1363,6 +1366,37 @@ d_char *history_list(snac *snac)
12 }
13 
14 
15+/** inbox collection **/
16+
17+void inbox_add(const char *inbox)
18+/* collects a shared inbox */
19+{
20+    xs *md5 = xs_md5_hex(inbox, strlen(inbox));
21+    xs *fn  = xs_fmt("%s/inboxes/%s", srv_basedir, md5);
22+    FILE *f;
23+
24+    if ((f = fopen(fn, "w")) != NULL) {
25+        pthread_mutex_lock(&data_mutex);
26+
27+        fprintf(f, "%s\n", inbox);
28+        fclose(f);
29+
30+        pthread_mutex_unlock(&data_mutex);
31+    }
32+}
33+
34+
35+void inbox_add_by_actor(const xs_dict *actor)
36+/* collects an actor's shared inbox, if it has one */
37+{
38+    char *v;
39+
40+    if (!xs_is_null(v = xs_dict_get(actor, "endpoints")) &&
41+        !xs_is_null(v = xs_dict_get(v, "sharedInbox")))
42+        inbox_add(v);
43+}
44+
45+
46 /** the queue **/
47 
48 static xs_dict *_enqueue_put(const char *fn, xs_dict *msg)
M snac.h
+3, -0
 1@@ -132,6 +132,9 @@ d_char *history_get(snac *snac, char *id);
 2 int history_del(snac *snac, char *id);
 3 d_char *history_list(snac *snac);
 4 
 5+void inbox_add(const char *inbox);
 6+void inbox_add_by_actor(const xs_dict *actor);
 7+
 8 void enqueue_input(snac *snac, xs_dict *msg, xs_dict *req, int retries);
 9 void enqueue_output_raw(const char *keyid, const char *seckey,
10                         xs_dict *msg, xs_str *inbox, int retries);
+3, -0
 1@@ -157,6 +157,9 @@ int snac_init(const char *basedir)
 2     xs *qdir = xs_fmt("%s/queue", srv_basedir);
 3     mkdirx(qdir);
 4 
 5+    xs *ibdir = xs_fmt("%s/inbox", srv_basedir);
 6+    mkdirx(ibdir);
 7+
 8     xs *gfn = xs_fmt("%s/greeting.html", srv_basedir);
 9     if ((f = fopen(gfn, "w")) == NULL) {
10         printf("ERROR: cannot create '%s'\n", gfn);