mirror of https://gitlab.com/bashrc2/epicyon
Don't clear down DMs from other instances
parent
45feb65b6a
commit
ec82a20c2f
94
utils.py
94
utils.py
|
@ -91,6 +91,15 @@ def get_actor_languages_list(actor_json: {}) -> []:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
def has_object_dict(post_json_object: {}) -> bool:
|
||||||
|
"""Returns true if the given post has an object dict
|
||||||
|
"""
|
||||||
|
if post_json_object.get('object'):
|
||||||
|
if isinstance(post_json_object['object'], dict):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def get_content_from_post(post_json_object: {}, system_language: str,
|
def get_content_from_post(post_json_object: {}, system_language: str,
|
||||||
languages_understood: [],
|
languages_understood: [],
|
||||||
contentType: str = "content") -> str:
|
contentType: str = "content") -> str:
|
||||||
|
@ -1794,6 +1803,49 @@ def _delete_conversation_post(base_dir: str, nickname: str, domain: str,
|
||||||
str(conversation_filename))
|
str(conversation_filename))
|
||||||
|
|
||||||
|
|
||||||
|
def is_dm(post_json_object: {}) -> bool:
|
||||||
|
"""Returns true if the given post is a DM
|
||||||
|
"""
|
||||||
|
if post_json_object['type'] != 'Create':
|
||||||
|
return False
|
||||||
|
if not has_object_dict(post_json_object):
|
||||||
|
return False
|
||||||
|
if post_json_object['object']['type'] != 'ChatMessage':
|
||||||
|
if post_json_object['object']['type'] != 'Note' and \
|
||||||
|
post_json_object['object']['type'] != 'Page' and \
|
||||||
|
post_json_object['object']['type'] != 'Patch' and \
|
||||||
|
post_json_object['object']['type'] != 'EncryptedMessage' and \
|
||||||
|
post_json_object['object']['type'] != 'Article':
|
||||||
|
return False
|
||||||
|
if post_json_object['object'].get('moderationStatus'):
|
||||||
|
return False
|
||||||
|
fields = ('to', 'cc')
|
||||||
|
for field_name in fields:
|
||||||
|
if not post_json_object['object'].get(field_name):
|
||||||
|
continue
|
||||||
|
for to_address in post_json_object['object'][field_name]:
|
||||||
|
if to_address.endswith('#Public'):
|
||||||
|
return False
|
||||||
|
if to_address.endswith('followers'):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def _is_remote_dm(domain_full: str, post_json_object: {}) -> bool:
|
||||||
|
"""Is the given post a DM from a different domain?
|
||||||
|
"""
|
||||||
|
if not is_dm(post_json_object):
|
||||||
|
return False
|
||||||
|
this_post_json = post_json_object
|
||||||
|
if has_object_dict(post_json_object):
|
||||||
|
this_post_json = post_json_object['object']
|
||||||
|
if this_post_json.get('attributedTo'):
|
||||||
|
if isinstance(this_post_json['attributedTo'], str):
|
||||||
|
if '://' + domain_full + '/' not in this_post_json['attributedTo']:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def delete_post(base_dir: str, http_prefix: str,
|
def delete_post(base_dir: str, http_prefix: str,
|
||||||
nickname: str, domain: str, post_filename: str,
|
nickname: str, domain: str, post_filename: str,
|
||||||
debug: bool, recent_posts_cache: {}) -> None:
|
debug: bool, recent_posts_cache: {}) -> None:
|
||||||
|
@ -1814,6 +1866,11 @@ def delete_post(base_dir: str, http_prefix: str,
|
||||||
str(post_filename))
|
str(post_filename))
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# don't allow DMs to be deleted if they came from a different instance
|
||||||
|
# otherwise this breaks expectations about how DMs should operate
|
||||||
|
if _is_remote_dm(domain, post_json_object):
|
||||||
|
return
|
||||||
|
|
||||||
# don't allow deletion of bookmarked posts
|
# don't allow deletion of bookmarked posts
|
||||||
if _is_bookmarked(base_dir, nickname, domain, post_filename):
|
if _is_bookmarked(base_dir, nickname, domain, post_filename):
|
||||||
return
|
return
|
||||||
|
@ -2769,34 +2826,6 @@ def is_chat_message(post_json_object: {}) -> bool:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def is_dm(post_json_object: {}) -> bool:
|
|
||||||
"""Returns true if the given post is a DM
|
|
||||||
"""
|
|
||||||
if post_json_object['type'] != 'Create':
|
|
||||||
return False
|
|
||||||
if not has_object_dict(post_json_object):
|
|
||||||
return False
|
|
||||||
if post_json_object['object']['type'] != 'ChatMessage':
|
|
||||||
if post_json_object['object']['type'] != 'Note' and \
|
|
||||||
post_json_object['object']['type'] != 'Page' and \
|
|
||||||
post_json_object['object']['type'] != 'Patch' and \
|
|
||||||
post_json_object['object']['type'] != 'EncryptedMessage' and \
|
|
||||||
post_json_object['object']['type'] != 'Article':
|
|
||||||
return False
|
|
||||||
if post_json_object['object'].get('moderationStatus'):
|
|
||||||
return False
|
|
||||||
fields = ('to', 'cc')
|
|
||||||
for field_name in fields:
|
|
||||||
if not post_json_object['object'].get(field_name):
|
|
||||||
continue
|
|
||||||
for to_address in post_json_object['object'][field_name]:
|
|
||||||
if to_address.endswith('#Public'):
|
|
||||||
return False
|
|
||||||
if to_address.endswith('followers'):
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def is_reply(post_json_object: {}, actor: str) -> bool:
|
def is_reply(post_json_object: {}, actor: str) -> bool:
|
||||||
"""Returns true if the given post is a reply to the given actor
|
"""Returns true if the given post is a reply to the given actor
|
||||||
"""
|
"""
|
||||||
|
@ -3037,15 +3066,6 @@ def user_agent_domain(user_agent: str, debug: bool) -> str:
|
||||||
return agent_domain
|
return agent_domain
|
||||||
|
|
||||||
|
|
||||||
def has_object_dict(post_json_object: {}) -> bool:
|
|
||||||
"""Returns true if the given post has an object dict
|
|
||||||
"""
|
|
||||||
if post_json_object.get('object'):
|
|
||||||
if isinstance(post_json_object['object'], dict):
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def get_alt_path(actor: str, domain_full: str, calling_domain: str) -> str:
|
def get_alt_path(actor: str, domain_full: str, calling_domain: str) -> str:
|
||||||
"""Returns alternate path from the actor
|
"""Returns alternate path from the actor
|
||||||
eg. https://clearnetdomain/path becomes http://oniondomain/path
|
eg. https://clearnetdomain/path becomes http://oniondomain/path
|
||||||
|
|
Loading…
Reference in New Issue