commit 0d78dee

default  ·  2023-10-22 07:00:37 +0000 UTC
parent 575a152
New function deluser(), to delete a user.

Only unfollows by now.
3 files changed,  +33, -1
M main.c
M snac.h
M main.c
+6, -1
 1@@ -19,6 +19,7 @@ int usage(void)
 2     printf("init [{basedir}]                    Initializes the data storage\n");
 3     printf("upgrade {basedir}                   Upgrade to a new version\n");
 4     printf("adduser {basedir} [{uid}]           Adds a new user\n");
 5+    printf("deluser {basedir} {uid}             Deletes a user\n");
 6     printf("httpd {basedir}                     Starts the HTTPD daemon\n");
 7     printf("purge {basedir}                     Purges old data\n");
 8     printf("webfinger {basedir} {actor}         Queries about an actor (@user@host or actor url)\n");
 9@@ -169,7 +170,7 @@ int main(int argc, char *argv[])
10     }
11 
12     if (!user_open(&snac, user)) {
13-        printf("error in user '%s'\n", user);
14+        printf("invalid user '%s'\n", user);
15         return 1;
16     }
17 
18@@ -179,6 +180,10 @@ int main(int argc, char *argv[])
19         return resetpwd(&snac);
20     }
21 
22+    if (strcmp(cmd, "deluser") == 0) { /** **/
23+        return deluser(&snac);
24+    }
25+
26     if (strcmp(cmd, "queue") == 0) { /** **/
27         process_user_queue(&snac);
28         return 0;
M snac.h
+1, -0
1@@ -276,6 +276,7 @@ int html_post_handler(const xs_dict *req, const char *q_path,
2 int snac_init(const char *_basedir);
3 int adduser(const char *uid);
4 int resetpwd(snac *snac);
5+int deluser(snac *user);
6 
7 extern const char *snac_blurb;
8 
+26, -0
 1@@ -337,3 +337,29 @@ int resetpwd(snac *snac)
 2 
 3     return ret;
 4 }
 5+
 6+
 7+int deluser(snac *user)
 8+/* deletes a user */
 9+{
10+    int ret = 0;
11+    xs *fwers = following_list(user);
12+    xs_list *p = fwers;
13+    xs_str *v;
14+
15+    while (xs_list_iter(&p, &v)) {
16+        xs *object = NULL;
17+
18+        if (valid_status(following_get(user, v, &object))) {
19+            xs *msg = msg_undo(user, xs_dict_get(object, "object"));
20+
21+            following_del(user, v);
22+
23+            enqueue_output_by_actor(user, msg, v, 0);
24+
25+            printf("Unfollowing actor %s\n", v);
26+        }
27+    }
28+
29+    return ret;
30+}