Przeglądaj źródła

Also call content_check() from timeline_request().

default 2 lat temu
rodzic
commit
48941cfeaf
2 zmienionych plików z 16 dodań i 10 usunięć
  1. 13 9
      activitypub.c
  2. 3 1
      data.c

+ 13 - 9
activitypub.c

@@ -354,18 +354,22 @@ int timeline_request(snac *snac, char **id, xs_str **wrk, int level)
                 if (xs_match(type, "Note|Page|Article|Video")) {
                     const char *actor = get_atto(object);
 
-                    /* request (and drop) the actor for this entry */
-                    if (!xs_is_null(actor))
-                        actor_request(snac, actor, NULL);
+                    if (content_check("filter_reject.txt", object))
+                        snac_log(snac, xs_fmt("timeline_request rejected by content %s", nid));
+                    else {
+                        /* request (and drop) the actor for this entry */
+                        if (!xs_is_null(actor))
+                            actor_request(snac, actor, NULL);
 
-                    /* does it have an ancestor? */
-                    char *in_reply_to = xs_dict_get(object, "inReplyTo");
+                        /* does it have an ancestor? */
+                        char *in_reply_to = xs_dict_get(object, "inReplyTo");
 
-                    /* store */
-                    timeline_add(snac, nid, object);
+                        /* store */
+                        timeline_add(snac, nid, object);
 
-                    /* recurse! */
-                    timeline_request(snac, &in_reply_to, NULL, level + 1);
+                        /* recurse! */
+                        timeline_request(snac, &in_reply_to, NULL, level + 1);
+                    }
                 }
             }
         }

+ 3 - 1
data.c

@@ -2010,7 +2010,8 @@ int instance_unblock(const char *instance)
 /** content filtering **/
 
 int content_check(const char *file, const xs_dict *msg)
-/* checks if message content matches any of the regexes in file */
+/* checks if a message's content matches any of the regexes in file */
+/* file format: one regex per line */
 {
     xs *fn = xs_fmt("%s/%s", srv_basedir, file);
     FILE *f;
@@ -2021,6 +2022,7 @@ int content_check(const char *file, const xs_dict *msg)
         if ((f = fopen(fn, "r")) != NULL) {
             srv_debug(1, xs_fmt("content_check: loading regexes from %s", fn));
 
+            /* massage content (strip HTML tags, etc.) */
             xs *c = xs_regex_replace(v, "<[^>]+>", " ");
             c = xs_regex_replace_i(c, " {2,}", " ");
             c = xs_tolower_i(c);