diff --git a/activitypub.c b/activitypub.c index e2a40c8..b6a07c9 100644 --- a/activitypub.c +++ b/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); + } } } } diff --git a/data.c b/data.c index 67536fd..44ce628 100644 --- a/data.c +++ b/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);