commit 1763e33
default
·
2023-08-06 16:40:50 +0000 UTC
parent 66e34b3
Added support for limiting followed users.
M
data.c
+44,
-0
1@@ -1500,6 +1500,50 @@ int actor_get(snac *snac1, const char *actor, xs_dict **data)
2 }
3
4
5+/** user limiting (announce blocks) **/
6+
7+int limited(snac *user, const char *id, int cmd)
8+/* announce messages from a followed (0: check, 1: limit; 2: unlimit) */
9+{
10+ int ret = 0;
11+ xs *fn = xs_fmt("%s/limited/", user->basedir);
12+ mkdirx(fn);
13+
14+ xs *md5 = xs_md5_hex(id, strlen(id));
15+ fn = xs_str_cat(fn, md5);
16+
17+ switch (cmd) {
18+ case 0: /** check **/
19+ ret = !!(mtime(fn) > 0.0);
20+ break;
21+
22+ case 1: /** limit **/
23+ if (mtime(fn) > 0.0)
24+ ret = -1;
25+ else {
26+ FILE *f;
27+
28+ if ((f = fopen(fn, "w")) != NULL) {
29+ fprintf(f, "%s\n", id);
30+ fclose(f);
31+ }
32+ else
33+ ret = -2;
34+ }
35+ break;
36+
37+ case 2: /** unlimit **/
38+ if (mtime(fn) > 0.0)
39+ ret = unlink(fn);
40+ else
41+ ret = -1;
42+ break;
43+ }
44+
45+ return ret;
46+}
47+
48+
49 /** static data **/
50
51 xs_str *_static_fn(snac *snac, const char *id)
M
snac.h
+6,
-1
1@@ -1,7 +1,7 @@
2 /* snac - A simple, minimalistic ActivityPub instance */
3 /* copyright (c) 2022 - 2023 grunfink et al. / MIT license */
4
5-#define VERSION "2.39"
6+#define VERSION "2.40-dev"
7
8 #define USER_AGENT "snac/" VERSION
9
10@@ -132,6 +132,11 @@ int unpin(snac *user, const char *id);
11 int is_pinned(snac *user, const char *id);
12 xs_list *pinned_list(snac *user);
13
14+int limited(snac *user, const char *id, int cmd);
15+#define is_limited(user, id) limited((user), (id), 0)
16+#define limit(user, id) limited((user), (id), 1)
17+#define unlimit(user, id) limited((user), (id), 2)
18+
19 void hide(snac *snac, const char *id);
20 int is_hidden(snac *snac, const char *id);
21