commit 5e3c50d
default
·
2023-03-02 07:43:50 +0000 UTC
parent eb0c7ea
New inbox collection functions.
4 files changed,
+42,
-16
+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);
M
utils.c
+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);