mirror of https://gitlab.com/bashrc2/epicyon
Quote toot functions in their own module
parent
e1b3b7a1a0
commit
54adba4575
|
@ -15,7 +15,7 @@ from session import get_json_valid
|
|||
from session import create_session
|
||||
from flags import is_evil
|
||||
from flags import is_quote_toot
|
||||
from utils import get_quote_toot_url
|
||||
from quote import get_quote_toot_url
|
||||
from utils import get_user_paths
|
||||
from utils import contains_statuses
|
||||
from utils import data_dir
|
||||
|
|
2
flags.py
2
flags.py
|
@ -27,7 +27,7 @@ from utils import date_from_string_format
|
|||
from utils import get_reply_to
|
||||
from utils import text_in_file
|
||||
from utils import get_group_paths
|
||||
from utils import get_quote_toot_url
|
||||
from quote import get_quote_toot_url
|
||||
|
||||
|
||||
def is_featured_writer(base_dir: str, nickname: str, domain: str) -> bool:
|
||||
|
|
2
inbox.py
2
inbox.py
|
@ -22,9 +22,9 @@ from flags import is_group_account
|
|||
from flags import has_group_type
|
||||
from flags import is_quote_toot
|
||||
from flags import url_permitted
|
||||
from quote import quote_toots_allowed
|
||||
from utils import save_mitm_servers
|
||||
from utils import harmless_markup
|
||||
from utils import quote_toots_allowed
|
||||
from utils import lines_in_file
|
||||
from utils import date_epoch
|
||||
from utils import date_utcnow
|
||||
|
|
|
@ -12,7 +12,7 @@ import time
|
|||
from flags import is_recent_post
|
||||
from flags import is_quote_toot
|
||||
from status import actor_status_expired
|
||||
from utils import get_quote_toot_url
|
||||
from quote import get_quote_toot_url
|
||||
from utils import get_actor_from_post_id
|
||||
from utils import contains_invalid_actor_url_chars
|
||||
from utils import get_attributed_to
|
||||
|
|
|
@ -17,8 +17,8 @@ from posts import send_to_followers_thread
|
|||
from posts import send_to_named_addresses_thread
|
||||
from flags import is_featured_writer
|
||||
from flags import is_quote_toot
|
||||
from quote import quote_toots_allowed
|
||||
from utils import data_dir
|
||||
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
|
||||
|
|
|
@ -0,0 +1,108 @@
|
|||
__filename__ = "quote.py"
|
||||
__author__ = "Bob Mottram"
|
||||
__license__ = "AGPL3+"
|
||||
__version__ = "1.6.0"
|
||||
__maintainer__ = "Bob Mottram"
|
||||
__email__ = "bob@libreserver.org"
|
||||
__status__ = "Production"
|
||||
__module_group__ = "Core"
|
||||
|
||||
import os
|
||||
from utils import acct_dir
|
||||
from utils import resembles_url
|
||||
from utils import remove_html
|
||||
from utils import text_in_file
|
||||
|
||||
|
||||
def get_quote_toot_url(post_json_object: str) -> str:
|
||||
""" Returns the url for a quote toot
|
||||
This suffers from a general lack of protocol consensus
|
||||
"""
|
||||
# adhoc quote toot implementations
|
||||
object_quote_url_fields = (
|
||||
'quoteUri', 'quoteUrl', 'quoteReply', 'toot:quoteReply',
|
||||
'_misskey_quote'
|
||||
)
|
||||
for fieldname in object_quote_url_fields:
|
||||
if not post_json_object['object'].get(fieldname):
|
||||
continue
|
||||
quote_url = post_json_object['object'][fieldname]
|
||||
if isinstance(quote_url, str):
|
||||
if resembles_url(quote_url):
|
||||
return remove_html(quote_url)
|
||||
|
||||
# as defined by FEP-dd4b
|
||||
# https://codeberg.org/fediverse/fep/src/branch/main/fep/dd4b/fep-dd4b.md
|
||||
if ((post_json_object.get('content') or
|
||||
post_json_object.get('contentMap')) and
|
||||
(not post_json_object['object'].get('content') and
|
||||
not post_json_object['object'].get('contentMap')) and
|
||||
post_json_object['object'].get('id')):
|
||||
quote_url = post_json_object['object']['id']
|
||||
if isinstance(quote_url, str):
|
||||
if resembles_url(quote_url):
|
||||
return remove_html(quote_url)
|
||||
|
||||
# Other ActivityPub implementation - adding a Link tag
|
||||
if not post_json_object['object'].get('tag'):
|
||||
return ''
|
||||
|
||||
if not isinstance(post_json_object['object']['tag'], list):
|
||||
return ''
|
||||
|
||||
for item in post_json_object['object']['tag']:
|
||||
if not isinstance(item, dict):
|
||||
continue
|
||||
if item.get('rel'):
|
||||
mk_quote = False
|
||||
if isinstance(item['rel'], list):
|
||||
for rel_str in item['rel']:
|
||||
if not isinstance(rel_str, str):
|
||||
continue
|
||||
if '_misskey_quote' in rel_str:
|
||||
mk_quote = True
|
||||
elif isinstance(item['rel'], str):
|
||||
if '_misskey_quote' in item['rel']:
|
||||
mk_quote = True
|
||||
if mk_quote and item.get('href'):
|
||||
if isinstance(item['href'], str):
|
||||
if resembles_url(item['href']):
|
||||
return remove_html(item['href'])
|
||||
if not item.get('type'):
|
||||
continue
|
||||
if not item.get('mediaType'):
|
||||
continue
|
||||
if not isinstance(item['type'], str):
|
||||
continue
|
||||
if item['type'] != 'Link':
|
||||
continue
|
||||
if not isinstance(item['mediaType'], str):
|
||||
continue
|
||||
if 'json' not in item['mediaType']:
|
||||
continue
|
||||
if item.get('href'):
|
||||
if isinstance(item['href'], str):
|
||||
if resembles_url(item['href']):
|
||||
return remove_html(item['href'])
|
||||
return ''
|
||||
|
||||
|
||||
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, False):
|
||||
# quote toots not permitted from this sender
|
||||
return False
|
||||
return True
|
||||
return False
|
94
utils.py
94
utils.py
|
@ -4684,100 +4684,6 @@ def save_reverse_timeline(base_dir: str, reverse_sequence: []) -> []:
|
|||
break
|
||||
|
||||
|
||||
def get_quote_toot_url(post_json_object: str) -> str:
|
||||
""" Returns the url for a quote toot
|
||||
This suffers from a general lack of protocol consensus
|
||||
"""
|
||||
# adhoc quote toot implementations
|
||||
object_quote_url_fields = (
|
||||
'quoteUri', 'quoteUrl', 'quoteReply', 'toot:quoteReply',
|
||||
'_misskey_quote'
|
||||
)
|
||||
for fieldname in object_quote_url_fields:
|
||||
if not post_json_object['object'].get(fieldname):
|
||||
continue
|
||||
quote_url = post_json_object['object'][fieldname]
|
||||
if isinstance(quote_url, str):
|
||||
if resembles_url(quote_url):
|
||||
return remove_html(quote_url)
|
||||
|
||||
# as defined by FEP-dd4b
|
||||
# https://codeberg.org/fediverse/fep/src/branch/main/fep/dd4b/fep-dd4b.md
|
||||
if ((post_json_object.get('content') or
|
||||
post_json_object.get('contentMap')) and
|
||||
(not post_json_object['object'].get('content') and
|
||||
not post_json_object['object'].get('contentMap')) and
|
||||
post_json_object['object'].get('id')):
|
||||
quote_url = post_json_object['object']['id']
|
||||
if isinstance(quote_url, str):
|
||||
if resembles_url(quote_url):
|
||||
return remove_html(quote_url)
|
||||
|
||||
# Other ActivityPub implementation - adding a Link tag
|
||||
if not post_json_object['object'].get('tag'):
|
||||
return ''
|
||||
|
||||
if not isinstance(post_json_object['object']['tag'], list):
|
||||
return ''
|
||||
|
||||
for item in post_json_object['object']['tag']:
|
||||
if not isinstance(item, dict):
|
||||
continue
|
||||
if item.get('rel'):
|
||||
mk_quote = False
|
||||
if isinstance(item['rel'], list):
|
||||
for rel_str in item['rel']:
|
||||
if not isinstance(rel_str, str):
|
||||
continue
|
||||
if '_misskey_quote' in rel_str:
|
||||
mk_quote = True
|
||||
elif isinstance(item['rel'], str):
|
||||
if '_misskey_quote' in item['rel']:
|
||||
mk_quote = True
|
||||
if mk_quote and item.get('href'):
|
||||
if isinstance(item['href'], str):
|
||||
if resembles_url(item['href']):
|
||||
return remove_html(item['href'])
|
||||
if not item.get('type'):
|
||||
continue
|
||||
if not item.get('mediaType'):
|
||||
continue
|
||||
if not isinstance(item['type'], str):
|
||||
continue
|
||||
if item['type'] != 'Link':
|
||||
continue
|
||||
if not isinstance(item['mediaType'], str):
|
||||
continue
|
||||
if 'json' not in item['mediaType']:
|
||||
continue
|
||||
if item.get('href'):
|
||||
if isinstance(item['href'], str):
|
||||
if resembles_url(item['href']):
|
||||
return remove_html(item['href'])
|
||||
return ''
|
||||
|
||||
|
||||
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, False):
|
||||
# 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
|
||||
"""
|
||||
|
|
|
@ -14,8 +14,8 @@ from person import is_person_snoozed
|
|||
from posts import is_moderator
|
||||
from flags import is_featured_writer
|
||||
from flags import is_dormant
|
||||
from quote import quote_toots_allowed
|
||||
from utils import data_dir
|
||||
from utils import quote_toots_allowed
|
||||
from utils import get_full_domain
|
||||
from utils import get_config_param
|
||||
from utils import remove_html
|
||||
|
|
|
@ -36,12 +36,12 @@ from flags import is_recent_post
|
|||
from flags import is_chat_message
|
||||
from flags import is_pgp_encrypted
|
||||
from textmode import text_mode_removals
|
||||
from quote import get_quote_toot_url
|
||||
from utils import save_json
|
||||
from utils import remove_header_tags
|
||||
from utils import get_actor_from_post_id
|
||||
from utils import contains_statuses
|
||||
from utils import data_dir
|
||||
from utils import get_quote_toot_url
|
||||
from utils import get_post_attachments
|
||||
from utils import get_url_from_post
|
||||
from utils import date_from_string_format
|
||||
|
|
Loading…
Reference in New Issue