summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data.c44
-rw-r--r--snac.h7
2 files changed, 50 insertions, 1 deletions
diff --git a/data.c b/data.c
index d0ed7b9..61438b7 100644
--- a/data.c
+++ b/data.c
@@ -1500,6 +1500,50 @@ int actor_get(snac *snac1, const char *actor, xs_dict **data)
1500} 1500}
1501 1501
1502 1502
1503/** user limiting (announce blocks) **/
1504
1505int limited(snac *user, const char *id, int cmd)
1506/* announce messages from a followed (0: check, 1: limit; 2: unlimit) */
1507{
1508 int ret = 0;
1509 xs *fn = xs_fmt("%s/limited/", user->basedir);
1510 mkdirx(fn);
1511
1512 xs *md5 = xs_md5_hex(id, strlen(id));
1513 fn = xs_str_cat(fn, md5);
1514
1515 switch (cmd) {
1516 case 0: /** check **/
1517 ret = !!(mtime(fn) > 0.0);
1518 break;
1519
1520 case 1: /** limit **/
1521 if (mtime(fn) > 0.0)
1522 ret = -1;
1523 else {
1524 FILE *f;
1525
1526 if ((f = fopen(fn, "w")) != NULL) {
1527 fprintf(f, "%s\n", id);
1528 fclose(f);
1529 }
1530 else
1531 ret = -2;
1532 }
1533 break;
1534
1535 case 2: /** unlimit **/
1536 if (mtime(fn) > 0.0)
1537 ret = unlink(fn);
1538 else
1539 ret = -1;
1540 break;
1541 }
1542
1543 return ret;
1544}
1545
1546
1503/** static data **/ 1547/** static data **/
1504 1548
1505xs_str *_static_fn(snac *snac, const char *id) 1549xs_str *_static_fn(snac *snac, const char *id)
diff --git a/snac.h b/snac.h
index 2b60165..4652827 100644
--- a/snac.h
+++ b/snac.h
@@ -1,7 +1,7 @@
1/* snac - A simple, minimalistic ActivityPub instance */ 1/* snac - A simple, minimalistic ActivityPub instance */
2/* copyright (c) 2022 - 2023 grunfink et al. / MIT license */ 2/* copyright (c) 2022 - 2023 grunfink et al. / MIT license */
3 3
4#define VERSION "2.39" 4#define VERSION "2.40-dev"
5 5
6#define USER_AGENT "snac/" VERSION 6#define USER_AGENT "snac/" VERSION
7 7
@@ -132,6 +132,11 @@ int unpin(snac *user, const char *id);
132int is_pinned(snac *user, const char *id); 132int is_pinned(snac *user, const char *id);
133xs_list *pinned_list(snac *user); 133xs_list *pinned_list(snac *user);
134 134
135int limited(snac *user, const char *id, int cmd);
136#define is_limited(user, id) limited((user), (id), 0)
137#define limit(user, id) limited((user), (id), 1)
138#define unlimit(user, id) limited((user), (id), 2)
139
135void hide(snac *snac, const char *id); 140void hide(snac *snac, const char *id);
136int is_hidden(snac *snac, const char *id); 141int is_hidden(snac *snac, const char *id);
137 142