diff --git a/inbox.py b/inbox.py index 421e0722b..ca9758e42 100644 --- a/inbox.py +++ b/inbox.py @@ -18,6 +18,7 @@ from languages import understood_post_language from like import update_likes_collection from reaction import update_reaction_collection from reaction import valid_emoji_content +from utils import quote_toots_allowed from utils import get_post_attachments from utils import lines_in_file from utils import resembles_url @@ -751,10 +752,16 @@ def save_post_to_inbox_queue(base_dir: str, http_prefix: str, if obj_dict_exists: if is_quote_toot(post_json_object, content_str): - if post_json_object.get('id'): - print('REJECT: inbox quote toot ' + - str(post_json_object['id'])) - return None + allow_quotes = False + if sending_actor: + allow_quotes = \ + quote_toots_allowed(base_dir, nickname, domain, + post_nickname, post_domain) + if not allow_quotes: + if post_json_object.get('id'): + print('REJECT: inbox quote toot ' + + str(post_json_object['id'])) + return None # is this a reply to a blocked domain or account? reply_id = get_reply_to(post_json_object['object']) diff --git a/outbox.py b/outbox.py index 260bd587e..96abef9b2 100644 --- a/outbox.py +++ b/outbox.py @@ -15,6 +15,7 @@ from posts import outbox_message_create_wrap from posts import save_post_to_box from posts import send_to_followers_thread from posts import send_to_named_addresses_thread +from utils import quote_toots_allowed from utils import get_post_attachments from utils import get_attributed_to from utils import contains_invalid_actor_url_chars @@ -311,8 +312,12 @@ def post_message_to_outbox(session, translate: {}, return False if is_quote_toot(message_json, ''): - print('REJECT: POST quote toot ' + str(message_json)) - return False + allow_quotes = \ + quote_toots_allowed(base_dir, post_to_nickname, domain, + None, None) + if not allow_quotes: + print('REJECT: POST quote toot ' + str(message_json)) + return False content_str = get_base_content_from_post(message_json, system_language) if content_str: diff --git a/utils.py b/utils.py index 90495ac85..1a35544b5 100644 --- a/utils.py +++ b/utils.py @@ -4801,6 +4801,27 @@ def is_quote_toot(post_json_object: str, content: str) -> bool: return False +def quote_toots_allowed(base_dir: str, nickname: str, domain: str, + sender_nickname: str, sender_domain: str) -> bool: + """ Returns true if quote toots are allowed by the given account + for the given sender + """ + account_dir = acct_dir(base_dir, nickname, domain) + quotes_enabled_filename = account_dir + '/.allowQuotes' + if os.path.isfile(quotes_enabled_filename): + # check blocks on individual sending accounts + quotes_blocked_filename = account_dir + '/quotesblocked.txt' + if sender_nickname is None: + return True + if os.path.isfile(quotes_blocked_filename): + sender_handle = sender_nickname + '@' + sender_domain + if text_in_file(sender_handle, quotes_blocked_filename): + # quote toots not permitted from this sender + return False + return True + return False + + def license_link_from_name(license_name: str) -> str: """Returns the license link from its name """