New function pending_add().

This commit is contained in:
default 2024-11-24 08:17:38 +01:00
parent 35b35ec3af
commit 7287776fd1
3 changed files with 45 additions and 12 deletions

View file

@ -1927,6 +1927,13 @@ int process_input_message(snac *snac, const xs_dict *msg, const xs_dict *req)
object_add(actor, actor_obj); object_add(actor, actor_obj);
} }
if (xs_is_true(xs_dict_get(snac->config, "approve_followers"))) {
pending_add(snac, actor, msg);
snac_log(snac, xs_fmt("new pending follower approval %s", actor));
}
else {
/* automatic following */
xs *f_msg = xs_dup(msg); xs *f_msg = xs_dup(msg);
xs *reply = msg_accept(snac, f_msg, actor); xs *reply = msg_accept(snac, f_msg, actor);
@ -1943,6 +1950,8 @@ int process_input_message(snac *snac, const xs_dict *msg, const xs_dict *req)
follower_add(snac, actor); follower_add(snac, actor);
snac_log(snac, xs_fmt("new follower %s", actor)); snac_log(snac, xs_fmt("new follower %s", actor));
}
do_notify = 1; do_notify = 1;
} }
else else

22
data.c
View file

@ -1202,6 +1202,28 @@ xs_list *follower_list(snac *snac)
} }
/** pending followers **/
int pending_add(snac *user, const char *actor, const xs_dict *msg)
/* stores the follow message for later confirmation */
{
xs *dir = xs_fmt("%s/pending", user->basedir);
xs *md5 = xs_md5_hex(actor, strlen(actor));
xs *fn = xs_fmt("%s/%s.json", dir, md5);
FILE *f;
mkdirx(dir);
if ((f = fopen(fn, "w")) == NULL)
return -1;
xs_json_dump(msg, 4, f);
fclose(f);
return 0;
}
/** timeline **/ /** timeline **/
double timeline_mtime(snac *snac) double timeline_mtime(snac *snac)

2
snac.h
View file

@ -141,6 +141,8 @@ int follower_del(snac *snac, const char *actor);
int follower_check(snac *snac, const char *actor); int follower_check(snac *snac, const char *actor);
xs_list *follower_list(snac *snac); xs_list *follower_list(snac *snac);
int pending_add(snac *user, const char *actor, const xs_dict *msg);
double timeline_mtime(snac *snac); double timeline_mtime(snac *snac);
int timeline_touch(snac *snac); int timeline_touch(snac *snac);
int timeline_here(snac *snac, const char *md5); int timeline_here(snac *snac, const char *md5);