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 */