commit cbcd573
default
·
2023-12-17 16:35:59 +0000 UTC
parent 04745f5
Also check for the .../followers rcpt for non-public messages.
1 files changed,
+25,
-3
+25,
-3
1@@ -489,14 +489,36 @@ int is_msg_for_me(snac *snac, const xs_dict *c_msg)
2 xs_list *p = rcpts;
3 xs_str *v;
4
5+ xs *actor_followers = NULL;
6+
7+ if (!pub_msg) {
8+ /* not a public message; get the actor and its followers list */
9+ xs *actor_obj = NULL;
10+
11+ if (valid_status(object_get(actor, &actor_obj))) {
12+ if ((v = xs_dict_get(actor_obj, "followers")))
13+ actor_followers = xs_dup(v);
14+ }
15+ }
16+
17 while(xs_list_iter(&p, &v)) {
18 /* explicitly for me? accept */
19 if (strcmp(v, snac->actor) == 0)
20 return 2;
21
22- /* for someone we follow? (probably cc'ed) accept */
23- if (pub_msg && following_check(snac, v))
24- return 5;
25+ if (pub_msg) {
26+ /* a public message for someone we follow? (probably cc'ed) accept */
27+ if (following_check(snac, v))
28+ return 5;
29+ }
30+ else
31+ if (actor_followers && strcmp(v, actor_followers) == 0) {
32+ /* if this message is for this actor's followers, are we one of them? */
33+ if (following_check(snac, actor)) {
34+ snac_debug(snac, 0, xs_fmt("---> non-public msg for followers"));
35+ return 6;
36+ }
37+ }
38 }
39
40 /* accept if it's by someone we follow */