summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar default2023-03-02 08:43:50 +0100
committerGravatar default2023-03-02 08:43:50 +0100
commit5e3c50d6e1ea2105add614fa2eb45612e577ddac (patch)
tree5444d35bde941cb7acd91c543a2eb4edfc0a2b0a
parentMinor refactoring to actor_request(). (diff)
downloadsnac2-5e3c50d6e1ea2105add614fa2eb45612e577ddac.tar.gz
snac2-5e3c50d6e1ea2105add614fa2eb45612e577ddac.tar.xz
snac2-5e3c50d6e1ea2105add614fa2eb45612e577ddac.zip
New inbox collection functions.
-rw-r--r--activitypub.c18
-rw-r--r--data.c34
-rw-r--r--snac.h3
-rw-r--r--utils.c3
4 files changed, 42 insertions, 16 deletions
diff --git a/activitypub.c b/activitypub.c
index a259a25..663fa24 100644
--- a/activitypub.c
+++ b/activitypub.c
@@ -117,22 +117,8 @@ int actor_request(snac *snac, char *actor, d_char **data)
117 } 117 }
118 } 118 }
119 119
120#if 0 120 if (valid_status(status) && data && *data)
121 if (valid_status(status) && data && *data) { 121 inbox_add_by_actor(*data);
122 xs *fn = xs_fmt("%s/inboxes.lst", srv_basedir);
123 FILE *f;
124
125 if ((f = fopen(fn, "a")) != NULL) {
126 char *v;
127 if (!xs_is_null(v = xs_dict_get(*data, "endpoints")) &&
128 !xs_is_null(v = xs_dict_get(v, "sharedInbox"))) {
129 fprintf(f, "%s\n", v);
130 }
131
132 fclose(f);
133 }
134 }
135#endif
136 122
137 return status; 123 return status;
138} 124}
diff --git a/data.c b/data.c
index 8934f31..208c057 100644
--- a/data.c
+++ b/data.c
@@ -96,6 +96,9 @@ int srv_open(char *basedir, int auto_upgrade)
96 xs *qdir = xs_fmt("%s/queue", srv_basedir); 96 xs *qdir = xs_fmt("%s/queue", srv_basedir);
97 mkdirx(qdir); 97 mkdirx(qdir);
98 98
99 xs *ibdir = xs_fmt("%s/inboxes", srv_basedir);
100 mkdirx(ibdir);
101
99#ifdef __OpenBSD__ 102#ifdef __OpenBSD__
100 char *v = xs_dict_get(srv_config, "disable_openbsd_security"); 103 char *v = xs_dict_get(srv_config, "disable_openbsd_security");
101 104
@@ -1363,6 +1366,37 @@ d_char *history_list(snac *snac)
1363} 1366}
1364 1367
1365 1368
1369/** inbox collection **/
1370
1371void inbox_add(const char *inbox)
1372/* collects a shared inbox */
1373{
1374 xs *md5 = xs_md5_hex(inbox, strlen(inbox));
1375 xs *fn = xs_fmt("%s/inboxes/%s", srv_basedir, md5);
1376 FILE *f;
1377
1378 if ((f = fopen(fn, "w")) != NULL) {
1379 pthread_mutex_lock(&data_mutex);
1380
1381 fprintf(f, "%s\n", inbox);
1382 fclose(f);
1383
1384 pthread_mutex_unlock(&data_mutex);
1385 }
1386}
1387
1388
1389void inbox_add_by_actor(const xs_dict *actor)
1390/* collects an actor's shared inbox, if it has one */
1391{
1392 char *v;
1393
1394 if (!xs_is_null(v = xs_dict_get(actor, "endpoints")) &&
1395 !xs_is_null(v = xs_dict_get(v, "sharedInbox")))
1396 inbox_add(v);
1397}
1398
1399
1366/** the queue **/ 1400/** the queue **/
1367 1401
1368static xs_dict *_enqueue_put(const char *fn, xs_dict *msg) 1402static xs_dict *_enqueue_put(const char *fn, xs_dict *msg)
diff --git a/snac.h b/snac.h
index bc929df..9cca864 100644
--- a/snac.h
+++ b/snac.h
@@ -132,6 +132,9 @@ d_char *history_get(snac *snac, char *id);
132int history_del(snac *snac, char *id); 132int history_del(snac *snac, char *id);
133d_char *history_list(snac *snac); 133d_char *history_list(snac *snac);
134 134
135void inbox_add(const char *inbox);
136void inbox_add_by_actor(const xs_dict *actor);
137
135void enqueue_input(snac *snac, xs_dict *msg, xs_dict *req, int retries); 138void enqueue_input(snac *snac, xs_dict *msg, xs_dict *req, int retries);
136void enqueue_output_raw(const char *keyid, const char *seckey, 139void enqueue_output_raw(const char *keyid, const char *seckey,
137 xs_dict *msg, xs_str *inbox, int retries); 140 xs_dict *msg, xs_str *inbox, int retries);
diff --git a/utils.c b/utils.c
index 384fde9..cdfa2e6 100644
--- a/utils.c
+++ b/utils.c
@@ -157,6 +157,9 @@ int snac_init(const char *basedir)
157 xs *qdir = xs_fmt("%s/queue", srv_basedir); 157 xs *qdir = xs_fmt("%s/queue", srv_basedir);
158 mkdirx(qdir); 158 mkdirx(qdir);
159 159
160 xs *ibdir = xs_fmt("%s/inbox", srv_basedir);
161 mkdirx(ibdir);
162
160 xs *gfn = xs_fmt("%s/greeting.html", srv_basedir); 163 xs *gfn = xs_fmt("%s/greeting.html", srv_basedir);
161 if ((f = fopen(gfn, "w")) == NULL) { 164 if ((f = fopen(gfn, "w")) == NULL) {
162 printf("ERROR: cannot create '%s'\n", gfn); 165 printf("ERROR: cannot create '%s'\n", gfn);