diff options
| author | 2023-03-02 08:43:50 +0100 | |
|---|---|---|
| committer | 2023-03-02 08:43:50 +0100 | |
| commit | 5e3c50d6e1ea2105add614fa2eb45612e577ddac (patch) | |
| tree | 5444d35bde941cb7acd91c543a2eb4edfc0a2b0a | |
| parent | Minor refactoring to actor_request(). (diff) | |
| download | snac2-5e3c50d6e1ea2105add614fa2eb45612e577ddac.tar.gz snac2-5e3c50d6e1ea2105add614fa2eb45612e577ddac.tar.xz snac2-5e3c50d6e1ea2105add614fa2eb45612e577ddac.zip | |
New inbox collection functions.
| -rw-r--r-- | activitypub.c | 18 | ||||
| -rw-r--r-- | data.c | 34 | ||||
| -rw-r--r-- | snac.h | 3 | ||||
| -rw-r--r-- | utils.c | 3 |
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 | } |
| @@ -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 | |||
| 1371 | void 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 | |||
| 1389 | void 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 | ||
| 1368 | static xs_dict *_enqueue_put(const char *fn, xs_dict *msg) | 1402 | static xs_dict *_enqueue_put(const char *fn, xs_dict *msg) |
| @@ -132,6 +132,9 @@ d_char *history_get(snac *snac, char *id); | |||
| 132 | int history_del(snac *snac, char *id); | 132 | int history_del(snac *snac, char *id); |
| 133 | d_char *history_list(snac *snac); | 133 | d_char *history_list(snac *snac); |
| 134 | 134 | ||
| 135 | void inbox_add(const char *inbox); | ||
| 136 | void inbox_add_by_actor(const xs_dict *actor); | ||
| 137 | |||
| 135 | void enqueue_input(snac *snac, xs_dict *msg, xs_dict *req, int retries); | 138 | void enqueue_input(snac *snac, xs_dict *msg, xs_dict *req, int retries); |
| 136 | void enqueue_output_raw(const char *keyid, const char *seckey, | 139 | void 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); |
| @@ -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); |