summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)
}
}
-#if 0
- if (valid_status(status) && data && *data) {
- xs *fn = xs_fmt("%s/inboxes.lst", srv_basedir);
- FILE *f;
-
- if ((f = fopen(fn, "a")) != NULL) {
- char *v;
- if (!xs_is_null(v = xs_dict_get(*data, "endpoints")) &&
- !xs_is_null(v = xs_dict_get(v, "sharedInbox"))) {
- fprintf(f, "%s\n", v);
- }
-
- fclose(f);
- }
- }
-#endif
+ if (valid_status(status) && data && *data)
+ inbox_add_by_actor(*data);
return status;
}
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)
xs *qdir = xs_fmt("%s/queue", srv_basedir);
mkdirx(qdir);
+ xs *ibdir = xs_fmt("%s/inboxes", srv_basedir);
+ mkdirx(ibdir);
+
#ifdef __OpenBSD__
char *v = xs_dict_get(srv_config, "disable_openbsd_security");
@@ -1363,6 +1366,37 @@ d_char *history_list(snac *snac)
}
+/** inbox collection **/
+
+void inbox_add(const char *inbox)
+/* collects a shared inbox */
+{
+ xs *md5 = xs_md5_hex(inbox, strlen(inbox));
+ xs *fn = xs_fmt("%s/inboxes/%s", srv_basedir, md5);
+ FILE *f;
+
+ if ((f = fopen(fn, "w")) != NULL) {
+ pthread_mutex_lock(&data_mutex);
+
+ fprintf(f, "%s\n", inbox);
+ fclose(f);
+
+ pthread_mutex_unlock(&data_mutex);
+ }
+}
+
+
+void inbox_add_by_actor(const xs_dict *actor)
+/* collects an actor's shared inbox, if it has one */
+{
+ char *v;
+
+ if (!xs_is_null(v = xs_dict_get(actor, "endpoints")) &&
+ !xs_is_null(v = xs_dict_get(v, "sharedInbox")))
+ inbox_add(v);
+}
+
+
/** the queue **/
static 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);
int history_del(snac *snac, char *id);
d_char *history_list(snac *snac);
+void inbox_add(const char *inbox);
+void inbox_add_by_actor(const xs_dict *actor);
+
void enqueue_input(snac *snac, xs_dict *msg, xs_dict *req, int retries);
void enqueue_output_raw(const char *keyid, const char *seckey,
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)
xs *qdir = xs_fmt("%s/queue", srv_basedir);
mkdirx(qdir);
+ xs *ibdir = xs_fmt("%s/inbox", srv_basedir);
+ mkdirx(ibdir);
+
xs *gfn = xs_fmt("%s/greeting.html", srv_basedir);
if ((f = fopen(gfn, "w")) == NULL) {
printf("ERROR: cannot create '%s'\n", gfn);