mirror of https://gitlab.com/bashrc2/epicyon
Check for invalid local links at a later stage in the inbox queue
parent
5a71b8c406
commit
04118c02ba
27
content.py
27
content.py
|
@ -1906,12 +1906,33 @@ def words_similarity(content1: str, content2: str, min_words: int) -> int:
|
|||
return 100 - int(diff * 100 / len(histogram1.items()))
|
||||
|
||||
|
||||
def contains_invalid_local_links(content: str) -> bool:
|
||||
def contains_invalid_local_links(domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
content: str) -> bool:
|
||||
"""Returns true if the given content has invalid links
|
||||
"""
|
||||
for inv_str in INVALID_CONTENT_STRINGS:
|
||||
if '?' + inv_str + '=' in content:
|
||||
return True
|
||||
match_str = '?' + inv_str + '='
|
||||
if match_str not in content:
|
||||
continue
|
||||
# extract the urls and check whether they are for the local domain
|
||||
ctr = 0
|
||||
sections = content.split(match_str)
|
||||
final_section_index = len(sections) - 1
|
||||
for section_str in sections:
|
||||
if ctr == final_section_index:
|
||||
continue
|
||||
if '://' in section_str:
|
||||
url = section_str.split('://')[-1]
|
||||
if domain_full in url:
|
||||
return True
|
||||
if onion_domain:
|
||||
if onion_domain in url:
|
||||
return True
|
||||
if i2p_domain:
|
||||
if i2p_domain in url:
|
||||
return True
|
||||
ctr += 1
|
||||
return False
|
||||
|
||||
|
||||
|
|
|
@ -107,7 +107,9 @@ def _receive_new_post_process_newpost(self, fields: {},
|
|||
buy_sites: [],
|
||||
project_version: str,
|
||||
proxy_type: str,
|
||||
max_replies: int) -> int:
|
||||
max_replies: int,
|
||||
onion_domain: str,
|
||||
i2p_domain: str) -> int:
|
||||
""" A new post has been received from the New Post screen and
|
||||
is then sent to the outbox
|
||||
"""
|
||||
|
@ -204,7 +206,8 @@ def _receive_new_post_process_newpost(self, fields: {},
|
|||
min_images_for_accounts,
|
||||
max_hashtags,
|
||||
buy_sites,
|
||||
auto_cw_cache)
|
||||
auto_cw_cache,
|
||||
onion_domain, i2p_domain)
|
||||
print('DEBUG: sending edited public post ' +
|
||||
str(message_json))
|
||||
if fields['schedulePost']:
|
||||
|
@ -500,7 +503,9 @@ def _receive_new_post_process_newunlisted(self, fields: {},
|
|||
buy_sites: [],
|
||||
project_version: str,
|
||||
proxy_type: str,
|
||||
max_replies: int) -> int:
|
||||
max_replies: int,
|
||||
onion_domain: str,
|
||||
i2p_domain: str) -> int:
|
||||
"""Unlisted post has been received from New Post screen
|
||||
and is then sent to the outbox
|
||||
"""
|
||||
|
@ -588,7 +593,8 @@ def _receive_new_post_process_newunlisted(self, fields: {},
|
|||
min_images_for_accounts,
|
||||
max_hashtags,
|
||||
buy_sites,
|
||||
auto_cw_cache)
|
||||
auto_cw_cache,
|
||||
onion_domain, i2p_domain)
|
||||
print('DEBUG: sending edited unlisted post ' +
|
||||
str(message_json))
|
||||
|
||||
|
@ -647,7 +653,9 @@ def _receive_new_post_process_newfollowers(self, fields: {},
|
|||
buy_sites: [],
|
||||
project_version: str,
|
||||
proxy_type: str,
|
||||
max_replies: int) -> int:
|
||||
max_replies: int,
|
||||
onion_domain: str,
|
||||
i2p_domain: str) -> int:
|
||||
"""Followers only post has been received from New Post screen
|
||||
and is then sent to the outbox
|
||||
"""
|
||||
|
@ -740,7 +748,8 @@ def _receive_new_post_process_newfollowers(self, fields: {},
|
|||
min_images_for_accounts,
|
||||
max_hashtags,
|
||||
buy_sites,
|
||||
auto_cw_cache)
|
||||
auto_cw_cache,
|
||||
onion_domain, i2p_domain)
|
||||
print('DEBUG: sending edited followers post ' +
|
||||
str(message_json))
|
||||
|
||||
|
@ -800,7 +809,9 @@ def _receive_new_post_process_newdm(self, fields: {},
|
|||
buy_sites: [],
|
||||
project_version: str,
|
||||
proxy_type: str,
|
||||
max_replies: int) -> int:
|
||||
max_replies: int,
|
||||
onion_domain: str,
|
||||
i2p_domain: str) -> int:
|
||||
"""Direct message post has been received from New Post screen
|
||||
and is then sent to the outbox
|
||||
"""
|
||||
|
@ -905,7 +916,8 @@ def _receive_new_post_process_newdm(self, fields: {},
|
|||
min_images_for_accounts,
|
||||
max_hashtags,
|
||||
buy_sites,
|
||||
auto_cw_cache)
|
||||
auto_cw_cache,
|
||||
onion_domain, i2p_domain)
|
||||
print('DEBUG: sending edited dm post ' +
|
||||
str(message_json))
|
||||
|
||||
|
@ -965,7 +977,9 @@ def _receive_new_post_process_newreminder(self, fields: {}, nickname: str,
|
|||
max_hashtags: int,
|
||||
buy_sites: [],
|
||||
project_version: str,
|
||||
proxy_type: str) -> int:
|
||||
proxy_type: str,
|
||||
onion_domain: str,
|
||||
i2p_domain: str) -> int:
|
||||
"""Reminder post has been received from New Post screen
|
||||
and is then sent to the outbox
|
||||
"""
|
||||
|
@ -1063,7 +1077,8 @@ def _receive_new_post_process_newreminder(self, fields: {}, nickname: str,
|
|||
min_images_for_accounts,
|
||||
max_hashtags,
|
||||
buy_sites,
|
||||
auto_cw_cache)
|
||||
auto_cw_cache,
|
||||
onion_domain, i2p_domain)
|
||||
print('DEBUG: sending edited reminder post ' +
|
||||
str(message_json))
|
||||
if post_to_outbox(self, message_json,
|
||||
|
@ -1265,7 +1280,9 @@ def _receive_new_post_process_newreading(self, fields: {},
|
|||
buy_sites: [],
|
||||
project_version: str,
|
||||
proxy_type: str,
|
||||
max_replies: int) -> int:
|
||||
max_replies: int,
|
||||
onion_domain: str,
|
||||
i2p_domain: str) -> int:
|
||||
"""Reading status post has been received from New Post screen
|
||||
and is then sent to the outbox
|
||||
"""
|
||||
|
@ -1371,7 +1388,8 @@ def _receive_new_post_process_newreading(self, fields: {},
|
|||
min_images_for_accounts,
|
||||
max_hashtags,
|
||||
buy_sites,
|
||||
auto_cw_cache)
|
||||
auto_cw_cache,
|
||||
onion_domain, i2p_domain)
|
||||
print('DEBUG: sending edited reading status post ' +
|
||||
str(message_json))
|
||||
if fields['schedulePost']:
|
||||
|
@ -1825,7 +1843,9 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
|||
buy_sites,
|
||||
project_version,
|
||||
proxy_type,
|
||||
max_replies)
|
||||
max_replies,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
if post_type == 'newblog':
|
||||
return _receive_new_post_process_newblog(
|
||||
self, fields,
|
||||
|
@ -1899,7 +1919,9 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
|||
buy_sites,
|
||||
project_version,
|
||||
proxy_type,
|
||||
max_replies)
|
||||
max_replies,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
if post_type == 'newfollowers':
|
||||
return _receive_new_post_process_newfollowers(
|
||||
self, fields,
|
||||
|
@ -1943,7 +1965,8 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
|||
buy_sites,
|
||||
project_version,
|
||||
proxy_type,
|
||||
max_replies)
|
||||
max_replies,
|
||||
onion_domain, i2p_domain)
|
||||
if post_type == 'newdm':
|
||||
return _receive_new_post_process_newdm(
|
||||
self, fields,
|
||||
|
@ -1988,7 +2011,9 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
|||
buy_sites,
|
||||
project_version,
|
||||
proxy_type,
|
||||
max_replies)
|
||||
max_replies,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
if post_type == 'newreminder':
|
||||
return _receive_new_post_process_newreminder(
|
||||
self, fields,
|
||||
|
@ -2032,7 +2057,8 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
|||
max_hashtags,
|
||||
buy_sites,
|
||||
project_version,
|
||||
proxy_type)
|
||||
proxy_type,
|
||||
onion_domain, i2p_domain)
|
||||
if post_type == 'newreport':
|
||||
return _receive_new_post_process_newreport(
|
||||
self, fields,
|
||||
|
@ -2104,7 +2130,8 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
|||
buy_sites,
|
||||
project_version,
|
||||
proxy_type,
|
||||
max_replies)
|
||||
max_replies,
|
||||
onion_domain, i2p_domain)
|
||||
if post_type in ('newshare', 'newwanted'):
|
||||
return _receive_new_post_process_newshare(
|
||||
self, fields,
|
||||
|
|
|
@ -24,7 +24,6 @@ from inbox import clear_queue_items
|
|||
from blocking import update_blocked_cache
|
||||
from blocking import is_blocked_nickname
|
||||
from blocking import is_blocked_domain
|
||||
from content import contains_invalid_local_links
|
||||
from content import valid_url_lengths
|
||||
from posts import add_to_field
|
||||
from utils import get_instance_url
|
||||
|
@ -508,13 +507,6 @@ def update_inbox_queue(self, nickname: str, message_json: {},
|
|||
# save the json for later queue processing
|
||||
message_bytes_decoded = message_bytes.decode('utf-8')
|
||||
|
||||
if debug:
|
||||
print('INBOX: checking for invalid links')
|
||||
if contains_invalid_local_links(message_bytes_decoded):
|
||||
print('INBOX: post contains invalid local links ' +
|
||||
str(original_message_json))
|
||||
return 5
|
||||
|
||||
self.server.blocked_cache_last_updated = \
|
||||
update_blocked_cache(self.server.base_dir,
|
||||
self.server.blocked_cache,
|
||||
|
|
49
inbox.py
49
inbox.py
|
@ -161,6 +161,7 @@ from webapp_hashtagswarm import html_hash_tag_swarm
|
|||
from person import valid_sending_actor
|
||||
from person import get_person_avatar_url
|
||||
from fitnessFunctions import fitness_performance
|
||||
from content import contains_invalid_local_links
|
||||
from content import reject_twitter_summary
|
||||
from content import load_dogwhistles
|
||||
from content import valid_url_lengths
|
||||
|
@ -1425,7 +1426,8 @@ def _valid_post_content(base_dir: str, nickname: str, domain: str,
|
|||
system_language: str,
|
||||
http_prefix: str, domain_full: str,
|
||||
person_cache: {},
|
||||
max_hashtags: int) -> bool:
|
||||
max_hashtags: int,
|
||||
onion_domain: str, i2p_domain: str) -> bool:
|
||||
"""Is the content of a received post valid?
|
||||
Check for bad html
|
||||
Check for hellthreads
|
||||
|
@ -1538,6 +1540,15 @@ def _valid_post_content(base_dir: str, nickname: str, domain: str,
|
|||
content_str)
|
||||
return False
|
||||
|
||||
if contains_invalid_local_links(domain_full,
|
||||
onion_domain, i2p_domain,
|
||||
content_str):
|
||||
if message_json['object'].get('id'):
|
||||
print('REJECT: post contains invalid local links ' +
|
||||
str(message_json['object']['id']) + ' ' +
|
||||
str(content_str))
|
||||
return False
|
||||
|
||||
# check (rough) number of mentions
|
||||
mentions_est = _estimate_number_of_mentions(content_str)
|
||||
if mentions_est > max_mentions:
|
||||
|
@ -1650,7 +1661,9 @@ def _receive_edit_to_post(recent_posts_cache: {}, message_json: {},
|
|||
min_images_for_accounts: [],
|
||||
max_hashtags: int,
|
||||
buy_sites: {},
|
||||
auto_cw_cache: {}) -> bool:
|
||||
auto_cw_cache: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str) -> bool:
|
||||
"""A post was edited
|
||||
"""
|
||||
if not has_object_dict(message_json):
|
||||
|
@ -1677,7 +1690,7 @@ def _receive_edit_to_post(recent_posts_cache: {}, message_json: {},
|
|||
allow_local_network_access, debug,
|
||||
system_language, http_prefix,
|
||||
domain_full, person_cache,
|
||||
max_hashtags):
|
||||
max_hashtags, onion_domain, i2p_domain):
|
||||
print('EDITPOST: contains invalid content' + str(message_json))
|
||||
return False
|
||||
|
||||
|
@ -1819,7 +1832,9 @@ def update_edited_post(base_dir: str,
|
|||
min_images_for_accounts: [],
|
||||
max_hashtags: int,
|
||||
buy_sites: {},
|
||||
auto_cw_cache: {}) -> None:
|
||||
auto_cw_cache: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str) -> None:
|
||||
""" When an edited post is created this assigns
|
||||
a published and updated date to it, and uses
|
||||
the previous id
|
||||
|
@ -1868,7 +1883,8 @@ def update_edited_post(base_dir: str,
|
|||
cw_lists, dogwhistles,
|
||||
min_images_for_accounts,
|
||||
max_hashtags, buy_sites,
|
||||
auto_cw_cache)
|
||||
auto_cw_cache,
|
||||
onion_domain, i2p_domain)
|
||||
|
||||
# update the index
|
||||
id_str = edited_postid.split('/')[-1]
|
||||
|
@ -2015,7 +2031,9 @@ def _receive_update_activity(recent_posts_cache: {}, session, base_dir: str,
|
|||
min_images_for_accounts: [],
|
||||
max_hashtags: int,
|
||||
buy_sites: {},
|
||||
auto_cw_cache: {}) -> bool:
|
||||
auto_cw_cache: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str) -> bool:
|
||||
|
||||
"""Receives an Update activity within the POST section of HTTPServer
|
||||
"""
|
||||
|
@ -2061,7 +2079,8 @@ def _receive_update_activity(recent_posts_cache: {}, session, base_dir: str,
|
|||
cw_lists, dogwhistles,
|
||||
min_images_for_accounts,
|
||||
max_hashtags, buy_sites,
|
||||
auto_cw_cache):
|
||||
auto_cw_cache,
|
||||
onion_domain, i2p_domain):
|
||||
print('EDITPOST: received ' + message_json['object']['id'])
|
||||
return True
|
||||
else:
|
||||
|
@ -4776,7 +4795,9 @@ def _former_representations_to_edits(base_dir: str,
|
|||
http_prefix: str,
|
||||
domain_full: str, person_cache: {},
|
||||
max_hashtags: int,
|
||||
port: int) -> bool:
|
||||
port: int,
|
||||
onion_domain: str,
|
||||
i2p_domain: str) -> bool:
|
||||
""" Some instances use formerRepresentations to store
|
||||
previous edits
|
||||
"""
|
||||
|
@ -4834,7 +4855,7 @@ def _former_representations_to_edits(base_dir: str,
|
|||
allow_local_network_access, debug,
|
||||
system_language, http_prefix,
|
||||
domain_full, person_cache,
|
||||
max_hashtags):
|
||||
max_hashtags, onion_domain, i2p_domain):
|
||||
continue
|
||||
|
||||
post_history_json[published_str] = prev_post_json
|
||||
|
@ -5235,7 +5256,7 @@ def _inbox_after_initial(server, inbox_start_time,
|
|||
allow_local_network_access, debug,
|
||||
system_language, http_prefix,
|
||||
domain_full, person_cache,
|
||||
max_hashtags):
|
||||
max_hashtags, onion_domain, i2p_domain):
|
||||
fitness_performance(inbox_start_time, server.fitness,
|
||||
'INBOX', '_valid_post_content',
|
||||
debug)
|
||||
|
@ -5452,7 +5473,9 @@ def _inbox_after_initial(server, inbox_start_time,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
person_cache,
|
||||
max_hashtags, port):
|
||||
max_hashtags, port,
|
||||
onion_domain,
|
||||
i2p_domain):
|
||||
# ensure that there is an updated entry
|
||||
# for the publication date
|
||||
if post_json_object['object'].get('published') and \
|
||||
|
@ -6719,7 +6742,9 @@ def run_inbox_queue(server,
|
|||
cw_lists, dogwhistles,
|
||||
server.min_images_for_accounts,
|
||||
max_hashtags, server.buy_sites,
|
||||
server.auto_cw_cache):
|
||||
server.auto_cw_cache,
|
||||
onion_domain,
|
||||
i2p_domain):
|
||||
if debug:
|
||||
print('Queue: Update accepted from ' + key_id)
|
||||
if os.path.isfile(queue_filename):
|
||||
|
|
Loading…
Reference in New Issue