Implementing mitm detection

merge-requests/30/head
Bob Mottram 2024-12-17 13:50:48 +00:00
parent 446310d03d
commit ee9fee4d6b
65 changed files with 1457 additions and 818 deletions

View File

@ -172,7 +172,8 @@ def create_announce(session, base_dir: str, federation_list: [],
curr_domain: str, curr_domain: str,
onion_domain: str, i2p_domain: str, onion_domain: str, i2p_domain: str,
sites_unavailable: [], sites_unavailable: [],
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Creates an announce message """Creates an announce message
Typically to_url will be https://www.w3.org/ns/activitystreams#Public Typically to_url will be https://www.w3.org/ns/activitystreams#Public
and cc_url might be a specific person favorited or repeated and the and cc_url might be a specific person favorited or repeated and the
@ -241,7 +242,7 @@ def create_announce(session, base_dir: str, federation_list: [],
signing_priv_key_pem, 639633, signing_priv_key_pem, 639633,
curr_domain, onion_domain, i2p_domain, curr_domain, onion_domain, i2p_domain,
extra_headers, sites_unavailable, extra_headers, sites_unavailable,
system_language) system_language, mitm_servers)
return new_announce return new_announce
@ -256,7 +257,8 @@ def announce_public(session, base_dir: str, federation_list: [],
curr_domain: str, curr_domain: str,
onion_domain: str, i2p_domain: str, onion_domain: str, i2p_domain: str,
sites_unavailable: [], sites_unavailable: [],
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Makes a public announcement """Makes a public announcement
""" """
from_domain = get_full_domain(domain, port) from_domain = get_full_domain(domain, port)
@ -273,7 +275,7 @@ def announce_public(session, base_dir: str, federation_list: [],
signing_priv_key_pem, curr_domain, signing_priv_key_pem, curr_domain,
onion_domain, i2p_domain, onion_domain, i2p_domain,
sites_unavailable, sites_unavailable,
system_language) system_language, mitm_servers)
def send_announce_via_server(base_dir: str, session, def send_announce_via_server(base_dir: str, session,
@ -283,7 +285,8 @@ def send_announce_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Creates an announce message via c2s """Creates an announce message via c2s
""" """
if not session: if not session:
@ -319,7 +322,7 @@ def send_announce_via_server(base_dir: str, session,
wf_request = webfinger_handle(session, handle, http_prefix, wf_request = webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
from_domain, project_version, debug, False, from_domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: announce webfinger failed for ' + handle) print('DEBUG: announce webfinger failed for ' + handle)
@ -341,7 +344,7 @@ def send_announce_via_server(base_dir: str, session,
project_version, http_prefix, project_version, http_prefix,
from_nickname, from_domain, from_nickname, from_domain,
post_to_box, 73528, post_to_box, 73528,
system_language) system_language, mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:
@ -379,7 +382,8 @@ def send_undo_announce_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Undo an announce message via c2s """Undo an announce message via c2s
""" """
if not session: if not session:
@ -407,7 +411,7 @@ def send_undo_announce_via_server(base_dir: str, session,
wf_request = webfinger_handle(session, handle, http_prefix, wf_request = webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
domain, project_version, debug, False, domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: undo announce webfinger failed for ' + handle) print('DEBUG: undo announce webfinger failed for ' + handle)
@ -429,7 +433,7 @@ def send_undo_announce_via_server(base_dir: str, session,
project_version, http_prefix, project_version, http_prefix,
nickname, domain, nickname, domain,
post_to_box, 73528, post_to_box, 73528,
system_language) system_language, mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:

View File

@ -90,7 +90,8 @@ def send_availability_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Sets the availability for a person via c2s """Sets the availability for a person via c2s
""" """
if not session: if not session:
@ -116,7 +117,7 @@ def send_availability_via_server(base_dir: str, session,
wf_request = webfinger_handle(session, handle, http_prefix, wf_request = webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
domain, project_version, debug, False, domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: availability webfinger failed for ' + handle) print('DEBUG: availability webfinger failed for ' + handle)
@ -137,7 +138,7 @@ def send_availability_via_server(base_dir: str, session,
person_cache, project_version, person_cache, project_version,
http_prefix, nickname, http_prefix, nickname,
domain, post_to_box, 57262, domain, post_to_box, 57262,
system_language) system_language, mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:

View File

@ -1867,7 +1867,8 @@ def get_blocks_via_server(session, nickname: str, password: str,
domain: str, port: int, domain: str, port: int,
http_prefix: str, page_number: int, debug: bool, http_prefix: str, page_number: int, debug: bool,
version: str, version: str,
signing_priv_key_pem: str) -> {}: signing_priv_key_pem: str,
mitm_servers: []) -> {}:
"""Returns the blocked collection for shared items via c2s """Returns the blocked collection for shared items via c2s
https://codeberg.org/fediverse/fep/src/branch/main/fep/c648/fep-c648.md https://codeberg.org/fediverse/fep/src/branch/main/fep/c648/fep-c648.md
""" """
@ -1889,7 +1890,7 @@ def get_blocks_via_server(session, nickname: str, password: str,
if debug: if debug:
print('Blocked collection request to: ' + url) print('Blocked collection request to: ' + url)
blocked_json = get_json(signing_priv_key_pem, session, url, headers, None, blocked_json = get_json(signing_priv_key_pem, session, url, headers, None,
debug, version, http_prefix, None) debug, mitm_servers, version, http_prefix, None)
if not get_json_valid(blocked_json): if not get_json_valid(blocked_json):
if debug: if debug:
print('DEBUG: GET blocked collection failed for c2s to ' + url) print('DEBUG: GET blocked collection failed for c2s to ' + url)
@ -2115,7 +2116,8 @@ def _update_federated_blocks(session, base_dir: str,
domain: str, domain: str,
debug: bool, version: str, debug: bool, version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
max_api_blocks: int) -> []: max_api_blocks: int,
mitm_servers: []) -> []:
"""Creates block_api.txt """Creates block_api.txt
""" """
block_federated = [] block_federated = []
@ -2144,7 +2146,8 @@ def _update_federated_blocks(session, base_dir: str,
if debug: if debug:
print('federated blocklist Block API endpoint: ' + url) print('federated blocklist Block API endpoint: ' + url)
blocked_json = get_json(signing_priv_key_pem, session, url, headers, blocked_json = get_json(signing_priv_key_pem, session, url, headers,
None, debug, version, http_prefix, domain) None, debug, mitm_servers,
version, http_prefix, domain)
if not get_json_valid(blocked_json): if not get_json_valid(blocked_json):
print('DEBUG: federated blocklist ' + print('DEBUG: federated blocklist ' +
'GET blocked json failed ' + url) 'GET blocked json failed ' + url)
@ -2277,5 +2280,6 @@ def run_federated_blocks_daemon(base_dir: str, httpd, debug: bool) -> None:
httpd.domain, httpd.domain,
debug, httpd.project_version, debug, httpd.project_version,
httpd.signing_priv_key_pem, httpd.signing_priv_key_pem,
httpd.max_api_blocks) httpd.max_api_blocks,
httpd.mitm_servers)
time.sleep(seconds_per_hour * 6) time.sleep(seconds_per_hour * 6)

View File

@ -394,7 +394,8 @@ def send_bookmark_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Creates a bookmark via c2s """Creates a bookmark via c2s
""" """
if not session: if not session:
@ -428,7 +429,7 @@ def send_bookmark_via_server(base_dir: str, session,
webfinger_handle(session, handle, http_prefix, webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
domain, project_version, debug, False, domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: bookmark webfinger failed for ' + handle) print('DEBUG: bookmark webfinger failed for ' + handle)
@ -450,7 +451,7 @@ def send_bookmark_via_server(base_dir: str, session,
project_version, http_prefix, project_version, http_prefix,
nickname, domain, nickname, domain,
post_to_box, 58391, post_to_box, 58391,
system_language) system_language, mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:
@ -490,7 +491,8 @@ def send_undo_bookmark_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Removes a bookmark via c2s """Removes a bookmark via c2s
""" """
if not session: if not session:
@ -524,7 +526,7 @@ def send_undo_bookmark_via_server(base_dir: str, session,
webfinger_handle(session, handle, http_prefix, webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
domain, project_version, debug, False, domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: unbookmark webfinger failed for ' + handle) print('DEBUG: unbookmark webfinger failed for ' + handle)
@ -546,7 +548,8 @@ def send_undo_bookmark_via_server(base_dir: str, session,
project_version, http_prefix, project_version, http_prefix,
nickname, domain, nickname, domain,
post_to_box, 52594, post_to_box, 52594,
system_language) system_language,
mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:

View File

@ -208,7 +208,8 @@ def get_person_pub_key(base_dir: str, session, person_url: str,
project_version: str, http_prefix: str, project_version: str, http_prefix: str,
domain: str, onion_domain: str, domain: str, onion_domain: str,
i2p_domain: str, i2p_domain: str,
signing_priv_key_pem: str) -> str: signing_priv_key_pem: str,
mitm_servers: []) -> str:
"""Get the public key for an actor """Get the public key for an actor
""" """
original_person_url = person_url original_person_url = person_url
@ -249,7 +250,7 @@ def get_person_pub_key(base_dir: str, session, person_url: str,
person_json = \ person_json = \
get_json(signing_priv_key_pem, get_json(signing_priv_key_pem,
session, person_url, as_header, None, debug, session, person_url, as_header, None, debug,
project_version, http_prefix, person_domain) mitm_servers, project_version, http_prefix, person_domain)
if not get_json_valid(person_json): if not get_json_valid(person_json):
if person_json is not None: if person_json is not None:
if isinstance(person_json, dict): if isinstance(person_json, dict):

View File

@ -131,7 +131,8 @@ def _get_replies_to_post(post_json_object: {},
session, as_header, debug: bool, session, as_header, debug: bool,
http_prefix: str, http_prefix: str,
base_dir: str, nickname: str, base_dir: str, nickname: str,
domain: str, depth: int, ids: []) -> []: domain: str, depth: int, ids: [],
mitm_servers: []) -> []:
"""Returns a list of reply posts to the given post as json """Returns a list of reply posts to the given post as json
""" """
result = [] result = []
@ -156,7 +157,7 @@ def _get_replies_to_post(post_json_object: {},
replies_collection = \ replies_collection = \
get_json(signing_priv_key_pem, session, replies_collection_id, get_json(signing_priv_key_pem, session, replies_collection_id,
as_header, None, debug, __version__, as_header, None, debug, mitm_servers, __version__,
http_prefix, domain) http_prefix, domain)
if not get_json_valid(replies_collection): if not get_json_valid(replies_collection):
return result return result
@ -183,7 +184,7 @@ def _get_replies_to_post(post_json_object: {},
return result return result
replies_collection = \ replies_collection = \
get_json(signing_priv_key_pem, session, next_page_id, get_json(signing_priv_key_pem, session, next_page_id,
as_header, None, debug, __version__, as_header, None, debug, mitm_servers, __version__,
http_prefix, domain) http_prefix, domain)
if debug: if debug:
print('DEBUG: get_replies_to_post next replies_collection ' + print('DEBUG: get_replies_to_post next replies_collection ' +
@ -212,8 +213,8 @@ def _get_replies_to_post(post_json_object: {},
print('Downloading conversation item ' + item) print('Downloading conversation item ' + item)
item_dict = \ item_dict = \
get_json(signing_priv_key_pem, session, item, get_json(signing_priv_key_pem, session, item,
as_header, None, debug, __version__, as_header, None, debug, mitm_servers,
http_prefix, domain) __version__, http_prefix, domain)
if not get_json_valid(item_dict): if not get_json_valid(item_dict):
continue continue
item = item_dict item = item_dict
@ -283,14 +284,16 @@ def _get_replies_to_post(post_json_object: {},
debug, debug,
http_prefix, base_dir, http_prefix, base_dir,
nickname, domain, nickname, domain,
depth + 1, ids) depth + 1, ids,
mitm_servers)
return result return result
def download_conversation_posts(authorized: bool, session, def download_conversation_posts(authorized: bool, session,
http_prefix: str, base_dir: str, http_prefix: str, base_dir: str,
nickname: str, domain: str, nickname: str, domain: str,
post_id: str, debug: bool) -> []: post_id: str, debug: bool,
mitm_servers: []) -> []:
"""Downloads all posts for a conversation and returns a list of the """Downloads all posts for a conversation and returns a list of the
json objects json objects
""" """
@ -312,8 +315,8 @@ def download_conversation_posts(authorized: bool, session,
else: else:
post_json_object = \ post_json_object = \
get_json(signing_priv_key_pem, session, post_id, get_json(signing_priv_key_pem, session, post_id,
as_header, None, debug, __version__, as_header, None, debug, mitm_servers,
http_prefix, domain) __version__, http_prefix, domain)
if debug: if debug:
if not get_json_valid(post_json_object): if not get_json_valid(post_json_object):
print(post_id + ' returned no json') print(post_id + ' returned no json')
@ -330,7 +333,7 @@ def download_conversation_posts(authorized: bool, session,
signing_priv_key_pem, signing_priv_key_pem,
session, as_header, debug, session, as_header, debug,
http_prefix, base_dir, nickname, http_prefix, base_dir, nickname,
domain, 0, []) domain, 0, [], mitm_servers)
ids = [] ids = []
while get_json_valid(post_json_object): while get_json_valid(post_json_object):
@ -418,8 +421,8 @@ def download_conversation_posts(authorized: bool, session,
if authorized: if authorized:
post_json_object = \ post_json_object = \
get_json(signing_priv_key_pem, session, post_id, get_json(signing_priv_key_pem, session, post_id,
as_header, None, debug, __version__, as_header, None, debug, mitm_servers,
http_prefix, domain) __version__, http_prefix, domain)
if debug: if debug:
if get_json_valid(post_json_object): if get_json_valid(post_json_object):

View File

@ -481,6 +481,7 @@ class EpicyonServer(ThreadingHTTPServer):
instance_description_short = 'Epicyon' instance_description_short = 'Epicyon'
robots_txt = None robots_txt = None
last_llm_time = None last_llm_time = None
mitm_servers = []
watermark_width_percent = 0 watermark_width_percent = 0
watermark_position = 0 watermark_position = 0
watermark_opacity = 0 watermark_opacity = 0
@ -710,6 +711,9 @@ def run_daemon(accounts_data_dir: str,
# the last time when an LLM scraper was replied to # the last time when an LLM scraper was replied to
httpd.last_llm_time = None httpd.last_llm_time = None
# servers with man-in-the-middle transport encryption
httpd.mitm_servers = []
# default "searchable by" for new posts for each account # default "searchable by" for new posts for each account
httpd.searchable_by_default = load_searchable_by_default(base_dir) httpd.searchable_by_default = load_searchable_by_default(base_dir)
@ -1362,7 +1366,8 @@ def run_daemon(accounts_data_dir: str,
args=(base_dir, httpd, args=(base_dir, httpd,
http_prefix, httpd.domain_full, http_prefix, httpd.domain_full,
proxy_type, debug, proxy_type, debug,
httpd.system_language), daemon=True) httpd.system_language,
httpd.mitm_servers), daemon=True)
# flags used when restarting the inbox queue # flags used when restarting the inbox queue
httpd.restart_inbox_queue_in_progress = False httpd.restart_inbox_queue_in_progress = False

View File

@ -63,7 +63,6 @@ from fitnessFunctions import html_watch_points_graph
from session import establish_session from session import establish_session
from session import get_session_for_domains from session import get_session_for_domains
from crawlers import blocked_user_agent from crawlers import blocked_user_agent
from daemon_utils import detect_mitm
from daemon_utils import etag_exists from daemon_utils import etag_exists
from daemon_utils import has_accept from daemon_utils import has_accept
from daemon_utils import show_person_options from daemon_utils import show_person_options
@ -115,6 +114,7 @@ from utils import get_json_content_from_accept
from utils import check_bad_path from utils import check_bad_path
from utils import corp_servers from utils import corp_servers
from utils import decoded_host from utils import decoded_host
from utils import detect_mitm
from person import get_person_notes_endpoint from person import get_person_notes_endpoint
from person import get_account_pub_key from person import get_account_pub_key
from shares import actor_attached_shares from shares import actor_attached_shares
@ -753,7 +753,8 @@ def daemon_http_get(self) -> None:
self.server.blocked_cache, self.server.blocked_cache,
self.server.block_federated, self.server.block_federated,
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.default_timeline): self.server.default_timeline,
self.server.mitm_servers):
fitness_performance(getreq_start_time, self.server.fitness, fitness_performance(getreq_start_time, self.server.fitness,
'_GET', '_show_conversation_thread', '_GET', '_show_conversation_thread',
self.server.debug) self.server.debug)
@ -1676,7 +1677,8 @@ def daemon_http_get(self) -> None:
self.server.session_onion, self.server.session_onion,
self.server.session_i2p, self.server.session_i2p,
self.server.http_prefix, self.server.http_prefix,
self.server.debug) self.server.debug,
self.server.mitm_servers)
if html_str: if html_str:
msg = html_str.encode('utf-8') msg = html_str.encode('utf-8')
msglen = len(msg) msglen = len(msg)
@ -3057,7 +3059,8 @@ def daemon_http_get(self) -> None:
self.server.min_images_for_accounts, self.server.min_images_for_accounts,
self.server.debug, self.server.debug,
self.server.buy_sites, self.server.buy_sites,
self.server.auto_cw_cache) self.server.auto_cw_cache,
self.server.mitm_servers)
if msg: if msg:
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
@ -3160,7 +3163,7 @@ def daemon_http_get(self) -> None:
self.server.min_images_for_accounts, self.server.min_images_for_accounts,
self.server.buy_sites, self.server.buy_sites,
self.server.auto_cw_cache, self.server.auto_cw_cache,
ua_str) ua_str, self.server.mitm_servers)
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -3470,7 +3473,8 @@ def daemon_http_get(self) -> None:
self.server.bold_reading, self.server.bold_reading,
self.server.min_images_for_accounts, self.server.min_images_for_accounts,
self.server.session_onion, self.server.session_onion,
self.server.session_i2p) self.server.session_i2p,
self.server.mitm_servers)
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -3572,7 +3576,8 @@ def daemon_http_get(self) -> None:
self.server.followers_sync_cache, self.server.followers_sync_cache,
self.server.session_onion, self.server.session_onion,
self.server.session_i2p, self.server.session_i2p,
self.server.session) self.server.session,
self.server.mitm_servers)
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -3607,7 +3612,8 @@ def daemon_http_get(self) -> None:
self.server.fitness, self.server.fitness,
self.server.session, self.server.session,
self.server.session_onion, self.server.session_onion,
self.server.session_i2p) self.server.session_i2p,
self.server.mitm_servers)
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -3657,7 +3663,8 @@ def daemon_http_get(self) -> None:
self.server.bold_reading, self.server.bold_reading,
self.server.min_images_for_accounts, self.server.min_images_for_accounts,
self.server.session_onion, self.server.session_onion,
self.server.session_i2p) self.server.session_i2p,
self.server.mitm_servers)
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -3706,7 +3713,8 @@ def daemon_http_get(self) -> None:
self.server.min_images_for_accounts, self.server.min_images_for_accounts,
self.server.iconsCache, self.server.iconsCache,
self.server.session_onion, self.server.session_onion,
self.server.session_i2p) self.server.session_i2p,
self.server.mitm_servers)
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -3757,7 +3765,8 @@ def daemon_http_get(self) -> None:
self.server.bold_reading, self.server.bold_reading,
self.server.min_images_for_accounts, self.server.min_images_for_accounts,
self.server.session_onion, self.server.session_onion,
self.server.session_i2p) self.server.session_i2p,
self.server.mitm_servers)
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -3807,7 +3816,8 @@ def daemon_http_get(self) -> None:
self.server.bold_reading, self.server.bold_reading,
self.server.min_images_for_accounts, self.server.min_images_for_accounts,
self.server.session_onion, self.server.session_onion,
self.server.session_i2p) self.server.session_i2p,
self.server.mitm_servers)
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -3857,7 +3867,8 @@ def daemon_http_get(self) -> None:
self.server.bold_reading, self.server.bold_reading,
self.server.min_images_for_accounts, self.server.min_images_for_accounts,
self.server.session_onion, self.server.session_onion,
self.server.session_i2p) self.server.session_i2p,
self.server.mitm_servers)
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -3901,7 +3912,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.account_timezone, self.server.account_timezone,
self.server.bold_reading, self.server.bold_reading,
self.server.fitness) self.server.fitness,
self.server.mitm_servers)
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -3951,7 +3963,8 @@ def daemon_http_get(self) -> None:
self.server.bold_reading, self.server.bold_reading,
self.server.min_images_for_accounts, self.server.min_images_for_accounts,
self.server.session_onion, self.server.session_onion,
self.server.session_i2p) self.server.session_i2p,
self.server.mitm_servers)
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -3996,7 +4009,8 @@ def daemon_http_get(self) -> None:
self.server.allow_deletion, self.server.allow_deletion,
self.server.session_onion, self.server.session_onion,
self.server.session_i2p, self.server.session_i2p,
self.server.default_timeline) self.server.default_timeline,
self.server.mitm_servers)
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -4042,7 +4056,8 @@ def daemon_http_get(self) -> None:
self.server.account_timezone, self.server.account_timezone,
self.server.bold_reading, self.server.bold_reading,
self.server.min_images_for_accounts, self.server.min_images_for_accounts,
self.server.default_timeline) self.server.default_timeline,
self.server.mitm_servers)
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -4088,7 +4103,8 @@ def daemon_http_get(self) -> None:
self.server.account_timezone, self.server.account_timezone,
self.server.bold_reading, self.server.bold_reading,
self.server.min_images_for_accounts, self.server.min_images_for_accounts,
self.server.default_timeline) self.server.default_timeline,
self.server.mitm_servers)
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -4437,7 +4453,8 @@ def daemon_http_get(self) -> None:
self.server.min_images_for_accounts, self.server.min_images_for_accounts,
self.server.buy_sites, self.server.buy_sites,
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.searchable_by_default): self.server.searchable_by_default,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -4483,7 +4500,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain, self.server.i2p_domain,
self.server.bold_reading): self.server.bold_reading,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -4521,7 +4539,8 @@ def daemon_http_get(self) -> None:
self.server.min_images_for_accounts, self.server.min_images_for_accounts,
self.server.buy_sites, self.server.buy_sites,
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness): self.server.fitness,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -4559,7 +4578,8 @@ def daemon_http_get(self) -> None:
self.server.min_images_for_accounts, self.server.min_images_for_accounts,
self.server.buy_sites, self.server.buy_sites,
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness): self.server.fitness,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -4607,7 +4627,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness, self.server.fitness,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain): self.server.i2p_domain,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -4663,7 +4684,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness, self.server.fitness,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain): self.server.i2p_domain,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -4720,7 +4742,8 @@ def daemon_http_get(self) -> None:
self.server.fitness, self.server.fitness,
self.server.domain_full, self.server.domain_full,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain): self.server.i2p_domain,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -4765,7 +4788,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain, self.server.i2p_domain,
self.server.bold_reading): self.server.bold_reading,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -4809,7 +4833,8 @@ def daemon_http_get(self) -> None:
self.server.buy_sites, self.server.buy_sites,
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain): self.server.i2p_domain,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -4871,7 +4896,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain, self.server.i2p_domain,
self.server.hide_announces): self.server.hide_announces,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -4931,7 +4957,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness, self.server.fitness,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain): self.server.i2p_domain,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -4991,7 +5018,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness, self.server.fitness,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain): self.server.i2p_domain,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -5053,7 +5081,8 @@ def daemon_http_get(self) -> None:
self.server.full_width_tl_button_header, self.server.full_width_tl_button_header,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain, self.server.i2p_domain,
self.server.hide_announces): self.server.hide_announces,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -5114,7 +5143,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness, self.server.fitness,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain): self.server.i2p_domain,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -5176,7 +5206,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness, self.server.fitness,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain): self.server.i2p_domain,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -5235,7 +5266,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness, self.server.fitness,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain): self.server.i2p_domain,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -5292,7 +5324,8 @@ def daemon_http_get(self) -> None:
self.server.min_images_for_accounts, self.server.min_images_for_accounts,
self.server.buy_sites, self.server.buy_sites,
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness): self.server.fitness,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -5345,7 +5378,8 @@ def daemon_http_get(self) -> None:
self.server.min_images_for_accounts, self.server.min_images_for_accounts,
self.server.buy_sites, self.server.buy_sites,
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness): self.server.fitness,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -5387,7 +5421,8 @@ def daemon_http_get(self) -> None:
self.server.system_language, self.server.system_language,
self.server.signing_priv_key_pem, self.server.signing_priv_key_pem,
None, None,
self.server.block_federated) self.server.block_federated,
self.server.mitm_servers)
if msg: if msg:
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
@ -5429,7 +5464,8 @@ def daemon_http_get(self) -> None:
self.server.system_language, self.server.system_language,
self.server.signing_priv_key_pem, self.server.signing_priv_key_pem,
None, None,
self.server.block_federated) self.server.block_federated,
self.server.mitm_servers)
if msg: if msg:
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
@ -5495,7 +5531,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness, self.server.fitness,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain): self.server.i2p_domain,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -5559,7 +5596,8 @@ def daemon_http_get(self) -> None:
self.server.fitness, self.server.fitness,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain, self.server.i2p_domain,
self.server.hide_announces): self.server.hide_announces,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -5620,7 +5658,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness, self.server.fitness,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain): self.server.i2p_domain,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -5676,7 +5715,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness, self.server.fitness,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain): self.server.i2p_domain,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -5733,7 +5773,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness, self.server.fitness,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain): self.server.i2p_domain,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -5789,7 +5830,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness, self.server.fitness,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain): self.server.i2p_domain,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -5846,7 +5888,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness, self.server.fitness,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain): self.server.i2p_domain,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -5903,7 +5946,8 @@ def daemon_http_get(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.fitness, self.server.fitness,
self.server.onion_domain, self.server.onion_domain,
self.server.i2p_domain): self.server.i2p_domain,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -5959,7 +6003,8 @@ def daemon_http_get(self) -> None:
self.server.content_license_url, self.server.content_license_url,
self.server.buy_sites, self.server.buy_sites,
self.server.no_of_books, self.server.no_of_books,
self.server.auto_cw_cache): self.server.auto_cw_cache,
self.server.mitm_servers):
self.server.getreq_busy = False self.server.getreq_busy = False
return return

View File

@ -44,7 +44,7 @@ def follow_approve_button(self, calling_domain: str, path: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
followers_sync_cache: {}, followers_sync_cache: {},
session_onion, session_i2p, session_onion, session_i2p,
session) -> None: session, mitm_servers: []) -> None:
"""Follow approve button was pressed """Follow approve button was pressed
""" """
origin_path_str = path.split('/followapprove=')[0] origin_path_str = path.split('/followapprove=')[0]
@ -101,7 +101,8 @@ def follow_approve_button(self, calling_domain: str, path: str,
proxy_type, proxy_type,
followers_sync_cache, followers_sync_cache,
sites_unavailable, sites_unavailable,
system_language) system_language,
mitm_servers)
origin_path_str_absolute = \ origin_path_str_absolute = \
http_prefix + '://' + domain_full + origin_path_str http_prefix + '://' + domain_full + origin_path_str
if calling_domain.endswith('.onion') and onion_domain: if calling_domain.endswith('.onion') and onion_domain:
@ -133,7 +134,8 @@ def follow_deny_button(self, calling_domain: str, path: str,
sites_unavailable: [], sites_unavailable: [],
system_language: str, system_language: str,
fitness: {}, fitness: {},
session, session_onion, session_i2p) -> None: session, session_onion, session_i2p,
mitm_servers: []) -> None:
"""Follow deny button was pressed """Follow deny button was pressed
""" """
origin_path_str = path.split('/followdeny=')[0] origin_path_str = path.split('/followdeny=')[0]
@ -169,7 +171,8 @@ def follow_deny_button(self, calling_domain: str, path: str,
signing_priv_key_pem, signing_priv_key_pem,
followers_sync_cache, followers_sync_cache,
sites_unavailable, sites_unavailable,
system_language) system_language,
mitm_servers)
origin_path_str_absolute = \ origin_path_str_absolute = \
http_prefix + '://' + domain_full + origin_path_str http_prefix + '://' + domain_full + origin_path_str
if calling_domain.endswith('.onion') and onion_domain: if calling_domain.endswith('.onion') and onion_domain:
@ -217,7 +220,8 @@ def delete_button(self, calling_domain: str, path: str,
allow_deletion: bool, allow_deletion: bool,
session_onion, session_onion,
session_i2p, session_i2p,
default_timeline: str) -> None: default_timeline: str,
mitm_servers: []) -> None:
"""Delete button is pressed on a post """Delete button is pressed on a post
""" """
if not cookie: if not cookie:
@ -311,7 +315,8 @@ def delete_button(self, calling_domain: str, path: str,
dogwhistles, dogwhistles,
min_images_for_accounts, min_images_for_accounts,
buy_sites, buy_sites,
auto_cw_cache) auto_cw_cache,
mitm_servers)
if delete_str: if delete_str:
delete_str_len = len(delete_str) delete_str_len = len(delete_str)
set_headers(self, 'text/html', delete_str_len, set_headers(self, 'text/html', delete_str_len,

View File

@ -18,13 +18,13 @@ from utils import remove_id_ending
from utils import local_actor_url from utils import local_actor_url
from utils import get_nickname_from_actor from utils import get_nickname_from_actor
from utils import get_instance_url from utils import get_instance_url
from utils import detect_mitm
from httpheaders import redirect_headers from httpheaders import redirect_headers
from session import establish_session from session import establish_session
from httpcodes import http_404 from httpcodes import http_404
from announce import create_announce from announce import create_announce
from posts import save_post_to_box from posts import save_post_to_box
from daemon_utils import post_to_outbox from daemon_utils import post_to_outbox
from daemon_utils import detect_mitm
from fitnessFunctions import fitness_performance from fitnessFunctions import fitness_performance
from follow import follower_approval_active from follow import follower_approval_active
from webapp_post import individual_post_as_html from webapp_post import individual_post_as_html
@ -69,7 +69,8 @@ def announce_button(self, calling_domain: str, path: str,
account_timezone: {}, account_timezone: {},
bold_reading_nicknames: {}, bold_reading_nicknames: {},
min_images_for_accounts: int, min_images_for_accounts: int,
session_onion, session_i2p) -> None: session_onion, session_i2p,
mitm_servers: []) -> None:
"""The announce/repeat button was pressed on a post """The announce/repeat button was pressed on a post
""" """
page_number = 1 page_number = 1
@ -167,7 +168,8 @@ def announce_button(self, calling_domain: str, path: str,
domain, domain,
onion_domain, onion_domain,
i2p_domain, sites_unavailable, i2p_domain, sites_unavailable,
system_language) system_language,
mitm_servers)
announce_filename = None announce_filename = None
if announce_json: if announce_json:
# save the announce straight to the outbox # save the announce straight to the outbox
@ -258,7 +260,8 @@ def announce_button(self, calling_domain: str, path: str,
dogwhistles, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, buy_sites,
auto_cw_cache) auto_cw_cache,
mitm_servers)
actor_absolute = \ actor_absolute = \
get_instance_url(calling_domain, get_instance_url(calling_domain,

View File

@ -17,6 +17,7 @@ from utils import is_dm
from utils import get_nickname_from_actor from utils import get_nickname_from_actor
from utils import get_instance_url from utils import get_instance_url
from utils import local_actor_url from utils import local_actor_url
from utils import detect_mitm
from session import establish_session from session import establish_session
from httpheaders import redirect_headers from httpheaders import redirect_headers
from httpcodes import http_404 from httpcodes import http_404
@ -25,7 +26,6 @@ from bookmarks import undo_bookmark_post
from follow import follower_approval_active from follow import follower_approval_active
from webapp_post import individual_post_as_html from webapp_post import individual_post_as_html
from fitnessFunctions import fitness_performance from fitnessFunctions import fitness_performance
from daemon_utils import detect_mitm
def bookmark_button(self, calling_domain: str, path: str, def bookmark_button(self, calling_domain: str, path: str,
@ -64,7 +64,8 @@ def bookmark_button(self, calling_domain: str, path: str,
bold_reading_nicknames: {}, bold_reading_nicknames: {},
min_images_for_accounts: [], min_images_for_accounts: [],
session_onion, session_onion,
session_i2p) -> None: session_i2p,
mitm_servers: []) -> None:
"""Bookmark button was pressed """Bookmark button was pressed
""" """
page_number = 1 page_number = 1
@ -214,7 +215,8 @@ def bookmark_button(self, calling_domain: str, path: str,
dogwhistles, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, buy_sites,
auto_cw_cache) auto_cw_cache,
mitm_servers)
else: else:
print('WARN: Bookmarked post not found: ' + bookmark_filename) print('WARN: Bookmarked post not found: ' + bookmark_filename)
actor_absolute = \ actor_absolute = \
@ -272,7 +274,8 @@ def bookmark_button_undo(self, calling_domain: str, path: str,
bold_reading_nicknames: {}, bold_reading_nicknames: {},
min_images_for_accounts: [], min_images_for_accounts: [],
session_onion, session_onion,
session_i2p) -> None: session_i2p,
mitm_servers: []) -> None:
"""Button pressed to undo a bookmark """Button pressed to undo a bookmark
""" """
page_number = 1 page_number = 1
@ -421,7 +424,8 @@ def bookmark_button_undo(self, calling_domain: str, path: str,
dogwhistles, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, buy_sites,
auto_cw_cache) auto_cw_cache,
mitm_servers)
else: else:
print('WARN: Unbookmarked post not found: ' + print('WARN: Unbookmarked post not found: ' +
bookmark_filename) bookmark_filename)

View File

@ -18,6 +18,7 @@ from utils import locate_post
from utils import local_actor_url from utils import local_actor_url
from utils import get_nickname_from_actor from utils import get_nickname_from_actor
from utils import get_instance_url from utils import get_instance_url
from utils import detect_mitm
from daemon_utils import post_to_outbox from daemon_utils import post_to_outbox
from follow import follower_approval_active from follow import follower_approval_active
from httpheaders import redirect_headers from httpheaders import redirect_headers
@ -27,7 +28,6 @@ from posts import get_original_post_from_announce_url
from fitnessFunctions import fitness_performance from fitnessFunctions import fitness_performance
from like import update_likes_collection from like import update_likes_collection
from webapp_post import individual_post_as_html from webapp_post import individual_post_as_html
from daemon_utils import detect_mitm
def like_button(self, calling_domain: str, path: str, def like_button(self, calling_domain: str, path: str,
@ -66,7 +66,8 @@ def like_button(self, calling_domain: str, path: str,
bold_reading_nicknames: {}, bold_reading_nicknames: {},
min_images_for_accounts: [], min_images_for_accounts: [],
session_onion, session_onion,
session_i2p) -> None: session_i2p,
mitm_servers: []) -> None:
"""Press the like button """Press the like button
""" """
page_number = 1 page_number = 1
@ -261,7 +262,8 @@ def like_button(self, calling_domain: str, path: str,
dogwhistles, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, buy_sites,
auto_cw_cache) auto_cw_cache,
mitm_servers)
else: else:
print('WARN: Liked post not found: ' + liked_post_filename) print('WARN: Liked post not found: ' + liked_post_filename)
# clear the icon from the cache so that it gets updated # clear the icon from the cache so that it gets updated
@ -326,7 +328,8 @@ def like_button_undo(self, calling_domain: str, path: str,
min_images_for_accounts: [], min_images_for_accounts: [],
icons_cache: {}, icons_cache: {},
session_onion, session_onion,
session_i2p) -> None: session_i2p,
mitm_servers: []) -> None:
"""A button is pressed to undo """A button is pressed to undo
""" """
page_number = 1 page_number = 1
@ -512,7 +515,8 @@ def like_button_undo(self, calling_domain: str, path: str,
dogwhistles, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, buy_sites,
auto_cw_cache) auto_cw_cache,
mitm_servers)
else: else:
print('WARN: Unliked post not found: ' + liked_post_filename) print('WARN: Unliked post not found: ' + liked_post_filename)
# clear the icon from the cache so that it gets updated # clear the icon from the cache so that it gets updated

View File

@ -15,6 +15,7 @@ from utils import get_cached_post_filename
from utils import load_json from utils import load_json
from utils import locate_post from utils import locate_post
from utils import get_nickname_from_actor from utils import get_nickname_from_actor
from utils import detect_mitm
from httpcodes import http_404 from httpcodes import http_404
from httpheaders import redirect_headers from httpheaders import redirect_headers
from blocking import unmute_post from blocking import unmute_post
@ -22,7 +23,6 @@ from blocking import mute_post
from follow import follower_approval_active from follow import follower_approval_active
from webapp_post import individual_post_as_html from webapp_post import individual_post_as_html
from fitnessFunctions import fitness_performance from fitnessFunctions import fitness_performance
from daemon_utils import detect_mitm
def mute_button(self, calling_domain: str, path: str, def mute_button(self, calling_domain: str, path: str,
@ -56,7 +56,8 @@ def mute_button(self, calling_domain: str, path: str,
account_timezone: {}, account_timezone: {},
bold_reading_nicknames: {}, bold_reading_nicknames: {},
min_images_for_accounts: [], min_images_for_accounts: [],
default_timeline: str) -> None: default_timeline: str,
mitm_servers: []) -> None:
"""Mute button is pressed """Mute button is pressed
""" """
mute_url = path.split('?mute=')[1] mute_url = path.split('?mute=')[1]
@ -177,7 +178,8 @@ def mute_button(self, calling_domain: str, path: str,
dogwhistles, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, buy_sites,
auto_cw_cache) auto_cw_cache,
mitm_servers)
else: else:
print('WARN: Muted post not found: ' + mute_filename) print('WARN: Muted post not found: ' + mute_filename)
@ -230,7 +232,8 @@ def mute_button_undo(self, calling_domain: str, path: str,
account_timezone: {}, account_timezone: {},
bold_reading_nicknames: {}, bold_reading_nicknames: {},
min_images_for_accounts: [], min_images_for_accounts: [],
default_timeline: str) -> None: default_timeline: str,
mitm_servers: []) -> None:
"""Undo mute button is pressed """Undo mute button is pressed
""" """
mute_url = path.split('?unmute=')[1] mute_url = path.split('?unmute=')[1]
@ -351,7 +354,8 @@ def mute_button_undo(self, calling_domain: str, path: str,
dogwhistles, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, buy_sites,
auto_cw_cache) auto_cw_cache,
mitm_servers)
else: else:
print('WARN: Unmuted post not found: ' + mute_filename) print('WARN: Unmuted post not found: ' + mute_filename)
if calling_domain.endswith('.onion') and onion_domain: if calling_domain.endswith('.onion') and onion_domain:

View File

@ -19,12 +19,12 @@ from utils import is_dm
from utils import local_actor_url from utils import local_actor_url
from utils import get_instance_url from utils import get_instance_url
from utils import get_nickname_from_actor from utils import get_nickname_from_actor
from utils import detect_mitm
from httpheaders import redirect_headers from httpheaders import redirect_headers
from session import establish_session from session import establish_session
from httpcodes import http_404 from httpcodes import http_404
from posts import get_original_post_from_announce_url from posts import get_original_post_from_announce_url
from daemon_utils import post_to_outbox from daemon_utils import post_to_outbox
from daemon_utils import detect_mitm
from fitnessFunctions import fitness_performance from fitnessFunctions import fitness_performance
from reaction import update_reaction_collection from reaction import update_reaction_collection
from follow import follower_approval_active from follow import follower_approval_active
@ -65,7 +65,8 @@ def reaction_button(self, calling_domain: str, path: str,
account_timezone: {}, account_timezone: {},
bold_reading_nicknames: {}, bold_reading_nicknames: {},
min_images_for_accounts: [], min_images_for_accounts: [],
session_onion, session_i2p) -> None: session_onion, session_i2p,
mitm_servers: []) -> None:
"""Press an emoji reaction button """Press an emoji reaction button
Note that this is not the emoji reaction selection icon at the Note that this is not the emoji reaction selection icon at the
bottom of the post bottom of the post
@ -290,7 +291,8 @@ def reaction_button(self, calling_domain: str, path: str,
dogwhistles, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, buy_sites,
auto_cw_cache) auto_cw_cache,
mitm_servers)
else: else:
print('WARN: Emoji reaction post not found: ' + print('WARN: Emoji reaction post not found: ' +
reaction_post_filename) reaction_post_filename)
@ -352,7 +354,8 @@ def reaction_button_undo(self, calling_domain: str, path: str,
bold_reading_nicknames: {}, bold_reading_nicknames: {},
min_images_for_accounts: [], min_images_for_accounts: [],
session_onion, session_onion,
session_i2p) -> None: session_i2p,
mitm_servers: []) -> None:
"""A button is pressed to undo emoji reaction """A button is pressed to undo emoji reaction
""" """
page_number = 1 page_number = 1
@ -563,7 +566,8 @@ def reaction_button_undo(self, calling_domain: str, path: str,
dogwhistles, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, buy_sites,
auto_cw_cache) auto_cw_cache,
mitm_servers)
else: else:
print('WARN: Unreaction post not found: ' + print('WARN: Unreaction post not found: ' +
reaction_post_filename) reaction_post_filename)

View File

@ -69,7 +69,8 @@ def show_shares_feed(self, authorized: bool,
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}, fitness: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Shows the shares feed for a particular account/actor """Shows the shares feed for a particular account/actor
""" """
shares = \ shares = \
@ -169,7 +170,8 @@ def show_shares_feed(self, authorized: bool,
sites_unavailable, sites_unavailable,
no_of_books, no_of_books,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,
@ -251,7 +253,8 @@ def show_following_feed(self, authorized: bool,
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}, fitness: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Shows the following feed for a particular account/actor """Shows the following feed for a particular account/actor
""" """
following = \ following = \
@ -358,7 +361,8 @@ def show_following_feed(self, authorized: bool,
sites_unavailable, sites_unavailable,
no_of_books, no_of_books,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances).encode('utf-8') known_epicyon_instances,
mitm_servers).encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', set_headers(self, 'text/html',
msglen, cookie, calling_domain, False) msglen, cookie, calling_domain, False)
@ -446,7 +450,8 @@ def show_moved_feed(self, authorized: bool,
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}, fitness: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Shows the moved feed for a particular account/actor """Shows the moved feed for a particular account/actor
""" """
following = \ following = \
@ -548,7 +553,8 @@ def show_moved_feed(self, authorized: bool,
sites_unavailable, sites_unavailable,
no_of_books, no_of_books,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances).encode('utf-8') known_epicyon_instances,
mitm_servers).encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', set_headers(self, 'text/html',
msglen, cookie, calling_domain, False) msglen, cookie, calling_domain, False)
@ -628,7 +634,8 @@ def show_inactive_feed(self, authorized: bool,
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}, fitness: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Shows the inactive accounts feed for a particular account/actor """Shows the inactive accounts feed for a particular account/actor
""" """
following = \ following = \
@ -731,7 +738,8 @@ def show_inactive_feed(self, authorized: bool,
sites_unavailable, sites_unavailable,
no_of_books, no_of_books,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances).encode('utf-8') known_epicyon_instances,
mitm_servers).encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', set_headers(self, 'text/html',
msglen, cookie, calling_domain, False) msglen, cookie, calling_domain, False)
@ -813,7 +821,8 @@ def show_followers_feed(self, authorized: bool,
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}, fitness: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Shows the followers feed for a particular account/actor """Shows the followers feed for a particular account/actor
""" """
followers = \ followers = \
@ -917,7 +926,8 @@ def show_followers_feed(self, authorized: bool,
sites_unavailable, sites_unavailable,
no_of_books, no_of_books,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances).encode('utf-8') known_epicyon_instances,
mitm_servers).encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,
cookie, calling_domain, False) cookie, calling_domain, False)

View File

@ -169,7 +169,8 @@ def hashtag_search2(self, calling_domain: str,
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: [], buy_sites: [],
auto_cw_cache: {}, auto_cw_cache: {},
ua_str: str) -> None: ua_str: str,
mitm_servers: []) -> None:
"""Return the result of a hashtag search """Return the result of a hashtag search
""" """
page_number = 1 page_number = 1
@ -236,7 +237,8 @@ def hashtag_search2(self, calling_domain: str,
'search', 'search',
min_images_for_accounts, min_images_for_accounts,
buy_sites, buy_sites,
auto_cw_cache, ua_str) auto_cw_cache, ua_str,
mitm_servers)
if hashtag_str: if hashtag_str:
msg = hashtag_str.encode('utf-8') msg = hashtag_str.encode('utf-8')
msglen = len(msg) msglen = len(msg)

View File

@ -25,6 +25,7 @@ from utils import get_json_content_from_accept
from utils import convert_domains from utils import convert_domains
from utils import has_object_dict from utils import has_object_dict
from utils import load_json from utils import load_json
from utils import detect_mitm
from session import establish_session from session import establish_session
from languages import get_understood_languages from languages import get_understood_languages
from languages import get_reply_language from languages import get_reply_language
@ -47,7 +48,6 @@ from fitnessFunctions import fitness_performance
from securemode import secure_mode from securemode import secure_mode
from context import get_individual_post_context from context import get_individual_post_context
from conversation import convthread_id_to_conversation_tag from conversation import convthread_id_to_conversation_tag
from daemon_utils import detect_mitm
def _show_post_from_file(self, post_filename: str, liked_by: str, def _show_post_from_file(self, post_filename: str, liked_by: str,
@ -84,7 +84,8 @@ def _show_post_from_file(self, post_filename: str, liked_by: str,
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}, path: str, fitness: {}, path: str,
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Shows an individual post from its filename """Shows an individual post from its filename
""" """
if not os.path.isfile(post_filename): if not os.path.isfile(post_filename):
@ -162,7 +163,8 @@ def _show_post_from_file(self, post_filename: str, liked_by: str,
dogwhistles, dogwhistles,
min_images_for_accounts, min_images_for_accounts,
buy_sites, buy_sites,
auto_cw_cache) auto_cw_cache,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_html_post_headers(self, msglen, set_html_post_headers(self, msglen,
@ -241,7 +243,8 @@ def show_individual_post(self, ssml_getreq: bool, authorized: bool,
buy_sites: [], buy_sites: [],
auto_cw_cache: {}, auto_cw_cache: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Shows an individual post """Shows an individual post
""" """
liked_by = None liked_by = None
@ -346,7 +349,8 @@ def show_individual_post(self, ssml_getreq: bool, authorized: bool,
auto_cw_cache, auto_cw_cache,
fitness, path, fitness, path,
onion_domain, onion_domain,
i2p_domain) i2p_domain,
mitm_servers)
fitness_performance(getreq_start_time, fitness, fitness_performance(getreq_start_time, fitness,
'_GET', 'show_individual_post', '_GET', 'show_individual_post',
@ -394,7 +398,8 @@ def show_new_post(self, edit_post_params: {},
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: [], buy_sites: [],
auto_cw_cache: {}, auto_cw_cache: {},
searchable_by_default_dict: []) -> bool: searchable_by_default_dict: [],
mitm_servers: []) -> bool:
"""Shows the new post screen """Shows the new post screen
""" """
searchable_by_default = 'yourself' searchable_by_default = 'yourself'
@ -520,7 +525,8 @@ def show_new_post(self, edit_post_params: {},
buy_sites, buy_sites,
default_buy_site, default_buy_site,
auto_cw_cache, auto_cw_cache,
searchable_by_default) searchable_by_default,
mitm_servers)
if not msg: if not msg:
print('Error replying to ' + in_reply_to_url) print('Error replying to ' + in_reply_to_url)
http_404(self, 104) http_404(self, 104)
@ -570,7 +576,8 @@ def show_individual_at_post(self, ssml_getreq: bool, authorized: bool,
auto_cw_cache: {}, auto_cw_cache: {},
onion_domain: str, onion_domain: str,
i2p_domain: str, i2p_domain: str,
bold_reading_nicknames: {}) -> bool: bold_reading_nicknames: {},
mitm_servers: []) -> bool:
"""get an individual post from the path /@nickname/statusnumber """get an individual post from the path /@nickname/statusnumber
""" """
if '/@' not in path: if '/@' not in path:
@ -681,7 +688,8 @@ def show_individual_at_post(self, ssml_getreq: bool, authorized: bool,
auto_cw_cache, auto_cw_cache,
fitness, path, fitness, path,
onion_domain, onion_domain,
i2p_domain) i2p_domain,
mitm_servers)
fitness_performance(getreq_start_time, fitness, fitness_performance(getreq_start_time, fitness,
'_GET', 'show_individual_at_post', '_GET', 'show_individual_at_post',
@ -719,7 +727,8 @@ def show_likers_of_post(self, authorized: bool,
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: [], buy_sites: [],
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}) -> bool: fitness: {},
mitm_servers: []) -> bool:
"""Show the likers of a post """Show the likers of a post
""" """
if not authorized: if not authorized:
@ -767,7 +776,8 @@ def show_likers_of_post(self, authorized: bool,
dogwhistles, dogwhistles,
min_images_for_accounts, min_images_for_accounts,
buy_sites, buy_sites,
auto_cw_cache, 'likes') auto_cw_cache, 'likes',
mitm_servers)
if not msg: if not msg:
http_404(self, 69) http_404(self, 69)
return True return True
@ -812,7 +822,8 @@ def show_announcers_of_post(self, authorized: bool,
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: [], buy_sites: [],
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}) -> bool: fitness: {},
mitm_servers: []) -> bool:
"""Show the announcers of a post """Show the announcers of a post
""" """
if not authorized: if not authorized:
@ -861,7 +872,7 @@ def show_announcers_of_post(self, authorized: bool,
min_images_for_accounts, min_images_for_accounts,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
'shares') 'shares', mitm_servers)
if not msg: if not msg:
http_404(self, 70) http_404(self, 70)
return True return True
@ -908,7 +919,8 @@ def show_replies_to_post(self, authorized: bool,
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}, fitness: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Shows the replies to a post """Shows the replies to a post
""" """
if not ('/statuses/' in path and '/users/' in path): if not ('/statuses/' in path and '/users/' in path):
@ -1008,7 +1020,8 @@ def show_replies_to_post(self, authorized: bool,
dogwhistles, dogwhistles,
min_images_for_accounts, min_images_for_accounts,
buy_sites, buy_sites,
auto_cw_cache) auto_cw_cache,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,
@ -1120,7 +1133,8 @@ def show_replies_to_post(self, authorized: bool,
dogwhistles, dogwhistles,
min_images_for_accounts, min_images_for_accounts,
buy_sites, buy_sites,
auto_cw_cache) auto_cw_cache,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,
@ -1187,7 +1201,8 @@ def show_notify_post(self, authorized: bool,
auto_cw_cache: {}, auto_cw_cache: {},
onion_domain: str, onion_domain: str,
i2p_domain: str, i2p_domain: str,
bold_reading_nicknames: {}) -> bool: bold_reading_nicknames: {},
mitm_servers: []) -> bool:
"""Shows an individual post from an account which you are following """Shows an individual post from an account which you are following
and where you have the notify checkbox set on person options and where you have the notify checkbox set on person options
""" """
@ -1245,7 +1260,8 @@ def show_notify_post(self, authorized: bool,
auto_cw_cache, auto_cw_cache,
fitness, path, fitness, path,
onion_domain, onion_domain,
i2p_domain) i2p_domain,
mitm_servers)
fitness_performance(getreq_start_time, fitness, fitness_performance(getreq_start_time, fitness,
'_GET', 'show_notify_post', '_GET', 'show_notify_post',
debug) debug)
@ -1287,7 +1303,8 @@ def show_conversation_thread(self, authorized: bool,
blocked_cache: {}, blocked_cache: {},
block_federated: {}, block_federated: {},
auto_cw_cache: {}, auto_cw_cache: {},
default_timeline: str) -> bool: default_timeline: str,
mitm_servers: []) -> bool:
"""get conversation thread from the date link on a post """get conversation thread from the date link on a post
""" """
if not path.startswith('/users/'): if not path.startswith('/users/'):
@ -1369,7 +1386,8 @@ def show_conversation_thread(self, authorized: bool,
block_federated, block_federated,
auto_cw_cache, auto_cw_cache,
ua_str, ua_str,
default_timeline) default_timeline,
mitm_servers)
if conv_str: if conv_str:
msg = conv_str.encode('utf-8') msg = conv_str.encode('utf-8')
msglen = len(msg) msglen = len(msg)

View File

@ -78,7 +78,8 @@ def show_person_profile(self, authorized: bool,
content_license_url: str, content_license_url: str,
buy_sites: [], buy_sites: [],
no_of_books: int, no_of_books: int,
auto_cw_cache: {}) -> bool: auto_cw_cache: {},
mitm_servers: []) -> bool:
"""Shows the profile for a person """Shows the profile for a person
""" """
# look up a person # look up a person
@ -150,7 +151,8 @@ def show_person_profile(self, authorized: bool,
sites_unavailable, sites_unavailable,
no_of_books, no_of_books,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances).encode('utf-8') known_epicyon_instances,
mitm_servers).encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,
cookie, calling_domain, False) cookie, calling_domain, False)
@ -233,7 +235,8 @@ def show_roles(self, calling_domain: str, referer_domain: str,
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}, fitness: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Show roles within profile screen """Show roles within profile screen
""" """
named_status = path.split('/users/')[1] named_status = path.split('/users/')[1]
@ -308,7 +311,8 @@ def show_roles(self, calling_domain: str, referer_domain: str,
sites_unavailable, sites_unavailable,
no_of_books, no_of_books,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,
@ -383,7 +387,8 @@ def show_skills(self, calling_domain: str, referer_domain: str,
fitness: {}, fitness: {},
domain_full: str, domain_full: str,
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Show skills on the profile screen """Show skills on the profile screen
""" """
named_status = path.split('/users/')[1] named_status = path.split('/users/')[1]
@ -460,7 +465,8 @@ def show_skills(self, calling_domain: str, referer_domain: str,
sites_unavailable, sites_unavailable,
no_of_books, no_of_books,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,

View File

@ -47,7 +47,8 @@ def reaction_picker2(self, calling_domain: str, path: str,
auto_cw_cache: {}, auto_cw_cache: {},
account_timezone: {}, account_timezone: {},
bold_reading_nicknames: {}, bold_reading_nicknames: {},
fitness: {}) -> None: fitness: {},
mitm_servers: []) -> None:
"""Press the emoji reaction picker icon at the bottom of the post """Press the emoji reaction picker icon at the bottom of the post
""" """
page_number = 1 page_number = 1
@ -149,7 +150,8 @@ def reaction_picker2(self, calling_domain: str, path: str,
dogwhistles, dogwhistles,
min_images_for_accounts, min_images_for_accounts,
buy_sites, buy_sites,
auto_cw_cache) auto_cw_cache,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,

View File

@ -85,7 +85,8 @@ def show_media_timeline(self, authorized: bool,
full_width_tl_button_header: bool, full_width_tl_button_header: bool,
onion_domain: str, onion_domain: str,
i2p_domain: str, i2p_domain: str,
hide_announces: {}) -> bool: hide_announces: {},
mitm_servers: []) -> bool:
"""Shows the media timeline """Shows the media timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -203,7 +204,8 @@ def show_media_timeline(self, authorized: bool,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
show_announces, show_announces,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,
@ -299,7 +301,8 @@ def show_blogs_timeline(self, authorized: bool,
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}, fitness: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Shows the blogs timeline """Shows the blogs timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -412,7 +415,8 @@ def show_blogs_timeline(self, authorized: bool,
reverse_sequence, last_post_id, reverse_sequence, last_post_id,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,
@ -508,7 +512,8 @@ def show_news_timeline(self, authorized: bool,
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}, fitness: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Shows the news timeline """Shows the news timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -626,7 +631,8 @@ def show_news_timeline(self, authorized: bool,
reverse_sequence, reverse_sequence,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,
@ -720,7 +726,8 @@ def show_features_timeline(self, authorized: bool,
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}, fitness: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Shows the features timeline (all local blogs) """Shows the features timeline (all local blogs)
""" """
if '/users/' in path: if '/users/' in path:
@ -835,7 +842,8 @@ def show_features_timeline(self, authorized: bool,
reverse_sequence, reverse_sequence,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,
@ -926,7 +934,8 @@ def show_shares_timeline(self, authorized: bool,
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: [], buy_sites: [],
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}) -> bool: fitness: {},
mitm_servers: []) -> bool:
"""Shows the shares timeline """Shows the shares timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -1004,7 +1013,8 @@ def show_shares_timeline(self, authorized: bool,
reverse_sequence, reverse_sequence,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,
@ -1072,7 +1082,8 @@ def show_wanted_timeline(self, authorized: bool,
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: [], buy_sites: [],
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}) -> bool: fitness: {},
mitm_servers: []) -> bool:
"""Shows the wanted timeline """Shows the wanted timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -1149,7 +1160,8 @@ def show_wanted_timeline(self, authorized: bool,
reverse_sequence, reverse_sequence,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,
@ -1221,7 +1233,8 @@ def show_bookmarks_timeline(self, authorized: bool,
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}, fitness: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Shows the bookmarks timeline """Shows the bookmarks timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -1330,7 +1343,8 @@ def show_bookmarks_timeline(self, authorized: bool,
reverse_sequence, reverse_sequence,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,
@ -1428,7 +1442,8 @@ def show_outbox_timeline(self, authorized: bool,
fitness: {}, fitness: {},
onion_domain: str, onion_domain: str,
i2p_domain: str, i2p_domain: str,
hide_announces: {}) -> bool: hide_announces: {},
mitm_servers: []) -> bool:
"""Shows the outbox timeline """Shows the outbox timeline
""" """
# get outbox feed for a person # get outbox feed for a person
@ -1539,7 +1554,8 @@ def show_outbox_timeline(self, authorized: bool,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
show_announces, show_announces,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,
@ -1622,7 +1638,8 @@ def show_mod_timeline(self, authorized: bool,
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}, fitness: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Shows the moderation timeline """Shows the moderation timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -1730,7 +1747,8 @@ def show_mod_timeline(self, authorized: bool,
reverse_sequence, reverse_sequence,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,
@ -1823,7 +1841,8 @@ def show_dms(self, authorized: bool,
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}, fitness: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Shows the DMs timeline """Shows the DMs timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -1935,7 +1954,8 @@ def show_dms(self, authorized: bool,
reverse_sequence, last_post_id, reverse_sequence, last_post_id,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,
@ -2031,7 +2051,8 @@ def show_replies(self, authorized: bool,
auto_cw_cache: {}, auto_cw_cache: {},
fitness: {}, fitness: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Shows the replies timeline """Shows the replies timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -2144,7 +2165,8 @@ def show_replies(self, authorized: bool,
reverse_sequence, last_post_id, reverse_sequence, last_post_id,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
set_headers(self, 'text/html', msglen, set_headers(self, 'text/html', msglen,
@ -2240,7 +2262,8 @@ def show_inbox(self, authorized: bool,
auto_cw_cache: {}, auto_cw_cache: {},
onion_domain: str, onion_domain: str,
i2p_domain: str, i2p_domain: str,
hide_announces: {}) -> bool: hide_announces: {},
mitm_servers: []) -> bool:
"""Shows the inbox timeline """Shows the inbox timeline
""" """
if '/users/' in path: if '/users/' in path:
@ -2366,7 +2389,8 @@ def show_inbox(self, authorized: bool,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
show_announces, show_announces,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
if getreq_start_time: if getreq_start_time:
fitness_performance(getreq_start_time, fitness, fitness_performance(getreq_start_time, fitness,
'_GET', '_show_inbox3', '_GET', '_show_inbox3',

View File

@ -21,6 +21,7 @@ from utils import local_actor_url
from utils import contains_invalid_chars from utils import contains_invalid_chars
from utils import remove_id_ending from utils import remove_id_ending
from utils import check_bad_path from utils import check_bad_path
from utils import detect_mitm
from blocking import contains_military_domain from blocking import contains_military_domain
from blocking import contains_government_domain from blocking import contains_government_domain
from blocking import contains_bluesky_domain from blocking import contains_bluesky_domain
@ -41,7 +42,6 @@ from httpcodes import http_503
from httpheaders import contains_suspicious_headers from httpheaders import contains_suspicious_headers
from httpheaders import update_headers_catalog from httpheaders import update_headers_catalog
from httpheaders import redirect_headers from httpheaders import redirect_headers
from daemon_utils import detect_mitm
from daemon_utils import log_epicyon_instances from daemon_utils import log_epicyon_instances
from daemon_utils import get_user_agent from daemon_utils import get_user_agent
from daemon_utils import post_to_outbox from daemon_utils import post_to_outbox
@ -310,7 +310,8 @@ def daemon_http_post(self) -> None:
self.server.translate, self.server.translate,
self.server.theme_name, self.server.theme_name,
self.server.dyslexic_font, self.server.dyslexic_font,
self.server.peertube_instances) self.server.peertube_instances,
self.server.mitm_servers)
self.server.postreq_busy = False self.server.postreq_busy = False
return return
@ -402,7 +403,8 @@ def daemon_http_post(self) -> None:
self.server.access_keys, self.server.access_keys,
self.server.person_cache, self.server.person_cache,
self.server.recent_posts_cache, self.server.recent_posts_cache,
self.server.blocked_cache) self.server.blocked_cache,
self.server.mitm_servers)
self.server.postreq_busy = False self.server.postreq_busy = False
return return
@ -474,7 +476,7 @@ def daemon_http_post(self) -> None:
self.server.max_shares_on_profile, self.server.max_shares_on_profile,
self.server.no_of_books, self.server.no_of_books,
self.server.shared_items_federated_domains, self.server.shared_items_federated_domains,
ua_str) ua_str, self.server.mitm_servers)
self.server.postreq_busy = False self.server.postreq_busy = False
return return
@ -602,7 +604,8 @@ def daemon_http_post(self) -> None:
self.server.cached_webfingers, self.server.cached_webfingers,
self.server.person_cache, self.server.person_cache,
self.server.project_version, self.server.project_version,
self.server.sites_unavailable) self.server.sites_unavailable,
self.server.mitm_servers)
self.server.postreq_busy = False self.server.postreq_busy = False
return return
@ -733,7 +736,8 @@ def daemon_http_post(self) -> None:
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.default_post_language, self.server.default_post_language,
self.server.newswire, self.server.newswire,
self.server.block_federated) self.server.block_federated,
self.server.mitm_servers)
self.server.postreq_busy = False self.server.postreq_busy = False
return return
@ -903,7 +907,8 @@ def daemon_http_post(self) -> None:
self.server.max_shares_on_profile, self.server.max_shares_on_profile,
self.server.watermark_width_percent, self.server.watermark_width_percent,
self.server.watermark_position, self.server.watermark_position,
self.server.watermark_opacity) self.server.watermark_opacity,
self.server.mitm_servers)
if page_number: if page_number:
print(curr_post_type + ' post received') print(curr_post_type + ' post received')
nickname = self.path.split('/users/')[1] nickname = self.path.split('/users/')[1]

View File

@ -153,7 +153,8 @@ def follow_confirm2(self, calling_domain: str, cookie: str,
cached_webfingers: {}, cached_webfingers: {},
person_cache: {}, person_cache: {},
project_version: str, project_version: str,
sites_unavailable: []) -> None: sites_unavailable: [],
mitm_servers: []) -> None:
"""Confirm to follow """Confirm to follow
""" """
users_path = path.split('/followconfirm')[0] users_path = path.split('/followconfirm')[0]
@ -214,7 +215,8 @@ def follow_confirm2(self, calling_domain: str, cookie: str,
system_language, system_language,
signing_priv_key_pem, signing_priv_key_pem,
users_path, users_path,
block_federated) block_federated,
mitm_servers)
if msg: if msg:
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
@ -305,7 +307,8 @@ def follow_confirm2(self, calling_domain: str, cookie: str,
onion_domain, onion_domain,
i2p_domain, i2p_domain,
sites_unavailable, sites_unavailable,
system_language) system_language,
mitm_servers)
if '&submitUnblock=' in follow_confirm_params: if '&submitUnblock=' in follow_confirm_params:
blocking_actor = \ blocking_actor = \

View File

@ -48,7 +48,8 @@ def moderator_actions(self, path: str, calling_domain: str, cookie: str,
theme_name: str, theme_name: str,
access_keys: {}, person_cache: {}, access_keys: {}, person_cache: {},
recent_posts_cache: {}, recent_posts_cache: {},
blocked_cache: {}) -> None: blocked_cache: {},
mitm_servers: []) -> None:
"""Actions on the moderator screen """Actions on the moderator screen
""" """
users_path = path.replace('/moderationaction', '') users_path = path.replace('/moderationaction', '')
@ -165,7 +166,8 @@ def moderator_actions(self, path: str, calling_domain: str, cookie: str,
system_language, system_language,
signing_priv_key_pem, signing_priv_key_pem,
None, None,
block_federated) block_federated,
mitm_servers)
else: else:
msg = \ msg = \
html_moderation_info(translate, html_moderation_info(translate,

View File

@ -246,7 +246,8 @@ def _person_options_view(self, options_confirm_params: str,
auto_cw_cache: {}, auto_cw_cache: {},
cookie: str, cookie: str,
calling_domain: str, calling_domain: str,
curr_session, access_keys: {}) -> bool: curr_session, access_keys: {},
mitm_servers: []) -> bool:
"""Person options screen, view button """Person options screen, view button
See html_person_options See html_person_options
""" """
@ -326,7 +327,8 @@ def _person_options_view(self, options_confirm_params: str,
buy_sites, buy_sites,
max_shares_on_profile, max_shares_on_profile,
no_of_books, no_of_books,
auto_cw_cache) auto_cw_cache,
mitm_servers)
if profile_str: if profile_str:
msg = profile_str.encode('utf-8') msg = profile_str.encode('utf-8')
msglen = len(msg) msglen = len(msg)
@ -914,7 +916,8 @@ def _person_options_dm(self, options_confirm_params: str,
buy_sites: [], buy_sites: [],
auto_cw_cache: {}, auto_cw_cache: {},
cookie: str, calling_domain: str, cookie: str, calling_domain: str,
access_keys: {}) -> bool: access_keys: {},
mitm_servers: []) -> bool:
"""Person options screen, DM button """Person options screen, DM button
See html_person_options See html_person_options
""" """
@ -995,7 +998,8 @@ def _person_options_dm(self, options_confirm_params: str,
buy_sites, buy_sites,
default_buy_site, default_buy_site,
auto_cw_cache, auto_cw_cache,
searchable_by_default) searchable_by_default,
mitm_servers)
if msg: if msg:
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
@ -1014,7 +1018,8 @@ def _person_options_info(self, options_confirm_params: str,
domain: str, system_language: str, domain: str, system_language: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
block_federated: [], block_federated: [],
cookie: str, calling_domain: str) -> bool: cookie: str, calling_domain: str,
mitm_servers: []) -> bool:
"""Person options screen, Info button """Person options screen, Info button
See html_person_options See html_person_options
""" """
@ -1033,7 +1038,8 @@ def _person_options_info(self, options_confirm_params: str,
system_language, system_language,
signing_priv_key_pem, signing_priv_key_pem,
None, None,
block_federated) block_federated,
mitm_servers)
if msg: if msg:
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
@ -1149,7 +1155,8 @@ def _person_options_report(self, options_confirm_params: str,
buy_sites: [], buy_sites: [],
auto_cw_cache: {}, auto_cw_cache: {},
cookie: str, calling_domain: str, cookie: str, calling_domain: str,
access_keys: {}) -> bool: access_keys: {},
mitm_servers: []) -> bool:
"""Person options screen, report button """Person options screen, report button
See html_person_options See html_person_options
""" """
@ -1230,7 +1237,8 @@ def _person_options_report(self, options_confirm_params: str,
buy_sites, buy_sites,
default_buy_site, default_buy_site,
auto_cw_cache, auto_cw_cache,
searchable_by_default) searchable_by_default,
mitm_servers)
if msg: if msg:
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
@ -1280,7 +1288,8 @@ def person_options2(self, path: str,
auto_cw_cache: {}, auto_cw_cache: {},
default_post_language: str, default_post_language: str,
newswire: {}, newswire: {},
block_federated: []) -> None: block_federated: [],
mitm_servers: []) -> None:
"""Receive POST from person options screen """Receive POST from person options screen
""" """
page_number = 1 page_number = 1
@ -1408,7 +1417,8 @@ def person_options2(self, path: str,
auto_cw_cache, auto_cw_cache,
cookie, cookie,
calling_domain, calling_domain,
curr_session, access_keys): curr_session, access_keys,
mitm_servers):
return return
if _person_option_receive_petname(self, options_confirm_params, if _person_option_receive_petname(self, options_confirm_params,
@ -1617,7 +1627,8 @@ def person_options2(self, path: str,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
cookie, calling_domain, cookie, calling_domain,
access_keys): access_keys,
mitm_servers):
return return
if _person_options_info(self, options_confirm_params, if _person_options_info(self, options_confirm_params,
@ -1627,7 +1638,8 @@ def person_options2(self, path: str,
domain, system_language, domain, system_language,
signing_priv_key_pem, signing_priv_key_pem,
block_federated, block_federated,
cookie, calling_domain): cookie, calling_domain,
mitm_servers):
return return
if _person_options_snooze(self, options_confirm_params, if _person_options_snooze(self, options_confirm_params,
@ -1684,7 +1696,8 @@ def person_options2(self, path: str,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
cookie, calling_domain, cookie, calling_domain,
access_keys): access_keys,
mitm_servers):
return return
# redirect back from person options screen # redirect back from person options screen

View File

@ -1724,7 +1724,8 @@ def _profile_post_website(curr_session, base_dir: str, http_prefix: str,
nickname: str, domain: str, nickname: str, domain: str,
actor_json: {}, fields: {}, actor_json: {}, fields: {},
actor_changed: bool, actor_changed: bool,
translate: {}, debug: bool) -> bool: translate: {}, debug: bool,
mitm_servers: []) -> bool:
""" HTTP POST change website """ HTTP POST change website
""" """
current_website = get_website(actor_json, translate) current_website = get_website(actor_json, translate)
@ -1739,7 +1740,8 @@ def _profile_post_website(curr_session, base_dir: str, http_prefix: str,
http_prefix, http_prefix,
nickname, domain, nickname, domain,
fields['websiteUrl'], fields['websiteUrl'],
True, debug) True, debug,
mitm_servers)
else: else:
if current_website: if current_website:
set_website(actor_json, '', translate) set_website(actor_json, '', translate)
@ -1991,7 +1993,8 @@ def _profile_post_blog_address(curr_session,
nickname: str, domain: str, nickname: str, domain: str,
actor_json: {}, fields: {}, actor_json: {}, fields: {},
actor_changed: bool, actor_changed: bool,
debug: bool) -> bool: debug: bool,
mitm_servers: []) -> bool:
""" HTTP POST change blog address """ HTTP POST change blog address
""" """
current_blog_address = get_blog_address(actor_json) current_blog_address = get_blog_address(actor_json)
@ -2004,7 +2007,7 @@ def _profile_post_blog_address(curr_session,
base_dir, http_prefix, base_dir, http_prefix,
nickname, domain, nickname, domain,
fields['blogAddress'], fields['blogAddress'],
True, debug) True, debug, mitm_servers)
else: else:
if current_blog_address: if current_blog_address:
set_blog_address(actor_json, '') set_blog_address(actor_json, '')
@ -2698,7 +2701,8 @@ def profile_edit(self, calling_domain: str, cookie: str,
person_cache: {}, project_version: str, person_cache: {}, project_version: str,
translate: {}, theme_name: str, translate: {}, theme_name: str,
dyslexic_font: bool, dyslexic_font: bool,
peertube_instances: []) -> None: peertube_instances: [],
mitm_servers: []) -> None:
"""Updates your user profile after editing via the Edit button """Updates your user profile after editing via the Edit button
on the profile screen on the profile screen
""" """
@ -3075,7 +3079,7 @@ def profile_edit(self, calling_domain: str, cookie: str,
nickname, domain, nickname, domain,
actor_json, fields, actor_json, fields,
actor_changed, actor_changed,
debug) debug, mitm_servers)
actor_changed = \ actor_changed = \
_profile_post_show_languages(actor_json, fields, _profile_post_show_languages(actor_json, fields,
@ -3134,7 +3138,7 @@ def profile_edit(self, calling_domain: str, cookie: str,
actor_json, fields, actor_json, fields,
actor_changed, actor_changed,
translate, translate,
debug) debug, mitm_servers)
actor_changed = \ actor_changed = \
_profile_post_gemini_link(actor_json, fields, _profile_post_gemini_link(actor_json, fields,

View File

@ -111,7 +111,8 @@ def _receive_new_post_process_newpost(self, fields: {},
proxy_type: str, proxy_type: str,
max_replies: int, max_replies: int,
onion_domain: str, onion_domain: str,
i2p_domain: str) -> int: i2p_domain: str,
mitm_servers: []) -> int:
""" A new post has been received from the New Post screen and """ A new post has been received from the New Post screen and
is then sent to the outbox is then sent to the outbox
""" """
@ -218,7 +219,8 @@ def _receive_new_post_process_newpost(self, fields: {},
max_hashtags, max_hashtags,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
onion_domain, i2p_domain) onion_domain, i2p_domain,
mitm_servers)
print('DEBUG: sending edited public post ' + print('DEBUG: sending edited public post ' +
str(message_json)) str(message_json))
if fields['schedulePost']: if fields['schedulePost']:
@ -524,7 +526,8 @@ def _receive_new_post_process_newunlisted(self, fields: {},
proxy_type: str, proxy_type: str,
max_replies: int, max_replies: int,
onion_domain: str, onion_domain: str,
i2p_domain: str) -> int: i2p_domain: str,
mitm_servers: []) -> int:
"""Unlisted post has been received from New Post screen """Unlisted post has been received from New Post screen
and is then sent to the outbox and is then sent to the outbox
""" """
@ -617,7 +620,8 @@ def _receive_new_post_process_newunlisted(self, fields: {},
max_hashtags, max_hashtags,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
onion_domain, i2p_domain) onion_domain, i2p_domain,
mitm_servers)
print('DEBUG: sending edited unlisted post ' + print('DEBUG: sending edited unlisted post ' +
str(message_json)) str(message_json))
@ -678,7 +682,8 @@ def _receive_new_post_process_newfollowers(self, fields: {},
proxy_type: str, proxy_type: str,
max_replies: int, max_replies: int,
onion_domain: str, onion_domain: str,
i2p_domain: str) -> int: i2p_domain: str,
mitm_servers: []) -> int:
"""Followers only post has been received from New Post screen """Followers only post has been received from New Post screen
and is then sent to the outbox and is then sent to the outbox
""" """
@ -781,7 +786,8 @@ def _receive_new_post_process_newfollowers(self, fields: {},
max_hashtags, max_hashtags,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
onion_domain, i2p_domain) onion_domain, i2p_domain,
mitm_servers)
print('DEBUG: sending edited followers post ' + print('DEBUG: sending edited followers post ' +
str(message_json)) str(message_json))
@ -843,7 +849,8 @@ def _receive_new_post_process_newdm(self, fields: {},
proxy_type: str, proxy_type: str,
max_replies: int, max_replies: int,
onion_domain: str, onion_domain: str,
i2p_domain: str) -> int: i2p_domain: str,
mitm_servers: []) -> int:
"""Direct message post has been received from New Post screen """Direct message post has been received from New Post screen
and is then sent to the outbox and is then sent to the outbox
""" """
@ -953,7 +960,8 @@ def _receive_new_post_process_newdm(self, fields: {},
max_hashtags, max_hashtags,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
onion_domain, i2p_domain) onion_domain, i2p_domain,
mitm_servers)
print('DEBUG: sending edited dm post ' + print('DEBUG: sending edited dm post ' +
str(message_json)) str(message_json))
@ -1014,7 +1022,8 @@ def _receive_new_post_process_newreminder(self, fields: {}, nickname: str,
project_version: str, project_version: str,
proxy_type: str, proxy_type: str,
onion_domain: str, onion_domain: str,
i2p_domain: str) -> int: i2p_domain: str,
mitm_servers: []) -> int:
"""Reminder post has been received from New Post screen """Reminder post has been received from New Post screen
and is then sent to the outbox and is then sent to the outbox
""" """
@ -1109,7 +1118,8 @@ def _receive_new_post_process_newreminder(self, fields: {}, nickname: str,
max_hashtags, max_hashtags,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
onion_domain, i2p_domain) onion_domain, i2p_domain,
mitm_servers)
print('DEBUG: sending edited reminder post ' + print('DEBUG: sending edited reminder post ' +
str(message_json)) str(message_json))
if post_to_outbox(self, message_json, if post_to_outbox(self, message_json,
@ -1314,7 +1324,8 @@ def _receive_new_post_process_newreading(self, fields: {},
proxy_type: str, proxy_type: str,
max_replies: int, max_replies: int,
onion_domain: str, onion_domain: str,
i2p_domain: str) -> int: i2p_domain: str,
mitm_servers: []) -> int:
"""Reading status post has been received from New Post screen """Reading status post has been received from New Post screen
and is then sent to the outbox and is then sent to the outbox
""" """
@ -1427,7 +1438,8 @@ def _receive_new_post_process_newreading(self, fields: {},
max_hashtags, max_hashtags,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
onion_domain, i2p_domain) onion_domain, i2p_domain,
mitm_servers)
print('DEBUG: sending edited reading status post ' + print('DEBUG: sending edited reading status post ' +
str(message_json)) str(message_json))
if fields['schedulePost']: if fields['schedulePost']:
@ -1635,7 +1647,8 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
max_shares_on_profile: int, max_shares_on_profile: int,
watermark_width_percent: int, watermark_width_percent: int,
watermark_position: str, watermark_position: str,
watermark_opacity: int) -> int: watermark_opacity: int,
mitm_servers: []) -> int:
# Note: this needs to happen synchronously # Note: this needs to happen synchronously
# 0=this is not a new post # 0=this is not a new post
# 1=new post success # 1=new post success
@ -1894,7 +1907,8 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
proxy_type, proxy_type,
max_replies, max_replies,
onion_domain, onion_domain,
i2p_domain) i2p_domain,
mitm_servers)
if post_type == 'newblog': if post_type == 'newblog':
return _receive_new_post_process_newblog( return _receive_new_post_process_newblog(
self, fields, self, fields,
@ -1970,7 +1984,8 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
proxy_type, proxy_type,
max_replies, max_replies,
onion_domain, onion_domain,
i2p_domain) i2p_domain,
mitm_servers)
if post_type == 'newfollowers': if post_type == 'newfollowers':
return _receive_new_post_process_newfollowers( return _receive_new_post_process_newfollowers(
self, fields, self, fields,
@ -2015,7 +2030,8 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
project_version, project_version,
proxy_type, proxy_type,
max_replies, max_replies,
onion_domain, i2p_domain) onion_domain, i2p_domain,
mitm_servers)
if post_type == 'newdm': if post_type == 'newdm':
return _receive_new_post_process_newdm( return _receive_new_post_process_newdm(
self, fields, self, fields,
@ -2062,7 +2078,8 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
proxy_type, proxy_type,
max_replies, max_replies,
onion_domain, onion_domain,
i2p_domain) i2p_domain,
mitm_servers)
if post_type == 'newreminder': if post_type == 'newreminder':
return _receive_new_post_process_newreminder( return _receive_new_post_process_newreminder(
self, fields, self, fields,
@ -2106,7 +2123,8 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
buy_sites, buy_sites,
project_version, project_version,
proxy_type, proxy_type,
onion_domain, i2p_domain) onion_domain, i2p_domain,
mitm_servers)
if post_type == 'newreport': if post_type == 'newreport':
return _receive_new_post_process_newreport( return _receive_new_post_process_newreport(
self, fields, self, fields,
@ -2179,7 +2197,8 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
project_version, project_version,
proxy_type, proxy_type,
max_replies, max_replies,
onion_domain, i2p_domain) onion_domain, i2p_domain,
mitm_servers)
if post_type in ('newshare', 'newwanted'): if post_type in ('newshare', 'newwanted'):
return _receive_new_post_process_newshare( return _receive_new_post_process_newshare(
self, fields, self, fields,
@ -2241,7 +2260,8 @@ def receive_new_post(self, post_type, path: str,
max_shares_on_profile: int, max_shares_on_profile: int,
watermark_width_percent: int, watermark_width_percent: int,
watermark_position: str, watermark_position: str,
watermark_opacity: int) -> int: watermark_opacity: int,
mitm_servers: []) -> int:
"""A new post has been created """A new post has been created
This creates a thread to send the new post This creates a thread to send the new post
""" """
@ -2382,7 +2402,8 @@ def receive_new_post(self, post_type, path: str,
max_shares_on_profile, max_shares_on_profile,
watermark_width_percent, watermark_width_percent,
watermark_position, watermark_position,
watermark_opacity) watermark_opacity,
mitm_servers)
if debug: if debug:
print('DEBUG: _receive_new_post_process returned ' + print('DEBUG: _receive_new_post_process returned ' +
str(retval)) str(retval))

View File

@ -85,7 +85,8 @@ def _receive_search_hashtag(self, actor_str: str,
buy_sites: [], buy_sites: [],
auto_cw_cache: {}, auto_cw_cache: {},
calling_domain: str, calling_domain: str,
ua_str: str) -> bool: ua_str: str,
mitm_servers: []) -> bool:
"""Receive a search for a hashtag from the search screen """Receive a search for a hashtag from the search screen
""" """
nickname = get_nickname_from_actor(actor_str) nickname = get_nickname_from_actor(actor_str)
@ -133,7 +134,8 @@ def _receive_search_hashtag(self, actor_str: str,
'search', 'search',
min_images_for_accounts, min_images_for_accounts,
buy_sites, buy_sites,
auto_cw_cache, ua_str) auto_cw_cache, ua_str,
mitm_servers)
if hashtag_str: if hashtag_str:
msg = hashtag_str.encode('utf-8') msg = hashtag_str.encode('utf-8')
msglen = len(msg) msglen = len(msg)
@ -215,7 +217,8 @@ def _receive_search_my_posts(self, search_str: str,
min_images_for_accounts: {}, min_images_for_accounts: {},
buy_sites: [], buy_sites: [],
auto_cw_cache: {}, auto_cw_cache: {},
calling_domain: str) -> bool: calling_domain: str,
mitm_servers: []) -> bool:
"""Receive a search for your own posts from the search screen """Receive a search for your own posts from the search screen
""" """
# your post history search # your post history search
@ -281,7 +284,8 @@ def _receive_search_my_posts(self, search_str: str,
access_keys, access_keys,
min_images_for_accounts, min_images_for_accounts,
buy_sites, buy_sites,
auto_cw_cache) auto_cw_cache,
mitm_servers)
if history_str: if history_str:
msg = history_str.encode('utf-8') msg = history_str.encode('utf-8')
msglen = len(msg) msglen = len(msg)
@ -326,7 +330,8 @@ def _receive_search_bookmarks(self, search_str: str,
min_images_for_accounts: {}, min_images_for_accounts: {},
buy_sites: [], buy_sites: [],
auto_cw_cache: {}, auto_cw_cache: {},
calling_domain: str) -> bool: calling_domain: str,
mitm_servers: []) -> bool:
"""Receive a search for bookmarked posts from the search screen """Receive a search for bookmarked posts from the search screen
""" """
# bookmark search # bookmark search
@ -392,7 +397,8 @@ def _receive_search_bookmarks(self, search_str: str,
access_keys, access_keys,
min_images_for_accounts, min_images_for_accounts,
buy_sites, buy_sites,
auto_cw_cache) auto_cw_cache,
mitm_servers)
if bookmarks_str: if bookmarks_str:
msg = bookmarks_str.encode('utf-8') msg = bookmarks_str.encode('utf-8')
msglen = len(msg) msglen = len(msg)
@ -438,7 +444,8 @@ def _receive_search_handle(self, search_str: str,
no_of_books: int, no_of_books: int,
auto_cw_cache: {}, auto_cw_cache: {},
actor_str: str, actor_str: str,
curr_session, access_keys: {}) -> bool: curr_session, access_keys: {},
mitm_servers: []) -> bool:
"""Receive a search for a fediverse handle or url from the search screen """Receive a search for a fediverse handle or url from the search screen
""" """
remote_only = False remote_only = False
@ -511,7 +518,8 @@ def _receive_search_handle(self, search_str: str,
base_dir, http_prefix, base_dir, http_prefix,
actor, person_cache, actor, person_cache,
None, True, None, True,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
profile_path_str += \ profile_path_str += \
'?options=' + actor + ';1;' + avatar_url '?options=' + actor + ';1;' + avatar_url
@ -592,7 +600,8 @@ def _receive_search_handle(self, search_str: str,
buy_sites, buy_sites,
max_shares_on_profile, max_shares_on_profile,
no_of_books, no_of_books,
auto_cw_cache) auto_cw_cache,
mitm_servers)
if profile_str: if profile_str:
msg = profile_str.encode('utf-8') msg = profile_str.encode('utf-8')
msglen = len(msg) msglen = len(msg)
@ -754,7 +763,8 @@ def receive_search_query(self, calling_domain: str, cookie: str,
max_shares_on_profile: int, max_shares_on_profile: int,
no_of_books: int, no_of_books: int,
shared_items_federated_domains: [], shared_items_federated_domains: [],
ua_str: str) -> None: ua_str: str,
mitm_servers: []) -> None:
"""Receive a search query """Receive a search query
""" """
# get the page number # get the page number
@ -860,7 +870,8 @@ def receive_search_query(self, calling_domain: str, cookie: str,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
calling_domain, calling_domain,
ua_str): ua_str,
mitm_servers):
return return
elif (search_str.startswith('*') or elif (search_str.startswith('*') or
search_str.endswith(' skill')): search_str.endswith(' skill')):
@ -908,7 +919,8 @@ def receive_search_query(self, calling_domain: str, cookie: str,
min_images_for_accounts, min_images_for_accounts,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
calling_domain): calling_domain,
mitm_servers):
return return
elif (search_str.startswith('-') or elif (search_str.startswith('-') or
string_ends_with(search_str, bookmark_endings)): string_ends_with(search_str, bookmark_endings)):
@ -945,7 +957,8 @@ def receive_search_query(self, calling_domain: str, cookie: str,
min_images_for_accounts, min_images_for_accounts,
buy_sites, buy_sites,
auto_cw_cache, auto_cw_cache,
calling_domain): calling_domain,
mitm_servers):
return return
elif ('@' in search_str or elif ('@' in search_str or
('://' in search_str and ('://' in search_str and
@ -983,7 +996,8 @@ def receive_search_query(self, calling_domain: str, cookie: str,
max_shares_on_profile, max_shares_on_profile,
no_of_books, no_of_books,
auto_cw_cache, actor_str, auto_cw_cache, actor_str,
curr_session, access_keys): curr_session, access_keys,
mitm_servers):
return return
elif (search_str.startswith(':') or elif (search_str.startswith(':') or
search_str.endswith(' emoji')): search_str.endswith(' emoji')):

View File

@ -26,6 +26,7 @@ from blocking import is_blocked_nickname
from blocking import is_blocked_domain from blocking import is_blocked_domain
from content import valid_url_lengths from content import valid_url_lengths
from posts import add_to_field from posts import add_to_field
from utils import detect_mitm
from utils import data_dir from utils import data_dir
from utils import load_json from utils import load_json
from utils import save_json from utils import save_json
@ -141,7 +142,8 @@ def post_to_outbox(self, message_json: {}, version: str,
self.server.books_cache, self.server.books_cache,
self.server.max_cached_readers, self.server.max_cached_readers,
self.server.auto_cw_cache, self.server.auto_cw_cache,
self.server.block_federated) self.server.block_federated,
self.server.mitm_servers)
def _get_outbox_thread_index(self, nickname: str, def _get_outbox_thread_index(self, nickname: str,
@ -207,40 +209,6 @@ def post_to_outbox_thread(self, message_json: {},
return True return True
def detect_mitm(self) -> bool:
"""Detect if a request contains a MiTM
"""
mitm_domains = ['cloudflare']
# look for domains within these headers
check_headers = (
'Server', 'Report-To', 'Report-to', 'report-to',
'Expect-CT', 'Expect-Ct', 'expect-ct'
)
for interloper in mitm_domains:
for header_name in check_headers:
if not self.headers.get(header_name):
continue
if interloper in str(self.headers[header_name]):
print('MITM: ' + header_name + ' = ' +
str(self.headers[header_name]))
return True
# The presence of these headers on their own indicates a MiTM
mitm_headers = (
'CF-Connecting-IP', 'CF-RAY', 'CF-IPCountry', 'CF-Visitor',
'CDN-Loop', 'CF-Worker', 'CF-Cache-Status'
)
for header_name in mitm_headers:
if self.headers.get(header_name):
print('MITM: ' + header_name + ' = ' +
self.headers[header_name])
return True
if self.headers.get(header_name.lower()):
print('MITM: ' + header_name + ' = ' +
self.headers[header_name.lower()])
return True
return False
def update_inbox_queue(self, nickname: str, message_json: {}, def update_inbox_queue(self, nickname: str, message_json: {},
message_bytes: str, debug: bool) -> int: message_bytes: str, debug: bool) -> int:
"""Update the inbox queue """Update the inbox queue

View File

@ -37,7 +37,8 @@ def send_delete_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Creates a delete request message via c2s """Creates a delete request message via c2s
""" """
if not session: if not session:
@ -68,7 +69,7 @@ def send_delete_via_server(base_dir: str, session,
wf_request = \ wf_request = \
webfinger_handle(session, handle, http_prefix, cached_webfingers, webfinger_handle(session, handle, http_prefix, cached_webfingers,
from_domain, project_version, debug, False, from_domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: delete webfinger failed for ' + handle) print('DEBUG: delete webfinger failed for ' + handle)
@ -89,7 +90,7 @@ def send_delete_via_server(base_dir: str, session,
project_version, http_prefix, project_version, http_prefix,
from_nickname, from_nickname,
from_domain, post_to_box, 53036, from_domain, post_to_box, 53036,
system_language) system_language, mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:

View File

@ -521,7 +521,8 @@ def _desktop_reply_to_post(session, post_id: str,
content_license_url: str, content_license_url: str,
media_license_url: str, media_creator: str, media_license_url: str, media_creator: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
translate: {}) -> None: translate: {},
mitm_servers: []) -> None:
"""Use the desktop client to send a reply to the most recent post """Use the desktop client to send a reply to the most recent post
""" """
if '://' not in post_id: if '://' not in post_id:
@ -595,7 +596,7 @@ def _desktop_reply_to_post(session, post_id: str,
translate, buy_url, chat_url, auto_cw_cache, translate, buy_url, chat_url, auto_cw_cache,
debug, post_id, post_id, debug, post_id, post_id,
conversation_id, convthread_id, subject, conversation_id, convthread_id, subject,
searchable_by) == 0: searchable_by, mitm_servers) == 0:
say_str = translate['Sent'] say_str = translate['Sent']
else: else:
say_str = translate['Post failed'] say_str = translate['Post failed']
@ -613,7 +614,8 @@ def _desktop_new_post(session,
content_license_url: str, content_license_url: str,
media_license_url: str, media_creator: str, media_license_url: str, media_creator: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
translate: {}) -> None: translate: {},
mitm_servers: []) -> None:
"""Use the desktop client to create a new post """Use the desktop client to create a new post
""" """
conversation_id = None conversation_id = None
@ -680,7 +682,7 @@ def _desktop_new_post(session,
translate, buy_url, chat_url, auto_cw_cache, translate, buy_url, chat_url, auto_cw_cache,
debug, None, None, debug, None, None,
conversation_id, convthread_id, subject, conversation_id, convthread_id, subject,
searchable_by) == 0: searchable_by, mitm_servers) == 0:
say_str = translate['Sent'] say_str = translate['Sent']
else: else:
say_str = translate['Post failed'] say_str = translate['Post failed']
@ -816,7 +818,8 @@ def _read_local_box_post(session, nickname: str, domain: str,
domain_full: str, person_cache: {}, domain_full: str, person_cache: {},
signing_priv_key_pem: str, signing_priv_key_pem: str,
blocked_cache: {}, block_federated: [], blocked_cache: {}, block_federated: [],
bold_reading: bool) -> {}: bold_reading: bool,
mitm_servers: []) -> {}:
"""Reads a post from the given timeline """Reads a post from the given timeline
Returns the post json Returns the post json
""" """
@ -868,7 +871,8 @@ def _read_local_box_post(session, nickname: str, domain: str,
signing_priv_key_pem, signing_priv_key_pem,
blocked_cache, block_federated, bold_reading, blocked_cache, block_federated, bold_reading,
show_vote_posts, show_vote_posts,
languages_understood) languages_understood,
mitm_servers)
if post_json_object2: if post_json_object2:
if has_object_dict(post_json_object2): if has_object_dict(post_json_object2):
if post_json_object2['object'].get('attributedTo') and \ if post_json_object2['object'].get('attributedTo') and \
@ -930,7 +934,8 @@ def _read_local_box_post(session, nickname: str, domain: str,
if is_pgp_encrypted(content): if is_pgp_encrypted(content):
say_str = translate['Encrypted message. Please enter your passphrase.'] say_str = translate['Encrypted message. Please enter your passphrase.']
_say_command(say_str, say_str, screenreader, system_language, espeak) _say_command(say_str, say_str, screenreader, system_language, espeak)
content = pgp_decrypt(domain, content, actor, signing_priv_key_pem) content = pgp_decrypt(domain, content, actor, signing_priv_key_pem,
mitm_servers)
if is_pgp_encrypted(content): if is_pgp_encrypted(content):
say_str = translate['Message could not be decrypted'] say_str = translate['Message could not be decrypted']
_say_command(say_str, say_str, _say_command(say_str, say_str,
@ -1023,7 +1028,8 @@ def _desktop_show_profile(session, nickname: str,
screenreader: str, espeak, screenreader: str, espeak,
translate: {}, post_json_object: {}, translate: {}, post_json_object: {},
signing_priv_key_pem: str, signing_priv_key_pem: str,
http_prefix: str) -> {}: http_prefix: str,
mitm_servers: []) -> {}:
"""Shows the profile of the actor for the given post """Shows the profile of the actor for the given post
Returns the actor json Returns the actor json
""" """
@ -1058,7 +1064,8 @@ def _desktop_show_profile(session, nickname: str,
is_ipns = False is_ipns = False
actor_json, _ = \ actor_json, _ = \
get_actor_json(domain, actor, is_http, is_gnunet, is_ipfs, is_ipns, get_actor_json(domain, actor, is_http, is_gnunet, is_ipfs, is_ipns,
False, True, signing_priv_key_pem, session) False, True, signing_priv_key_pem, session,
mitm_servers)
_desktop_show_actor(http_prefix, _desktop_show_actor(http_prefix,
nickname, domain, domain_full, nickname, domain, domain_full,
@ -1074,14 +1081,15 @@ def _desktop_show_profile_from_handle(session, nickname: str, domain: str,
screenreader: str, espeak, screenreader: str, espeak,
translate: {}, translate: {},
signing_priv_key_pem: str, signing_priv_key_pem: str,
http_prefix: str) -> {}: http_prefix: str,
mitm_servers: []) -> {}:
"""Shows the profile for a handle """Shows the profile for a handle
Returns the actor json Returns the actor json
""" """
actor_json, _ = \ actor_json, _ = \
get_actor_json(domain, handle, False, False, False, False, get_actor_json(domain, handle, False, False, False, False,
False, True, False, True,
signing_priv_key_pem, session) signing_priv_key_pem, session, mitm_servers)
_desktop_show_actor(http_prefix, nickname, domain, domain_full, _desktop_show_actor(http_prefix, nickname, domain, domain_full,
base_dir, actor_json, translate, base_dir, actor_json, translate,
@ -1342,7 +1350,8 @@ def _desktop_new_dm(session, to_handle: str,
content_license_url: str, content_license_url: str,
media_license_url: str, media_creator: str, media_license_url: str, media_creator: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
translate: {}) -> None: translate: {},
mitm_servers: []) -> None:
"""Use the desktop client to create a new direct message """Use the desktop client to create a new direct message
which can include multiple destination handles which can include multiple destination handles
""" """
@ -1367,7 +1376,8 @@ def _desktop_new_dm(session, to_handle: str,
espeak, low_bandwidth, espeak, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
signing_priv_key_pem, translate) signing_priv_key_pem, translate,
mitm_servers)
def _desktop_new_dm_base(session, to_handle: str, def _desktop_new_dm_base(session, to_handle: str,
@ -1381,7 +1391,8 @@ def _desktop_new_dm_base(session, to_handle: str,
content_license_url: str, content_license_url: str,
media_license_url: str, media_creator: str, media_license_url: str, media_creator: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
translate: {}) -> None: translate: {},
mitm_servers: []) -> None:
"""Use the desktop client to create a new direct message """Use the desktop client to create a new direct message
""" """
conversation_id = None conversation_id = None
@ -1451,7 +1462,7 @@ def _desktop_new_dm_base(session, to_handle: str,
padded_message += ' ' padded_message += ' '
cipher_text = \ cipher_text = \
pgp_encrypt_to_actor(domain, padded_message, to_handle, pgp_encrypt_to_actor(domain, padded_message, to_handle,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not cipher_text: if not cipher_text:
say_str = \ say_str = \
to_handle + ' has no PGP public key. ' + \ to_handle + ' has no PGP public key. ' + \
@ -1500,7 +1511,7 @@ def _desktop_new_dm_base(session, to_handle: str,
translate, buy_url, chat_url, auto_cw_cache, translate, buy_url, chat_url, auto_cw_cache,
debug, None, None, debug, None, None,
conversation_id, convthread_id, subject, conversation_id, convthread_id, subject,
searchable_by) == 0: searchable_by, mitm_servers) == 0:
say_str = translate['Sent'] say_str = translate['Sent']
else: else:
say_str = translate['Post failed'] say_str = translate['Post failed']
@ -1590,6 +1601,7 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
blocked_cache = {} blocked_cache = {}
block_federated = [] block_federated = []
languages_understood = [] languages_understood = []
mitm_servers = []
indent = ' ' indent = ' '
if show_new_posts: if show_new_posts:
@ -1690,7 +1702,7 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
cached_webfingers, person_cache, cached_webfingers, person_cache,
debug, False, debug, False,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language, mitm_servers)
say_str = indent + translate['PGP Public Key'] + ' uploaded' say_str = indent + translate['PGP Public Key'] + ' uploaded'
_say_command(say_str, say_str, screenreader, _say_command(say_str, say_str, screenreader,
system_language, espeak) system_language, espeak)
@ -1699,7 +1711,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
box_json = c2s_box_json(session, nickname, password, box_json = c2s_box_json(session, nickname, password,
domain, port, http_prefix, domain, port, http_prefix,
curr_timeline, page_number, curr_timeline, page_number,
debug, signing_priv_key_pem) debug, signing_priv_key_pem,
mitm_servers)
follow_requests_json = \ follow_requests_json = \
get_follow_requests_via_server(session, get_follow_requests_via_server(session,
@ -1707,14 +1720,16 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
domain, port, domain, port,
http_prefix, 1, http_prefix, 1,
debug, __version__, debug, __version__,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
if not (curr_timeline == 'inbox' and page_number == 1): if not (curr_timeline == 'inbox' and page_number == 1):
# monitor the inbox to generate notifications # monitor the inbox to generate notifications
inbox_json = c2s_box_json(session, nickname, password, inbox_json = c2s_box_json(session, nickname, password,
domain, port, http_prefix, domain, port, http_prefix,
'inbox', 1, debug, 'inbox', 1, debug,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
else: else:
inbox_json = box_json inbox_json = box_json
if inbox_json: if inbox_json:
@ -1783,7 +1798,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
box_json = c2s_box_json(session, nickname, password, box_json = c2s_box_json(session, nickname, password,
domain, port, http_prefix, domain, port, http_prefix,
curr_timeline, page_number, curr_timeline, page_number,
debug, signing_priv_key_pem) debug, signing_priv_key_pem,
mitm_servers)
if box_json: if box_json:
_desktop_show_box(indent, follow_requests_json, _desktop_show_box(indent, follow_requests_json,
your_actor, curr_timeline, box_json, your_actor, curr_timeline, box_json,
@ -1797,7 +1813,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
box_json = c2s_box_json(session, nickname, password, box_json = c2s_box_json(session, nickname, password,
domain, port, http_prefix, domain, port, http_prefix,
curr_timeline, page_number, curr_timeline, page_number,
debug, signing_priv_key_pem) debug, signing_priv_key_pem,
mitm_servers)
if box_json: if box_json:
_desktop_show_box(indent, follow_requests_json, _desktop_show_box(indent, follow_requests_json,
your_actor, curr_timeline, box_json, your_actor, curr_timeline, box_json,
@ -1811,7 +1828,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
box_json = c2s_box_json(session, nickname, password, box_json = c2s_box_json(session, nickname, password,
domain, port, http_prefix, domain, port, http_prefix,
curr_timeline, page_number, curr_timeline, page_number,
debug, signing_priv_key_pem) debug, signing_priv_key_pem,
mitm_servers)
if box_json: if box_json:
_desktop_show_box(indent, follow_requests_json, _desktop_show_box(indent, follow_requests_json,
your_actor, curr_timeline, box_json, your_actor, curr_timeline, box_json,
@ -1826,7 +1844,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
box_json = c2s_box_json(session, nickname, password, box_json = c2s_box_json(session, nickname, password,
domain, port, http_prefix, domain, port, http_prefix,
curr_timeline, page_number, curr_timeline, page_number,
debug, signing_priv_key_pem) debug, signing_priv_key_pem,
mitm_servers)
if box_json: if box_json:
_desktop_show_box(indent, follow_requests_json, _desktop_show_box(indent, follow_requests_json,
your_actor, curr_timeline, box_json, your_actor, curr_timeline, box_json,
@ -1850,7 +1869,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
box_json = c2s_box_json(session, nickname, password, box_json = c2s_box_json(session, nickname, password,
domain, port, http_prefix, domain, port, http_prefix,
curr_timeline, page_number, curr_timeline, page_number,
debug, signing_priv_key_pem) debug, signing_priv_key_pem,
mitm_servers)
if box_json: if box_json:
_desktop_show_box(indent, follow_requests_json, _desktop_show_box(indent, follow_requests_json,
your_actor, curr_timeline, box_json, your_actor, curr_timeline, box_json,
@ -1886,7 +1906,7 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
domain_full, person_cache, domain_full, person_cache,
signing_priv_key_pem, signing_priv_key_pem,
blocked_cache, block_federated, blocked_cache, block_federated,
bold_reading) bold_reading, mitm_servers)
print('') print('')
say_str = translate['Press Enter to continue'] + '...' say_str = translate['Press Enter to continue'] + '...'
say_str2 = _highlight_text(say_str) say_str2 = _highlight_text(say_str)
@ -1911,7 +1931,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
espeak, translate, espeak, translate,
post_json_object, post_json_object,
signing_priv_key_pem, signing_priv_key_pem,
http_prefix) http_prefix,
mitm_servers)
else: else:
post_index_str = '1' post_index_str = '1'
else: else:
@ -1929,7 +1950,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
screenreader, screenreader,
espeak, translate, espeak, translate,
signing_priv_key_pem, signing_priv_key_pem,
http_prefix) http_prefix,
mitm_servers)
say_str = translate['Press Enter to continue'] + '...' say_str = translate['Press Enter to continue'] + '...'
say_str2 = _highlight_text(say_str) say_str2 = _highlight_text(say_str)
_say_command(say_str2, say_str, _say_command(say_str2, say_str,
@ -1951,7 +1973,7 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
system_language, screenreader, system_language, screenreader,
espeak, translate, espeak, translate,
None, signing_priv_key_pem, None, signing_priv_key_pem,
http_prefix) http_prefix, mitm_servers)
say_str = translate['Press Enter to continue'] + '...' say_str = translate['Press Enter to continue'] + '...'
say_str2 = _highlight_text(say_str) say_str2 = _highlight_text(say_str)
_say_command(say_str2, say_str, _say_command(say_str2, say_str,
@ -2006,7 +2028,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
media_license_url, media_license_url,
media_creator, media_creator,
signing_priv_key_pem, signing_priv_key_pem,
translate) translate,
mitm_servers)
refresh_timeline = True refresh_timeline = True
print('') print('')
elif (command_str == 'post' or command_str == 'p' or elif (command_str == 'post' or command_str == 'p' or
@ -2047,7 +2070,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
espeak, low_bandwidth, espeak, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
signing_priv_key_pem, translate) signing_priv_key_pem, translate,
mitm_servers)
refresh_timeline = True refresh_timeline = True
else: else:
# public post # public post
@ -2061,7 +2085,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
espeak, low_bandwidth, espeak, low_bandwidth,
content_license_url, content_license_url,
media_license_url, media_creator, media_license_url, media_creator,
signing_priv_key_pem, translate) signing_priv_key_pem, translate,
mitm_servers)
refresh_timeline = True refresh_timeline = True
print('') print('')
elif command_str == 'like' or command_str.startswith('like '): elif command_str == 'like' or command_str.startswith('like '):
@ -2095,7 +2120,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
person_cache, person_cache,
False, __version__, False, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language,
mitm_servers)
refresh_timeline = True refresh_timeline = True
print('') print('')
elif (command_str == 'undo mute' or elif (command_str == 'undo mute' or
@ -2142,7 +2168,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
person_cache, person_cache,
False, __version__, False, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language,
mitm_servers)
refresh_timeline = True refresh_timeline = True
print('') print('')
elif (command_str == 'mute' or elif (command_str == 'mute' or
@ -2180,7 +2207,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
person_cache, person_cache,
False, __version__, False, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language,
mitm_servers)
refresh_timeline = True refresh_timeline = True
print('') print('')
elif (command_str == 'undo bookmark' or elif (command_str == 'undo bookmark' or
@ -2230,7 +2258,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
person_cache, person_cache,
False, __version__, False, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language,
mitm_servers)
refresh_timeline = True refresh_timeline = True
print('') print('')
elif (command_str == 'bookmark' or elif (command_str == 'bookmark' or
@ -2267,7 +2296,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
person_cache, person_cache,
False, __version__, False, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language,
mitm_servers)
refresh_timeline = True refresh_timeline = True
print('') print('')
elif (command_str.startswith('undo block ') or elif (command_str.startswith('undo block ') or
@ -2313,7 +2343,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
False, False,
__version__, __version__,
sign_key_pem, sign_key_pem,
system_language) system_language,
mitm_servers)
refresh_timeline = True refresh_timeline = True
print('') print('')
elif command_str.startswith('block '): elif command_str.startswith('block '):
@ -2365,7 +2396,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
person_cache, person_cache,
False, __version__, False, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language,
mitm_servers)
refresh_timeline = True refresh_timeline = True
print('') print('')
elif command_str in ('unlike', 'undo like'): elif command_str in ('unlike', 'undo like'):
@ -2402,7 +2434,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
person_cache, person_cache,
False, __version__, False, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language,
mitm_servers)
refresh_timeline = True refresh_timeline = True
print('') print('')
elif (command_str.startswith('announce') or elif (command_str.startswith('announce') or
@ -2454,7 +2487,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
person_cache, person_cache,
True, __version__, True, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language,
mitm_servers)
refresh_timeline = True refresh_timeline = True
print('') print('')
elif (command_str.startswith('unannounce') or elif (command_str.startswith('unannounce') or
@ -2495,7 +2529,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
person_cache, person_cache,
True, __version__, True, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language,
mitm_servers)
refresh_timeline = True refresh_timeline = True
print('') print('')
elif (command_str == 'follow requests' or elif (command_str == 'follow requests' or
@ -2513,7 +2548,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
domain, port, domain, port,
http_prefix, curr_page, http_prefix, curr_page,
debug, __version__, debug, __version__,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
if follow_requests_json: if follow_requests_json:
if isinstance(follow_requests_json, dict): if isinstance(follow_requests_json, dict):
_desktop_show_follow_requests(follow_requests_json, _desktop_show_follow_requests(follow_requests_json,
@ -2534,7 +2570,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
domain, port, domain, port,
http_prefix, curr_page, http_prefix, curr_page,
debug, __version__, debug, __version__,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
if following_json: if following_json:
if isinstance(following_json, dict): if isinstance(following_json, dict):
_desktop_show_following(following_json, translate, _desktop_show_following(following_json, translate,
@ -2556,7 +2593,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
domain, port, domain, port,
http_prefix, curr_page, http_prefix, curr_page,
debug, __version__, debug, __version__,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
if followers_json: if followers_json:
if isinstance(followers_json, dict): if isinstance(followers_json, dict):
_desktop_show_following(followers_json, translate, _desktop_show_following(followers_json, translate,
@ -2597,7 +2635,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
person_cache, person_cache,
debug, __version__, debug, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language,
mitm_servers)
else: else:
if follow_handle: if follow_handle:
say_str = follow_handle + ' is not valid' say_str = follow_handle + ' is not valid'
@ -2634,7 +2673,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
person_cache, person_cache,
debug, __version__, debug, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language,
mitm_servers)
else: else:
say_str = follow_handle + ' is not valid' say_str = follow_handle + ' is not valid'
_say_command(say_str, say_str, _say_command(say_str, say_str,
@ -2662,7 +2702,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
approve_handle, approve_handle,
debug, debug,
__version__, __version__,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
else: else:
if approve_handle: if approve_handle:
say_str = approve_handle + ' is not valid' say_str = approve_handle + ' is not valid'
@ -2693,7 +2734,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
deny_handle, deny_handle,
debug, debug,
__version__, __version__,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
else: else:
if deny_handle: if deny_handle:
say_str = deny_handle + ' is not valid' say_str = deny_handle + ' is not valid'
@ -2790,7 +2832,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
block_federated, block_federated,
bold_reading, bold_reading,
show_vote_posts, show_vote_posts,
languages_understood) languages_understood,
mitm_servers)
if post_json_object2: if post_json_object2:
post_json_object = post_json_object2 post_json_object = post_json_object2
if post_json_object: if post_json_object:
@ -2883,7 +2926,8 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str,
person_cache, person_cache,
False, __version__, False, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language,
mitm_servers)
refresh_timeline = True refresh_timeline = True
print('') print('')

View File

@ -107,7 +107,7 @@ from reaction import valid_emoji_content
from skills import send_skill_via_server from skills import send_skill_via_server
from availability import set_availability from availability import set_availability
from availability import send_availability_via_server from availability import send_availability_via_server
from manualapprove import manual_deny_follow_request from manualapprove import manual_deny_follow_request2
from manualapprove import manual_approve_follow_request from manualapprove import manual_approve_follow_request
from shares import send_share_via_server from shares import send_share_via_server
from shares import send_undo_share_via_server from shares import send_undo_share_via_server
@ -996,10 +996,12 @@ def _command_options() -> None:
if not argb.language: if not argb.language:
argb.language = 'en' argb.language = 'en'
signing_priv_key_pem = get_instance_actor_key(base_dir, origin_domain) signing_priv_key_pem = get_instance_actor_key(base_dir, origin_domain)
mitm_servers = []
get_public_posts_of_person(base_dir, nickname, domain, False, True, get_public_posts_of_person(base_dir, nickname, domain, False, True,
proxy_type, argb.port, http_prefix, debug, proxy_type, argb.port, http_prefix, debug,
__version__, argb.language, __version__, argb.language,
signing_priv_key_pem, origin_domain) signing_priv_key_pem, origin_domain,
mitm_servers)
sys.exit() sys.exit()
if argb.moved: if argb.moved:
@ -1084,6 +1086,7 @@ def _command_options() -> None:
if argb.secure_mode: if argb.secure_mode:
signing_priv_key_pem = \ signing_priv_key_pem = \
get_instance_actor_key(base_dir, origin_domain) get_instance_actor_key(base_dir, origin_domain)
mitm_servers = []
domain_list = \ domain_list = \
get_public_post_domains(None, get_public_post_domains(None,
base_dir, nickname, domain, base_dir, nickname, domain,
@ -1093,7 +1096,8 @@ def _command_options() -> None:
__version__, __version__,
word_frequency, domain_list, word_frequency, domain_list,
argb.language, argb.language,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
for post_domain in domain_list: for post_domain in domain_list:
print(post_domain) print(post_domain)
sys.exit() sys.exit()
@ -1137,6 +1141,7 @@ def _command_options() -> None:
signing_priv_key_pem = None signing_priv_key_pem = None
if argb.secure_mode: if argb.secure_mode:
signing_priv_key_pem = get_instance_actor_key(base_dir, domain) signing_priv_key_pem = get_instance_actor_key(base_dir, domain)
mitm_servers = []
domain_list = \ domain_list = \
get_public_post_domains_blocked(None, get_public_post_domains_blocked(None,
base_dir, nickname, domain, base_dir, nickname, domain,
@ -1145,7 +1150,8 @@ def _command_options() -> None:
__version__, __version__,
word_frequency, domain_list, word_frequency, domain_list,
argb.language, argb.language,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
for post_domain in domain_list: for post_domain in domain_list:
print(post_domain) print(post_domain)
sys.exit() sys.exit()
@ -1186,13 +1192,14 @@ def _command_options() -> None:
signing_priv_key_pem = None signing_priv_key_pem = None
if argb.secure_mode: if argb.secure_mode:
signing_priv_key_pem = get_instance_actor_key(base_dir, domain) signing_priv_key_pem = get_instance_actor_key(base_dir, domain)
mitm_servers = []
check_domains(None, check_domains(None,
base_dir, nickname, domain, base_dir, nickname, domain,
proxy_type, argb.port, proxy_type, argb.port,
http_prefix, debug, http_prefix, debug,
__version__, __version__,
max_blocked_domains, False, argb.language, max_blocked_domains, False, argb.language,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
sys.exit() sys.exit()
if argb.socnet: if argb.socnet:
@ -1214,11 +1221,12 @@ def _command_options() -> None:
signing_priv_key_pem = None signing_priv_key_pem = None
if argb.secure_mode: if argb.secure_mode:
signing_priv_key_pem = get_instance_actor_key(base_dir, domain) signing_priv_key_pem = get_instance_actor_key(base_dir, domain)
mitm_servers = []
dot_graph = instances_graph(base_dir, argb.socnet, dot_graph = instances_graph(base_dir, argb.socnet,
proxy_type, argb.port, proxy_type, argb.port,
http_prefix, debug, http_prefix, debug,
__version__, argb.language, __version__, argb.language,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
try: try:
with open('socnet.dot', 'w+', encoding='utf-8') as fp_soc: with open('socnet.dot', 'w+', encoding='utf-8') as fp_soc:
fp_soc.write(dot_graph) fp_soc.write(dot_graph)
@ -1272,10 +1280,12 @@ def _command_options() -> None:
if not argb.language: if not argb.language:
argb.language = 'en' argb.language = 'en'
signing_priv_key_pem = get_instance_actor_key(base_dir, origin_domain) signing_priv_key_pem = get_instance_actor_key(base_dir, origin_domain)
mitm_servers = []
get_public_posts_of_person(base_dir, nickname, domain, False, False, get_public_posts_of_person(base_dir, nickname, domain, False, False,
proxy_type, argb.port, http_prefix, debug, proxy_type, argb.port, http_prefix, debug,
__version__, argb.language, __version__, argb.language,
signing_priv_key_pem, origin_domain) signing_priv_key_pem, origin_domain,
mitm_servers)
sys.exit() sys.exit()
if argb.json: if argb.json:
@ -1301,9 +1311,10 @@ def _command_options() -> None:
print('Obtained instance actor signing key') print('Obtained instance actor signing key')
else: else:
print('Did not obtain instance actor key for ' + domain) print('Did not obtain instance actor key for ' + domain)
mitm_servers = []
test_json = get_json(signing_priv_key_pem, session, argb.json, test_json = get_json(signing_priv_key_pem, session, argb.json,
as_header, None, debug, __version__, as_header, None, debug, mitm_servers,
http_prefix, domain) __version__, http_prefix, domain)
if get_json_valid(test_json): if get_json_valid(test_json):
pprint(test_json) pprint(test_json)
session.close() session.close()
@ -1334,9 +1345,11 @@ def _command_options() -> None:
if not nickname: if not nickname:
print('Please specify a nickname with the --nickname option') print('Please specify a nickname with the --nickname option')
sys.exit() sys.exit()
mitm_servers = []
conv_json = download_conversation_posts(True, session, http_prefix, conv_json = download_conversation_posts(True, session, http_prefix,
base_dir, nickname, domain, base_dir, nickname, domain,
post_id, argb.debug) post_id, argb.debug,
mitm_servers)
if conv_json: if conv_json:
pprint(conv_json) pprint(conv_json)
session.close() session.close()
@ -1360,9 +1373,10 @@ def _command_options() -> None:
print('Obtained instance actor signing key') print('Obtained instance actor signing key')
else: else:
print('Did not obtain instance actor key for ' + domain) print('Did not obtain instance actor key for ' + domain)
mitm_servers = []
test_ssml = download_ssml(signing_priv_key_pem, session, argb.ssml, test_ssml = download_ssml(signing_priv_key_pem, session, argb.ssml,
as_header, None, debug, __version__, as_header, None, debug, __version__,
http_prefix, domain) http_prefix, domain, mitm_servers)
if test_ssml: if test_ssml:
print(str(test_ssml)) print(str(test_ssml))
session.close() session.close()
@ -1414,9 +1428,10 @@ def _command_options() -> None:
print('Obtained instance actor signing key') print('Obtained instance actor signing key')
else: else:
print('Did not obtain instance actor key for ' + domain) print('Did not obtain instance actor key for ' + domain)
mitm_servers = []
test_html = download_html(signing_priv_key_pem, session, argb.htmlpost, test_html = download_html(signing_priv_key_pem, session, argb.htmlpost,
as_header, None, debug, __version__, as_header, None, debug, __version__,
http_prefix, domain) http_prefix, domain, mitm_servers)
if test_html: if test_html:
print(test_html) print(test_html)
session.close() session.close()
@ -1443,9 +1458,11 @@ def _command_options() -> None:
'--domain option') '--domain option')
sys.exit() sys.exit()
session = create_session(None) session = create_session(None)
mitm_servers = []
verified = \ verified = \
verify_html(session, argb.verifyurl, debug, __version__, verify_html(session, argb.verifyurl, debug, __version__,
http_prefix, argb.nickname, domain) http_prefix, argb.nickname, domain,
mitm_servers)
session.close() session.close()
if verified: if verified:
print('Verified') print('Verified')
@ -1711,6 +1728,7 @@ def _command_options() -> None:
followers_sync_cache = {} followers_sync_cache = {}
sites_unavailable = [] sites_unavailable = []
system_language = argb.language system_language = argb.language
mitm_servers = []
manual_approve_follow_request(session, session_onion, session_i2p, manual_approve_follow_request(session, session_onion, session_i2p,
onion_domain, i2p_domain, onion_domain, i2p_domain,
base_dir, http_prefix, base_dir, http_prefix,
@ -1722,7 +1740,8 @@ def _command_options() -> None:
debug, __version__, debug, __version__,
signing_priv_key_pem, proxy_type, signing_priv_key_pem, proxy_type,
followers_sync_cache, followers_sync_cache,
sites_unavailable, system_language) sites_unavailable, system_language,
mitm_servers)
session.close() session.close()
sys.exit() sys.exit()
@ -1757,8 +1776,9 @@ def _command_options() -> None:
session_i2p = create_session('i2p') session_i2p = create_session('i2p')
followers_sync_cache = {} followers_sync_cache = {}
sites_unavailable = [] sites_unavailable = []
mitm_servers = []
system_language = argb.language system_language = argb.language
manual_deny_follow_request(session, session_onion, session_i2p, manual_deny_follow_request2(session, session_onion, session_i2p,
onion_domain, i2p_domain, onion_domain, i2p_domain,
base_dir, http_prefix, base_dir, http_prefix,
argb.nickname, domain, port, argb.nickname, domain, port,
@ -1770,7 +1790,7 @@ def _command_options() -> None:
signing_priv_key_pem, signing_priv_key_pem,
followers_sync_cache, followers_sync_cache,
sites_unavailable, sites_unavailable,
system_language) system_language, mitm_servers)
session.close() session.close()
sys.exit() sys.exit()
@ -1882,6 +1902,7 @@ def _command_options() -> None:
auto_cw_cache = {} auto_cw_cache = {}
# TODO searchable status # TODO searchable status
searchable_by = [] searchable_by = []
mitm_servers = []
print('Sending post to ' + argb.sendto) print('Sending post to ' + argb.sendto)
send_post_via_server(signing_priv_key_pem, __version__, send_post_via_server(signing_priv_key_pem, __version__,
@ -1901,7 +1922,8 @@ def _command_options() -> None:
argb.eventLocation, translate, argb.buyUrl, argb.eventLocation, translate, argb.buyUrl,
argb.chatUrl, auto_cw_cache, argb.debug, argb.chatUrl, auto_cw_cache, argb.debug,
reply_to, reply_to, argb.conversationId, reply_to, reply_to, argb.conversationId,
argb.convthreadId, subject, searchable_by) argb.convthreadId, subject, searchable_by,
mitm_servers)
for _ in range(10): for _ in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -1988,13 +2010,14 @@ def _command_options() -> None:
system_language = argb.language system_language = argb.language
print('Sending announce/repeat of ' + argb.announce) print('Sending announce/repeat of ' + argb.announce)
mitm_servers = []
send_announce_via_server(base_dir, session, send_announce_via_server(base_dir, session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
http_prefix, argb.announce, http_prefix, argb.announce,
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(10): for _ in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -2035,10 +2058,12 @@ def _command_options() -> None:
signing_priv_key_pem = get_instance_actor_key(base_dir, domain) signing_priv_key_pem = get_instance_actor_key(base_dir, domain)
session = create_session(proxy_type) session = create_session(proxy_type)
mitm_servers = []
box_json = c2s_box_json(session, argb.nickname, argb.password, box_json = c2s_box_json(session, argb.nickname, argb.password,
domain, port, http_prefix, domain, port, http_prefix,
argb.box, argb.pageNumber, argb.box, argb.pageNumber,
argb.debug, signing_priv_key_pem) argb.debug, signing_priv_key_pem,
mitm_servers)
if box_json: if box_json:
pprint(box_json) pprint(box_json)
else: else:
@ -2098,6 +2123,7 @@ def _command_options() -> None:
system_language = argb.language system_language = argb.language
print('Sending shared item: ' + argb.itemName) print('Sending shared item: ' + argb.itemName)
mitm_servers = []
send_share_via_server(base_dir, session, send_share_via_server(base_dir, session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
@ -2114,7 +2140,7 @@ def _command_options() -> None:
debug, __version__, debug, __version__,
argb.itemPrice, argb.itemCurrency, argb.itemPrice, argb.itemCurrency,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(10): for _ in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -2144,6 +2170,7 @@ def _command_options() -> None:
system_language = argb.language system_language = argb.language
print('Sending undo of shared item: ' + argb.undoItemName) print('Sending undo of shared item: ' + argb.undoItemName)
mitm_servers = []
send_undo_share_via_server(base_dir, session, send_undo_share_via_server(base_dir, session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
@ -2151,7 +2178,7 @@ def _command_options() -> None:
argb.undoItemName, argb.undoItemName,
cached_webfingers, person_cache, cached_webfingers, person_cache,
debug, __version__, signing_priv_key_pem, debug, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(10): for _ in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -2210,6 +2237,7 @@ def _command_options() -> None:
system_language = argb.language system_language = argb.language
print('Sending wanted item: ' + argb.wantedItemName) print('Sending wanted item: ' + argb.wantedItemName)
mitm_servers = []
send_wanted_via_server(base_dir, session, send_wanted_via_server(base_dir, session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
@ -2226,7 +2254,7 @@ def _command_options() -> None:
debug, __version__, debug, __version__,
argb.itemPrice, argb.itemCurrency, argb.itemPrice, argb.itemCurrency,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(10): for _ in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -2256,6 +2284,7 @@ def _command_options() -> None:
system_language = argb.language system_language = argb.language
print('Sending undo of wanted item: ' + argb.undoWantedItemName) print('Sending undo of wanted item: ' + argb.undoWantedItemName)
mitm_servers = []
send_undo_wanted_via_server(base_dir, session, send_undo_wanted_via_server(base_dir, session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
@ -2263,7 +2292,7 @@ def _command_options() -> None:
argb.undoWantedItemName, argb.undoWantedItemName,
cached_webfingers, person_cache, cached_webfingers, person_cache,
debug, __version__, signing_priv_key_pem, debug, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(10): for _ in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -2293,13 +2322,14 @@ def _command_options() -> None:
system_language = argb.language system_language = argb.language
print('Sending like of ' + argb.like) print('Sending like of ' + argb.like)
mitm_servers = []
send_like_via_server(base_dir, session, send_like_via_server(base_dir, session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
http_prefix, argb.like, http_prefix, argb.like,
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(10): for _ in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -2335,13 +2365,14 @@ def _command_options() -> None:
system_language = argb.language system_language = argb.language
print('Sending emoji reaction ' + argb.emoji + ' to ' + argb.react) print('Sending emoji reaction ' + argb.emoji + ' to ' + argb.react)
mitm_servers = []
send_reaction_via_server(base_dir, session, send_reaction_via_server(base_dir, session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
http_prefix, argb.react, argb.emoji, http_prefix, argb.react, argb.emoji,
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(10): for _ in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -2371,6 +2402,7 @@ def _command_options() -> None:
system_language = argb.language system_language = argb.language
print('Sending undo like of ' + argb.undolike) print('Sending undo like of ' + argb.undolike)
mitm_servers = []
send_undo_like_via_server(base_dir, session, send_undo_like_via_server(base_dir, session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
@ -2378,7 +2410,7 @@ def _command_options() -> None:
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, True, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(10): for _ in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -2415,6 +2447,7 @@ def _command_options() -> None:
print('Sending undo emoji reaction ' + print('Sending undo emoji reaction ' +
argb.emoji + ' to ' + argb.react) argb.emoji + ' to ' + argb.react)
mitm_servers = []
send_undo_reaction_via_server(base_dir, session, send_undo_reaction_via_server(base_dir, session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
@ -2422,7 +2455,7 @@ def _command_options() -> None:
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, True, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(10): for _ in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -2452,6 +2485,7 @@ def _command_options() -> None:
system_language = argb.language system_language = argb.language
print('Sending bookmark of ' + argb.bookmark) print('Sending bookmark of ' + argb.bookmark)
mitm_servers = []
send_bookmark_via_server(base_dir, session, send_bookmark_via_server(base_dir, session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
@ -2459,7 +2493,7 @@ def _command_options() -> None:
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, True, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(10): for _ in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -2489,13 +2523,14 @@ def _command_options() -> None:
system_language = argb.language system_language = argb.language
print('Sending undo bookmark of ' + argb.unbookmark) print('Sending undo bookmark of ' + argb.unbookmark)
mitm_servers = []
send_undo_bookmark_via_server(base_dir, session, send_undo_bookmark_via_server(base_dir, session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
http_prefix, argb.unbookmark, http_prefix, argb.unbookmark,
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(10): for _ in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -2525,13 +2560,14 @@ def _command_options() -> None:
system_language = argb.language system_language = argb.language
print('Sending delete request of ' + argb.delete) print('Sending delete request of ' + argb.delete)
mitm_servers = []
send_delete_via_server(base_dir, session, send_delete_via_server(base_dir, session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
http_prefix, argb.delete, http_prefix, argb.delete,
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(10): for _ in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -2575,6 +2611,7 @@ def _command_options() -> None:
signing_priv_key_pem = get_instance_actor_key(base_dir, domain) signing_priv_key_pem = get_instance_actor_key(base_dir, domain)
system_language = argb.language system_language = argb.language
mitm_servers = []
send_follow_request_via_server(base_dir, session, send_follow_request_via_server(base_dir, session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
@ -2583,7 +2620,7 @@ def _command_options() -> None:
cached_webfingers, person_cache, cached_webfingers, person_cache,
debug, __version__, debug, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(20): for _ in range(20):
time.sleep(1) time.sleep(1)
# TODO some method to know if it worked # TODO some method to know if it worked
@ -2628,6 +2665,7 @@ def _command_options() -> None:
signing_priv_key_pem = get_instance_actor_key(base_dir, domain) signing_priv_key_pem = get_instance_actor_key(base_dir, domain)
system_language = argb.language system_language = argb.language
mitm_servers = []
send_unfollow_request_via_server(base_dir, session, send_unfollow_request_via_server(base_dir, session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
@ -2636,7 +2674,7 @@ def _command_options() -> None:
cached_webfingers, person_cache, cached_webfingers, person_cache,
debug, __version__, debug, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(20): for _ in range(20):
time.sleep(1) time.sleep(1)
# TODO some method to know if it worked # TODO some method to know if it worked
@ -2667,12 +2705,14 @@ def _command_options() -> None:
if argb.secure_mode: if argb.secure_mode:
signing_priv_key_pem = get_instance_actor_key(base_dir, domain) signing_priv_key_pem = get_instance_actor_key(base_dir, domain)
mitm_servers = []
following_json = \ following_json = \
get_following_via_server(session, get_following_via_server(session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
follow_http_prefix, argb.pageNumber, follow_http_prefix, argb.pageNumber,
debug, __version__, signing_priv_key_pem) debug, __version__, signing_priv_key_pem,
mitm_servers)
if following_json: if following_json:
pprint(following_json) pprint(following_json)
session.close() session.close()
@ -2701,13 +2741,15 @@ def _command_options() -> None:
if argb.secure_mode: if argb.secure_mode:
signing_priv_key_pem = get_instance_actor_key(base_dir, domain) signing_priv_key_pem = get_instance_actor_key(base_dir, domain)
mitm_servers = []
blocked_json = \ blocked_json = \
get_blocks_via_server(session, get_blocks_via_server(session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
blocked_http_prefix, argb.pageNumber, blocked_http_prefix, argb.pageNumber,
debug, __version__, debug, __version__,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
if blocked_json: if blocked_json:
pprint(blocked_json) pprint(blocked_json)
session.close() session.close()
@ -2735,14 +2777,14 @@ def _command_options() -> None:
signing_priv_key_pem = None signing_priv_key_pem = None
if argb.secure_mode: if argb.secure_mode:
signing_priv_key_pem = get_instance_actor_key(base_dir, domain) signing_priv_key_pem = get_instance_actor_key(base_dir, domain)
mitm_servers = []
followers_json = \ followers_json = \
get_followers_via_server(session, get_followers_via_server(session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
follow_http_prefix, argb.pageNumber, follow_http_prefix, argb.pageNumber,
debug, __version__, debug, __version__,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if followers_json: if followers_json:
pprint(followers_json) pprint(followers_json)
session.close() session.close()
@ -2771,13 +2813,15 @@ def _command_options() -> None:
if argb.secure_mode: if argb.secure_mode:
signing_priv_key_pem = get_instance_actor_key(base_dir, domain) signing_priv_key_pem = get_instance_actor_key(base_dir, domain)
mitm_servers = []
follow_requests_json = \ follow_requests_json = \
get_follow_requests_via_server(session, get_follow_requests_via_server(session,
argb.nickname, argb.password, argb.nickname, argb.password,
domain, port, domain, port,
follow_http_prefix, argb.pageNumber, follow_http_prefix, argb.pageNumber,
debug, __version__, debug, __version__,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
if follow_requests_json: if follow_requests_json:
pprint(follow_requests_json) pprint(follow_requests_json)
session.close() session.close()
@ -2836,10 +2880,11 @@ def _command_options() -> None:
if argb.secure_mode: if argb.secure_mode:
signing_priv_key_pem = get_instance_actor_key(base_dir, domain) signing_priv_key_pem = get_instance_actor_key(base_dir, domain)
block_federated = [] block_federated = []
mitm_servers = []
ctr = migrate_accounts(base_dir, session, ctr = migrate_accounts(base_dir, session,
http_prefix, cached_webfingers, http_prefix, cached_webfingers,
True, signing_priv_key_pem, True, signing_priv_key_pem,
block_federated) block_federated, mitm_servers)
if ctr == 0: if ctr == 0:
print('No followed accounts have moved') print('No followed accounts have moved')
else: else:
@ -2859,9 +2904,11 @@ def _command_options() -> None:
print('Did not obtain instance actor key for ' + domain) print('Did not obtain instance actor key for ' + domain)
if argb.actor.startswith('@'): if argb.actor.startswith('@'):
argb.actor = argb.actor[1:] argb.actor = argb.actor[1:]
mitm_servers = []
get_actor_json(domain, argb.actor, argb.http, argb.gnunet, get_actor_json(domain, argb.actor, argb.http, argb.gnunet,
argb.ipfs, argb.ipns, argb.ipfs, argb.ipns,
debug, False, signing_priv_key_pem, None) debug, False, signing_priv_key_pem, None,
mitm_servers)
sys.exit() sys.exit()
if argb.followers: if argb.followers:
@ -2964,10 +3011,11 @@ def _command_options() -> None:
signing_priv_key_pem = None signing_priv_key_pem = None
if argb.secure_mode: if argb.secure_mode:
signing_priv_key_pem = get_instance_actor_key(base_dir, domain) signing_priv_key_pem = get_instance_actor_key(base_dir, domain)
mitm_servers = []
wf_request = webfinger_handle(session, handle, wf_request = webfinger_handle(session, handle,
http_prefix, cached_webfingers, http_prefix, cached_webfingers,
host_domain, __version__, debug, False, host_domain, __version__, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
print('Unable to webfinger ' + handle) print('Unable to webfinger ' + handle)
session.close() session.close()
@ -3023,11 +3071,12 @@ def _command_options() -> None:
signing_priv_key_pem = None signing_priv_key_pem = None
if argb.secure_mode: if argb.secure_mode:
signing_priv_key_pem = get_instance_actor_key(base_dir, domain) signing_priv_key_pem = get_instance_actor_key(base_dir, domain)
mitm_servers = []
followers_list = \ followers_list = \
download_follow_collection(signing_priv_key_pem, download_follow_collection(signing_priv_key_pem,
'followers', session, 'followers', session,
http_prefix, person_url, 1, 3, http_prefix, person_url, 1, 3,
argb.debug) argb.debug, mitm_servers)
if followers_list: if followers_list:
for actor in followers_list: for actor in followers_list:
print(actor) print(actor)
@ -3317,6 +3366,7 @@ def _command_options() -> None:
print('Sending ' + argb.skill + ' skill level ' + print('Sending ' + argb.skill + ' skill level ' +
str(argb.skillLevelPercent) + ' for ' + nickname) str(argb.skillLevelPercent) + ' for ' + nickname)
mitm_servers = []
send_skill_via_server(base_dir, session, send_skill_via_server(base_dir, session,
nickname, argb.password, nickname, argb.password,
domain, port, domain, port,
@ -3324,7 +3374,7 @@ def _command_options() -> None:
argb.skill, argb.skillLevelPercent, argb.skill, argb.skillLevelPercent,
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for i in range(10): for i in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -3355,13 +3405,14 @@ def _command_options() -> None:
print('Sending availability status of ' + nickname + print('Sending availability status of ' + nickname +
' as ' + argb.availability) ' as ' + argb.availability)
mitm_servers = []
send_availability_via_server(base_dir, session, send_availability_via_server(base_dir, session,
nickname, argb.password, nickname, argb.password,
domain, port, http_prefix, domain, port, http_prefix,
argb.availability, argb.availability,
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for i in range(10): for i in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -3472,12 +3523,13 @@ def _command_options() -> None:
system_language = argb.language system_language = argb.language
print('Sending block of ' + argb.block) print('Sending block of ' + argb.block)
mitm_servers = []
send_block_via_server(base_dir, session, nickname, argb.password, send_block_via_server(base_dir, session, nickname, argb.password,
domain, port, domain, port,
http_prefix, argb.block, http_prefix, argb.block,
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for i in range(10): for i in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -3507,12 +3559,13 @@ def _command_options() -> None:
system_language = argb.language system_language = argb.language
print('Sending mute of ' + argb.mute) print('Sending mute of ' + argb.mute)
mitm_servers = []
send_mute_via_server(base_dir, session, nickname, argb.password, send_mute_via_server(base_dir, session, nickname, argb.password,
domain, port, domain, port,
http_prefix, argb.mute, http_prefix, argb.mute,
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for i in range(10): for i in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -3542,12 +3595,13 @@ def _command_options() -> None:
system_language = argb.language system_language = argb.language
print('Sending undo mute of ' + argb.unmute) print('Sending undo mute of ' + argb.unmute)
mitm_servers = []
send_undo_mute_via_server(base_dir, session, nickname, argb.password, send_undo_mute_via_server(base_dir, session, nickname, argb.password,
domain, port, domain, port,
http_prefix, argb.unmute, http_prefix, argb.unmute,
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for i in range(10): for i in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)
@ -3589,12 +3643,13 @@ def _command_options() -> None:
system_language = argb.language system_language = argb.language
print('Sending undo block of ' + argb.unblock) print('Sending undo block of ' + argb.unblock)
mitm_servers = []
send_undo_block_via_server(base_dir, session, nickname, argb.password, send_undo_block_via_server(base_dir, session, nickname, argb.password,
domain, port, domain, port,
http_prefix, argb.unblock, http_prefix, argb.unblock,
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for i in range(10): for i in range(10):
# TODO detect send success/fail # TODO detect send success/fail
time.sleep(1) time.sleep(1)

View File

@ -763,7 +763,8 @@ def followed_account_accepts(session, base_dir: str, http_prefix: str,
onion_domain: str, i2p_domain: str, onion_domain: str, i2p_domain: str,
followers_sync_cache: {}, followers_sync_cache: {},
sites_unavailable: [], sites_unavailable: [],
system_language: str): system_language: str,
mitm_servers: []):
"""The person receiving a follow request accepts the new follower """The person receiving a follow request accepts the new follower
and sends back an Accept activity and sends back an Accept activity
""" """
@ -820,7 +821,7 @@ def followed_account_accepts(session, base_dir: str, http_prefix: str,
group_account, signing_priv_key_pem, group_account, signing_priv_key_pem,
7856837, curr_domain, onion_domain, i2p_domain, 7856837, curr_domain, onion_domain, i2p_domain,
extra_headers, sites_unavailable, extra_headers, sites_unavailable,
system_language) system_language, mitm_servers)
def followed_account_rejects(session, session_onion, session_i2p, def followed_account_rejects(session, session_onion, session_i2p,
@ -836,7 +837,8 @@ def followed_account_rejects(session, session_onion, session_i2p,
signing_priv_key_pem: str, signing_priv_key_pem: str,
followers_sync_cache: {}, followers_sync_cache: {},
sites_unavailable: [], sites_unavailable: [],
system_language: str): system_language: str,
mitm_servers: []):
"""The person receiving a follow request rejects the new follower """The person receiving a follow request rejects the new follower
and sends back a Reject activity and sends back a Reject activity
""" """
@ -906,7 +908,7 @@ def followed_account_rejects(session, session_onion, session_i2p,
6393063, 6393063,
domain, onion_domain, i2p_domain, domain, onion_domain, i2p_domain,
extra_headers, sites_unavailable, extra_headers, sites_unavailable,
system_language) system_language, mitm_servers)
def send_follow_request(session, base_dir: str, def send_follow_request(session, base_dir: str,
@ -923,7 +925,8 @@ def send_follow_request(session, base_dir: str,
curr_domain: str, curr_domain: str,
onion_domain: str, i2p_domain: str, onion_domain: str, i2p_domain: str,
sites_unavailable: [], sites_unavailable: [],
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Gets the json object for sending a follow request """Gets the json object for sending a follow request
""" """
if not signing_priv_key_pem: if not signing_priv_key_pem:
@ -1012,7 +1015,7 @@ def send_follow_request(session, base_dir: str,
signing_priv_key_pem, 8234389, signing_priv_key_pem, 8234389,
curr_domain, onion_domain, i2p_domain, curr_domain, onion_domain, i2p_domain,
extra_headers, sites_unavailable, extra_headers, sites_unavailable,
system_language) system_language, mitm_servers)
return new_follow_json return new_follow_json
@ -1026,7 +1029,8 @@ def send_follow_request_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Creates a follow request via c2s """Creates a follow request via c2s
""" """
if not session: if not session:
@ -1060,7 +1064,7 @@ def send_follow_request_via_server(base_dir: str, session,
wf_request = \ wf_request = \
webfinger_handle(session, handle, http_prefix, cached_webfingers, webfinger_handle(session, handle, http_prefix, cached_webfingers,
from_domain, project_version, debug, False, from_domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: follow request webfinger failed for ' + handle) print('DEBUG: follow request webfinger failed for ' + handle)
@ -1081,7 +1085,7 @@ def send_follow_request_via_server(base_dir: str, session,
project_version, http_prefix, project_version, http_prefix,
from_nickname, from_nickname,
from_domain, post_to_box, 52025, from_domain, post_to_box, 52025,
system_language) system_language, mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:
@ -1123,7 +1127,8 @@ def send_unfollow_request_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Creates a unfollow request via c2s """Creates a unfollow request via c2s
""" """
if not session: if not session:
@ -1161,7 +1166,7 @@ def send_unfollow_request_via_server(base_dir: str, session,
wf_request = \ wf_request = \
webfinger_handle(session, handle, http_prefix, cached_webfingers, webfinger_handle(session, handle, http_prefix, cached_webfingers,
from_domain, project_version, debug, False, from_domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: unfollow webfinger failed for ' + handle) print('DEBUG: unfollow webfinger failed for ' + handle)
@ -1183,7 +1188,8 @@ def send_unfollow_request_via_server(base_dir: str, session,
project_version, http_prefix, project_version, http_prefix,
from_nickname, from_nickname,
from_domain, post_to_box, from_domain, post_to_box,
76536, system_language) 76536, system_language,
mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:
@ -1220,7 +1226,8 @@ def get_following_via_server(session, nickname: str, password: str,
domain: str, port: int, domain: str, port: int,
http_prefix: str, page_number: int, http_prefix: str, page_number: int,
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str) -> {}: signing_priv_key_pem: str,
mitm_servers: []) -> {}:
"""Gets a page from the following collection as json """Gets a page from the following collection as json
""" """
if not session: if not session:
@ -1242,7 +1249,7 @@ def get_following_via_server(session, nickname: str, password: str,
url = follow_actor + '/following?page=' + str(page_number) url = follow_actor + '/following?page=' + str(page_number)
following_json = \ following_json = \
get_json(signing_priv_key_pem, session, url, headers, {}, debug, get_json(signing_priv_key_pem, session, url, headers, {}, debug,
project_version, http_prefix, domain, 10, True) mitm_servers, project_version, http_prefix, domain, 10, True)
if not get_json_valid(following_json): if not get_json_valid(following_json):
if debug: if debug:
print('DEBUG: GET following list failed for c2s to ' + url) print('DEBUG: GET following list failed for c2s to ' + url)
@ -1258,7 +1265,8 @@ def get_followers_via_server(session, nickname: str, password: str,
domain: str, port: int, domain: str, port: int,
http_prefix: str, page_number: int, http_prefix: str, page_number: int,
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str) -> {}: signing_priv_key_pem: str,
mitm_servers: []) -> {}:
"""Gets a page from the followers collection as json """Gets a page from the followers collection as json
""" """
if not session: if not session:
@ -1280,7 +1288,7 @@ def get_followers_via_server(session, nickname: str, password: str,
url = follow_actor + '/followers?page=' + str(page_number) url = follow_actor + '/followers?page=' + str(page_number)
followers_json = \ followers_json = \
get_json(signing_priv_key_pem, session, url, headers, {}, debug, get_json(signing_priv_key_pem, session, url, headers, {}, debug,
project_version, http_prefix, domain, 10, True) mitm_servers, project_version, http_prefix, domain, 10, True)
if not get_json_valid(followers_json): if not get_json_valid(followers_json):
if debug: if debug:
print('DEBUG: GET followers list failed for c2s to ' + url) print('DEBUG: GET followers list failed for c2s to ' + url)
@ -1297,7 +1305,8 @@ def get_follow_requests_via_server(session,
domain: str, port: int, domain: str, port: int,
http_prefix: str, page_number: int, http_prefix: str, page_number: int,
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str) -> {}: signing_priv_key_pem: str,
mitm_servers: []) -> {}:
"""Gets a page from the follow requests collection as json """Gets a page from the follow requests collection as json
""" """
if not session: if not session:
@ -1319,7 +1328,7 @@ def get_follow_requests_via_server(session,
url = follow_actor + '/followrequests?page=' + str(page_number) url = follow_actor + '/followrequests?page=' + str(page_number)
followers_json = \ followers_json = \
get_json(signing_priv_key_pem, session, url, headers, {}, debug, get_json(signing_priv_key_pem, session, url, headers, {}, debug,
project_version, http_prefix, domain, 10, True) mitm_servers, project_version, http_prefix, domain, 10, True)
if not get_json_valid(followers_json): if not get_json_valid(followers_json):
if debug: if debug:
print('DEBUG: GET follow requests list failed for c2s to ' + url) print('DEBUG: GET follow requests list failed for c2s to ' + url)
@ -1336,7 +1345,8 @@ def approve_follow_request_via_server(session,
domain: str, port: int, domain: str, port: int,
http_prefix: str, approve_handle: int, http_prefix: str, approve_handle: int,
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str) -> str: signing_priv_key_pem: str,
mitm_servers: []) -> str:
"""Approves a follow request """Approves a follow request
This is not exactly via c2s though. It simulates pressing the Approve This is not exactly via c2s though. It simulates pressing the Approve
button on the web interface button on the web interface
@ -1359,7 +1369,7 @@ def approve_follow_request_via_server(session,
url = actor + '/followapprove=' + approve_handle url = actor + '/followapprove=' + approve_handle
approve_html = \ approve_html = \
get_json(signing_priv_key_pem, session, url, headers, {}, debug, get_json(signing_priv_key_pem, session, url, headers, {}, debug,
project_version, http_prefix, domain, 10, True) mitm_servers, project_version, http_prefix, domain, 10, True)
if not get_json_valid(approve_html): if not get_json_valid(approve_html):
if debug: if debug:
print('DEBUG: GET approve follow request failed for c2s to ' + url) print('DEBUG: GET approve follow request failed for c2s to ' + url)
@ -1376,7 +1386,8 @@ def deny_follow_request_via_server(session,
domain: str, port: int, domain: str, port: int,
http_prefix: str, deny_handle: int, http_prefix: str, deny_handle: int,
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str) -> str: signing_priv_key_pem: str,
mitm_servers: []) -> str:
"""Denies a follow request """Denies a follow request
This is not exactly via c2s though. It simulates pressing the Deny This is not exactly via c2s though. It simulates pressing the Deny
button on the web interface button on the web interface
@ -1399,7 +1410,7 @@ def deny_follow_request_via_server(session,
url = actor + '/followdeny=' + deny_handle url = actor + '/followdeny=' + deny_handle
deny_html = \ deny_html = \
get_json(signing_priv_key_pem, session, url, headers, {}, debug, get_json(signing_priv_key_pem, session, url, headers, {}, debug,
project_version, http_prefix, domain, 10, True) mitm_servers, project_version, http_prefix, domain, 10, True)
if not get_json_valid(deny_html): if not get_json_valid(deny_html):
if debug: if debug:
print('DEBUG: GET deny follow request failed for c2s to ' + url) print('DEBUG: GET deny follow request failed for c2s to ' + url)

View File

@ -165,7 +165,8 @@ def _update_import_following(base_dir: str,
httpd.onion_domain, httpd.onion_domain,
httpd.i2p_domain, httpd.i2p_domain,
httpd.sites_unavailable, httpd.sites_unavailable,
httpd.system_language) httpd.system_language,
httpd.mitm_servers)
# remove the followed handle from the import list # remove the followed handle from the import list
following_str = following_str.replace(orig_line + '\n', '') following_str = following_str.replace(orig_line + '\n', '')

111
inbox.py
View File

@ -189,7 +189,8 @@ def _inbox_store_post_to_html_cache(recent_posts_cache: {},
dogwhistles: {}, dogwhistles: {},
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}) -> None: auto_cw_cache: {},
mitm_servers: []) -> None:
"""Converts the json post into html and stores it in a cache """Converts the json post into html and stores it in a cache
This enables the post to be quickly displayed later This enables the post to be quickly displayed later
""" """
@ -219,7 +220,8 @@ def _inbox_store_post_to_html_cache(recent_posts_cache: {},
not_dm, True, True, False, True, False, not_dm, True, True, False, True, False,
cw_lists, lists_enabled, timezone, mitm, cw_lists, lists_enabled, timezone, mitm,
bold_reading, dogwhistles, minimize_all_images, bold_reading, dogwhistles, minimize_all_images,
None, buy_sites, auto_cw_cache) None, buy_sites, auto_cw_cache,
mitm_servers)
def valid_inbox(base_dir: str, nickname: str, domain: str) -> bool: def valid_inbox(base_dir: str, nickname: str, domain: str) -> bool:
@ -801,7 +803,8 @@ def update_edited_post(base_dir: str,
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}, auto_cw_cache: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> None: i2p_domain: str,
mitm_servers: []) -> None:
""" When an edited post is created this assigns """ When an edited post is created this assigns
a published and updated date to it, and uses a published and updated date to it, and uses
the previous id the previous id
@ -851,7 +854,8 @@ def update_edited_post(base_dir: str,
min_images_for_accounts, min_images_for_accounts,
max_hashtags, buy_sites, max_hashtags, buy_sites,
auto_cw_cache, auto_cw_cache,
onion_domain, i2p_domain) onion_domain, i2p_domain,
mitm_servers)
# update the index # update the index
id_str = edited_postid.split('/')[-1] id_str = edited_postid.split('/')[-1]
@ -947,7 +951,8 @@ def _obtain_avatar_for_reply_post(session, base_dir: str, http_prefix: str,
i2p_domain: str, i2p_domain: str,
person_cache: {}, person_cache: {},
post_json_object: {}, debug: bool, post_json_object: {}, debug: bool,
signing_priv_key_pem: str) -> None: signing_priv_key_pem: str,
mitm_servers: []) -> None:
"""Tries to obtain the actor for the person being replied to """Tries to obtain the actor for the person being replied to
so that their avatar can later be shown so that their avatar can later be shown
""" """
@ -980,7 +985,8 @@ def _obtain_avatar_for_reply_post(session, base_dir: str, http_prefix: str,
person_cache, debug, person_cache, debug,
__version__, http_prefix, __version__, http_prefix,
domain, onion_domain, i2p_domain, domain, onion_domain, i2p_domain,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
if pub_key: if pub_key:
if not isinstance(pub_key, dict): if not isinstance(pub_key, dict):
if debug: if debug:
@ -1096,7 +1102,8 @@ def _send_to_group_members(server, session, session_onion, session_i2p,
onion_domain: str, i2p_domain: str, onion_domain: str, i2p_domain: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
sites_unavailable: [], sites_unavailable: [],
system_language: str) -> None: system_language: str,
mitm_servers: []) -> None:
"""When a post arrives for a group send it out to the group members """When a post arrives for a group send it out to the group members
""" """
if debug: if debug:
@ -1153,7 +1160,8 @@ def _send_to_group_members(server, session, session_onion, session_i2p,
person_cache, cached_webfingers, person_cache, cached_webfingers,
debug, __version__, signing_priv_key_pem, debug, __version__, signing_priv_key_pem,
curr_domain, onion_domain, i2p_domain, curr_domain, onion_domain, i2p_domain,
sites_unavailable, system_language) sites_unavailable, system_language,
mitm_servers)
send_to_followers_thread(server, session, session_onion, session_i2p, send_to_followers_thread(server, session, session_onion, session_i2p,
base_dir, nickname, domain, base_dir, nickname, domain,
@ -1165,7 +1173,8 @@ def _send_to_group_members(server, session, session_onion, session_i2p,
shared_items_federated_domains, shared_items_federated_domains,
shared_item_federation_tokens, shared_item_federation_tokens,
signing_priv_key_pem, signing_priv_key_pem,
sites_unavailable, system_language) sites_unavailable, system_language,
mitm_servers)
def _inbox_update_calendar_from_tag(base_dir: str, handle: str, def _inbox_update_calendar_from_tag(base_dir: str, handle: str,
@ -1299,7 +1308,8 @@ def _bounce_dm(sender_post_id: str, session, http_prefix: str,
languages_understood: [], languages_understood: [],
bounce_is_chat: bool, bounce_is_chat: bool,
curr_domain: str, onion_domain: str, i2p_domain: str, curr_domain: str, onion_domain: str, i2p_domain: str,
sites_unavailable: []) -> bool: sites_unavailable: [],
mitm_servers: []) -> bool:
"""Sends a bounce message back to the sending handle """Sends a bounce message back to the sending handle
if a DM has been rejected if a DM has been rejected
""" """
@ -1383,7 +1393,8 @@ def _bounce_dm(sender_post_id: str, session, http_prefix: str,
person_cache, debug, __version__, None, group_account, person_cache, debug, __version__, None, group_account,
signing_priv_key_pem, 7238634, signing_priv_key_pem, 7238634,
curr_domain, onion_domain, i2p_domain, curr_domain, onion_domain, i2p_domain,
extra_headers, sites_unavailable, system_language) extra_headers, sites_unavailable, system_language,
mitm_servers)
return True return True
@ -1401,7 +1412,8 @@ def _is_valid_dm(base_dir: str, nickname: str, domain: str, port: int,
dm_license_url: str, dm_license_url: str,
languages_understood: [], languages_understood: [],
curr_domain: str, onion_domain: str, i2p_domain: str, curr_domain: str, onion_domain: str, i2p_domain: str,
sites_unavailable: []) -> bool: sites_unavailable: [],
mitm_servers: []) -> bool:
"""Is the given message a valid DM? """Is the given message a valid DM?
""" """
if nickname == 'inbox': if nickname == 'inbox':
@ -1506,7 +1518,8 @@ def _is_valid_dm(base_dir: str, nickname: str, domain: str, port: int,
bounce_chat, bounce_chat,
curr_domain, curr_domain,
onion_domain, i2p_domain, onion_domain, i2p_domain,
sites_unavailable) sites_unavailable,
mitm_servers)
return False return False
# dm index will be updated # dm index will be updated
@ -1785,7 +1798,8 @@ def _inbox_after_initial(server, inbox_start_time,
mitm: bool, bold_reading: bool, mitm: bool, bold_reading: bool,
dogwhistles: {}, dogwhistles: {},
max_hashtags: int, buy_sites: {}, max_hashtags: int, buy_sites: {},
sites_unavailable: []) -> bool: sites_unavailable: [],
mitm_servers: []) -> bool:
""" Anything which needs to be done after initial checks have passed """ Anything which needs to be done after initial checks have passed
""" """
# if this is a clearnet instance then replace any onion/i2p # if this is a clearnet instance then replace any onion/i2p
@ -1849,7 +1863,8 @@ def _inbox_after_initial(server, inbox_start_time,
max_like_count, cw_lists, lists_enabled, max_like_count, cw_lists, lists_enabled,
bold_reading, dogwhistles, bold_reading, dogwhistles,
server.min_images_for_accounts, server.min_images_for_accounts,
buy_sites, server.auto_cw_cache): buy_sites, server.auto_cw_cache,
mitm_servers):
if debug: if debug:
print('DEBUG: Like accepted from ' + actor) print('DEBUG: Like accepted from ' + actor)
fitness_performance(inbox_start_time, server.fitness, fitness_performance(inbox_start_time, server.fitness,
@ -1876,7 +1891,8 @@ def _inbox_after_initial(server, inbox_start_time,
max_like_count, cw_lists, lists_enabled, max_like_count, cw_lists, lists_enabled,
bold_reading, dogwhistles, bold_reading, dogwhistles,
server.min_images_for_accounts, server.min_images_for_accounts,
buy_sites, server.auto_cw_cache): buy_sites, server.auto_cw_cache,
mitm_servers):
if debug: if debug:
print('DEBUG: Undo like accepted from ' + actor) print('DEBUG: Undo like accepted from ' + actor)
fitness_performance(inbox_start_time, server.fitness, fitness_performance(inbox_start_time, server.fitness,
@ -1904,7 +1920,8 @@ def _inbox_after_initial(server, inbox_start_time,
max_like_count, cw_lists, lists_enabled, max_like_count, cw_lists, lists_enabled,
bold_reading, dogwhistles, bold_reading, dogwhistles,
server.min_images_for_accounts, server.min_images_for_accounts,
buy_sites, server.auto_cw_cache): buy_sites, server.auto_cw_cache,
mitm_servers):
if debug: if debug:
print('DEBUG: Reaction accepted from ' + actor) print('DEBUG: Reaction accepted from ' + actor)
fitness_performance(inbox_start_time, server.fitness, fitness_performance(inbox_start_time, server.fitness,
@ -1932,7 +1949,8 @@ def _inbox_after_initial(server, inbox_start_time,
max_like_count, cw_lists, lists_enabled, max_like_count, cw_lists, lists_enabled,
bold_reading, dogwhistles, bold_reading, dogwhistles,
server.min_images_for_accounts, server.min_images_for_accounts,
buy_sites, server.auto_cw_cache): buy_sites, server.auto_cw_cache,
mitm_servers):
if debug: if debug:
print('DEBUG: Zot reaction accepted from ' + actor) print('DEBUG: Zot reaction accepted from ' + actor)
fitness_performance(inbox_start_time, server.fitness, fitness_performance(inbox_start_time, server.fitness,
@ -1959,7 +1977,8 @@ def _inbox_after_initial(server, inbox_start_time,
max_like_count, cw_lists, lists_enabled, max_like_count, cw_lists, lists_enabled,
bold_reading, dogwhistles, bold_reading, dogwhistles,
server.min_images_for_accounts, server.min_images_for_accounts,
buy_sites, server.auto_cw_cache): buy_sites, server.auto_cw_cache,
mitm_servers):
if debug: if debug:
print('DEBUG: Undo reaction accepted from ' + actor) print('DEBUG: Undo reaction accepted from ' + actor)
fitness_performance(inbox_start_time, server.fitness, fitness_performance(inbox_start_time, server.fitness,
@ -1987,7 +2006,8 @@ def _inbox_after_initial(server, inbox_start_time,
bold_reading, dogwhistles, bold_reading, dogwhistles,
server.min_images_for_accounts, server.min_images_for_accounts,
server.buy_sites, server.buy_sites,
server.auto_cw_cache): server.auto_cw_cache,
mitm_servers):
if debug: if debug:
print('DEBUG: Bookmark accepted from ' + actor) print('DEBUG: Bookmark accepted from ' + actor)
fitness_performance(inbox_start_time, server.fitness, fitness_performance(inbox_start_time, server.fitness,
@ -2015,7 +2035,8 @@ def _inbox_after_initial(server, inbox_start_time,
bold_reading, dogwhistles, bold_reading, dogwhistles,
server.min_images_for_accounts, server.min_images_for_accounts,
server.buy_sites, server.buy_sites,
server.auto_cw_cache): server.auto_cw_cache,
mitm_servers):
if debug: if debug:
print('DEBUG: Undo bookmark accepted from ' + actor) print('DEBUG: Undo bookmark accepted from ' + actor)
fitness_performance(inbox_start_time, server.fitness, fitness_performance(inbox_start_time, server.fitness,
@ -2063,7 +2084,8 @@ def _inbox_after_initial(server, inbox_start_time,
server.buy_sites, server.buy_sites,
languages_understood, languages_understood,
server.auto_cw_cache, server.auto_cw_cache,
server.block_federated): server.block_federated,
mitm_servers):
if debug: if debug:
print('DEBUG: Announce accepted from ' + actor) print('DEBUG: Announce accepted from ' + actor)
fitness_performance(inbox_start_time, server.fitness, fitness_performance(inbox_start_time, server.fitness,
@ -2132,7 +2154,8 @@ def _inbox_after_initial(server, inbox_start_time,
server.min_images_for_accounts, server.min_images_for_accounts,
server.buy_sites, server.buy_sites,
server.sites_unavailable, server.sites_unavailable,
server.auto_cw_cache) server.auto_cw_cache,
mitm_servers)
fitness_performance(inbox_start_time, server.fitness, fitness_performance(inbox_start_time, server.fitness,
'INBOX', '_receive_question_vote', 'INBOX', '_receive_question_vote',
debug) debug)
@ -2159,7 +2182,7 @@ def _inbox_after_initial(server, inbox_start_time,
if not valid_sending_actor(session, base_dir, nickname, domain, if not valid_sending_actor(session, base_dir, nickname, domain,
person_cache, post_json_object, person_cache, post_json_object,
signing_priv_key_pem, debug, unit_test, signing_priv_key_pem, debug, unit_test,
system_language): system_language, mitm_servers):
if debug: if debug:
print('Inbox sending actor is not valid ' + print('Inbox sending actor is not valid ' +
str(post_json_object)) str(post_json_object))
@ -2233,7 +2256,8 @@ def _inbox_after_initial(server, inbox_start_time,
languages_understood, languages_understood,
domain, domain,
onion_domain, i2p_domain, onion_domain, i2p_domain,
server.sites_unavailable): server.sites_unavailable,
mitm_servers):
if debug: if debug:
print('Invalid DM ' + str(post_json_object)) print('Invalid DM ' + str(post_json_object))
return False return False
@ -2274,7 +2298,7 @@ def _inbox_after_initial(server, inbox_start_time,
recent_posts_cache, debug, system_language, recent_posts_cache, debug, system_language,
domain_full, person_cache, signing_priv_key_pem, domain_full, person_cache, signing_priv_key_pem,
bold_reading, show_vote_posts, bold_reading, show_vote_posts,
languages_understood): languages_understood, mitm_servers):
# media index will be updated # media index will be updated
update_index_list.append('tlmedia') update_index_list.append('tlmedia')
fitness_performance(inbox_start_time, server.fitness, fitness_performance(inbox_start_time, server.fitness,
@ -2290,7 +2314,7 @@ def _inbox_after_initial(server, inbox_start_time,
http_prefix, domain, http_prefix, domain,
onion_domain, i2p_domain, onion_domain, i2p_domain,
person_cache, post_json_object, debug, person_cache, post_json_object, debug,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
fitness_performance(inbox_start_time, server.fitness, fitness_performance(inbox_start_time, server.fitness,
'INBOX', '_obtain_avatar_for_reply_post', 'INBOX', '_obtain_avatar_for_reply_post',
debug) debug)
@ -2488,7 +2512,8 @@ def _inbox_after_initial(server, inbox_start_time,
dogwhistles, dogwhistles,
min_img_for_accounts, min_img_for_accounts,
buy_sites, buy_sites,
server.auto_cw_cache) server.auto_cw_cache,
server.mitm_servers)
fitness_performance(inbox_start_time, fitness_performance(inbox_start_time,
server.fitness, server.fitness,
'INBOX', 'INBOX',
@ -2556,7 +2581,8 @@ def _inbox_after_initial(server, inbox_start_time,
domain, onion_domain, i2p_domain, domain, onion_domain, i2p_domain,
signing_priv_key_pem, signing_priv_key_pem,
sites_unavailable, sites_unavailable,
system_language) system_language,
mitm_servers)
fitness_performance(inbox_start_time, fitness_performance(inbox_start_time,
server.fitness, server.fitness,
'INBOX', '_send_to_group_members', 'INBOX', '_send_to_group_members',
@ -2827,7 +2853,8 @@ def _receive_follow_request(session, session_onion, session_i2p,
i2p_domain: str, signing_priv_key_pem: str, i2p_domain: str, signing_priv_key_pem: str,
unit_test: bool, system_language: str, unit_test: bool, system_language: str,
followers_sync_cache: {}, followers_sync_cache: {},
sites_unavailable: []) -> bool: sites_unavailable: [],
mitm_servers: []) -> bool:
"""Receives a follow request within the POST section of HTTPServer """Receives a follow request within the POST section of HTTPServer
""" """
if not message_json['type'].startswith('Follow'): if not message_json['type'].startswith('Follow'):
@ -2958,7 +2985,7 @@ def _receive_follow_request(session, session_onion, session_i2p,
nickname_to_follow, domain_to_follow, nickname_to_follow, domain_to_follow,
person_cache, message_json, person_cache, message_json,
signing_priv_key_pem, debug, unit_test, signing_priv_key_pem, debug, unit_test,
system_language): system_language, mitm_servers):
print('REJECT spam follow request ' + approve_handle) print('REJECT spam follow request ' + approve_handle)
return True return True
@ -2996,7 +3023,8 @@ def _receive_follow_request(session, session_onion, session_i2p,
person_cache, debug, project_version, person_cache, debug, project_version,
curr_http_prefix, curr_http_prefix,
this_domain, onion_domain, this_domain, onion_domain,
i2p_domain, signing_priv_key_pem) i2p_domain, signing_priv_key_pem,
mitm_servers)
if not pubkey_result: if not pubkey_result:
if debug: if debug:
print('Unable to obtain following actor: ' + print('Unable to obtain following actor: ' +
@ -3047,7 +3075,8 @@ def _receive_follow_request(session, session_onion, session_i2p,
person_cache, debug, project_version, person_cache, debug, project_version,
curr_http_prefix, this_domain, curr_http_prefix, this_domain,
onion_domain, i2p_domain, onion_domain, i2p_domain,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
if not pubkey_result: if not pubkey_result:
if debug: if debug:
print('Unable to obtain following actor: ' + print('Unable to obtain following actor: ' +
@ -3111,7 +3140,7 @@ def _receive_follow_request(session, session_onion, session_i2p,
signing_priv_key_pem, signing_priv_key_pem,
this_domain, onion_domain, i2p_domain, this_domain, onion_domain, i2p_domain,
followers_sync_cache, sites_unavailable, followers_sync_cache, sites_unavailable,
system_language) system_language, mitm_servers)
def run_inbox_queue(server, def run_inbox_queue(server,
@ -3381,7 +3410,8 @@ def run_inbox_queue(server,
person_cache, debug, person_cache, debug,
project_version, http_prefix, project_version, http_prefix,
domain, onion_domain, i2p_domain, domain, onion_domain, i2p_domain,
signing_priv_key_pem) signing_priv_key_pem,
server.mitm_servers)
fitness_performance(inbox_start_time, server.fitness, fitness_performance(inbox_start_time, server.fitness,
'INBOX', 'get_person_pub_key', debug) 'INBOX', 'get_person_pub_key', debug)
inbox_start_time = time.time() inbox_start_time = time.time()
@ -3552,7 +3582,8 @@ def run_inbox_queue(server,
signing_priv_key_pem, unit_test, signing_priv_key_pem, unit_test,
system_language, system_language,
server.followers_sync_cache, server.followers_sync_cache,
server.sites_unavailable): server.sites_unavailable,
server.mitm_servers):
if os.path.isfile(queue_filename): if os.path.isfile(queue_filename):
try: try:
os.remove(queue_filename) os.remove(queue_filename)
@ -3606,7 +3637,8 @@ def run_inbox_queue(server,
server.sites_unavailable, server.sites_unavailable,
server.blocked_cache, server.blocked_cache,
server.block_federated, server.block_federated,
server.system_language): server.system_language,
server.mitm_servers):
if debug: if debug:
print('Queue: _receive_move_activity ' + key_id) print('Queue: _receive_move_activity ' + key_id)
if os.path.isfile(queue_filename): if os.path.isfile(queue_filename):
@ -3647,7 +3679,7 @@ def run_inbox_queue(server,
max_hashtags, server.buy_sites, max_hashtags, server.buy_sites,
server.auto_cw_cache, server.auto_cw_cache,
onion_domain, onion_domain,
i2p_domain): i2p_domain, server.mitm_servers):
if debug: if debug:
print('Queue: Update accepted from ' + key_id) print('Queue: Update accepted from ' + key_id)
if os.path.isfile(queue_filename): if os.path.isfile(queue_filename):
@ -3777,7 +3809,8 @@ def run_inbox_queue(server,
languages_understood, mitm, languages_understood, mitm,
bold_reading, dogwhistles, bold_reading, dogwhistles,
max_hashtags, server.buy_sites, max_hashtags, server.buy_sites,
server.sites_unavailable) server.sites_unavailable,
server.mitm_servers)
fitness_performance(inbox_start_time, server.fitness, fitness_performance(inbox_start_time, server.fitness,
'INBOX', 'handle_after_initial', 'INBOX', 'handle_after_initial',
debug) debug)

View File

@ -374,7 +374,8 @@ def receive_edit_to_post(recent_posts_cache: {}, message_json: {},
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}, auto_cw_cache: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""A post was edited """A post was edited
""" """
if not has_object_dict(message_json): if not has_object_dict(message_json):
@ -515,7 +516,8 @@ def receive_edit_to_post(recent_posts_cache: {}, message_json: {},
lists_enabled, timezone, mitm, lists_enabled, timezone, mitm,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
return True return True
@ -533,7 +535,8 @@ def receive_move_activity(session, base_dir: str,
sites_unavailable: [], sites_unavailable: [],
blocked_cache: [], blocked_cache: [],
block_federated: [], block_federated: [],
system_language: str) -> bool: system_language: str,
mitm_servers: []) -> bool:
"""Receives a move activity within the POST section of HTTPServer """Receives a move activity within the POST section of HTTPServer
https://codeberg.org/fediverse/fep/src/branch/main/fep/7628/fep-7628.md https://codeberg.org/fediverse/fep/src/branch/main/fep/7628/fep-7628.md
""" """
@ -623,7 +626,8 @@ def receive_move_activity(session, base_dir: str,
onion_domain, onion_domain,
i2p_domain, i2p_domain,
sites_unavailable, sites_unavailable,
system_language) system_language,
mitm_servers)
return True return True
@ -649,7 +653,8 @@ def receive_update_activity(recent_posts_cache: {}, session, base_dir: str,
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}, auto_cw_cache: {},
onion_domain: str, onion_domain: str,
i2p_domain: str) -> bool: i2p_domain: str,
mitm_servers: []) -> bool:
"""Receives an Update activity within the POST section of HTTPServer """Receives an Update activity within the POST section of HTTPServer
""" """
if message_json['type'] != 'Update': if message_json['type'] != 'Update':
@ -695,7 +700,8 @@ def receive_update_activity(recent_posts_cache: {}, session, base_dir: str,
min_images_for_accounts, min_images_for_accounts,
max_hashtags, buy_sites, max_hashtags, buy_sites,
auto_cw_cache, auto_cw_cache,
onion_domain, i2p_domain): onion_domain, i2p_domain,
mitm_servers):
print('EDITPOST: received ' + message_json['object']['id']) print('EDITPOST: received ' + message_json['object']['id'])
return True return True
else: else:
@ -951,7 +957,8 @@ def receive_like(recent_posts_cache: {},
bold_reading: bool, dogwhistles: {}, bold_reading: bool, dogwhistles: {},
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}) -> bool: auto_cw_cache: {},
mitm_servers: []) -> bool:
"""Receives a Like activity within the POST section of HTTPServer """Receives a Like activity within the POST section of HTTPServer
""" """
if message_json['type'] != 'Like': if message_json['type'] != 'Like':
@ -1067,7 +1074,7 @@ def receive_like(recent_posts_cache: {},
lists_enabled, timezone, mitm, lists_enabled, timezone, mitm,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, buy_sites, minimize_all_images, None, buy_sites,
auto_cw_cache) auto_cw_cache, mitm_servers)
return True return True
@ -1091,7 +1098,8 @@ def receive_reaction(recent_posts_cache: {},
dogwhistles: {}, dogwhistles: {},
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}) -> bool: auto_cw_cache: {},
mitm_servers: []) -> bool:
"""Receives an emoji reaction within the POST section of HTTPServer """Receives an emoji reaction within the POST section of HTTPServer
""" """
if message_json['type'] != 'EmojiReact': if message_json['type'] != 'EmojiReact':
@ -1228,7 +1236,7 @@ def receive_reaction(recent_posts_cache: {},
lists_enabled, timezone, mitm, lists_enabled, timezone, mitm,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, buy_sites, minimize_all_images, None, buy_sites,
auto_cw_cache) auto_cw_cache, mitm_servers)
return True return True
@ -1252,7 +1260,8 @@ def receive_zot_reaction(recent_posts_cache: {},
dogwhistles: {}, dogwhistles: {},
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}) -> bool: auto_cw_cache: {},
mitm_servers: []) -> bool:
"""Receives an zot-style emoji reaction within the POST section of """Receives an zot-style emoji reaction within the POST section of
HTTPServer A zot style emoji reaction is an ordinary reply Note whose HTTPServer A zot style emoji reaction is an ordinary reply Note whose
content is exactly one emoji content is exactly one emoji
@ -1414,7 +1423,8 @@ def receive_zot_reaction(recent_posts_cache: {},
lists_enabled, timezone, mitm, lists_enabled, timezone, mitm,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
return True return True
@ -1436,7 +1446,8 @@ def receive_bookmark(recent_posts_cache: {},
dogwhistles: {}, dogwhistles: {},
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}) -> bool: auto_cw_cache: {},
mitm_servers: []) -> bool:
"""Receives a bookmark activity within the POST section of HTTPServer """Receives a bookmark activity within the POST section of HTTPServer
""" """
if not message_json.get('type'): if not message_json.get('type'):
@ -1540,7 +1551,8 @@ def receive_bookmark(recent_posts_cache: {},
lists_enabled, timezone, mitm, lists_enabled, timezone, mitm,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
return True return True
@ -1643,7 +1655,8 @@ def receive_announce(recent_posts_cache: {},
buy_sites: {}, buy_sites: {},
languages_understood: [], languages_understood: [],
auto_cw_cache: {}, auto_cw_cache: {},
block_federated: []) -> bool: block_federated: [],
mitm_servers: []) -> bool:
"""Receives an announce activity within the POST section of HTTPServer """Receives an announce activity within the POST section of HTTPServer
""" """
if message_json['type'] != 'Announce': if message_json['type'] != 'Announce':
@ -1811,7 +1824,8 @@ def receive_announce(recent_posts_cache: {},
lists_enabled, timezone, mitm, lists_enabled, timezone, mitm,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
if not announce_html: if not announce_html:
print('WARN: Unable to generate html for announce ' + print('WARN: Unable to generate html for announce ' +
str(message_json)) str(message_json))
@ -1835,7 +1849,8 @@ def receive_announce(recent_posts_cache: {},
blocked_cache, block_federated, blocked_cache, block_federated,
bold_reading, bold_reading,
show_vote_posts, show_vote_posts,
languages_understood) languages_understood,
mitm_servers)
# are annouced/boosted replies allowed? # are annouced/boosted replies allowed?
announce_denied = False announce_denied = False
if post_json_object: if post_json_object:
@ -1920,7 +1935,8 @@ def receive_announce(recent_posts_cache: {},
__version__, http_prefix, __version__, http_prefix,
domain, onion_domain, domain, onion_domain,
i2p_domain, i2p_domain,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
if pub_key: if pub_key:
if not isinstance(pub_key, dict): if not isinstance(pub_key, dict):
if debug: if debug:
@ -1964,7 +1980,8 @@ def receive_question_vote(server, base_dir: str, nickname: str, domain: str,
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, buy_sites: {},
sites_unavailable: [], sites_unavailable: [],
auto_cw_cache: {}) -> None: auto_cw_cache: {},
mitm_servers: []) -> None:
"""Updates the votes on a Question/poll """Updates the votes on a Question/poll
""" """
# if this is a reply to a question then update the votes # if this is a reply to a question then update the votes
@ -2023,7 +2040,8 @@ def receive_question_vote(server, base_dir: str, nickname: str, domain: str,
lists_enabled, timezone, mitm, lists_enabled, timezone, mitm,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
# add id to inbox index # add id to inbox index
inbox_update_index('inbox', base_dir, handle, inbox_update_index('inbox', base_dir, handle,
@ -2048,4 +2066,5 @@ def receive_question_vote(server, base_dir: str, nickname: str, domain: str,
shared_items_federated_domains, shared_items_federated_domains,
shared_item_federation_tokens, shared_item_federation_tokens,
signing_priv_key_pem, signing_priv_key_pem,
sites_unavailable, system_language) sites_unavailable, system_language,
mitm_servers)

View File

@ -175,7 +175,8 @@ def receive_undo_like(recent_posts_cache: {},
bold_reading: bool, dogwhistles: {}, bold_reading: bool, dogwhistles: {},
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}) -> bool: auto_cw_cache: {},
mitm_servers: []) -> bool:
"""Receives an undo like activity within the POST section of HTTPServer """Receives an undo like activity within the POST section of HTTPServer
""" """
if message_json['type'] != 'Undo': if message_json['type'] != 'Undo':
@ -278,7 +279,8 @@ def receive_undo_like(recent_posts_cache: {},
lists_enabled, timezone, mitm, lists_enabled, timezone, mitm,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
return True return True
@ -301,7 +303,8 @@ def receive_undo_reaction(recent_posts_cache: {},
bold_reading: bool, dogwhistles: {}, bold_reading: bool, dogwhistles: {},
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}) -> bool: auto_cw_cache: {},
mitm_servers: []) -> bool:
"""Receives an undo emoji reaction within the POST section of HTTPServer """Receives an undo emoji reaction within the POST section of HTTPServer
""" """
if message_json['type'] != 'Undo': if message_json['type'] != 'Undo':
@ -422,7 +425,8 @@ def receive_undo_reaction(recent_posts_cache: {},
lists_enabled, timezone, mitm, lists_enabled, timezone, mitm,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
return True return True
@ -444,7 +448,8 @@ def receive_undo_bookmark(recent_posts_cache: {},
dogwhistles: {}, dogwhistles: {},
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}) -> bool: auto_cw_cache: {},
mitm_servers: []) -> bool:
"""Receives an undo bookmark activity within the POST section of HTTPServer """Receives an undo bookmark activity within the POST section of HTTPServer
""" """
if not message_json.get('type'): if not message_json.get('type'):
@ -549,7 +554,8 @@ def receive_undo_bookmark(recent_posts_cache: {},
False, True, False, cw_lists, lists_enabled, False, True, False, cw_lists, lists_enabled,
timezone, mitm, bold_reading, timezone, mitm, bold_reading,
dogwhistles, minimize_all_images, None, dogwhistles, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
return True return True

26
like.py
View File

@ -82,7 +82,8 @@ def _create_like(recent_posts_cache: {},
curr_domain: str, curr_domain: str,
onion_domain: str, i2p_domain: str, onion_domain: str, i2p_domain: str,
sites_unavailable: [], sites_unavailable: [],
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Creates a like """Creates a like
actor is the person doing the liking actor is the person doing the liking
'to' might be a specific person (actor) whose post was liked 'to' might be a specific person (actor) whose post was liked
@ -155,7 +156,7 @@ def _create_like(recent_posts_cache: {},
signing_priv_key_pem, 7367374, signing_priv_key_pem, 7367374,
curr_domain, onion_domain, i2p_domain, curr_domain, onion_domain, i2p_domain,
extra_headers, sites_unavailable, extra_headers, sites_unavailable,
system_language) system_language, mitm_servers)
return new_like_json return new_like_json
@ -172,7 +173,8 @@ def like_post(recent_posts_cache: {},
signing_priv_key_pem: str, signing_priv_key_pem: str,
curr_domain: str, onion_domain: str, i2p_domain: str, curr_domain: str, onion_domain: str, i2p_domain: str,
sites_unavailable: [], sites_unavailable: [],
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Likes a given status post. This is only used by unit tests """Likes a given status post. This is only used by unit tests
""" """
like_domain = get_full_domain(like_domain, like_port) like_domain = get_full_domain(like_domain, like_port)
@ -189,7 +191,8 @@ def like_post(recent_posts_cache: {},
cached_webfingers, cached_webfingers,
debug, project_version, signing_priv_key_pem, debug, project_version, signing_priv_key_pem,
curr_domain, onion_domain, i2p_domain, curr_domain, onion_domain, i2p_domain,
sites_unavailable, system_language) sites_unavailable, system_language,
mitm_servers)
def send_like_via_server(base_dir: str, session, def send_like_via_server(base_dir: str, session,
@ -199,7 +202,8 @@ def send_like_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Creates a like via c2s """Creates a like via c2s
""" """
if not session: if not session:
@ -226,7 +230,7 @@ def send_like_via_server(base_dir: str, session,
wf_request = webfinger_handle(session, handle, http_prefix, wf_request = webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
from_domain, project_version, debug, False, from_domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: like webfinger failed for ' + handle) print('DEBUG: like webfinger failed for ' + handle)
@ -248,7 +252,7 @@ def send_like_via_server(base_dir: str, session,
project_version, http_prefix, project_version, http_prefix,
from_nickname, from_domain, from_nickname, from_domain,
post_to_box, 72873, post_to_box, 72873,
system_language) system_language, mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:
@ -287,7 +291,8 @@ def send_undo_like_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Undo a like via c2s """Undo a like via c2s
""" """
if not session: if not session:
@ -318,7 +323,7 @@ def send_undo_like_via_server(base_dir: str, session,
wf_request = webfinger_handle(session, handle, http_prefix, wf_request = webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
from_domain, project_version, debug, False, from_domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: unlike webfinger failed for ' + handle) print('DEBUG: unlike webfinger failed for ' + handle)
@ -340,7 +345,8 @@ def send_undo_like_via_server(base_dir: str, session,
person_cache, project_version, person_cache, project_version,
http_prefix, from_nickname, http_prefix, from_nickname,
from_domain, post_to_box, from_domain, post_to_box,
72625, system_language) 72625, system_language,
mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:

View File

@ -25,7 +25,7 @@ from threads import begin_thread
from session import create_session from session import create_session
def manual_deny_follow_request(session, session_onion, session_i2p, def manual_deny_follow_request2(session, session_onion, session_i2p,
onion_domain: str, i2p_domain: str, onion_domain: str, i2p_domain: str,
base_dir: str, http_prefix: str, base_dir: str, http_prefix: str,
nickname: str, domain: str, port: int, nickname: str, domain: str, port: int,
@ -38,7 +38,8 @@ def manual_deny_follow_request(session, session_onion, session_i2p,
signing_priv_key_pem: str, signing_priv_key_pem: str,
followers_sync_cache: {}, followers_sync_cache: {},
sites_unavailable: [], sites_unavailable: [],
system_language: str) -> None: system_language: str,
mitm_servers: []) -> None:
"""Manually deny a follow request """Manually deny a follow request
""" """
accounts_dir = acct_dir(base_dir, nickname, domain) accounts_dir = acct_dir(base_dir, nickname, domain)
@ -61,7 +62,7 @@ def manual_deny_follow_request(session, session_onion, session_i2p,
encoding='utf-8') as fp_rejects: encoding='utf-8') as fp_rejects:
fp_rejects.write(deny_handle + '\n') fp_rejects.write(deny_handle + '\n')
except OSError: except OSError:
print('EX: manual_deny_follow_request unable to append ' + print('EX: manual_deny_follow_request2 unable to append ' +
rejected_follows_filename) rejected_follows_filename)
deny_nickname = deny_handle.split('@')[0] deny_nickname = deny_handle.split('@')[0]
@ -82,7 +83,7 @@ def manual_deny_follow_request(session, session_onion, session_i2p,
signing_priv_key_pem, signing_priv_key_pem,
followers_sync_cache, followers_sync_cache,
sites_unavailable, sites_unavailable,
system_language) system_language, mitm_servers)
print('Follow request from ' + deny_handle + ' was denied.') print('Follow request from ' + deny_handle + ' was denied.')
@ -100,13 +101,14 @@ def manual_deny_follow_request_thread(session, session_onion, session_i2p,
signing_priv_key_pem: str, signing_priv_key_pem: str,
followers_sync_cache: {}, followers_sync_cache: {},
sites_unavailable: [], sites_unavailable: [],
system_language: str) -> None: system_language: str,
mitm_servers: []) -> None:
"""Manually deny a follow request, within a thread so that the """Manually deny a follow request, within a thread so that the
user interface doesn't lag user interface doesn't lag
""" """
print('THREAD: manual_deny_follow_request') print('THREAD: manual_deny_follow_request2')
thr = \ thr = \
thread_with_trace(target=manual_deny_follow_request, thread_with_trace(target=manual_deny_follow_request2,
args=(session, session_onion, session_i2p, args=(session, session_onion, session_i2p,
onion_domain, i2p_domain, onion_domain, i2p_domain,
base_dir, http_prefix, base_dir, http_prefix,
@ -120,7 +122,8 @@ def manual_deny_follow_request_thread(session, session_onion, session_i2p,
signing_priv_key_pem, signing_priv_key_pem,
followers_sync_cache, followers_sync_cache,
sites_unavailable, sites_unavailable,
system_language), daemon=True) system_language,
mitm_servers), daemon=True)
begin_thread(thr, 'manual_deny_follow_request_thread') begin_thread(thr, 'manual_deny_follow_request_thread')
send_threads.append(thr) send_threads.append(thr)
@ -164,7 +167,8 @@ def manual_approve_follow_request(session, session_onion, session_i2p,
proxy_type: str, proxy_type: str,
followers_sync_cache: {}, followers_sync_cache: {},
sites_unavailable: [], sites_unavailable: [],
system_language: str) -> None: system_language: str,
mitm_servers: []) -> None:
"""Manually approve a follow request """Manually approve a follow request
""" """
handle = nickname + '@' + domain handle = nickname + '@' + domain
@ -315,7 +319,8 @@ def manual_approve_follow_request(session, session_onion, session_i2p,
i2p_domain, i2p_domain,
followers_sync_cache, followers_sync_cache,
sites_unavailable, sites_unavailable,
system_language) system_language,
mitm_servers)
update_approved_followers = True update_approved_followers = True
except OSError as exc: except OSError as exc:
print('EX: manual_approve_follow_request unable to write ' + print('EX: manual_approve_follow_request unable to write ' +
@ -390,7 +395,8 @@ def manual_approve_follow_request_thread(session, session_onion, session_i2p,
proxy_type: str, proxy_type: str,
followers_sync_cache: {}, followers_sync_cache: {},
sites_unavailable: [], sites_unavailable: [],
system_language: str) -> None: system_language: str,
mitm_servers: []) -> None:
"""Manually approve a follow request, in a thread so as not to cause """Manually approve a follow request, in a thread so as not to cause
the UI to lag the UI to lag
""" """
@ -411,6 +417,7 @@ def manual_approve_follow_request_thread(session, session_onion, session_i2p,
proxy_type, proxy_type,
followers_sync_cache, followers_sync_cache,
sites_unavailable, sites_unavailable,
system_language), daemon=True) system_language,
mitm_servers), daemon=True)
begin_thread(thr, 'manual_approve_follow_request_thread') begin_thread(thr, 'manual_approve_follow_request_thread')
send_threads.append(thr) send_threads.append(thr)

View File

@ -28,7 +28,8 @@ def _move_following_handles_for_account(base_dir: str,
cached_webfingers: {}, cached_webfingers: {},
debug: bool, debug: bool,
signing_priv_key_pem: str, signing_priv_key_pem: str,
block_federated: []) -> int: block_federated: [],
mitm_servers: []) -> int:
"""Goes through all follows for an account and updates any that have moved """Goes through all follows for an account and updates any that have moved
""" """
ctr = 0 ctr = 0
@ -46,7 +47,7 @@ def _move_following_handles_for_account(base_dir: str,
follow_handle, session, follow_handle, session,
http_prefix, cached_webfingers, http_prefix, cached_webfingers,
debug, signing_priv_key_pem, debug, signing_priv_key_pem,
block_federated) block_federated, mitm_servers)
except OSError: except OSError:
print('EX: _move_following_handles_for_account unable to read ' + print('EX: _move_following_handles_for_account unable to read ' +
following_filename) following_filename)
@ -57,7 +58,8 @@ def _update_moved_handle(base_dir: str, nickname: str, domain: str,
handle: str, session, handle: str, session,
http_prefix: str, cached_webfingers: {}, http_prefix: str, cached_webfingers: {},
debug: bool, signing_priv_key_pem: str, debug: bool, signing_priv_key_pem: str,
block_federated: []) -> int: block_federated: [],
mitm_servers: []) -> int:
"""Check if an account has moved, and if so then alter following.txt """Check if an account has moved, and if so then alter following.txt
for each account. for each account.
Returns 1 if moved, 0 otherwise Returns 1 if moved, 0 otherwise
@ -72,7 +74,8 @@ def _update_moved_handle(base_dir: str, nickname: str, domain: str,
wf_request = webfinger_handle(session, handle, wf_request = webfinger_handle(session, handle,
http_prefix, cached_webfingers, http_prefix, cached_webfingers,
domain, __version__, debug, False, domain, __version__, debug, False,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
if not wf_request: if not wf_request:
print('updateMovedHandle unable to webfinger ' + handle) print('updateMovedHandle unable to webfinger ' + handle)
return ctr return ctr
@ -101,10 +104,11 @@ def _update_moved_handle(base_dir: str, nickname: str, domain: str,
ipns = False ipns = False
if http_prefix == 'ipns': if http_prefix == 'ipns':
ipns = True ipns = True
mitm_servers = []
person_json = \ person_json = \
get_actor_json(domain, person_url, http_prefix, gnunet, ipfs, ipns, get_actor_json(domain, person_url, http_prefix, gnunet, ipfs, ipns,
debug, False, debug, False,
signing_priv_key_pem, None) signing_priv_key_pem, None, mitm_servers)
if not person_json: if not person_json:
return ctr return ctr
if not person_json.get('movedTo'): if not person_json.get('movedTo'):
@ -221,7 +225,8 @@ def _update_moved_handle(base_dir: str, nickname: str, domain: str,
def migrate_accounts(base_dir: str, session, def migrate_accounts(base_dir: str, session,
http_prefix: str, cached_webfingers: {}, http_prefix: str, cached_webfingers: {},
debug: bool, signing_priv_key_pem: str, debug: bool, signing_priv_key_pem: str,
block_federated: []) -> int: block_federated: [],
mitm_servers: []) -> int:
"""If followed accounts change then this modifies the """If followed accounts change then this modifies the
following lists for each account accordingly. following lists for each account accordingly.
Returns the number of accounts migrated Returns the number of accounts migrated
@ -240,6 +245,7 @@ def migrate_accounts(base_dir: str, session,
session, http_prefix, session, http_prefix,
cached_webfingers, debug, cached_webfingers, debug,
signing_priv_key_pem, signing_priv_key_pem,
block_federated) block_federated,
mitm_servers)
break break
return ctr return ctr

View File

@ -299,7 +299,8 @@ def post_message_to_outbox(session, translate: {},
books_cache: {}, books_cache: {},
max_cached_readers: int, max_cached_readers: int,
auto_cw_cache: {}, auto_cw_cache: {},
block_federated: []) -> bool: block_federated: [],
mitm_servers: []) -> bool:
"""post is received by the outbox """post is received by the outbox
Client to server message post Client to server message post
https://www.w3.org/TR/activitypub/#client-to-server-outbox-delivery https://www.w3.org/TR/activitypub/#client-to-server-outbox-delivery
@ -618,7 +619,8 @@ def post_message_to_outbox(session, translate: {},
signing_priv_key_pem, signing_priv_key_pem,
bold_reading, bold_reading,
show_vote_posts, show_vote_posts,
languages_understood): languages_understood,
mitm_servers):
inbox_update_index('tlmedia', base_dir, inbox_update_index('tlmedia', base_dir,
post_to_nickname + '@' + domain, post_to_nickname + '@' + domain,
saved_filename, debug) saved_filename, debug)
@ -679,7 +681,8 @@ def post_message_to_outbox(session, translate: {},
timezone, mitm, timezone, mitm,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
if is_edited_post: if is_edited_post:
message_json['type'] = 'Update' message_json['type'] = 'Update'
@ -728,7 +731,8 @@ def post_message_to_outbox(session, translate: {},
shared_item_federation_tokens, shared_item_federation_tokens,
signing_priv_key_pem, signing_priv_key_pem,
sites_unavailable, sites_unavailable,
system_language) system_language,
mitm_servers)
followers_threads.append(followers_thread) followers_threads.append(followers_thread)
if debug: if debug:
@ -864,6 +868,7 @@ def post_message_to_outbox(session, translate: {},
proxy_type, proxy_type,
server.followers_sync_cache, server.followers_sync_cache,
server.sites_unavailable, server.sites_unavailable,
server.system_language) server.system_language,
server.mitm_servers)
followers_threads.append(named_addresses_thread) followers_threads.append(named_addresses_thread)
return True return True

View File

@ -1758,7 +1758,7 @@ def get_actor_json(host_domain: str, handle: str, http: bool, gnunet: bool,
ipfs: bool, ipns: bool, ipfs: bool, ipns: bool,
debug: bool, quiet: bool, debug: bool, quiet: bool,
signing_priv_key_pem: str, signing_priv_key_pem: str,
existing_session) -> ({}, {}): existing_session, mitm_servers: []) -> ({}, {}):
"""Returns the actor json """Returns the actor json
""" """
if debug: if debug:
@ -1887,7 +1887,8 @@ def get_actor_json(host_domain: str, handle: str, http: bool, gnunet: bool,
wf_request = webfinger_handle(session, handle, wf_request = webfinger_handle(session, handle,
http_prefix, cached_webfingers, http_prefix, cached_webfingers,
host_domain, __version__, debug, host_domain, __version__, debug,
group_account, signing_priv_key_pem) group_account, signing_priv_key_pem,
mitm_servers)
if not wf_request: if not wf_request:
if not quiet: if not quiet:
print('get_actor_json Unable to webfinger ' + handle + print('get_actor_json Unable to webfinger ' + handle +
@ -1949,8 +1950,8 @@ def get_actor_json(host_domain: str, handle: str, http: bool, gnunet: bool,
} }
person_json = \ person_json = \
get_json(signing_priv_key_pem, session, person_url, as_header, get_json(signing_priv_key_pem, session, person_url, as_header,
None, debug, __version__, http_prefix, host_domain, None, debug, mitm_servers, __version__, http_prefix,
20, quiet) host_domain, 20, quiet)
if get_json_valid(person_json): if get_json_valid(person_json):
if not quiet: if not quiet:
pprint(person_json) pprint(person_json)
@ -2018,7 +2019,8 @@ def valid_sending_actor(session, base_dir: str,
post_json_object: {}, post_json_object: {},
signing_priv_key_pem: str, signing_priv_key_pem: str,
debug: bool, unit_test: bool, debug: bool, unit_test: bool,
system_language: str) -> bool: system_language: str,
mitm_servers: []) -> bool:
"""When a post arrives in the inbox this is used to check that """When a post arrives in the inbox this is used to check that
the sending actor is valid the sending actor is valid
""" """
@ -2049,7 +2051,8 @@ def valid_sending_actor(session, base_dir: str,
actor_json, _ = get_actor_json(domain, sending_actor, actor_json, _ = get_actor_json(domain, sending_actor,
True, gnunet, ipfs, ipns, True, gnunet, ipfs, ipns,
debug, True, debug, True,
signing_priv_key_pem, session) signing_priv_key_pem, session,
mitm_servers)
if not actor_json: if not actor_json:
# if the actor couldn't be obtained then proceed anyway # if the actor couldn't be obtained then proceed anyway
return True return True

30
pgp.py
View File

@ -442,21 +442,24 @@ def has_local_pg_pkey() -> bool:
return False return False
def pgp_encrypt_to_actor(domain: str, content: str, toHandle: str, def pgp_encrypt_to_actor(domain: str, content: str, to_handle: str,
signing_priv_key_pem: str) -> str: signing_priv_key_pem: str,
mitm_servers: []) -> str:
"""PGP encrypt a message to the given actor or handle """PGP encrypt a message to the given actor or handle
""" """
# get the actor and extract the pgp public key from it # get the actor and extract the pgp public key from it
recipient_pub_key = \ recipient_pub_key = \
_get_pgp_public_key_from_actor(signing_priv_key_pem, domain, toHandle) _get_pgp_public_key_from_actor(signing_priv_key_pem, domain, to_handle,
mitm_servers)
if not recipient_pub_key: if not recipient_pub_key:
return None return None
# encrypt using the recipient public key # encrypt using the recipient public key
return _pgp_encrypt(content, recipient_pub_key) return _pgp_encrypt(content, recipient_pub_key)
def pgp_decrypt(domain: str, content: str, fromHandle: str, def pgp_decrypt(domain: str, content: str, from_handle: str,
signing_priv_key_pem: str) -> str: signing_priv_key_pem: str,
mitm_servers: []) -> str:
""" Encrypt using your default pgp key to the given recipient """ Encrypt using your default pgp key to the given recipient
fromHandle can be a handle or actor url fromHandle can be a handle or actor url
""" """
@ -469,7 +472,8 @@ def pgp_decrypt(domain: str, content: str, fromHandle: str,
else: else:
pub_key = \ pub_key = \
_get_pgp_public_key_from_actor(signing_priv_key_pem, _get_pgp_public_key_from_actor(signing_priv_key_pem,
domain, content, fromHandle) domain, content, from_handle,
mitm_servers)
if pub_key: if pub_key:
_pgp_import_pub_key(pub_key) _pgp_import_pub_key(pub_key)
@ -522,6 +526,7 @@ def pgp_local_public_key() -> str:
def _get_pgp_public_key_from_actor(signing_priv_key_pem: str, def _get_pgp_public_key_from_actor(signing_priv_key_pem: str,
domain: str, handle: str, domain: str, handle: str,
mitm_servers: [],
actor_json: {} = None) -> str: actor_json: {} = None) -> str:
"""Searches tags on the actor to see if there is any PGP """Searches tags on the actor to see if there is any PGP
public key specified public key specified
@ -529,7 +534,8 @@ def _get_pgp_public_key_from_actor(signing_priv_key_pem: str,
if not actor_json: if not actor_json:
actor_json, _ = \ actor_json, _ = \
get_actor_json(domain, handle, False, False, False, False, get_actor_json(domain, handle, False, False, False, False,
False, True, signing_priv_key_pem, None) False, True, signing_priv_key_pem, None,
mitm_servers)
if not actor_json: if not actor_json:
return None return None
if not actor_json.get('attachment'): if not actor_json.get('attachment'):
@ -557,7 +563,8 @@ def pgp_public_key_upload(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, test: str, debug: bool, test: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
if debug: if debug:
print('pgp_public_key_upload') print('pgp_public_key_upload')
@ -590,7 +597,8 @@ def pgp_public_key_upload(base_dir: str, session,
actor_json, _ = \ actor_json, _ = \
get_actor_json(domain_full, handle, False, False, False, False, get_actor_json(domain_full, handle, False, False, False, False,
debug, True, signing_priv_key_pem, session) debug, True, signing_priv_key_pem, session,
mitm_servers)
if not actor_json: if not actor_json:
if debug: if debug:
print('No actor returned for ' + handle) print('No actor returned for ' + handle)
@ -661,7 +669,7 @@ def pgp_public_key_upload(base_dir: str, session,
wf_request = \ wf_request = \
webfinger_handle(session, handle, http_prefix, cached_webfingers, webfinger_handle(session, handle, http_prefix, cached_webfingers,
domain, __version__, debug, False, domain, __version__, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: pgp actor update webfinger failed for ' + print('DEBUG: pgp actor update webfinger failed for ' +
@ -683,7 +691,7 @@ def pgp_public_key_upload(base_dir: str, session,
person_cache, person_cache,
__version__, http_prefix, nickname, __version__, http_prefix, nickname,
domain, post_to_box, 35725, domain, post_to_box, 35725,
system_language) system_language, mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:

204
posts.py
View File

@ -261,7 +261,8 @@ def get_user_url(wf_request: {}, source_id: int, debug: bool) -> str:
def parse_user_feed(signing_priv_key_pem: str, def parse_user_feed(signing_priv_key_pem: str,
session, feed_url: str, as_header: {}, session, feed_url: str, as_header: {},
project_version: str, http_prefix: str, project_version: str, http_prefix: str,
origin_domain: str, debug: bool, depth: int) -> []: origin_domain: str, debug: bool, depth: int,
mitm_servers: []) -> []:
"""Returns a feed of posts for an account url """Returns a feed of posts for an account url
""" """
if depth > 10: if depth > 10:
@ -277,7 +278,8 @@ def parse_user_feed(signing_priv_key_pem: str,
feed_json = \ feed_json = \
get_json(signing_priv_key_pem, session, feed_url, as_header, None, get_json(signing_priv_key_pem, session, feed_url, as_header, None,
debug, project_version, http_prefix, origin_domain) debug, mitm_servers, project_version, http_prefix,
origin_domain)
if not get_json_valid(feed_json): if not get_json_valid(feed_json):
profile_str = 'https://www.w3.org/ns/activitystreams' profile_str = 'https://www.w3.org/ns/activitystreams'
accept_str = 'application/ld+json; profile="' + profile_str + '"' accept_str = 'application/ld+json; profile="' + profile_str + '"'
@ -286,8 +288,8 @@ def parse_user_feed(signing_priv_key_pem: str,
'Accept': accept_str 'Accept': accept_str
} }
feed_json = get_json(signing_priv_key_pem, session, feed_url, feed_json = get_json(signing_priv_key_pem, session, feed_url,
as_header, None, debug, project_version, as_header, None, debug, mitm_servers,
http_prefix, origin_domain) project_version, http_prefix, origin_domain)
if not get_json_valid(feed_json): if not get_json_valid(feed_json):
if debug: if debug:
print('No user feed was returned') print('No user feed was returned')
@ -318,7 +320,8 @@ def parse_user_feed(signing_priv_key_pem: str,
parse_user_feed(signing_priv_key_pem, parse_user_feed(signing_priv_key_pem,
session, next_url, as_header, session, next_url, as_header,
project_version, http_prefix, project_version, http_prefix,
origin_domain, debug, depth + 1) origin_domain, debug, depth + 1,
mitm_servers)
if user_feed: if user_feed:
return user_feed return user_feed
elif isinstance(next_url, dict): elif isinstance(next_url, dict):
@ -336,7 +339,8 @@ def _get_person_box_actor(session, base_dir: str, actor: str,
http_prefix: str, origin_domain: str, http_prefix: str, origin_domain: str,
person_cache: {}, person_cache: {},
signing_priv_key_pem: str, signing_priv_key_pem: str,
source_id: int) -> {}: source_id: int,
mitm_servers: []) -> {}:
"""Returns the actor json for the given actor url """Returns the actor json for the given actor url
""" """
person_json = \ person_json = \
@ -350,7 +354,8 @@ def _get_person_box_actor(session, base_dir: str, actor: str,
} }
person_json = \ person_json = \
get_json(signing_priv_key_pem, session, actor, as_header, None, get_json(signing_priv_key_pem, session, actor, as_header, None,
debug, project_version, http_prefix, origin_domain) debug, mitm_servers, project_version, http_prefix,
origin_domain)
if get_json_valid(person_json): if get_json_valid(person_json):
return person_json return person_json
as_header = { as_header = {
@ -358,7 +363,8 @@ def _get_person_box_actor(session, base_dir: str, actor: str,
} }
person_json = \ person_json = \
get_json(signing_priv_key_pem, session, actor, as_header, None, get_json(signing_priv_key_pem, session, actor, as_header, None,
debug, project_version, http_prefix, origin_domain) debug, mitm_servers, project_version, http_prefix,
origin_domain)
if get_json_valid(person_json): if get_json_valid(person_json):
return person_json return person_json
print('Unable to get actor for ' + actor + ' ' + str(source_id)) print('Unable to get actor for ' + actor + ' ' + str(source_id))
@ -372,7 +378,8 @@ def get_person_box(signing_priv_key_pem: str, origin_domain: str,
project_version: str, http_prefix: str, project_version: str, http_prefix: str,
nickname: str, domain: str, nickname: str, domain: str,
box_name: str, source_id: int, box_name: str, source_id: int,
system_language: str) -> (str, str, str, str, str, system_language: str,
mitm_servers: []) -> (str, str, str, str, str,
str, str, bool): str, str, bool):
debug = False debug = False
profile_str = 'https://www.w3.org/ns/activitystreams' profile_str = 'https://www.w3.org/ns/activitystreams'
@ -408,7 +415,7 @@ def get_person_box(signing_priv_key_pem: str, origin_domain: str,
debug, project_version, debug, project_version,
http_prefix, origin_domain, http_prefix, origin_domain,
person_cache, signing_priv_key_pem, person_cache, signing_priv_key_pem,
source_id) source_id, mitm_servers)
if not person_json: if not person_json:
return None, None, None, None, None, None, None, None return None, None, None, None, None, None, None, None
@ -597,7 +604,8 @@ def _get_posts(session, outbox_url: str, max_posts: int,
simple: bool, debug: bool, simple: bool, debug: bool,
project_version: str, http_prefix: str, project_version: str, http_prefix: str,
origin_domain: str, system_language: str, origin_domain: str, system_language: str,
signing_priv_key_pem: str) -> {}: signing_priv_key_pem: str,
mitm_servers: []) -> {}:
"""Gets public posts from an outbox """Gets public posts from an outbox
""" """
if debug: if debug:
@ -627,7 +635,8 @@ def _get_posts(session, outbox_url: str, max_posts: int,
user_feed = parse_user_feed(signing_priv_key_pem, user_feed = parse_user_feed(signing_priv_key_pem,
session, outbox_url, as_header, session, outbox_url, as_header,
project_version, http_prefix, project_version, http_prefix,
origin_domain, debug, 0) origin_domain, debug, 0,
mitm_servers)
if user_feed: if user_feed:
for item in user_feed: for item in user_feed:
result.append(item) result.append(item)
@ -642,7 +651,8 @@ def _get_posts(session, outbox_url: str, max_posts: int,
user_feed = parse_user_feed(signing_priv_key_pem, user_feed = parse_user_feed(signing_priv_key_pem,
session, outbox_url, as_header, session, outbox_url, as_header,
project_version, http_prefix, project_version, http_prefix,
origin_domain, debug, 0) origin_domain, debug, 0,
mitm_servers)
if not user_feed: if not user_feed:
return person_posts return person_posts
@ -668,8 +678,8 @@ def _get_posts(session, outbox_url: str, max_posts: int,
} }
this_item = \ this_item = \
get_json(signing_priv_key_pem, session, this_item, get_json(signing_priv_key_pem, session, this_item,
as_header2, None, debug, __version__, as_header2, None, debug, mitm_servers,
http_prefix, origin_domain) __version__, http_prefix, origin_domain)
if not get_json_valid(this_item): if not get_json_valid(this_item):
continue continue
@ -834,7 +844,8 @@ def _update_word_frequency(content: str, word_frequency: {}) -> None:
def get_post_domains(session, outbox_url: str, max_posts: int, debug: bool, def get_post_domains(session, outbox_url: str, max_posts: int, debug: bool,
project_version: str, http_prefix: str, domain: str, project_version: str, http_prefix: str, domain: str,
word_frequency: {}, domain_list: [], word_frequency: {}, domain_list: [],
system_language: str, signing_priv_key_pem: str) -> []: system_language: str, signing_priv_key_pem: str,
mitm_servers: []) -> []:
"""Returns a list of domains referenced within public posts """Returns a list of domains referenced within public posts
""" """
if not outbox_url: if not outbox_url:
@ -860,7 +871,7 @@ def get_post_domains(session, outbox_url: str, max_posts: int, debug: bool,
user_feed = parse_user_feed(signing_priv_key_pem, user_feed = parse_user_feed(signing_priv_key_pem,
session, outbox_url, as_header, session, outbox_url, as_header,
project_version, http_prefix, domain, project_version, http_prefix, domain,
debug, 0) debug, 0, mitm_servers)
if not user_feed: if not user_feed:
return post_domains return post_domains
@ -906,7 +917,8 @@ def _get_posts_for_blocked_domains(base_dir: str,
debug: bool, debug: bool,
project_version: str, http_prefix: str, project_version: str, http_prefix: str,
domain: str, domain: str,
signing_priv_key_pem: str) -> {}: signing_priv_key_pem: str,
mitm_servers: []) -> {}:
"""Returns a dictionary of posts for blocked domains """Returns a dictionary of posts for blocked domains
""" """
if not outbox_url: if not outbox_url:
@ -932,7 +944,7 @@ def _get_posts_for_blocked_domains(base_dir: str,
user_feed = parse_user_feed(signing_priv_key_pem, user_feed = parse_user_feed(signing_priv_key_pem,
session, outbox_url, as_header, session, outbox_url, as_header,
project_version, http_prefix, domain, project_version, http_prefix, domain,
debug, 0) debug, 0, mitm_servers)
if not user_feed: if not user_feed:
return blocked_posts return blocked_posts
@ -3090,7 +3102,8 @@ def send_post(signing_priv_key_pem: str, project_version: str,
auto_cw_cache: {}, auto_cw_cache: {},
debug: bool, in_reply_to: str, debug: bool, in_reply_to: str,
in_reply_to_atom_uri: str, subject: str, in_reply_to_atom_uri: str, subject: str,
searchable_by: []) -> int: searchable_by: [],
mitm_servers: []) -> int:
"""Post to another inbox. Used by unit tests. """Post to another inbox. Used by unit tests.
""" """
with_digest = True with_digest = True
@ -3109,7 +3122,7 @@ def send_post(signing_priv_key_pem: str, project_version: str,
wf_request = webfinger_handle(session, handle, http_prefix, wf_request = webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
domain, project_version, debug, False, domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
return 1 return 1
if not isinstance(wf_request, dict): if not isinstance(wf_request, dict):
@ -3133,7 +3146,8 @@ def send_post(signing_priv_key_pem: str, project_version: str,
person_cache, person_cache,
project_version, http_prefix, project_version, http_prefix,
nickname, domain, post_to_box, nickname, domain, post_to_box,
72533, system_language) 72533, system_language,
mitm_servers)
if not inbox_url: if not inbox_url:
return 3 return 3
@ -3299,7 +3313,8 @@ def send_post_via_server(signing_priv_key_pem: str, project_version: str,
debug: bool, in_reply_to: str, debug: bool, in_reply_to: str,
in_reply_to_atom_uri: str, in_reply_to_atom_uri: str,
conversation_id: str, convthread_id: str, conversation_id: str, convthread_id: str,
subject: str, searchable_by: []) -> int: subject: str, searchable_by: [],
mitm_servers: []) -> int:
"""Send a post via a proxy (c2s) """Send a post via a proxy (c2s)
""" """
if not session: if not session:
@ -3314,7 +3329,7 @@ def send_post_via_server(signing_priv_key_pem: str, project_version: str,
wf_request = \ wf_request = \
webfinger_handle(session, handle, http_prefix, cached_webfingers, webfinger_handle(session, handle, http_prefix, cached_webfingers,
from_domain_full, project_version, debug, False, from_domain_full, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: post webfinger failed for ' + handle) print('DEBUG: post webfinger failed for ' + handle)
@ -3338,7 +3353,8 @@ def send_post_via_server(signing_priv_key_pem: str, project_version: str,
project_version, http_prefix, project_version, http_prefix,
from_nickname, from_nickname,
from_domain_full, post_to_box, from_domain_full, post_to_box,
82796, system_language) 82796, system_language,
mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:
print('DEBUG: post no ' + post_to_box + print('DEBUG: post no ' + post_to_box +
@ -3519,7 +3535,8 @@ def send_signed_json(post_json_object: {}, session, base_dir: str,
source_id: int, curr_domain: str, source_id: int, curr_domain: str,
onion_domain: str, i2p_domain: str, onion_domain: str, i2p_domain: str,
extra_headers: {}, sites_unavailable: [], extra_headers: {}, sites_unavailable: [],
system_language: str) -> int: system_language: str,
mitm_servers: []) -> int:
"""Sends a signed json object to an inbox/outbox """Sends a signed json object to an inbox/outbox
""" """
if debug: if debug:
@ -3565,7 +3582,8 @@ def send_signed_json(post_json_object: {}, session, base_dir: str,
wf_request = webfinger_handle(session, handle, http_prefix, wf_request = webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
ua_domain, project_version, debug, ua_domain, project_version, debug,
group_account, signing_priv_key_pem) group_account, signing_priv_key_pem,
mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: send_signed_json webfinger for ' + print('DEBUG: send_signed_json webfinger for ' +
@ -3595,7 +3613,8 @@ def send_signed_json(post_json_object: {}, session, base_dir: str,
person_cache, person_cache,
project_version, http_prefix, project_version, http_prefix,
nickname, domain, post_to_box, nickname, domain, post_to_box,
source_id, system_language) source_id, system_language,
mitm_servers)
print("send_signed_json inbox_url: " + str(inbox_url)) print("send_signed_json inbox_url: " + str(inbox_url))
print("send_signed_json to_person_id: " + str(to_person_id)) print("send_signed_json to_person_id: " + str(to_person_id))
@ -3841,7 +3860,8 @@ def _send_to_named_addresses(server, session, session_onion, session_i2p,
proxy_type: str, proxy_type: str,
followers_sync_cache: {}, followers_sync_cache: {},
sites_unavailable: [], sites_unavailable: [],
system_language: str) -> None: system_language: str,
mitm_servers: []) -> None:
"""sends a post to the specific named addresses in to/cc """sends a post to the specific named addresses in to/cc
""" """
if not session: if not session:
@ -4039,7 +4059,7 @@ def _send_to_named_addresses(server, session, session_onion, session_i2p,
signing_priv_key_pem, 34436782, signing_priv_key_pem, 34436782,
domain, onion_domain, i2p_domain, domain, onion_domain, i2p_domain,
extra_headers, sites_unavailable, extra_headers, sites_unavailable,
system_language) system_language, mitm_servers)
def send_to_named_addresses_thread(server, session, session_onion, session_i2p, def send_to_named_addresses_thread(server, session, session_onion, session_i2p,
@ -4057,7 +4077,8 @@ def send_to_named_addresses_thread(server, session, session_onion, session_i2p,
proxy_type: str, proxy_type: str,
followers_sync_cache: {}, followers_sync_cache: {},
sites_unavailable: [], sites_unavailable: [],
system_language: str): system_language: str,
mitm_servers: []):
"""Returns a thread used to send a post to named addresses """Returns a thread used to send a post to named addresses
""" """
print('THREAD: _send_to_named_addresses') print('THREAD: _send_to_named_addresses')
@ -4077,7 +4098,8 @@ def send_to_named_addresses_thread(server, session, session_onion, session_i2p,
proxy_type, proxy_type,
followers_sync_cache, followers_sync_cache,
sites_unavailable, sites_unavailable,
system_language), daemon=True) system_language,
mitm_servers), daemon=True)
if not begin_thread(send_thread, 'send_to_named_addresses_thread'): if not begin_thread(send_thread, 'send_to_named_addresses_thread'):
print('WARN: socket error while starting ' + print('WARN: socket error while starting ' +
'thread to send to named addresses.') 'thread to send to named addresses.')
@ -4087,7 +4109,7 @@ def send_to_named_addresses_thread(server, session, session_onion, session_i2p,
def _has_shared_inbox(session, http_prefix: str, domain: str, def _has_shared_inbox(session, http_prefix: str, domain: str,
debug: bool, signing_priv_key_pem: str, debug: bool, signing_priv_key_pem: str,
ua_domain: str) -> bool: ua_domain: str, mitm_servers: []) -> bool:
"""Returns true if the given domain has a shared inbox """Returns true if the given domain has a shared inbox
This tries the new and the old way of webfingering the shared inbox This tries the new and the old way of webfingering the shared inbox
""" """
@ -4098,7 +4120,7 @@ def _has_shared_inbox(session, http_prefix: str, domain: str,
for handle in try_handles: for handle in try_handles:
wf_request = webfinger_handle(session, handle, http_prefix, {}, wf_request = webfinger_handle(session, handle, http_prefix, {},
ua_domain, __version__, debug, False, ua_domain, __version__, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if wf_request: if wf_request:
if isinstance(wf_request, dict): if isinstance(wf_request, dict):
if not wf_request.get('errors'): if not wf_request.get('errors'):
@ -4131,7 +4153,8 @@ def send_to_followers(server, session, session_onion, session_i2p,
shared_item_federation_tokens: {}, shared_item_federation_tokens: {},
signing_priv_key_pem: str, signing_priv_key_pem: str,
sites_unavailable: [], sites_unavailable: [],
system_language: str) -> None: system_language: str,
mitm_servers: []) -> None:
"""sends a post to the followers of the given nickname """sends a post to the followers of the given nickname
""" """
print('send_to_followers') print('send_to_followers')
@ -4223,7 +4246,8 @@ def send_to_followers(server, session, session_onion, session_i2p,
with_shared_inbox = \ with_shared_inbox = \
_has_shared_inbox(curr_session, curr_http_prefix, follower_domain, _has_shared_inbox(curr_session, curr_http_prefix, follower_domain,
debug, signing_priv_key_pem, ua_domain) debug, signing_priv_key_pem, ua_domain,
mitm_servers)
if debug: if debug:
if with_shared_inbox: if with_shared_inbox:
print(follower_domain + ' has shared inbox') print(follower_domain + ' has shared inbox')
@ -4304,7 +4328,7 @@ def send_to_followers(server, session, session_onion, session_i2p,
signing_priv_key_pem, 639342, signing_priv_key_pem, 639342,
domain, onion_domain, i2p_domain, domain, onion_domain, i2p_domain,
extra_headers, sites_unavailable, extra_headers, sites_unavailable,
system_language) system_language, mitm_servers)
else: else:
# randomize the order of handles, so that we are not # randomize the order of handles, so that we are not
# favoring any particular account in terms of its delivery time # favoring any particular account in terms of its delivery time
@ -4339,7 +4363,7 @@ def send_to_followers(server, session, session_onion, session_i2p,
signing_priv_key_pem, 634219, signing_priv_key_pem, 634219,
domain, onion_domain, i2p_domain, domain, onion_domain, i2p_domain,
extra_headers, sites_unavailable, extra_headers, sites_unavailable,
system_language) system_language, mitm_servers)
time.sleep(4) time.sleep(4)
@ -4364,7 +4388,8 @@ def send_to_followers_thread(server, session, session_onion, session_i2p,
shared_item_federation_tokens: {}, shared_item_federation_tokens: {},
signing_priv_key_pem: str, signing_priv_key_pem: str,
sites_unavailable: [], sites_unavailable: [],
system_language: str): system_language: str,
mitm_servers: []):
"""Returns a thread used to send a post to followers """Returns a thread used to send a post to followers
""" """
print('THREAD: send_to_followers') print('THREAD: send_to_followers')
@ -4382,7 +4407,8 @@ def send_to_followers_thread(server, session, session_onion, session_i2p,
shared_item_federation_tokens, shared_item_federation_tokens,
signing_priv_key_pem, signing_priv_key_pem,
sites_unavailable, sites_unavailable,
system_language), daemon=True) system_language,
mitm_servers), daemon=True)
if not begin_thread(send_thread, 'send_to_followers_thread'): if not begin_thread(send_thread, 'send_to_followers_thread'):
print('WARN: error while starting ' + print('WARN: error while starting ' +
'thread to send to followers.') 'thread to send to followers.')
@ -4577,7 +4603,8 @@ def is_image_media(session, base_dir: str, http_prefix: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
bold_reading: bool, bold_reading: bool,
show_vote_posts: bool, show_vote_posts: bool,
languages_understood: []) -> bool: languages_understood: [],
mitm_servers: []) -> bool:
"""Returns true if the given post has attached image media """Returns true if the given post has attached image media
""" """
if post_json_object['type'] == 'Announce': if post_json_object['type'] == 'Announce':
@ -4597,7 +4624,8 @@ def is_image_media(session, base_dir: str, http_prefix: str,
blocked_cache, block_federated, blocked_cache, block_federated,
bold_reading, bold_reading,
show_vote_posts, show_vote_posts,
languages_understood) languages_understood,
mitm_servers)
if post_json_announce: if post_json_announce:
post_json_object = post_json_announce post_json_object = post_json_announce
if post_json_object['type'] != 'Create': if post_json_object['type'] != 'Create':
@ -5721,7 +5749,8 @@ def get_public_posts_of_person(base_dir: str, nickname: str, domain: str,
debug: bool, project_version: str, debug: bool, project_version: str,
system_language: str, system_language: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
origin_domain: str) -> None: origin_domain: str,
mitm_servers: []) -> None:
""" This is really just for test purposes """ This is really just for test purposes
""" """
if debug: if debug:
@ -5750,7 +5779,7 @@ def get_public_posts_of_person(base_dir: str, nickname: str, domain: str,
wf_request = \ wf_request = \
webfinger_handle(session, handle, http_prefix, cached_webfingers, webfinger_handle(session, handle, http_prefix, cached_webfingers,
origin_domain, project_version, debug, group_account, origin_domain, project_version, debug, group_account,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('No webfinger result was returned for ' + handle) print('No webfinger result was returned for ' + handle)
@ -5769,7 +5798,8 @@ def get_public_posts_of_person(base_dir: str, nickname: str, domain: str,
person_cache, person_cache,
project_version, http_prefix, project_version, http_prefix,
nickname, domain, 'outbox', nickname, domain, 'outbox',
62524, system_language) 62524, system_language,
mitm_servers)
if debug: if debug:
print('Actor url: ' + str(person_id)) print('Actor url: ' + str(person_id))
if not person_id: if not person_id:
@ -5781,7 +5811,7 @@ def get_public_posts_of_person(base_dir: str, nickname: str, domain: str,
_get_posts(session, person_url, 30, max_mentions, max_emoji, _get_posts(session, person_url, 30, max_mentions, max_emoji,
max_attachments, federation_list, raw, simple, debug, max_attachments, federation_list, raw, simple, debug,
project_version, http_prefix, origin_domain, system_language, project_version, http_prefix, origin_domain, system_language,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
def get_public_post_domains(session, base_dir: str, nickname: str, domain: str, def get_public_post_domains(session, base_dir: str, nickname: str, domain: str,
@ -5790,7 +5820,8 @@ def get_public_post_domains(session, base_dir: str, nickname: str, domain: str,
debug: bool, project_version: str, debug: bool, project_version: str,
word_frequency: {}, domain_list: [], word_frequency: {}, domain_list: [],
system_language: str, system_language: str,
signing_priv_key_pem: str) -> []: signing_priv_key_pem: str,
mitm_servers: []) -> []:
""" Returns a list of domains referenced within public posts """ Returns a list of domains referenced within public posts
""" """
if not session: if not session:
@ -5805,7 +5836,7 @@ def get_public_post_domains(session, base_dir: str, nickname: str, domain: str,
wf_request = \ wf_request = \
webfinger_handle(session, handle, http_prefix, cached_webfingers, webfinger_handle(session, handle, http_prefix, cached_webfingers,
domain, project_version, debug, False, domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
return domain_list return domain_list
if not isinstance(wf_request, dict): if not isinstance(wf_request, dict):
@ -5820,12 +5851,13 @@ def get_public_post_domains(session, base_dir: str, nickname: str, domain: str,
person_cache, person_cache,
project_version, http_prefix, project_version, http_prefix,
nickname, domain, 'outbox', nickname, domain, 'outbox',
92522, system_language) 92522, system_language,
mitm_servers)
post_domains = \ post_domains = \
get_post_domains(session, person_url, 64, debug, get_post_domains(session, person_url, 64, debug,
project_version, http_prefix, domain, project_version, http_prefix, domain,
word_frequency, domain_list, system_language, word_frequency, domain_list, system_language,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
post_domains.sort() post_domains.sort()
return post_domains return post_domains
@ -5834,7 +5866,8 @@ def download_follow_collection(signing_priv_key_pem: str,
follow_type: str, follow_type: str,
session, http_prefix: str, session, http_prefix: str,
actor: str, page_number: int, actor: str, page_number: int,
no_of_pages: int, debug: bool) -> []: no_of_pages: int, debug: bool,
mitm_servers: []) -> []:
"""Returns a list of following/followers for the given actor """Returns a list of following/followers for the given actor
by downloading the json for their following/followers collection by downloading the json for their following/followers collection
""" """
@ -5859,7 +5892,7 @@ def download_follow_collection(signing_priv_key_pem: str,
actor + '/' + follow_type + '?page=' + str(page_number + page_ctr) actor + '/' + follow_type + '?page=' + str(page_number + page_ctr)
followers_json = \ followers_json = \
get_json(signing_priv_key_pem, session, url, session_headers, None, get_json(signing_priv_key_pem, session, url, session_headers, None,
debug, __version__, http_prefix, None) debug, mitm_servers, __version__, http_prefix, None)
if get_json_valid(followers_json): if get_json_valid(followers_json):
if followers_json.get('orderedItems'): if followers_json.get('orderedItems'):
for follower_actor in followers_json['orderedItems']: for follower_actor in followers_json['orderedItems']:
@ -5881,7 +5914,8 @@ def get_public_post_info(session, base_dir: str, nickname: str, domain: str,
proxy_type: str, port: int, http_prefix: str, proxy_type: str, port: int, http_prefix: str,
debug: bool, project_version: str, debug: bool, project_version: str,
word_frequency: {}, system_language: str, word_frequency: {}, system_language: str,
signing_priv_key_pem: str) -> []: signing_priv_key_pem: str,
mitm_servers: []) -> []:
""" Returns a dict of domains referenced within public posts """ Returns a dict of domains referenced within public posts
""" """
if not session: if not session:
@ -5896,7 +5930,7 @@ def get_public_post_info(session, base_dir: str, nickname: str, domain: str,
wf_request = \ wf_request = \
webfinger_handle(session, handle, http_prefix, cached_webfingers, webfinger_handle(session, handle, http_prefix, cached_webfingers,
domain, project_version, debug, False, domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
return {} return {}
if not isinstance(wf_request, dict): if not isinstance(wf_request, dict):
@ -5911,13 +5945,14 @@ def get_public_post_info(session, base_dir: str, nickname: str, domain: str,
person_cache, person_cache,
project_version, http_prefix, project_version, http_prefix,
nickname, domain, 'outbox', nickname, domain, 'outbox',
13863, system_language) 13863, system_language,
mitm_servers)
max_posts = 64 max_posts = 64
post_domains = \ post_domains = \
get_post_domains(session, person_url, max_posts, debug, get_post_domains(session, person_url, max_posts, debug,
project_version, http_prefix, domain, project_version, http_prefix, domain,
word_frequency, [], system_language, word_frequency, [], system_language,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
post_domains.sort() post_domains.sort()
domains_info = {} domains_info = {}
for pdomain in post_domains: for pdomain in post_domains:
@ -5929,7 +5964,8 @@ def get_public_post_info(session, base_dir: str, nickname: str, domain: str,
person_url, max_posts, person_url, max_posts,
debug, debug,
project_version, http_prefix, project_version, http_prefix,
domain, signing_priv_key_pem) domain, signing_priv_key_pem,
mitm_servers)
for blocked_domain, post_url_list in blocked_posts.items(): for blocked_domain, post_url_list in blocked_posts.items():
domains_info[blocked_domain] += post_url_list domains_info[blocked_domain] += post_url_list
@ -5943,7 +5979,8 @@ def get_public_post_domains_blocked(session, base_dir: str,
debug: bool, project_version: str, debug: bool, project_version: str,
word_frequency: {}, domain_list: [], word_frequency: {}, domain_list: [],
system_language: str, system_language: str,
signing_priv_key_pem: str) -> []: signing_priv_key_pem: str,
mitm_servers: []) -> []:
""" Returns a list of domains referenced within public posts which """ Returns a list of domains referenced within public posts which
are globally blocked on this instance are globally blocked on this instance
""" """
@ -5954,7 +5991,7 @@ def get_public_post_domains_blocked(session, base_dir: str,
proxy_type, port, http_prefix, proxy_type, port, http_prefix,
debug, project_version, debug, project_version,
word_frequency, domain_list, system_language, word_frequency, domain_list, system_language,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not post_domains: if not post_domains:
return [] return []
@ -6008,7 +6045,8 @@ def check_domains(session, base_dir: str,
debug: bool, project_version: str, debug: bool, project_version: str,
max_blocked_domains: int, single_check: bool, max_blocked_domains: int, single_check: bool,
system_language: str, system_language: str,
signing_priv_key_pem: str) -> None: signing_priv_key_pem: str,
mitm_servers: []) -> None:
"""Checks follower accounts for references to globally blocked domains """Checks follower accounts for references to globally blocked domains
""" """
word_frequency = {} word_frequency = {}
@ -6043,7 +6081,8 @@ def check_domains(session, base_dir: str,
debug, project_version, debug, project_version,
word_frequency, [], word_frequency, [],
system_language, system_language,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
if blocked_domains: if blocked_domains:
if len(blocked_domains) > max_blocked_domains: if len(blocked_domains) > max_blocked_domains:
follower_warning_str += handle + '\n' follower_warning_str += handle + '\n'
@ -6065,7 +6104,8 @@ def check_domains(session, base_dir: str,
debug, project_version, debug, project_version,
word_frequency, [], word_frequency, [],
system_language, system_language,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
if blocked_domains: if blocked_domains:
print(handle) print(handle)
for bdomain in blocked_domains: for bdomain in blocked_domains:
@ -6187,7 +6227,8 @@ def download_announce(session, base_dir: str, http_prefix: str,
blocked_cache: {}, block_federated: [], blocked_cache: {}, block_federated: [],
bold_reading: bool, bold_reading: bool,
show_vote_posts: bool, show_vote_posts: bool,
languages_understood: []) -> {}: languages_understood: [],
mitm_servers: []) -> {}:
"""Download the post referenced by an announce """Download the post referenced by an announce
""" """
if not post_json_object.get('object'): if not post_json_object.get('object'):
@ -6277,8 +6318,8 @@ def download_announce(session, base_dir: str, http_prefix: str,
announced_json = \ announced_json = \
get_json(signing_priv_key_pem, session, get_json(signing_priv_key_pem, session,
post_json_object['object'], post_json_object['object'],
as_header, None, debug, project_version, as_header, None, debug, mitm_servers,
http_prefix, domain) project_version, http_prefix, domain)
if not get_json_valid(announced_json): if not get_json_valid(announced_json):
return None return None
@ -6549,7 +6590,8 @@ def send_block_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Creates a block via c2s """Creates a block via c2s
""" """
if not session: if not session:
@ -6580,7 +6622,7 @@ def send_block_via_server(base_dir: str, session,
wf_request = webfinger_handle(session, handle, http_prefix, wf_request = webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
from_domain, project_version, debug, False, from_domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: block webfinger failed for ' + handle) print('DEBUG: block webfinger failed for ' + handle)
@ -6602,7 +6644,7 @@ def send_block_via_server(base_dir: str, session,
project_version, http_prefix, project_version, http_prefix,
from_nickname, from_nickname,
from_domain, post_to_box, 72652, from_domain, post_to_box, 72652,
system_language) system_language, mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:
@ -6640,7 +6682,8 @@ def send_mute_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Creates a mute via c2s """Creates a mute via c2s
""" """
if not session: if not session:
@ -6667,7 +6710,7 @@ def send_mute_via_server(base_dir: str, session,
wf_request = webfinger_handle(session, handle, http_prefix, wf_request = webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
from_domain, project_version, debug, False, from_domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: mute webfinger failed for ' + handle) print('DEBUG: mute webfinger failed for ' + handle)
@ -6689,7 +6732,7 @@ def send_mute_via_server(base_dir: str, session,
project_version, http_prefix, project_version, http_prefix,
from_nickname, from_nickname,
from_domain, post_to_box, 72652, from_domain, post_to_box, 72652,
system_language) system_language, mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:
@ -6726,7 +6769,8 @@ def send_undo_mute_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Undoes a mute via c2s """Undoes a mute via c2s
""" """
if not session: if not session:
@ -6758,7 +6802,7 @@ def send_undo_mute_via_server(base_dir: str, session,
wf_request = webfinger_handle(session, handle, http_prefix, wf_request = webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
from_domain, project_version, debug, False, from_domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: undo mute webfinger failed for ' + handle) print('DEBUG: undo mute webfinger failed for ' + handle)
@ -6780,7 +6824,7 @@ def send_undo_mute_via_server(base_dir: str, session,
project_version, http_prefix, project_version, http_prefix,
from_nickname, from_nickname,
from_domain, post_to_box, 72652, from_domain, post_to_box, 72652,
system_language) system_language, mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:
@ -6818,7 +6862,8 @@ def send_undo_block_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Creates a block via c2s """Creates a block via c2s
""" """
if not session: if not session:
@ -6853,7 +6898,7 @@ def send_undo_block_via_server(base_dir: str, session,
wf_request = webfinger_handle(session, handle, http_prefix, wf_request = webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
from_domain, project_version, debug, False, from_domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: unblock webfinger failed for ' + handle) print('DEBUG: unblock webfinger failed for ' + handle)
@ -6875,7 +6920,7 @@ def send_undo_block_via_server(base_dir: str, session,
project_version, http_prefix, project_version, http_prefix,
from_nickname, from_nickname,
from_domain, post_to_box, 53892, from_domain, post_to_box, 53892,
system_language) system_language, mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:
@ -6941,7 +6986,8 @@ def c2s_box_json(session, nickname: str, password: str,
domain: str, port: int, domain: str, port: int,
http_prefix: str, http_prefix: str,
box_name: str, page_number: int, box_name: str, page_number: int,
debug: bool, signing_priv_key_pem: str) -> {}: debug: bool, signing_priv_key_pem: str,
mitm_servers: []) -> {}:
"""C2S Authenticated GET of posts for a timeline """C2S Authenticated GET of posts for a timeline
""" """
if not session: if not session:
@ -6964,7 +7010,7 @@ def c2s_box_json(session, nickname: str, password: str,
# GET json # GET json
url = actor + '/' + box_name + '?page=' + str(page_number) url = actor + '/' + box_name + '?page=' + str(page_number)
box_json = get_json(signing_priv_key_pem, session, url, headers, None, box_json = get_json(signing_priv_key_pem, session, url, headers, None,
debug, __version__, http_prefix, None) debug, mitm_servers, __version__, http_prefix, None)
if get_json_valid(box_json) and debug: if get_json_valid(box_json) and debug:
print('DEBUG: GET c2s_box_json success') print('DEBUG: GET c2s_box_json success')

View File

@ -77,7 +77,8 @@ def _reactionpost(recent_posts_cache: {},
curr_domain: str, curr_domain: str,
onion_domain: str, i2p_domain: str, onion_domain: str, i2p_domain: str,
sites_unavailable: [], sites_unavailable: [],
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Creates an emoji reaction """Creates an emoji reaction
actor is the person doing the reacting actor is the person doing the reacting
'to' might be a specific person (actor) whose post was reaction 'to' might be a specific person (actor) whose post was reaction
@ -157,7 +158,7 @@ def _reactionpost(recent_posts_cache: {},
signing_priv_key_pem, 7165392, signing_priv_key_pem, 7165392,
curr_domain, onion_domain, i2p_domain, curr_domain, onion_domain, i2p_domain,
extra_headers, sites_unavailable, extra_headers, sites_unavailable,
system_language) system_language, mitm_servers)
return new_reaction_json return new_reaction_json
@ -174,7 +175,8 @@ def reaction_post(recent_posts_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
curr_domain: str, onion_domain: str, i2p_domain: str, curr_domain: str, onion_domain: str, i2p_domain: str,
sites_unavailable: [], system_language: str) -> {}: sites_unavailable: [], system_language: str,
mitm_servers: []) -> {}:
"""Adds a reaction to a given status post. This is only used by unit tests """Adds a reaction to a given status post. This is only used by unit tests
""" """
reaction_domain = get_full_domain(reaction_domain, reaction_port) reaction_domain = get_full_domain(reaction_domain, reaction_port)
@ -192,7 +194,8 @@ def reaction_post(recent_posts_cache: {},
cached_webfingers, cached_webfingers,
debug, project_version, signing_priv_key_pem, debug, project_version, signing_priv_key_pem,
curr_domain, onion_domain, i2p_domain, curr_domain, onion_domain, i2p_domain,
sites_unavailable, system_language) sites_unavailable, system_language,
mitm_servers)
def send_reaction_via_server(base_dir: str, session, def send_reaction_via_server(base_dir: str, session,
@ -203,7 +206,8 @@ def send_reaction_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Creates a reaction via c2s """Creates a reaction via c2s
""" """
if not session: if not session:
@ -235,7 +239,7 @@ def send_reaction_via_server(base_dir: str, session,
wf_request = webfinger_handle(session, handle, http_prefix, wf_request = webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
from_domain, project_version, debug, False, from_domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: reaction webfinger failed for ' + handle) print('DEBUG: reaction webfinger failed for ' + handle)
@ -257,7 +261,7 @@ def send_reaction_via_server(base_dir: str, session,
project_version, http_prefix, project_version, http_prefix,
from_nickname, from_domain, from_nickname, from_domain,
post_to_box, 72873, post_to_box, 72873,
system_language) system_language, mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:
@ -298,7 +302,8 @@ def send_undo_reaction_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Undo a reaction via c2s """Undo a reaction via c2s
""" """
if not session: if not session:
@ -330,7 +335,7 @@ def send_undo_reaction_via_server(base_dir: str, session,
wf_request = webfinger_handle(session, handle, http_prefix, wf_request = webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
from_domain, project_version, debug, False, from_domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: unreaction webfinger failed for ' + handle) print('DEBUG: unreaction webfinger failed for ' + handle)
@ -352,7 +357,8 @@ def send_undo_reaction_via_server(base_dir: str, session,
person_cache, project_version, person_cache, project_version,
http_prefix, from_nickname, http_prefix, from_nickname,
from_domain, post_to_box, from_domain, post_to_box,
72625, system_language) 72625, system_language,
mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:

View File

@ -164,7 +164,8 @@ def _update_post_schedule(base_dir: str, handle: str, httpd,
httpd.books_cache, httpd.books_cache,
httpd.max_cached_readers, httpd.max_cached_readers,
httpd.auto_cw_cache, httpd.auto_cw_cache,
httpd.block_federated): httpd.block_federated,
httpd.mitm_servers):
index_lines.remove(line) index_lines.remove(line)
try: try:
os.remove(post_filename) os.remove(post_filename)

View File

@ -61,7 +61,8 @@ def secure_mode(curr_session, proxy_type: str,
server.domain, server.domain,
server.onion_domain, server.onion_domain,
server.i2p_domain, server.i2p_domain,
server.signing_priv_key_pem) server.signing_priv_key_pem,
server.mitm_servers)
if not pub_key: if not pub_key:
if server.debug: if server.debug:
print('AUTH: secure mode failed to ' + print('AUTH: secure mode failed to ' +

View File

@ -19,6 +19,8 @@ from utils import text_in_file
from utils import acct_dir from utils import acct_dir
from utils import binary_is_image from utils import binary_is_image
from utils import image_mime_types_dict from utils import image_mime_types_dict
from utils import detect_mitm
from utils import get_domain_from_actor
from httpsig import create_signed_header from httpsig import create_signed_header
@ -126,13 +128,30 @@ def get_resolved_url(session, url: str, timeout_sec: int = 20) -> {}:
def _get_json_request(session, url: str, session_headers: {}, def _get_json_request(session, url: str, session_headers: {},
session_params: {}, timeout_sec: int, session_params: {}, timeout_sec: int,
quiet: bool, debug: bool, quiet: bool, debug: bool,
return_json: bool) -> {}: return_json: bool,
mitm_servers: []) -> {}:
"""http GET for json """http GET for json
""" """
try: try:
result = session.get(url, headers=session_headers, result = session.get(url, headers=session_headers,
params=session_params, timeout=timeout_sec, params=session_params, timeout=timeout_sec,
allow_redirects=True) allow_redirects=True)
mitm = False
try:
mitm = detect_mitm(result)
except BaseException:
pass
url_domain, _ = get_domain_from_actor(url)
if mitm:
if url_domain:
if url_domain not in mitm_servers:
mitm_servers.append(url_domain)
print('DEBUG: _get_json_request MITM ' +
str(result.headers))
else:
if url_domain in mitm_servers:
mitm_servers.remove(url_domain)
if result.status_code != 200: if result.status_code != 200:
if result.status_code == 401: if result.status_code == 401:
print("WARN: get_json " + url + ' rejected by secure mode') print("WARN: get_json " + url + ' rejected by secure mode')
@ -188,7 +207,7 @@ def _get_json_request(session, url: str, session_headers: {},
if session_headers2.get('Authorization'): if session_headers2.get('Authorization'):
session_headers2['Authorization'] = 'REDACTED' session_headers2['Authorization'] = 'REDACTED'
if debug and not quiet: if debug and not quiet:
print('EX: get_json failed, url: ' + str(url) + ', ' + print('EX: get_json failed2, url: ' + str(url) + ', ' +
'headers: ' + str(session_headers2) + ', ' + 'headers: ' + str(session_headers2) + ', ' +
'params: ' + str(session_params) + ', ' + str(exc)) 'params: ' + str(session_params) + ', ' + str(exc))
except SocketError as exc: except SocketError as exc:
@ -202,7 +221,7 @@ def _get_json_request(session, url: str, session_headers: {},
def _get_json_signed(session, url: str, domain_full: str, session_headers: {}, def _get_json_signed(session, url: str, domain_full: str, session_headers: {},
session_params: {}, timeout_sec: int, session_params: {}, timeout_sec: int,
signing_priv_key_pem: str, quiet: bool, signing_priv_key_pem: str, quiet: bool,
debug: bool) -> {}: debug: bool, mitm_servers: []) -> {}:
"""Authorized fetch - a signed version of GET """Authorized fetch - a signed version of GET
""" """
if not domain_full: if not domain_full:
@ -271,7 +290,7 @@ def _get_json_signed(session, url: str, domain_full: str, session_headers: {},
return_json = False return_json = False
return _get_json_request(session, url, session_headers, return _get_json_request(session, url, session_headers,
session_params, timeout_sec, quiet, session_params, timeout_sec, quiet,
debug, return_json) debug, return_json, mitm_servers)
def get_json_valid(test_json: {}) -> bool: def get_json_valid(test_json: {}) -> bool:
@ -286,6 +305,7 @@ def get_json_valid(test_json: {}) -> bool:
def get_json(signing_priv_key_pem: str, def get_json(signing_priv_key_pem: str,
session, url: str, headers: {}, params: {}, debug: bool, session, url: str, headers: {}, params: {}, debug: bool,
mitm_servers: [],
version: str = __version__, http_prefix: str = 'https', version: str = __version__, http_prefix: str = 'https',
domain: str = 'testdomain', domain: str = 'testdomain',
timeout_sec: int = 20, quiet: bool = False) -> {}: timeout_sec: int = 20, quiet: bool = False) -> {}:
@ -318,10 +338,10 @@ def get_json(signing_priv_key_pem: str,
return _get_json_signed(session, url, domain, return _get_json_signed(session, url, domain,
session_headers, session_params, session_headers, session_params,
timeout_sec, signing_priv_key_pem, timeout_sec, signing_priv_key_pem,
quiet, debug) quiet, debug, mitm_servers)
return _get_json_request(session, url, session_headers, return _get_json_request(session, url, session_headers,
session_params, timeout_sec, session_params, timeout_sec,
quiet, debug, True) quiet, debug, True, mitm_servers)
def get_vcard(xml_format: bool, def get_vcard(xml_format: bool,
@ -407,6 +427,7 @@ def get_vcard(xml_format: bool,
def download_html(signing_priv_key_pem: str, def download_html(signing_priv_key_pem: str,
session, url: str, headers: {}, params: {}, debug: bool, session, url: str, headers: {}, params: {}, debug: bool,
version: str, http_prefix: str, domain: str, version: str, http_prefix: str, domain: str,
mitm_servers: [],
timeout_sec: int = 20, quiet: bool = False) -> {}: timeout_sec: int = 20, quiet: bool = False) -> {}:
"""Download a html document """Download a html document
""" """
@ -439,14 +460,15 @@ def download_html(signing_priv_key_pem: str,
return _get_json_signed(session, url, domain, return _get_json_signed(session, url, domain,
session_headers, session_params, session_headers, session_params,
timeout_sec, signing_priv_key_pem, timeout_sec, signing_priv_key_pem,
quiet, debug) quiet, debug, mitm_servers)
return _get_json_request(session, url, session_headers, return _get_json_request(session, url, session_headers,
session_params, timeout_sec, session_params, timeout_sec,
quiet, debug, False) quiet, debug, False, mitm_servers)
def verify_html(session, url: str, debug: bool, def verify_html(session, url: str, debug: bool,
version: str, http_prefix: str, nickname: str, domain: str, version: str, http_prefix: str, nickname: str, domain: str,
mitm_servers: [],
timeout_sec: int = 20, quiet: bool = False) -> bool: timeout_sec: int = 20, quiet: bool = False) -> bool:
"""Verify that the handle for nickname@domain exists within the """Verify that the handle for nickname@domain exists within the
given url given url
@ -464,7 +486,8 @@ def verify_html(session, url: str, debug: bool,
verification_site_html = \ verification_site_html = \
download_html(None, session, url, download_html(None, session, url,
as_header, None, debug, version, as_header, None, debug, version,
http_prefix, domain, timeout_sec, quiet) http_prefix, domain, mitm_servers,
timeout_sec, quiet)
if not verification_site_html: if not verification_site_html:
if debug: if debug:
print('Verification site could not be contacted ' + print('Verification site could not be contacted ' +
@ -512,7 +535,8 @@ def verify_html(session, url: str, debug: bool,
def site_is_verified(session, base_dir: str, http_prefix: str, def site_is_verified(session, base_dir: str, http_prefix: str,
nickname: str, domain: str, nickname: str, domain: str,
url: str, update: bool, debug: bool) -> bool: url: str, update: bool, debug: bool,
mitm_servers: []) -> bool:
"""Is the given website verified? """Is the given website verified?
""" """
verified_sites_filename = \ verified_sites_filename = \
@ -527,7 +551,8 @@ def site_is_verified(session, base_dir: str, http_prefix: str,
verified = \ verified = \
verify_html(session, url, debug, verify_html(session, url, debug,
__version__, http_prefix, nickname, domain) __version__, http_prefix, nickname, domain,
mitm_servers)
if verified: if verified:
write_type = 'a+' write_type = 'a+'
if not verified_file_exists: if not verified_file_exists:
@ -545,6 +570,7 @@ def site_is_verified(session, base_dir: str, http_prefix: str,
def download_ssml(signing_priv_key_pem: str, def download_ssml(signing_priv_key_pem: str,
session, url: str, headers: {}, params: {}, debug: bool, session, url: str, headers: {}, params: {}, debug: bool,
version: str, http_prefix: str, domain: str, version: str, http_prefix: str, domain: str,
mitm_servers: [],
timeout_sec: int = 20, quiet: bool = False) -> {}: timeout_sec: int = 20, quiet: bool = False) -> {}:
"""Download a ssml document """Download a ssml document
""" """
@ -576,10 +602,10 @@ def download_ssml(signing_priv_key_pem: str,
return _get_json_signed(session, url, domain, return _get_json_signed(session, url, domain,
session_headers, session_params, session_headers, session_params,
timeout_sec, signing_priv_key_pem, timeout_sec, signing_priv_key_pem,
quiet, debug) quiet, debug, mitm_servers)
return _get_json_request(session, url, session_headers, return _get_json_request(session, url, session_headers,
session_params, timeout_sec, session_params, timeout_sec,
quiet, debug, False) quiet, debug, False, mitm_servers)
def _set_user_agent(session, http_prefix: str, domain_full: str) -> None: def _set_user_agent(session, http_prefix: str, domain_full: str) -> None:

View File

@ -634,7 +634,8 @@ def send_share_via_server(base_dir, session,
debug: bool, project_version: str, debug: bool, project_version: str,
item_price: str, item_currency: str, item_price: str, item_currency: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Creates an item share via c2s """Creates an item share via c2s
""" """
if not session: if not session:
@ -688,7 +689,7 @@ def send_share_via_server(base_dir, session,
webfinger_handle(session, handle, http_prefix, webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
from_domain, project_version, debug, False, from_domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: share webfinger failed for ' + handle) print('DEBUG: share webfinger failed for ' + handle)
@ -709,7 +710,8 @@ def send_share_via_server(base_dir, session,
person_cache, project_version, person_cache, project_version,
http_prefix, from_nickname, http_prefix, from_nickname,
from_domain, post_to_box, from_domain, post_to_box,
83653, system_language) 83653, system_language,
mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:
@ -759,7 +761,8 @@ def send_undo_share_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Undoes a share via c2s """Undoes a share via c2s
""" """
if not session: if not session:
@ -796,7 +799,7 @@ def send_undo_share_via_server(base_dir: str, session,
wf_request = \ wf_request = \
webfinger_handle(session, handle, http_prefix, cached_webfingers, webfinger_handle(session, handle, http_prefix, cached_webfingers,
from_domain, project_version, debug, False, from_domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: unshare webfinger failed for ' + handle) print('DEBUG: unshare webfinger failed for ' + handle)
@ -817,7 +820,8 @@ def send_undo_share_via_server(base_dir: str, session,
person_cache, project_version, person_cache, project_version,
http_prefix, from_nickname, http_prefix, from_nickname,
from_domain, post_to_box, from_domain, post_to_box,
12663, system_language) 12663, system_language,
mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:
@ -862,7 +866,8 @@ def send_wanted_via_server(base_dir, session,
debug: bool, project_version: str, debug: bool, project_version: str,
item_max_price: str, item_currency: str, item_max_price: str, item_currency: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Creates a wanted item via c2s """Creates a wanted item via c2s
""" """
if not session: if not session:
@ -917,7 +922,7 @@ def send_wanted_via_server(base_dir, session,
webfinger_handle(session, handle, http_prefix, webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
from_domain, project_version, debug, False, from_domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: share webfinger failed for ' + handle) print('DEBUG: share webfinger failed for ' + handle)
@ -938,7 +943,8 @@ def send_wanted_via_server(base_dir, session,
person_cache, project_version, person_cache, project_version,
http_prefix, from_nickname, http_prefix, from_nickname,
from_domain, post_to_box, from_domain, post_to_box,
23653, system_language) 23653, system_language,
mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:
@ -988,7 +994,8 @@ def send_undo_wanted_via_server(base_dir: str, session,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Undoes a wanted item via c2s """Undoes a wanted item via c2s
""" """
if not session: if not session:
@ -1025,7 +1032,7 @@ def send_undo_wanted_via_server(base_dir: str, session,
wf_request = \ wf_request = \
webfinger_handle(session, handle, http_prefix, cached_webfingers, webfinger_handle(session, handle, http_prefix, cached_webfingers,
from_domain, project_version, debug, False, from_domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: unwant webfinger failed for ' + handle) print('DEBUG: unwant webfinger failed for ' + handle)
@ -1046,7 +1053,8 @@ def send_undo_wanted_via_server(base_dir: str, session,
person_cache, project_version, person_cache, project_version,
http_prefix, from_nickname, http_prefix, from_nickname,
from_domain, post_to_box, from_domain, post_to_box,
12693, system_language) 12693, system_language,
mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:
@ -1083,7 +1091,8 @@ def send_undo_wanted_via_server(base_dir: str, session,
def get_shared_items_catalog_via_server(session, nickname: str, password: str, def get_shared_items_catalog_via_server(session, nickname: str, password: str,
domain: str, port: int, domain: str, port: int,
http_prefix: str, debug: bool, http_prefix: str, debug: bool,
signing_priv_key_pem: str) -> {}: signing_priv_key_pem: str,
mitm_servers: []) -> {}:
"""Returns the shared items catalog via c2s """Returns the shared items catalog via c2s
""" """
if not session: if not session:
@ -1103,7 +1112,8 @@ def get_shared_items_catalog_via_server(session, nickname: str, password: str,
if debug: if debug:
print('Shared items catalog request to: ' + url) print('Shared items catalog request to: ' + url)
catalog_json = get_json(signing_priv_key_pem, session, url, headers, None, catalog_json = get_json(signing_priv_key_pem, session, url, headers, None,
debug, __version__, http_prefix, None) debug, mitm_servers, __version__, http_prefix,
None)
if not get_json_valid(catalog_json): if not get_json_valid(catalog_json):
if debug: if debug:
print('DEBUG: GET shared items catalog failed for c2s to ' + url) print('DEBUG: GET shared items catalog failed for c2s to ' + url)
@ -1118,7 +1128,8 @@ def get_shared_items_catalog_via_server(session, nickname: str, password: str,
def get_offers_via_server(session, nickname: str, password: str, def get_offers_via_server(session, nickname: str, password: str,
domain: str, port: int, domain: str, port: int,
http_prefix: str, debug: bool, http_prefix: str, debug: bool,
signing_priv_key_pem: str) -> {}: signing_priv_key_pem: str,
mitm_servers: []) -> {}:
"""Returns the offers collection for shared items via c2s """Returns the offers collection for shared items via c2s
""" """
if not session: if not session:
@ -1138,7 +1149,7 @@ def get_offers_via_server(session, nickname: str, password: str,
if debug: if debug:
print('Offers collection request to: ' + url) print('Offers collection request to: ' + url)
offers_json = get_json(signing_priv_key_pem, session, url, headers, None, offers_json = get_json(signing_priv_key_pem, session, url, headers, None,
debug, __version__, http_prefix, None) debug, mitm_servers, __version__, http_prefix, None)
if not get_json_valid(offers_json): if not get_json_valid(offers_json):
if debug: if debug:
print('DEBUG: GET offers collection failed for c2s to ' + url) print('DEBUG: GET offers collection failed for c2s to ' + url)
@ -1153,7 +1164,8 @@ def get_offers_via_server(session, nickname: str, password: str,
def get_wanted_via_server(session, nickname: str, password: str, def get_wanted_via_server(session, nickname: str, password: str,
domain: str, port: int, domain: str, port: int,
http_prefix: str, debug: bool, http_prefix: str, debug: bool,
signing_priv_key_pem: str) -> {}: signing_priv_key_pem: str,
mitm_servers: []) -> {}:
"""Returns the wanted collection for shared items via c2s """Returns the wanted collection for shared items via c2s
""" """
if not session: if not session:
@ -1173,7 +1185,7 @@ def get_wanted_via_server(session, nickname: str, password: str,
if debug: if debug:
print('Wanted collection request to: ' + url) print('Wanted collection request to: ' + url)
wanted_json = get_json(signing_priv_key_pem, session, url, headers, None, wanted_json = get_json(signing_priv_key_pem, session, url, headers, None,
debug, __version__, http_prefix, None) debug, mitm_servers, __version__, http_prefix, None)
if not get_json_valid(wanted_json): if not get_json_valid(wanted_json):
if debug: if debug:
print('DEBUG: GET wanted collection failed for c2s to ' + url) print('DEBUG: GET wanted collection failed for c2s to ' + url)
@ -1708,7 +1720,8 @@ def _update_federated_shares_cache(session, shared_items_federated_domains: [],
tokens_json: {}, debug: bool, tokens_json: {}, debug: bool,
system_language: str, system_language: str,
shares_file_type: str, shares_file_type: str,
sites_unavailable: []) -> None: sites_unavailable: [],
mitm_servers: []) -> None:
"""Updates the cache of federated shares for the instance. """Updates the cache of federated shares for the instance.
This enables shared items to be available even when other instances This enables shared items to be available even when other instances
might not be online might not be online
@ -1746,7 +1759,8 @@ def _update_federated_shares_cache(session, shared_items_federated_domains: [],
url = http_prefix + '://' + federated_domain_full + '/wantedItems' url = http_prefix + '://' + federated_domain_full + '/wantedItems'
as_header['Authorization'] = tokens_json[federated_domain_full] as_header['Authorization'] = tokens_json[federated_domain_full]
catalog_json = get_json(session, url, as_header, None, catalog_json = get_json(session, url, as_header, None,
debug, __version__, http_prefix, None) debug, mitm_servers, __version__, http_prefix,
None)
if not get_json_valid(catalog_json): if not get_json_valid(catalog_json):
print('WARN: failed to download shared items catalog for ' + print('WARN: failed to download shared items catalog for ' +
federated_domain_full) federated_domain_full)
@ -1880,7 +1894,8 @@ def _regenerate_shares_token(base_dir: str, domain_full: str,
def run_federated_shares_daemon(base_dir: str, httpd, http_prefix: str, def run_federated_shares_daemon(base_dir: str, httpd, http_prefix: str,
domain_full: str, proxy_type: str, debug: bool, domain_full: str, proxy_type: str, debug: bool,
system_language: str) -> None: system_language: str,
mitm_servers: []) -> None:
"""Runs the daemon used to update federated shared items """Runs the daemon used to update federated shared items
""" """
seconds_per_hour = 60 * 60 seconds_per_hour = 60 * 60
@ -1930,7 +1945,8 @@ def run_federated_shares_daemon(base_dir: str, httpd, http_prefix: str,
shared_items_federated_domains, shared_items_federated_domains,
base_dir, domain_full, http_prefix, base_dir, domain_full, http_prefix,
tokens_json, debug, system_language, tokens_json, debug, system_language,
shares_file_type, sites_unavailable) shares_file_type, sites_unavailable,
mitm_servers)
time.sleep(seconds_per_hour * 6) time.sleep(seconds_per_hour * 6)

View File

@ -183,7 +183,8 @@ def send_skill_via_server(base_dir: str, session, nickname: str, password: str,
cached_webfingers: {}, person_cache: {}, cached_webfingers: {}, person_cache: {},
debug: bool, project_version: str, debug: bool, project_version: str,
signing_priv_key_pem: str, signing_priv_key_pem: str,
system_language: str) -> {}: system_language: str,
mitm_servers: []) -> {}:
"""Sets a skill for a person via c2s """Sets a skill for a person via c2s
""" """
if not session: if not session:
@ -216,7 +217,7 @@ def send_skill_via_server(base_dir: str, session, nickname: str, password: str,
webfinger_handle(session, handle, http_prefix, webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
domain, project_version, debug, False, domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
if debug: if debug:
print('DEBUG: skill webfinger failed for ' + handle) print('DEBUG: skill webfinger failed for ' + handle)
@ -237,7 +238,7 @@ def send_skill_via_server(base_dir: str, session, nickname: str, password: str,
person_cache, project_version, person_cache, project_version,
http_prefix, nickname, domain, http_prefix, nickname, domain,
post_to_box, 76121, post_to_box, 76121,
system_language) system_language, mitm_servers)
if not inbox_url: if not inbox_url:
if debug: if debug:

View File

@ -18,7 +18,8 @@ def instances_graph(base_dir: str, handles: str,
proxy_type: str, proxy_type: str,
port: int, http_prefix: str, port: int, http_prefix: str,
debug: bool, project_version: str, debug: bool, project_version: str,
system_language: str, signing_priv_key_pem: str) -> str: system_language: str, signing_priv_key_pem: str,
mitm_servers: []) -> str:
""" Returns a dot graph of federating instances """ Returns a dot graph of federating instances
based upon a few sample handles. based upon a few sample handles.
The handles argument should contain a comma separated list The handles argument should contain a comma separated list
@ -51,7 +52,7 @@ def instances_graph(base_dir: str, handles: str,
webfinger_handle(session, handle, http_prefix, webfinger_handle(session, handle, http_prefix,
cached_webfingers, cached_webfingers,
domain, project_version, debug, False, domain, project_version, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
if not wf_request: if not wf_request:
return dot_graph_str + '}\n' return dot_graph_str + '}\n'
if not isinstance(wf_request, dict): if not isinstance(wf_request, dict):
@ -67,13 +68,14 @@ def instances_graph(base_dir: str, handles: str,
person_cache, person_cache,
project_version, http_prefix, project_version, http_prefix,
nickname, domain, 'outbox', nickname, domain, 'outbox',
27261, system_language) 27261, system_language,
mitm_servers)
word_frequency = {} word_frequency = {}
post_domains = \ post_domains = \
get_post_domains(session, person_url, 64, debug, get_post_domains(session, person_url, 64, debug,
project_version, http_prefix, domain, project_version, http_prefix, domain,
word_frequency, [], system_language, word_frequency, [], system_language,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
post_domains.sort() post_domains.sort()
for fed_domain in post_domains: for fed_domain in post_domains:
dot_line_str = ' "' + domain + '" -> "' + fed_domain + '";\n' dot_line_str = ' "' + domain + '" -> "' + fed_domain + '";\n'

View File

@ -1472,6 +1472,7 @@ def test_post_message_between_servers(base_dir: str) -> None:
chat_url = '' chat_url = ''
auto_cw_cache = {} auto_cw_cache = {}
searchable_by = [] searchable_by = []
mitm_servers = []
send_result = \ send_result = \
send_post(signing_priv_key_pem, __version__, send_post(signing_priv_key_pem, __version__,
session_alice, alice_dir, 'alice', alice_domain, alice_port, session_alice, alice_dir, 'alice', alice_domain, alice_port,
@ -1490,7 +1491,7 @@ def test_post_message_between_servers(base_dir: str) -> None:
content_license_url, media_license_url, media_creator, content_license_url, media_license_url, media_creator,
translate, buy_url, chat_url, auto_cw_cache, True, translate, buy_url, chat_url, auto_cw_cache, True,
in_reply_to, in_reply_to_atom_uri, subject, in_reply_to, in_reply_to_atom_uri, subject,
searchable_by) searchable_by, mitm_servers)
print('send_result: ' + str(send_result)) print('send_result: ' + str(send_result))
queue_path = data_dir(bob_dir) + '/bob@' + bob_domain + '/queue' queue_path = data_dir(bob_dir) + '/bob@' + bob_domain + '/queue'
@ -1602,6 +1603,7 @@ def test_post_message_between_servers(base_dir: str) -> None:
outbox_post_filename = outbox_path + '/' + name outbox_post_filename = outbox_path + '/' + name
assert status_number > 0 assert status_number > 0
assert outbox_post_filename assert outbox_post_filename
mitm_servers = []
assert like_post({}, session_bob, bob_dir, federation_list, assert like_post({}, session_bob, bob_dir, federation_list,
'bob', bob_domain, bob_port, http_prefix, 'bob', bob_domain, bob_port, http_prefix,
'alice', alice_domain, alice_port, [], 'alice', alice_domain, alice_port, [],
@ -1609,7 +1611,7 @@ def test_post_message_between_servers(base_dir: str) -> None:
bob_person_cache, bob_cached_webfingers, bob_person_cache, bob_cached_webfingers,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
bob_domain, None, None, sites_unavailable, bob_domain, None, None, sites_unavailable,
system_language) system_language, mitm_servers)
for _ in range(20): for _ in range(20):
if text_in_file('likes', outbox_post_filename): if text_in_file('likes', outbox_post_filename):
@ -1626,6 +1628,7 @@ def test_post_message_between_servers(base_dir: str) -> None:
print("Bob reacts to Alice's post") print("Bob reacts to Alice's post")
sites_unavailable = [] sites_unavailable = []
mitm_servers = []
assert reaction_post({}, session_bob, bob_dir, federation_list, assert reaction_post({}, session_bob, bob_dir, federation_list,
'bob', bob_domain, bob_port, http_prefix, 'bob', bob_domain, bob_port, http_prefix,
'alice', alice_domain, alice_port, [], 'alice', alice_domain, alice_port, [],
@ -1634,7 +1637,7 @@ def test_post_message_between_servers(base_dir: str) -> None:
bob_person_cache, bob_cached_webfingers, bob_person_cache, bob_cached_webfingers,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
bob_domain, None, None, sites_unavailable, bob_domain, None, None, sites_unavailable,
system_language) system_language, mitm_servers)
for _ in range(20): for _ in range(20):
if text_in_file('reactions', outbox_post_filename): if text_in_file('reactions', outbox_post_filename):
@ -1667,6 +1670,7 @@ def test_post_message_between_servers(base_dir: str) -> None:
assert outbox_before_announce_count == 0 assert outbox_before_announce_count == 0
assert before_announce_count == 0 assert before_announce_count == 0
sites_unavailable = [] sites_unavailable = []
mitm_servers = []
announce_public(session_bob, bob_dir, federation_list, announce_public(session_bob, bob_dir, federation_list,
'bob', bob_domain, bob_port, http_prefix, 'bob', bob_domain, bob_port, http_prefix,
object_url, object_url,
@ -1674,7 +1678,7 @@ def test_post_message_between_servers(base_dir: str) -> None:
bob_person_cache, bob_cached_webfingers, bob_person_cache, bob_cached_webfingers,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
bob_domain, None, None, sites_unavailable, bob_domain, None, None, sites_unavailable,
system_language) system_language, mitm_servers)
announce_message_arrived = False announce_message_arrived = False
outbox_message_arrived = False outbox_message_arrived = False
for _ in range(20): for _ in range(20):
@ -1813,6 +1817,7 @@ def test_follow_between_servers(base_dir: str) -> None:
sites_unavailable = [] sites_unavailable = []
bob_actor = http_prefix + '://' + bob_address + '/users/bob' bob_actor = http_prefix + '://' + bob_address + '/users/bob'
signing_priv_key_pem = None signing_priv_key_pem = None
mitm_servers = []
send_result = \ send_result = \
send_follow_request(session_alice, alice_dir, send_follow_request(session_alice, alice_dir,
'alice', alice_domain, 'alice', alice_domain,
@ -1824,7 +1829,7 @@ def test_follow_between_servers(base_dir: str) -> None:
alice_cached_webfingers, alice_person_cache, alice_cached_webfingers, alice_person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
alice_domain, None, None, sites_unavailable, alice_domain, None, None, sites_unavailable,
system_language) system_language, mitm_servers)
print('send_result: ' + str(send_result)) print('send_result: ' + str(send_result))
alice_dir_str = data_dir(alice_dir) alice_dir_str = data_dir(alice_dir)
@ -1871,6 +1876,7 @@ def test_follow_between_servers(base_dir: str) -> None:
video_transcript = None video_transcript = None
auto_cw_cache = {} auto_cw_cache = {}
searchable_by = [] searchable_by = []
mitm_servers = []
send_result = \ send_result = \
send_post(signing_priv_key_pem, __version__, send_post(signing_priv_key_pem, __version__,
session_alice, alice_dir, 'alice', alice_domain, alice_port, session_alice, alice_dir, 'alice', alice_domain, alice_port,
@ -1886,7 +1892,7 @@ def test_follow_between_servers(base_dir: str) -> None:
content_license_url, media_license_url, media_creator, content_license_url, media_license_url, media_creator,
translate, buy_url, chat_url, auto_cw_cache, True, translate, buy_url, chat_url, auto_cw_cache, True,
in_reply_to, in_reply_to_atom_uri, subject, in_reply_to, in_reply_to_atom_uri, subject,
searchable_by) searchable_by, mitm_servers)
print('send_result: ' + str(send_result)) print('send_result: ' + str(send_result))
queue_path = data_dir(bob_dir) + '/bob@' + bob_domain + '/queue' queue_path = data_dir(bob_dir) + '/bob@' + bob_domain + '/queue'
@ -2015,9 +2021,11 @@ def test_shared_items_federation(base_dir: str) -> None:
'host': bob_address, 'host': bob_address,
'Accept': 'application/ld+json; profile="' + profile_str + '"' 'Accept': 'application/ld+json; profile="' + profile_str + '"'
} }
mitm_servers = []
bob_instance_actor_json = \ bob_instance_actor_json = \
get_json(signing_priv_key_pem, session_client, get_json(signing_priv_key_pem, session_client,
'http://' + bob_address + '/@actor', test_headers, {}, True, 'http://' + bob_address + '/@actor', test_headers, {}, True,
mitm_servers,
__version__, 'http', 'somedomain.or.other', 10, False) __version__, 'http', 'somedomain.or.other', 10, False)
if not get_json_valid(bob_instance_actor_json): if not get_json_valid(bob_instance_actor_json):
print('Unable to get json for ' + 'http://' + bob_address + '/@actor') print('Unable to get json for ' + 'http://' + bob_address + '/@actor')
@ -2049,6 +2057,7 @@ def test_shared_items_federation(base_dir: str) -> None:
alice_cached_webfingers = {} alice_cached_webfingers = {}
alice_post_log = [] alice_post_log = []
sites_unavailable = [] sites_unavailable = []
mitm_servers = []
bob_actor = http_prefix + '://' + bob_address + '/users/bob' bob_actor = http_prefix + '://' + bob_address + '/users/bob'
send_result = \ send_result = \
send_follow_request(session_alice, alice_dir, send_follow_request(session_alice, alice_dir,
@ -2061,7 +2070,7 @@ def test_shared_items_federation(base_dir: str) -> None:
alice_cached_webfingers, alice_person_cache, alice_cached_webfingers, alice_person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
alice_domain, None, None, sites_unavailable, alice_domain, None, None, sites_unavailable,
system_language) system_language, mitm_servers)
print('send_result: ' + str(send_result)) print('send_result: ' + str(send_result))
alice_dir_str = data_dir(alice_dir) alice_dir_str = data_dir(alice_dir)
@ -2124,6 +2133,7 @@ def test_shared_items_federation(base_dir: str) -> None:
shared_item_price = "1.30" shared_item_price = "1.30"
shared_item_currency = "EUR" shared_item_currency = "EUR"
signing_priv_key_pem = None signing_priv_key_pem = None
mitm_servers = []
session_bob = create_session(proxy_type) session_bob = create_session(proxy_type)
share_json = \ share_json = \
send_share_via_server(bob_dir, session_bob, send_share_via_server(bob_dir, session_bob,
@ -2138,7 +2148,8 @@ def test_shared_items_federation(base_dir: str) -> None:
bob_cached_webfingers, bob_person_cache, bob_cached_webfingers, bob_person_cache,
True, __version__, True, __version__,
shared_item_price, shared_item_currency, shared_item_price, shared_item_currency,
signing_priv_key_pem, system_language) signing_priv_key_pem, system_language,
mitm_servers)
assert share_json assert share_json
assert isinstance(share_json, dict) assert isinstance(share_json, dict)
shared_item_name = 'Epicyon T-shirt' shared_item_name = 'Epicyon T-shirt'
@ -2164,7 +2175,8 @@ def test_shared_items_federation(base_dir: str) -> None:
bob_cached_webfingers, bob_person_cache, bob_cached_webfingers, bob_person_cache,
True, __version__, True, __version__,
shared_item_price, shared_item_currency, shared_item_price, shared_item_currency,
signing_priv_key_pem, system_language) signing_priv_key_pem, system_language,
mitm_servers)
assert share_json assert share_json
assert isinstance(share_json, dict) assert isinstance(share_json, dict)
shared_item_name = 'Soldering iron' shared_item_name = 'Soldering iron'
@ -2190,7 +2202,8 @@ def test_shared_items_federation(base_dir: str) -> None:
bob_cached_webfingers, bob_person_cache, bob_cached_webfingers, bob_person_cache,
True, __version__, True, __version__,
shared_item_price, shared_item_currency, shared_item_price, shared_item_currency,
signing_priv_key_pem, system_language) signing_priv_key_pem, system_language,
mitm_servers)
assert share_json assert share_json
assert isinstance(share_json, dict) assert isinstance(share_json, dict)
@ -2213,33 +2226,39 @@ def test_shared_items_federation(base_dir: str) -> None:
print('\n\n*********************************************************') print('\n\n*********************************************************')
print('Bob can read the shared items catalog on his own instance') print('Bob can read the shared items catalog on his own instance')
signing_priv_key_pem = None signing_priv_key_pem = None
mitm_servers = []
catalog_json = \ catalog_json = \
get_shared_items_catalog_via_server(session_bob, get_shared_items_catalog_via_server(session_bob,
'bob', bob_password, 'bob', bob_password,
bob_domain, bob_port, bob_domain, bob_port,
http_prefix, True, http_prefix, True,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
assert catalog_json assert catalog_json
pprint(catalog_json) pprint(catalog_json)
assert 'DFC:supplies' in catalog_json assert 'DFC:supplies' in catalog_json
assert len(catalog_json.get('DFC:supplies')) == 3 assert len(catalog_json.get('DFC:supplies')) == 3
mitm_servers = []
offers_json = \ offers_json = \
get_offers_via_server(session_bob, 'bob', bob_password, get_offers_via_server(session_bob, 'bob', bob_password,
bob_domain, bob_port, bob_domain, bob_port,
http_prefix, True, http_prefix, True,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
assert offers_json assert offers_json
print('Offers collection:') print('Offers collection:')
pprint(offers_json) pprint(offers_json)
assert isinstance(offers_json, dict) assert isinstance(offers_json, dict)
assert len(offers_json['orderedItems']) >= 1 assert len(offers_json['orderedItems']) >= 1
mitm_servers = []
wanted_json = \ wanted_json = \
get_wanted_via_server(session_bob, 'bob', bob_password, get_wanted_via_server(session_bob, 'bob', bob_password,
bob_domain, bob_port, bob_domain, bob_port,
http_prefix, True, http_prefix, True,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
print('Wanted collection:') print('Wanted collection:')
pprint(wanted_json) pprint(wanted_json)
assert isinstance(wanted_json, dict) assert isinstance(wanted_json, dict)
@ -2272,6 +2291,7 @@ def test_shared_items_federation(base_dir: str) -> None:
video_transcript = None video_transcript = None
auto_cw_cache = {} auto_cw_cache = {}
searchable_by = [] searchable_by = []
mitm_servers = []
send_result = \ send_result = \
send_post(signing_priv_key_pem, __version__, send_post(signing_priv_key_pem, __version__,
session_alice, alice_dir, 'alice', alice_domain, alice_port, session_alice, alice_dir, 'alice', alice_domain, alice_port,
@ -2287,7 +2307,7 @@ def test_shared_items_federation(base_dir: str) -> None:
content_license_url, media_license_url, media_creator, content_license_url, media_license_url, media_creator,
translate, buy_url, chat_url, auto_cw_cache, True, translate, buy_url, chat_url, auto_cw_cache, True,
in_reply_to, in_reply_to_atom_uri, subject, in_reply_to, in_reply_to_atom_uri, subject,
searchable_by) searchable_by, mitm_servers)
print('send_result: ' + str(send_result)) print('send_result: ' + str(send_result))
queue_path = data_dir(bob_dir) + '/bob@' + bob_domain + '/queue' queue_path = data_dir(bob_dir) + '/bob@' + bob_domain + '/queue'
@ -2342,8 +2362,9 @@ def test_shared_items_federation(base_dir: str) -> None:
} }
url = http_prefix + '://' + bob_address + '/catalog' url = http_prefix + '://' + bob_address + '/catalog'
signing_priv_key_pem = None signing_priv_key_pem = None
mitm_servers: []
catalog_json = get_json(signing_priv_key_pem, session_alice, url, headers, catalog_json = get_json(signing_priv_key_pem, session_alice, url, headers,
None, True) None, True, mitm_servers)
assert get_json_valid(catalog_json) assert get_json_valid(catalog_json)
pprint(catalog_json) pprint(catalog_json)
assert 'DFC:supplies' in catalog_json assert 'DFC:supplies' in catalog_json
@ -2493,8 +2514,10 @@ def test_group_follow(base_dir: str) -> None:
'Accept': 'application/ld+json; profile="' + profile_str + '"' 'Accept': 'application/ld+json; profile="' + profile_str + '"'
} }
signing_priv_key_pem = None signing_priv_key_pem = None
mitm_servers = []
outbox_json = get_json(signing_priv_key_pem, session, alice_outbox, outbox_json = get_json(signing_priv_key_pem, session, alice_outbox,
as_header, None, True, __version__, 'http', None) as_header, None, True, mitm_servers,
__version__, 'http', None)
assert get_json_valid(outbox_json) assert get_json_valid(outbox_json)
pprint(outbox_json) pprint(outbox_json)
assert outbox_json['type'] == 'OrderedCollection' assert outbox_json['type'] == 'OrderedCollection'
@ -2504,9 +2527,10 @@ def test_group_follow(base_dir: str) -> None:
print('Alice outbox totalItems: ' + str(outbox_json['totalItems'])) print('Alice outbox totalItems: ' + str(outbox_json['totalItems']))
assert outbox_json['totalItems'] == 3 assert outbox_json['totalItems'] == 3
mitm_servers = []
outbox_json = get_json(signing_priv_key_pem, session, outbox_json = get_json(signing_priv_key_pem, session,
first_page, as_header, first_page, as_header,
None, True, __version__, 'http', None) None, True, mitm_servers, __version__, 'http', None)
assert get_json_valid(outbox_json) assert get_json_valid(outbox_json)
pprint(outbox_json) pprint(outbox_json)
assert 'orderedItems' in outbox_json assert 'orderedItems' in outbox_json
@ -2539,6 +2563,7 @@ def test_group_follow(base_dir: str) -> None:
testgroup_actor = \ testgroup_actor = \
http_prefix + '://' + testgroupAddress + '/users/testgroup' http_prefix + '://' + testgroupAddress + '/users/testgroup'
signing_priv_key_pem = None signing_priv_key_pem = None
mitm_servers = []
send_result = \ send_result = \
send_follow_request(session_alice, alice_dir, send_follow_request(session_alice, alice_dir,
'alice', alice_domain, 'alice', alice_domain,
@ -2550,7 +2575,7 @@ def test_group_follow(base_dir: str) -> None:
alice_cached_webfingers, alice_person_cache, alice_cached_webfingers, alice_person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
alice_domain, None, None, sites_unavailable, alice_domain, None, None, sites_unavailable,
system_language) system_language, mitm_servers)
print('send_result: ' + str(send_result)) print('send_result: ' + str(send_result))
alice_following_filename = \ alice_following_filename = \
@ -2619,6 +2644,7 @@ def test_group_follow(base_dir: str) -> None:
testgroup_actor = \ testgroup_actor = \
http_prefix + '://' + testgroupAddress + '/users/testgroup' http_prefix + '://' + testgroupAddress + '/users/testgroup'
signing_priv_key_pem = None signing_priv_key_pem = None
mitm_servers = []
send_result = \ send_result = \
send_follow_request(session_bob, bob_dir, send_follow_request(session_bob, bob_dir,
'bob', bob_domain, 'bob', bob_domain,
@ -2630,7 +2656,7 @@ def test_group_follow(base_dir: str) -> None:
bob_cached_webfingers, bob_person_cache, bob_cached_webfingers, bob_person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
bob_domain, None, None, sites_unavailable, bob_domain, None, None, sites_unavailable,
system_language) system_language, mitm_servers)
print('send_result: ' + str(send_result)) print('send_result: ' + str(send_result))
bob_following_filename = \ bob_following_filename = \
@ -2715,6 +2741,7 @@ def test_group_follow(base_dir: str) -> None:
video_transcript = None video_transcript = None
auto_cw_cache = {} auto_cw_cache = {}
searchable_by = [] searchable_by = []
mitm_servers = []
send_result = \ send_result = \
send_post(signing_priv_key_pem, __version__, send_post(signing_priv_key_pem, __version__,
session_alice, alice_dir, 'alice', alice_domain, alice_port, session_alice, alice_dir, 'alice', alice_domain, alice_port,
@ -2730,7 +2757,7 @@ def test_group_follow(base_dir: str) -> None:
content_license_url, media_license_url, media_creator, content_license_url, media_license_url, media_creator,
translate, buy_url, chat_url, auto_cw_cache, True, translate, buy_url, chat_url, auto_cw_cache, True,
in_reply_to, in_reply_to_atom_uri, subject, in_reply_to, in_reply_to_atom_uri, subject,
searchable_by) searchable_by, mitm_servers)
print('send_result: ' + str(send_result)) print('send_result: ' + str(send_result))
for _ in range(20): for _ in range(20):
@ -3370,6 +3397,7 @@ def test_client_to_server(base_dir: str):
video_transcript = None video_transcript = None
auto_cw_cache = {} auto_cw_cache = {}
searchable_by = [] searchable_by = []
mitm_servers = []
send_result = \ send_result = \
send_post_via_server(signing_priv_key_pem, __version__, send_post_via_server(signing_priv_key_pem, __version__,
alice_dir, session_alice, 'alice', password, alice_dir, session_alice, 'alice', password,
@ -3386,7 +3414,7 @@ def test_client_to_server(base_dir: str):
event_date, event_time, event_end_time, location, event_date, event_time, event_end_time, location,
translate, buy_url, chat_url, auto_cw_cache, translate, buy_url, chat_url, auto_cw_cache,
True, None, None, conversation_id, convthread_id, True, None, None, conversation_id, convthread_id,
None, searchable_by) None, searchable_by, mitm_servers)
print('send_result: ' + str(send_result)) print('send_result: ' + str(send_result))
for _ in range(30): for _ in range(30):
@ -3455,6 +3483,7 @@ def test_client_to_server(base_dir: str):
print('\n\nAlice follows Bob') print('\n\nAlice follows Bob')
signing_priv_key_pem = None signing_priv_key_pem = None
mitm_servers = []
send_follow_request_via_server(alice_dir, session_alice, send_follow_request_via_server(alice_dir, session_alice,
'alice', password, 'alice', password,
alice_domain, alice_port, alice_domain, alice_port,
@ -3462,7 +3491,7 @@ def test_client_to_server(base_dir: str):
http_prefix, http_prefix,
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
alice_petnames_filename = data_dir(alice_dir) + '/' + \ alice_petnames_filename = data_dir(alice_dir) + '/' + \
'alice@' + alice_domain + '/petnames.txt' 'alice@' + alice_domain + '/petnames.txt'
alice_following_filename = \ alice_following_filename = \
@ -3497,6 +3526,7 @@ def test_client_to_server(base_dir: str):
alice_domain, alice_port) alice_domain, alice_port)
print('\n\nEVENT: Bob follows Alice') print('\n\nEVENT: Bob follows Alice')
mitm_servers = []
send_follow_request_via_server(alice_dir, session_alice, send_follow_request_via_server(alice_dir, session_alice,
'bob', 'bobpass', 'bob', 'bobpass',
bob_domain, bob_port, bob_domain, bob_port,
@ -3504,7 +3534,7 @@ def test_client_to_server(base_dir: str):
http_prefix, http_prefix,
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
alice_dir_str = data_dir(alice_dir) alice_dir_str = data_dir(alice_dir)
bob_dir_str = data_dir(bob_dir) bob_dir_str = data_dir(bob_dir)
for _ in range(20): for _ in range(20):
@ -3590,13 +3620,14 @@ def test_client_to_server(base_dir: str):
assert 'VEVENT' not in str(result) assert 'VEVENT' not in str(result)
print('\n\nEVENT: Bob likes the post') print('\n\nEVENT: Bob likes the post')
mitm_servers = []
send_like_via_server(bob_dir, session_bob, send_like_via_server(bob_dir, session_bob,
'bob', 'bobpass', 'bob', 'bobpass',
bob_domain, bob_port, bob_domain, bob_port,
http_prefix, outbox_post_id, http_prefix, outbox_post_id,
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(20): for _ in range(20):
if os.path.isdir(outbox_path) and os.path.isdir(inbox_path): if os.path.isdir(outbox_path) and os.path.isdir(inbox_path):
if len([name for name in os.listdir(outbox_path) if len([name for name in os.listdir(outbox_path)
@ -3621,13 +3652,14 @@ def test_client_to_server(base_dir: str):
print('EVENT: Post liked') print('EVENT: Post liked')
print('\n\nEVENT: Bob reacts to the post') print('\n\nEVENT: Bob reacts to the post')
mitm_servers = []
send_reaction_via_server(bob_dir, session_bob, send_reaction_via_server(bob_dir, session_bob,
'bob', 'bobpass', 'bob', 'bobpass',
bob_domain, bob_port, bob_domain, bob_port,
http_prefix, outbox_post_id, '😃', http_prefix, outbox_post_id, '😃',
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(20): for _ in range(20):
if os.path.isdir(outbox_path) and os.path.isdir(inbox_path): if os.path.isdir(outbox_path) and os.path.isdir(inbox_path):
if len([name for name in os.listdir(outbox_path) if len([name for name in os.listdir(outbox_path)
@ -3669,13 +3701,14 @@ def test_client_to_server(base_dir: str):
show_test_boxes('bob', bob_inbox_path, bob_outbox_path) show_test_boxes('bob', bob_inbox_path, bob_outbox_path)
print('\n\nEVENT: Bob repeats the post') print('\n\nEVENT: Bob repeats the post')
signing_priv_key_pem = None signing_priv_key_pem = None
mitm_servers = []
send_announce_via_server(bob_dir, session_bob, 'bob', password, send_announce_via_server(bob_dir, session_bob, 'bob', password,
bob_domain, bob_port, bob_domain, bob_port,
http_prefix, outbox_post_id, http_prefix, outbox_post_id,
cached_webfingers, cached_webfingers,
person_cache, True, __version__, person_cache, True, __version__,
signing_priv_key_pem, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(30): for _ in range(30):
if os.path.isdir(outbox_path) and os.path.isdir(inbox_path): if os.path.isdir(outbox_path) and os.path.isdir(inbox_path):
if len([name for name in os.listdir(outbox_path) if len([name for name in os.listdir(outbox_path)
@ -3711,12 +3744,13 @@ def test_client_to_server(base_dir: str):
print('\n\nEVENT: Alice deletes her post: ' + outbox_post_id + ' ' + print('\n\nEVENT: Alice deletes her post: ' + outbox_post_id + ' ' +
str(alice_posts_before)) str(alice_posts_before))
password = 'alicepass' password = 'alicepass'
mitm_servers = []
send_delete_via_server(alice_dir, session_alice, 'alice', password, send_delete_via_server(alice_dir, session_alice, 'alice', password,
alice_domain, alice_port, alice_domain, alice_port,
http_prefix, outbox_post_id, http_prefix, outbox_post_id,
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(30): for _ in range(30):
if os.path.isdir(inbox_path): if os.path.isdir(inbox_path):
test = len([name for name in os.listdir(inbox_path) test = len([name for name in os.listdir(inbox_path)
@ -3741,6 +3775,7 @@ def test_client_to_server(base_dir: str):
print('\n\nEVENT: Alice unfollows Bob') print('\n\nEVENT: Alice unfollows Bob')
password = 'alicepass' password = 'alicepass'
mitm_servers = []
send_unfollow_request_via_server(base_dir, session_alice, send_unfollow_request_via_server(base_dir, session_alice,
'alice', password, 'alice', password,
alice_domain, alice_port, alice_domain, alice_port,
@ -3748,7 +3783,7 @@ def test_client_to_server(base_dir: str):
http_prefix, http_prefix,
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, __version__, signing_priv_key_pem, True, __version__, signing_priv_key_pem,
system_language) system_language, mitm_servers)
for _ in range(10): for _ in range(10):
test_str = 'alice@' + alice_domain + ':' + str(alice_port) test_str = 'alice@' + alice_domain + ':' + str(alice_port)
if not text_in_file(test_str, bob_followers_filename): if not text_in_file(test_str, bob_followers_filename):
@ -6592,6 +6627,7 @@ def test_update_actor(base_dir: str):
'=gv5G\n' + \ '=gv5G\n' + \
'-----END PGP PUBLIC KEY BLOCK-----' '-----END PGP PUBLIC KEY BLOCK-----'
signing_priv_key_pem = None signing_priv_key_pem = None
mitm_servers = []
actor_update = \ actor_update = \
pgp_public_key_upload(alice_dir, session_alice, pgp_public_key_upload(alice_dir, session_alice,
'alice', password, 'alice', password,
@ -6599,7 +6635,7 @@ def test_update_actor(base_dir: str):
http_prefix, http_prefix,
cached_webfingers, person_cache, cached_webfingers, person_cache,
True, pub_key, signing_priv_key_pem, True, pub_key, signing_priv_key_pem,
system_language) system_language, mitm_servers)
print('actor update result: ' + str(actor_update)) print('actor update result: ' + str(actor_update))
assert actor_update assert actor_update

View File

@ -5325,3 +5325,37 @@ def browser_supports_download_filename(ua_str: str) -> bool:
if 'mozilla' in ua_str or 'firefox' in ua_str: if 'mozilla' in ua_str or 'firefox' in ua_str:
return True return True
return False return False
def detect_mitm(self) -> bool:
"""Detect if a request contains a MiTM
"""
mitm_domains = ['cloudflare']
# look for domains within these headers
check_headers = (
'Server', 'Report-To', 'Report-to', 'report-to',
'Expect-CT', 'Expect-Ct', 'expect-ct'
)
for interloper in mitm_domains:
for header_name in check_headers:
if not self.headers.get(header_name):
continue
if interloper in str(self.headers[header_name]):
print('MITM: ' + header_name + ' = ' +
str(self.headers[header_name]))
return True
# The presence of these headers on their own indicates a MiTM
mitm_headers = (
'CF-Connecting-IP', 'CF-RAY', 'CF-IPCountry', 'CF-Visitor',
'CDN-Loop', 'CF-Worker', 'CF-Cache-Status'
)
for header_name in mitm_headers:
if self.headers.get(header_name):
print('MITM: ' + header_name + ' = ' +
self.headers[header_name])
return True
if self.headers.get(header_name.lower()):
print('MITM: ' + header_name + ' = ' +
self.headers[header_name.lower()])
return True
return False

View File

@ -44,7 +44,8 @@ def html_confirm_delete(server,
dogwhistles: {}, dogwhistles: {},
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}) -> str: auto_cw_cache: {},
mitm_servers: []) -> str:
"""Shows a screen asking to confirm the deletion of a post """Shows a screen asking to confirm the deletion of a post
""" """
if '/statuses/' not in message_id: if '/statuses/' not in message_id:
@ -105,7 +106,7 @@ def html_confirm_delete(server,
cw_lists, lists_enabled, timezone, mitm, cw_lists, lists_enabled, timezone, mitm,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, buy_sites, minimize_all_images, None, buy_sites,
auto_cw_cache) auto_cw_cache, mitm_servers)
delete_post_str += '<center>' delete_post_str += '<center>'
delete_post_str += \ delete_post_str += \
' <p class="followText">' + \ ' <p class="followText">' + \

View File

@ -55,14 +55,15 @@ def html_conversation_view(authorized: bool, post_id: str,
block_federated: [], block_federated: [],
auto_cw_cache: {}, auto_cw_cache: {},
ua_str: str, ua_str: str,
default_timeline: str) -> str: default_timeline: str,
mitm_servers: []) -> str:
"""Show a page containing a conversation thread """Show a page containing a conversation thread
""" """
conv_posts = \ conv_posts = \
download_conversation_posts(authorized, download_conversation_posts(authorized,
session, http_prefix, base_dir, session, http_prefix, base_dir,
nickname, domain, nickname, domain,
post_id, debug) post_id, debug, mitm_servers)
if not conv_posts: if not conv_posts:
return None return None
@ -154,7 +155,8 @@ def html_conversation_view(authorized: bool, post_id: str,
timezone, False, bold_reading, timezone, False, bold_reading,
dogwhistles, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
if post_str: if post_str:
conv_str += \ conv_str += \
current_reading_str + text_mode_separator + \ current_reading_str + text_mode_separator + \

View File

@ -273,7 +273,8 @@ def html_new_post(edit_post_params: {},
buy_sites: {}, buy_sites: {},
default_buy_site: str, default_buy_site: str,
auto_cw_cache: {}, auto_cw_cache: {},
searchable_by_default: str) -> str: searchable_by_default: str,
mitm_servers: []) -> str:
"""New post screen """New post screen
""" """
# get the json if this is an edited post # get the json if this is an edited post
@ -466,7 +467,8 @@ def html_new_post(edit_post_params: {},
timezone, False, timezone, False,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
new_post_text += \ new_post_text += \
open_content_warning(replied_to_post, translate) open_content_warning(replied_to_post, translate)
# about the author # about the author

View File

@ -42,7 +42,8 @@ def _html_front_screen_posts(recent_posts_cache: {}, max_recent_posts: int,
dogwhistles: {}, dogwhistles: {},
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}) -> str: auto_cw_cache: {},
mitm_servers: []) -> str:
"""Shows posts on the front screen of a news instance """Shows posts on the front screen of a news instance
These should only be public blog posts from the features timeline These should only be public blog posts from the features timeline
which is the blog timeline of the news actor which is the blog timeline of the news actor
@ -99,7 +100,8 @@ def _html_front_screen_posts(recent_posts_cache: {}, max_recent_posts: int,
timezone, False, timezone, False,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
if post_str: if post_str:
profile_str += post_str + separator_str profile_str += post_str + separator_str
ctr += 1 ctr += 1
@ -132,7 +134,8 @@ def html_front_screen(signing_priv_key_pem: str,
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}, auto_cw_cache: {},
known_epicyon_instances: []) -> str: known_epicyon_instances: [],
mitm_servers: []) -> str:
"""Show the news instance front screen """Show the news instance front screen
""" """
bold_reading = False bold_reading = False
@ -211,7 +214,8 @@ def html_front_screen(signing_priv_key_pem: str,
bold_reading, dogwhistles, bold_reading, dogwhistles,
min_images_for_accounts, min_images_for_accounts,
buy_sites, buy_sites,
auto_cw_cache) + license_str auto_cw_cache,
mitm_servers) + license_str
# Footer which is only used for system accounts # Footer which is only used for system accounts
profile_footer_str = ' </td>\n' profile_footer_str = ' </td>\n'

View File

@ -45,7 +45,8 @@ def html_likers_of_post(base_dir: str, nickname: str,
bold_reading: bool, dogwhistles: {}, bold_reading: bool, dogwhistles: {},
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, auto_cw_cache: {}, buy_sites: {}, auto_cw_cache: {},
dict_name: str) -> str: dict_name: str,
mitm_servers: []) -> str:
"""Returns html for a screen showing who liked a post """Returns html for a screen showing who liked a post
""" """
css_filename = base_dir + '/epicyon-profile.css' css_filename = base_dir + '/epicyon-profile.css'
@ -118,7 +119,8 @@ def html_likers_of_post(base_dir: str, nickname: str,
timezone, mitm, bold_reading, timezone, mitm, bold_reading,
dogwhistles, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
# show likers beneath the post # show likers beneath the post
obj = post_json_object obj = post_json_object

View File

@ -67,7 +67,8 @@ def html_moderation(default_timeline: str,
reverse_sequence: bool, reverse_sequence: bool,
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}, auto_cw_cache: {},
known_epicyon_instances: []) -> str: known_epicyon_instances: [],
mitm_servers: []) -> str:
"""Show the moderation feed as html """Show the moderation feed as html
This is what you see when selecting the "mod" timeline This is what you see when selecting the "mod" timeline
""" """
@ -97,7 +98,7 @@ def html_moderation(default_timeline: str,
timezone, bold_reading, dogwhistles, ua_str, timezone, bold_reading, dogwhistles, ua_str,
min_images_for_accounts, reverse_sequence, None, min_images_for_accounts, reverse_sequence, None,
buy_sites, auto_cw_cache, show_announces, buy_sites, auto_cw_cache, show_announces,
known_epicyon_instances) known_epicyon_instances, mitm_servers)
def html_account_info(translate: {}, def html_account_info(translate: {},
@ -106,7 +107,8 @@ def html_account_info(translate: {},
search_handle: str, debug: bool, search_handle: str, debug: bool,
system_language: str, signing_priv_key_pem: str, system_language: str, signing_priv_key_pem: str,
back_url: str, back_url: str,
block_federated: []) -> str: block_federated: [],
mitm_servers: []) -> str:
"""Shows which domains a search handle interacts with. """Shows which domains a search handle interacts with.
This screen is shown if a moderator enters a handle and selects info This screen is shown if a moderator enters a handle and selects info
on the moderation screen on the moderation screen
@ -162,13 +164,15 @@ def html_account_info(translate: {},
http_prefix, debug, http_prefix, debug,
__version__, word_frequency, __version__, word_frequency,
system_language, system_language,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
# get a list of any blocked followers # get a list of any blocked followers
followers_list = \ followers_list = \
download_follow_collection(signing_priv_key_pem, download_follow_collection(signing_priv_key_pem,
'followers', session, 'followers', session,
http_prefix, search_actor, 1, 5, debug) http_prefix, search_actor, 1, 5, debug,
mitm_servers)
blocked_followers = [] blocked_followers = []
for follower_actor in followers_list: for follower_actor in followers_list:
follower_nickname = get_nickname_from_actor(follower_actor) follower_nickname = get_nickname_from_actor(follower_actor)
@ -187,7 +191,8 @@ def html_account_info(translate: {},
following_list = \ following_list = \
download_follow_collection(signing_priv_key_pem, download_follow_collection(signing_priv_key_pem,
'following', session, 'following', session,
http_prefix, search_actor, 1, 5, debug) http_prefix, search_actor, 1, 5, debug,
mitm_servers)
blocked_following = [] blocked_following = []
for following_actor in following_list: for following_actor in following_list:
following_nickname = get_nickname_from_actor(following_actor) following_nickname = get_nickname_from_actor(following_actor)

View File

@ -35,7 +35,8 @@ def _html_podcast_chapters(link_url: str,
session, session_onion, session_i2p, session, session_onion, session_i2p,
http_prefix: str, domain: str, http_prefix: str, domain: str,
podcast_properties: {}, podcast_properties: {},
debug: bool) -> str: debug: bool,
mitm_servers: []) -> str:
"""Returns html for chapters of a podcast """Returns html for chapters of a podcast
""" """
if not podcast_properties: if not podcast_properties:
@ -69,7 +70,7 @@ def _html_podcast_chapters(link_url: str,
if 'json' in url_type: if 'json' in url_type:
chapters_json = \ chapters_json = \
get_json(None, curr_session, chapters_url, get_json(None, curr_session, chapters_url,
as_header, None, debug, __version__, as_header, None, debug, mitm_servers, __version__,
http_prefix, domain) http_prefix, domain)
if not get_json_valid(chapters_json): if not get_json_valid(chapters_json):
return '' return ''
@ -309,7 +310,8 @@ def html_podcast_episode(translate: {},
newswire_item: [], newswire_item: [],
text_mode_banner: str, text_mode_banner: str,
session, session_onion, session_i2p, session, session_onion, session_i2p,
http_prefix: str, debug: bool) -> str: http_prefix: str, debug: bool,
mitm_servers: []) -> str:
"""Returns html for a podcast episode, an item from the newswire """Returns html for a podcast episode, an item from the newswire
""" """
css_filename = base_dir + '/epicyon-podcast.css' css_filename = base_dir + '/epicyon-podcast.css'
@ -513,7 +515,7 @@ def html_podcast_episode(translate: {},
_html_podcast_chapters(link_url, _html_podcast_chapters(link_url,
session, session_onion, session_i2p, session, session_onion, session_i2p,
http_prefix, domain, http_prefix, domain,
podcast_properties, debug) podcast_properties, debug, mitm_servers)
podcast_str += ' </center>\n' podcast_str += ' </center>\n'
podcast_str += '</div>\n' podcast_str += '</div>\n'

View File

@ -490,7 +490,8 @@ def _get_post_from_recent_cache(session,
signing_priv_key_pem: str, signing_priv_key_pem: str,
first_post_id: str, first_post_id: str,
ua_str: str, ua_str: str,
translate: {}) -> str: translate: {},
mitm_servers: []) -> str:
"""Attempts to get the html post from the recent posts cache in memory """Attempts to get the html post from the recent posts cache in memory
""" """
if box_name == 'tlmedia': if box_name == 'tlmedia':
@ -517,7 +518,7 @@ def _get_post_from_recent_cache(session,
update_avatar_image_cache(signing_priv_key_pem, update_avatar_image_cache(signing_priv_key_pem,
session, base_dir, http_prefix, session, base_dir, http_prefix,
post_actor, avatar_url, person_cache, post_actor, avatar_url, person_cache,
allow_downloads) allow_downloads, mitm_servers)
_log_post_timing(enable_timing_log, post_start_time, '2.2') _log_post_timing(enable_timing_log, post_start_time, '2.2')
@ -1395,7 +1396,8 @@ def _get_post_title_announce_html(base_dir: str,
message_id_str: str, message_id_str: str,
container_class_icons: str, container_class_icons: str,
container_class: str, container_class: str,
mitm: bool) -> (str, str, str, str): mitm: bool,
mitm_servers: []) -> (str, str, str, str):
"""Returns the announce title of a post containing names of participants """Returns the announce title of a post containing names of participants
x announces y x announces y
""" """
@ -1464,7 +1466,7 @@ def _get_post_title_announce_html(base_dir: str,
announce_display_name, announce_display_name,
nickname, announce_handle) nickname, announce_handle)
if mitm: if mitm or announce_domain in mitm_servers:
title_str += _mitm_warning_html(translate) title_str += _mitm_warning_html(translate)
# show avatar of person replied to # show avatar of person replied to
@ -1621,7 +1623,8 @@ def _get_post_title_reply_html(base_dir: str,
container_class: str, container_class: str,
mitm: bool, mitm: bool,
signing_priv_key_pem: str, signing_priv_key_pem: str,
session, debug: bool) -> (str, str, str, str): session, debug: bool,
mitm_servers: []) -> (str, str, str, str):
"""Returns the reply title of a post containing names of participants """Returns the reply title of a post containing names of participants
x replies to y x replies to y
""" """
@ -1663,7 +1666,7 @@ def _get_post_title_reply_html(base_dir: str,
reply_post_json = \ reply_post_json = \
get_json(signing_priv_key_pem, get_json(signing_priv_key_pem,
session, reply_url, session, reply_url,
headers, None, debug, headers, None, debug, mitm_servers,
__version__, http_prefix, domain) __version__, http_prefix, domain)
if get_json_valid(reply_post_json): if get_json_valid(reply_post_json):
if isinstance(reply_post_json, dict): if isinstance(reply_post_json, dict):
@ -1742,7 +1745,7 @@ def _get_post_title_reply_html(base_dir: str,
_get_reply_html(translate, in_reply_to, reply_display_name, _get_reply_html(translate, in_reply_to, reply_display_name,
nickname, post_json_object, reply_handle) nickname, post_json_object, reply_handle)
if mitm: if mitm or reply_domain in mitm_servers:
title_str += _mitm_warning_html(translate) title_str += _mitm_warning_html(translate)
_log_post_timing(enable_timing_log, post_start_time, '13.7') _log_post_timing(enable_timing_log, post_start_time, '13.7')
@ -1792,7 +1795,8 @@ def _get_post_title_html(base_dir: str,
mitm: bool, mitm: bool,
signing_priv_key_pem: str, signing_priv_key_pem: str,
session, session,
debug: bool) -> (str, str, str, str): debug: bool,
mitm_servers: []) -> (str, str, str, str):
"""Returns the title of a post containing names of participants """Returns the title of a post containing names of participants
x replies to y, x announces y, etc x replies to y, x announces y, etc
""" """
@ -1835,7 +1839,8 @@ def _get_post_title_html(base_dir: str,
container_class_icons, container_class_icons,
container_class, mitm, container_class, mitm,
signing_priv_key_pem, signing_priv_key_pem,
session, debug) session, debug,
mitm_servers)
def _get_footer_with_icons(show_icons: bool, def _get_footer_with_icons(show_icons: bool,
@ -2127,7 +2132,8 @@ def individual_post_as_html(signing_priv_key_pem: str,
minimize_all_images: bool, minimize_all_images: bool,
first_post_id: str, first_post_id: str,
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}) -> str: auto_cw_cache: {},
mitm_servers: []) -> str:
""" Shows a single post as html """ Shows a single post as html
""" """
if not post_json_object: if not post_json_object:
@ -2197,7 +2203,8 @@ def individual_post_as_html(signing_priv_key_pem: str,
max_recent_posts, max_recent_posts,
signing_priv_key_pem, signing_priv_key_pem,
first_post_id, ua_str, first_post_id, ua_str,
translate) translate,
mitm_servers)
if post_html: if post_html:
return post_html return post_html
if use_cache_only and post_json_object['type'] != 'Announce': if use_cache_only and post_json_object['type'] != 'Announce':
@ -2210,7 +2217,8 @@ def individual_post_as_html(signing_priv_key_pem: str,
base_dir, http_prefix, base_dir, http_prefix,
post_actor, person_cache, post_actor, person_cache,
avatar_url, allow_downloads, avatar_url, allow_downloads,
signing_priv_key_pem) signing_priv_key_pem,
mitm_servers)
_log_post_timing(enable_timing_log, post_start_time, '5') _log_post_timing(enable_timing_log, post_start_time, '5')
@ -2230,7 +2238,7 @@ def individual_post_as_html(signing_priv_key_pem: str,
webfinger_handle(session, post_actor_handle, http_prefix, webfinger_handle(session, post_actor_handle, http_prefix,
cached_webfingers, cached_webfingers,
domain, __version__, False, False, domain, __version__, False, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
avatar_url2 = None avatar_url2 = None
display_name = None display_name = None
@ -2246,7 +2254,8 @@ def individual_post_as_html(signing_priv_key_pem: str,
http_prefix, http_prefix,
nickname, domain, nickname, domain,
'outbox', 72367, 'outbox', 72367,
system_language) system_language,
mitm_servers)
_log_post_timing(enable_timing_log, post_start_time, '6') _log_post_timing(enable_timing_log, post_start_time, '6')
@ -2318,7 +2327,8 @@ def individual_post_as_html(signing_priv_key_pem: str,
blocked_cache, block_federated, blocked_cache, block_federated,
bold_reading, bold_reading,
show_vote_posts, show_vote_posts,
languages_understood) languages_understood,
mitm_servers)
if not post_json_announce: if not post_json_announce:
# if the announce could not be downloaded then mark it as rejected # if the announce could not be downloaded then mark it as rejected
announced_post_id = remove_id_ending(post_json_object['id']) announced_post_id = remove_id_ending(post_json_object['id'])
@ -2346,7 +2356,8 @@ def individual_post_as_html(signing_priv_key_pem: str,
max_recent_posts, max_recent_posts,
signing_priv_key_pem, signing_priv_key_pem,
first_post_id, ua_str, first_post_id, ua_str,
translate) translate,
mitm_servers)
if post_html: if post_html:
return post_html return post_html
@ -2652,7 +2663,8 @@ def individual_post_as_html(signing_priv_key_pem: str,
container_class_icons, container_class_icons,
container_class, mitm, container_class, mitm,
signing_priv_key_pem, signing_priv_key_pem,
session, False) session, False,
mitm_servers)
title_str += title_str2 title_str += title_str2
_log_post_timing(enable_timing_log, post_start_time, '14') _log_post_timing(enable_timing_log, post_start_time, '14')
@ -3095,7 +3107,7 @@ def html_individual_post(recent_posts_cache: {}, max_recent_posts: int,
bold_reading: bool, dogwhistles: {}, bold_reading: bool, dogwhistles: {},
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}) -> str: auto_cw_cache: {}, mitm_servers: []) -> str:
"""Show an individual post as html """Show an individual post as html
""" """
original_post_json = post_json_object original_post_json = post_json_object
@ -3182,7 +3194,7 @@ def html_individual_post(recent_posts_cache: {}, max_recent_posts: int,
cw_lists, lists_enabled, timezone, mitm, cw_lists, lists_enabled, timezone, mitm,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, buy_sites, minimize_all_images, None, buy_sites,
auto_cw_cache) auto_cw_cache, mitm_servers)
message_id = remove_id_ending(post_json_object['id']) message_id = remove_id_ending(post_json_object['id'])
# show the previous posts # show the previous posts
@ -3234,7 +3246,8 @@ def html_individual_post(recent_posts_cache: {}, max_recent_posts: int,
dogwhistles, dogwhistles,
minimize_all_images, minimize_all_images,
None, buy_sites, None, buy_sites,
auto_cw_cache) + post_str auto_cw_cache,
mitm_servers) + post_str
# show the following posts # show the following posts
post_filename = locate_post(base_dir, nickname, domain, message_id) post_filename = locate_post(base_dir, nickname, domain, message_id)
@ -3275,7 +3288,8 @@ def html_individual_post(recent_posts_cache: {}, max_recent_posts: int,
timezone, False, timezone, False,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
css_filename = base_dir + '/epicyon-profile.css' css_filename = base_dir + '/epicyon-profile.css'
if os.path.isfile(base_dir + '/epicyon.css'): if os.path.isfile(base_dir + '/epicyon.css'):
css_filename = base_dir + '/epicyon.css' css_filename = base_dir + '/epicyon.css'
@ -3327,7 +3341,8 @@ def html_post_replies(recent_posts_cache: {}, max_recent_posts: int,
dogwhistles: {}, dogwhistles: {},
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}) -> str: auto_cw_cache: {},
mitm_servers: []) -> str:
"""Show the replies to an individual post as html """Show the replies to an individual post as html
""" """
replies_str = '' replies_str = ''
@ -3359,7 +3374,8 @@ def html_post_replies(recent_posts_cache: {}, max_recent_posts: int,
timezone, False, timezone, False,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
css_filename = base_dir + '/epicyon-profile.css' css_filename = base_dir + '/epicyon-profile.css'
if os.path.isfile(base_dir + '/epicyon.css'): if os.path.isfile(base_dir + '/epicyon.css'):
@ -3394,7 +3410,8 @@ def html_emoji_reaction_picker(recent_posts_cache: {}, max_recent_posts: int,
dogwhistles: {}, dogwhistles: {},
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}) -> str: auto_cw_cache: {},
mitm_servers: []) -> str:
"""Returns the emoji picker screen """Returns the emoji picker screen
""" """
minimize_all_images = False minimize_all_images = False
@ -3423,7 +3440,7 @@ def html_emoji_reaction_picker(recent_posts_cache: {}, max_recent_posts: int,
cw_lists, lists_enabled, timezone, False, cw_lists, lists_enabled, timezone, False,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, buy_sites, minimize_all_images, None, buy_sites,
auto_cw_cache) auto_cw_cache, mitm_servers)
reactions_filename = base_dir + '/emoji/reactions.json' reactions_filename = base_dir + '/emoji/reactions.json'
if not os.path.isfile(reactions_filename): if not os.path.isfile(reactions_filename):

View File

@ -248,7 +248,8 @@ def html_profile_after_search(authorized: bool,
buy_sites: {}, buy_sites: {},
max_shares_on_profile: int, max_shares_on_profile: int,
no_of_books: int, no_of_books: int,
auto_cw_cache: {}) -> str: auto_cw_cache: {},
mitm_servers: []) -> str:
"""Show a profile page after a search for a fediverse address """Show a profile page after a search for a fediverse address
""" """
http = False http = False
@ -275,7 +276,8 @@ def html_profile_after_search(authorized: bool,
profile_json, as_header = \ profile_json, as_header = \
get_actor_json(from_domain, profile_handle, http, get_actor_json(from_domain, profile_handle, http,
gnunet, ipfs, ipns, debug, False, gnunet, ipfs, ipns, debug, False,
signing_priv_key_pem, session) signing_priv_key_pem, session,
mitm_servers)
if not profile_json: if not profile_json:
return None return None
if not profile_json.get('id'): if not profile_json.get('id'):
@ -542,7 +544,8 @@ def html_profile_after_search(authorized: bool,
user_feed = \ user_feed = \
parse_user_feed(signing_priv_key_pem, parse_user_feed(signing_priv_key_pem,
session, outbox_url, as_header, project_version, session, outbox_url, as_header, project_version,
http_prefix, from_domain, debug, 0) http_prefix, from_domain, debug, 0,
mitm_servers)
if not user_feed: if not user_feed:
if debug: if debug:
print('DEBUG: no user feed in profile preview') print('DEBUG: no user feed in profile preview')
@ -566,8 +569,8 @@ def html_profile_after_search(authorized: bool,
} }
item = \ item = \
get_json(signing_priv_key_pem, session, item['object'], get_json(signing_priv_key_pem, session, item['object'],
as_header2, None, debug, __version__, as_header2, None, debug, mitm_servers,
http_prefix, from_domain) __version__, http_prefix, from_domain)
if debug: if debug:
print('DEBUG: resolved public feed announce ' + print('DEBUG: resolved public feed announce ' +
str(item)) str(item))
@ -609,7 +612,8 @@ def html_profile_after_search(authorized: bool,
timezone, False, timezone, False,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
if not profile_post_html: if not profile_post_html:
if debug: if debug:
print('DEBUG: no html produced for profile post: ' + print('DEBUG: no html produced for profile post: ' +
@ -1032,7 +1036,8 @@ def html_profile(signing_priv_key_pem: str,
sites_unavailable: [], sites_unavailable: [],
no_of_books: int, no_of_books: int,
auto_cw_cache: {}, auto_cw_cache: {},
known_epicyon_instances: []) -> str: known_epicyon_instances: [],
mitm_servers: []) -> str:
"""Show the profile page as html """Show the profile page as html
""" """
show_moved_accounts = False show_moved_accounts = False
@ -1065,7 +1070,8 @@ def html_profile(signing_priv_key_pem: str,
lists_enabled, {}, lists_enabled, {},
min_images_for_accounts, buy_sites, min_images_for_accounts, buy_sites,
auto_cw_cache, auto_cw_cache,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
domain, port = get_domain_from_actor(profile_json['id']) domain, port = get_domain_from_actor(profile_json['id'])
if not domain: if not domain:
@ -1172,7 +1178,8 @@ def html_profile(signing_priv_key_pem: str,
if website_url: if website_url:
if site_is_verified(session, base_dir, http_prefix, if site_is_verified(session, base_dir, http_prefix,
nickname, domain, nickname, domain,
website_url, False, debug): website_url, False, debug,
mitm_servers):
donate_section += \ donate_section += \
'<p><div class="verified_site">' + \ '<p><div class="verified_site">' + \
translate['Website'] + ': ' + \ translate['Website'] + ': ' + \
@ -1202,7 +1209,8 @@ def html_profile(signing_priv_key_pem: str,
if blog_address: if blog_address:
if site_is_verified(session, base_dir, http_prefix, if site_is_verified(session, base_dir, http_prefix,
nickname, domain, nickname, domain,
blog_address, False, debug): blog_address, False, debug,
mitm_servers):
donate_section += \ donate_section += \
'<p><div class="verified_site">' + \ '<p><div class="verified_site">' + \
'Blog: ' + verified_site_checkmark + \ 'Blog: ' + verified_site_checkmark + \
@ -1637,7 +1645,8 @@ def html_profile(signing_priv_key_pem: str,
min_images_for_accounts, min_images_for_accounts,
max_profile_posts, max_profile_posts,
buy_sites, buy_sites,
auto_cw_cache) + license_str auto_cw_cache,
mitm_servers) + license_str
if not is_group: if not is_group:
if selected == 'following': if selected == 'following':
profile_str += \ profile_str += \
@ -1653,7 +1662,8 @@ def html_profile(signing_priv_key_pem: str,
dormant_months, debug, dormant_months, debug,
signing_priv_key_pem, signing_priv_key_pem,
sites_unavailable, sites_unavailable,
system_language) system_language,
mitm_servers)
if show_moved_accounts and selected == 'moved': if show_moved_accounts and selected == 'moved':
profile_str += \ profile_str += \
_html_profile_following(translate, base_dir, http_prefix, _html_profile_following(translate, base_dir, http_prefix,
@ -1668,7 +1678,8 @@ def html_profile(signing_priv_key_pem: str,
dormant_months, debug, dormant_months, debug,
signing_priv_key_pem, signing_priv_key_pem,
sites_unavailable, sites_unavailable,
system_language) system_language,
mitm_servers)
if selected == 'followers': if selected == 'followers':
profile_str += \ profile_str += \
_html_profile_following(translate, base_dir, http_prefix, _html_profile_following(translate, base_dir, http_prefix,
@ -1680,7 +1691,7 @@ def html_profile(signing_priv_key_pem: str,
selected, users_path, page_number, selected, users_path, page_number,
max_items_per_page, dormant_months, debug, max_items_per_page, dormant_months, debug,
signing_priv_key_pem, sites_unavailable, signing_priv_key_pem, sites_unavailable,
system_language) system_language, mitm_servers)
if authorized and selected == 'inactive': if authorized and selected == 'inactive':
profile_str += \ profile_str += \
_html_profile_following(translate, base_dir, http_prefix, _html_profile_following(translate, base_dir, http_prefix,
@ -1692,7 +1703,7 @@ def html_profile(signing_priv_key_pem: str,
selected, users_path, page_number, selected, users_path, page_number,
max_items_per_page, dormant_months, debug, max_items_per_page, dormant_months, debug,
signing_priv_key_pem, sites_unavailable, signing_priv_key_pem, sites_unavailable,
system_language) system_language, mitm_servers)
if not is_group: if not is_group:
if selected == 'roles': if selected == 'roles':
profile_str += \ profile_str += \
@ -1745,7 +1756,8 @@ def _html_profile_posts(recent_posts_cache: {}, max_recent_posts: int,
min_images_for_accounts: [], min_images_for_accounts: [],
max_profile_posts: int, max_profile_posts: int,
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}) -> str: auto_cw_cache: {},
mitm_servers: []) -> str:
"""Shows posts on the profile screen """Shows posts on the profile screen
These should only be public posts These should only be public posts
""" """
@ -1804,7 +1816,8 @@ def _html_profile_posts(recent_posts_cache: {}, max_recent_posts: int,
timezone, False, timezone, False,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
if post_str and item_id not in shown_items: if post_str and item_id not in shown_items:
profile_str += post_str + separator_str profile_str += post_str + separator_str
shown_items.append(item_id) shown_items.append(item_id)
@ -1826,7 +1839,8 @@ def _html_profile_following(translate: {}, base_dir: str, http_prefix: str,
dormant_months: int, debug: bool, dormant_months: int, debug: bool,
signing_priv_key_pem: str, signing_priv_key_pem: str,
sites_unavailable: [], sites_unavailable: [],
system_language: str) -> str: system_language: str,
mitm_servers: []) -> str:
"""Shows following on the profile screen """Shows following on the profile screen
""" """
profile_str = '' profile_str = ''
@ -1874,7 +1888,9 @@ def _html_profile_following(translate: {}, base_dir: str, http_prefix: str,
authorized, nickname, authorized, nickname,
http_prefix, project_version, http_prefix, project_version,
dormant, offline, dormant, offline,
debug, system_language, buttons) debug, system_language,
mitm_servers,
buttons)
if authorized and max_items_per_page and page_number: if authorized and max_items_per_page and page_number:
if len(following_json['orderedItems']) >= max_items_per_page: if len(following_json['orderedItems']) >= max_items_per_page:
@ -3657,7 +3673,8 @@ def _individual_follow_as_html(signing_priv_key_pem: str,
offline: bool, offline: bool,
debug: bool, debug: bool,
system_language: str, system_language: str,
buttons=[]) -> str: mitm_servers: [],
buttons: list = []) -> str:
"""An individual follow entry on the profile screen """An individual follow entry on the profile screen
""" """
follow_url_nickname = get_nickname_from_actor(follow_url) follow_url_nickname = get_nickname_from_actor(follow_url)
@ -3683,7 +3700,7 @@ def _individual_follow_as_html(signing_priv_key_pem: str,
webfinger_handle(session, follow_url_handle, http_prefix, webfinger_handle(session, follow_url_handle, http_prefix,
cached_webfingers, cached_webfingers,
domain, __version__, debug, False, domain, __version__, debug, False,
signing_priv_key_pem) signing_priv_key_pem, mitm_servers)
origin_domain = domain origin_domain = domain
(_, _, _, _, _, avatar_url2, (_, _, _, _, _, avatar_url2,
@ -3696,7 +3713,8 @@ def _individual_follow_as_html(signing_priv_key_pem: str,
http_prefix, http_prefix,
follow_url_nickname, follow_url_nickname,
domain, 'outbox', 43036, domain, 'outbox', 43036,
system_language) system_language,
mitm_servers)
if avatar_url2: if avatar_url2:
avatar_url = avatar_url2 avatar_url = avatar_url2

View File

@ -734,7 +734,8 @@ def html_history_search(translate: {}, base_dir: str,
dogwhistles: {}, access_keys: {}, dogwhistles: {}, access_keys: {},
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}) -> str: auto_cw_cache: {},
mitm_servers: []) -> str:
"""Show a page containing search results for your post history """Show a page containing search results for your post history
""" """
if historysearch.startswith("'"): if historysearch.startswith("'"):
@ -851,7 +852,8 @@ def html_history_search(translate: {}, base_dir: str,
timezone, False, bold_reading, timezone, False, bold_reading,
dogwhistles, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
if post_str: if post_str:
history_search_form += separator_str + post_str history_search_form += separator_str + post_str
index += 1 index += 1
@ -881,7 +883,8 @@ def html_hashtag_search(nickname: str, domain: str, port: int,
access_keys: {}, box_name: str, access_keys: {}, box_name: str,
min_images_for_accounts: [], min_images_for_accounts: [],
buy_sites: {}, auto_cw_cache: {}, buy_sites: {}, auto_cw_cache: {},
ua_str: str) -> str: ua_str: str,
mitm_servers: []) -> str:
"""Show a page containing search results for a hashtag """Show a page containing search results for a hashtag
or after selecting a hashtag from the swarm or after selecting a hashtag from the swarm
""" """
@ -1080,7 +1083,8 @@ def html_hashtag_search(nickname: str, domain: str, port: int,
lists_enabled, timezone, False, lists_enabled, timezone, False,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
if post_str: if post_str:
hashtag_search_form += \ hashtag_search_form += \
text_mode_separator + separator_str + post_str text_mode_separator + separator_str + post_str
@ -1124,7 +1128,8 @@ def html_hashtag_search_remote(nickname: str, domain: str, port: int,
dogwhistles: {}, dogwhistles: {},
min_images_for_accounts: [], min_images_for_accounts: [],
debug: bool, buy_sites: {}, debug: bool, buy_sites: {},
auto_cw_cache: {}) -> str: auto_cw_cache: {},
mitm_servers: []) -> str:
"""Show a page containing search results for a remote hashtag """Show a page containing search results for a remote hashtag
""" """
hashtag = urllib.parse.unquote(hashtag_url.split('/')[-1]) hashtag = urllib.parse.unquote(hashtag_url.split('/')[-1])
@ -1139,7 +1144,7 @@ def html_hashtag_search_remote(nickname: str, domain: str, port: int,
hashtag_json = \ hashtag_json = \
get_json(signing_priv_key_pem, get_json(signing_priv_key_pem,
session, hashtag_url_with_page, as_header, None, debug, session, hashtag_url_with_page, as_header, None, debug,
__version__, http_prefix, domain) mitm_servers, __version__, http_prefix, domain)
lines = [] lines = []
if get_json_valid(hashtag_json): if get_json_valid(hashtag_json):
if 'orderedItems' in hashtag_json: if 'orderedItems' in hashtag_json:
@ -1213,7 +1218,7 @@ def html_hashtag_search_remote(nickname: str, domain: str, port: int,
post_json_object = \ post_json_object = \
get_json(signing_priv_key_pem, get_json(signing_priv_key_pem,
session, post_id, as_header, None, debug, session, post_id, as_header, None, debug,
__version__, http_prefix, domain) mitm_servers, __version__, http_prefix, domain)
if not get_json_valid(post_json_object): if not get_json_valid(post_json_object):
print('No hashtag post for ' + post_id) print('No hashtag post for ' + post_id)
continue continue
@ -1287,7 +1292,8 @@ def html_hashtag_search_remote(nickname: str, domain: str, port: int,
lists_enabled, timezone, False, lists_enabled, timezone, False,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, None, minimize_all_images, None,
buy_sites, auto_cw_cache) buy_sites, auto_cw_cache,
mitm_servers)
if post_str: if post_str:
hashtag_search_form += \ hashtag_search_form += \
text_mode_separator + separator_str + post_str text_mode_separator + separator_str + post_str

View File

@ -523,7 +523,8 @@ def html_timeline(default_timeline: str,
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}, auto_cw_cache: {},
show_announces: bool, show_announces: bool,
known_epicyon_instances: []) -> str: known_epicyon_instances: [],
mitm_servers: []) -> str:
"""Show the timeline as html """Show the timeline as html
""" """
enable_timing_log = False enable_timing_log = False
@ -1136,7 +1137,8 @@ def html_timeline(default_timeline: str,
bold_reading, dogwhistles, bold_reading, dogwhistles,
minimize_all_images, minimize_all_images,
first_post_id, buy_sites, first_post_id, buy_sites,
auto_cw_cache) auto_cw_cache,
mitm_servers)
_log_timeline_timing(enable_timing_log, _log_timeline_timing(enable_timing_log,
timeline_start_time, box_name, '12') timeline_start_time, box_name, '12')
@ -1418,7 +1420,8 @@ def html_shares(default_timeline: str,
reverse_sequence: bool, reverse_sequence: bool,
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}, auto_cw_cache: {},
known_epicyon_instances: []) -> str: known_epicyon_instances: [],
mitm_servers: []) -> str:
"""Show the shares timeline as html """Show the shares timeline as html
""" """
manually_approve_followers = \ manually_approve_followers = \
@ -1454,7 +1457,8 @@ def html_shares(default_timeline: str,
min_images_for_accounts, min_images_for_accounts,
reverse_sequence, None, buy_sites, reverse_sequence, None, buy_sites,
auto_cw_cache, show_announces, auto_cw_cache, show_announces,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
def html_wanted(default_timeline: str, def html_wanted(default_timeline: str,
@ -1489,7 +1493,8 @@ def html_wanted(default_timeline: str,
reverse_sequence: bool, reverse_sequence: bool,
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}, auto_cw_cache: {},
known_epicyon_instances: []) -> str: known_epicyon_instances: [],
mitm_servers: []) -> str:
"""Show the wanted timeline as html """Show the wanted timeline as html
""" """
manually_approve_followers = \ manually_approve_followers = \
@ -1525,7 +1530,8 @@ def html_wanted(default_timeline: str,
min_images_for_accounts, min_images_for_accounts,
reverse_sequence, None, buy_sites, reverse_sequence, None, buy_sites,
auto_cw_cache, show_announces, auto_cw_cache, show_announces,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
def html_inbox(default_timeline: str, def html_inbox(default_timeline: str,
@ -1563,7 +1569,8 @@ def html_inbox(default_timeline: str,
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}, auto_cw_cache: {},
show_announces: bool, show_announces: bool,
known_epicyon_instances: []) -> str: known_epicyon_instances: [],
mitm_servers: []) -> str:
"""Show the inbox as html """Show the inbox as html
""" """
manually_approve_followers = \ manually_approve_followers = \
@ -1598,7 +1605,8 @@ def html_inbox(default_timeline: str,
min_images_for_accounts, min_images_for_accounts,
reverse_sequence, last_post_id, reverse_sequence, last_post_id,
buy_sites, auto_cw_cache, show_announces, buy_sites, auto_cw_cache, show_announces,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
def html_bookmarks(default_timeline: str, def html_bookmarks(default_timeline: str,
@ -1634,7 +1642,8 @@ def html_bookmarks(default_timeline: str,
reverse_sequence: bool, reverse_sequence: bool,
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}, auto_cw_cache: {},
known_epicyon_instances: []) -> str: known_epicyon_instances: [],
mitm_servers: []) -> str:
"""Show the bookmarks as html """Show the bookmarks as html
""" """
manually_approve_followers = \ manually_approve_followers = \
@ -1669,7 +1678,8 @@ def html_bookmarks(default_timeline: str,
min_images_for_accounts, min_images_for_accounts,
reverse_sequence, None, buy_sites, reverse_sequence, None, buy_sites,
auto_cw_cache, show_announces, auto_cw_cache, show_announces,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
def html_inbox_dms(default_timeline: str, def html_inbox_dms(default_timeline: str,
@ -1706,7 +1716,8 @@ def html_inbox_dms(default_timeline: str,
last_post_id: str, last_post_id: str,
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}, auto_cw_cache: {},
known_epicyon_instances: []) -> str: known_epicyon_instances: [],
mitm_servers: []) -> str:
"""Show the DM timeline as html """Show the DM timeline as html
""" """
artist = is_artist(base_dir, nickname) artist = is_artist(base_dir, nickname)
@ -1737,7 +1748,8 @@ def html_inbox_dms(default_timeline: str,
min_images_for_accounts, min_images_for_accounts,
reverse_sequence, last_post_id, reverse_sequence, last_post_id,
buy_sites, auto_cw_cache, show_announces, buy_sites, auto_cw_cache, show_announces,
known_epicyon_instances) known_epicyon_instances,
mitm_servers)
def html_inbox_replies(default_timeline: str, def html_inbox_replies(default_timeline: str,
@ -1774,7 +1786,8 @@ def html_inbox_replies(default_timeline: str,
last_post_id: str, last_post_id: str,
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}, auto_cw_cache: {},
known_epicyon_instances: []) -> str: known_epicyon_instances: [],
mitm_servers: []) -> str:
"""Show the replies timeline as html """Show the replies timeline as html
""" """
artist = is_artist(base_dir, nickname) artist = is_artist(base_dir, nickname)
@ -1803,7 +1816,7 @@ def html_inbox_replies(default_timeline: str,
dogwhistles, ua_str, min_images_for_accounts, dogwhistles, ua_str, min_images_for_accounts,
reverse_sequence, last_post_id, buy_sites, reverse_sequence, last_post_id, buy_sites,
auto_cw_cache, show_announces, auto_cw_cache, show_announces,
known_epicyon_instances) known_epicyon_instances, mitm_servers)
def html_inbox_media(default_timeline: str, def html_inbox_media(default_timeline: str,
@ -1841,7 +1854,8 @@ def html_inbox_media(default_timeline: str,
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}, auto_cw_cache: {},
show_announces: bool, show_announces: bool,
known_epicyon_instances: []) -> str: known_epicyon_instances: [],
mitm_servers: []) -> str:
"""Show the media timeline as html """Show the media timeline as html
""" """
artist = is_artist(base_dir, nickname) artist = is_artist(base_dir, nickname)
@ -1869,7 +1883,7 @@ def html_inbox_media(default_timeline: str,
dogwhistles, ua_str, min_images_for_accounts, dogwhistles, ua_str, min_images_for_accounts,
reverse_sequence, last_post_id, buy_sites, reverse_sequence, last_post_id, buy_sites,
auto_cw_cache, show_announces, auto_cw_cache, show_announces,
known_epicyon_instances) known_epicyon_instances, mitm_servers)
def html_inbox_blogs(default_timeline: str, def html_inbox_blogs(default_timeline: str,
@ -1906,7 +1920,8 @@ def html_inbox_blogs(default_timeline: str,
last_post_id: str, last_post_id: str,
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}, auto_cw_cache: {},
known_epicyon_instances: []) -> str: known_epicyon_instances: [],
mitm_servers: []) -> str:
"""Show the blogs timeline as html """Show the blogs timeline as html
""" """
artist = is_artist(base_dir, nickname) artist = is_artist(base_dir, nickname)
@ -1935,7 +1950,7 @@ def html_inbox_blogs(default_timeline: str,
dogwhistles, ua_str, min_images_for_accounts, dogwhistles, ua_str, min_images_for_accounts,
reverse_sequence, last_post_id, buy_sites, reverse_sequence, last_post_id, buy_sites,
auto_cw_cache, show_announces, auto_cw_cache, show_announces,
known_epicyon_instances) known_epicyon_instances, mitm_servers)
def html_inbox_features(default_timeline: str, def html_inbox_features(default_timeline: str,
@ -1972,7 +1987,8 @@ def html_inbox_features(default_timeline: str,
reverse_sequence: bool, reverse_sequence: bool,
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}, auto_cw_cache: {},
known_epicyon_instances: []) -> str: known_epicyon_instances: [],
mitm_servers: []) -> str:
"""Show the features timeline as html """Show the features timeline as html
""" """
show_announces = True show_announces = True
@ -2000,7 +2016,7 @@ def html_inbox_features(default_timeline: str,
dogwhistles, ua_str, min_images_for_accounts, dogwhistles, ua_str, min_images_for_accounts,
reverse_sequence, None, buy_sites, reverse_sequence, None, buy_sites,
auto_cw_cache, show_announces, auto_cw_cache, show_announces,
known_epicyon_instances) known_epicyon_instances, mitm_servers)
def html_inbox_news(default_timeline: str, def html_inbox_news(default_timeline: str,
@ -2036,7 +2052,8 @@ def html_inbox_news(default_timeline: str,
reverse_sequence: bool, reverse_sequence: bool,
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}, auto_cw_cache: {},
known_epicyon_instances: []) -> str: known_epicyon_instances: [],
mitm_servers: []) -> str:
"""Show the news timeline as html """Show the news timeline as html
""" """
show_announces = True show_announces = True
@ -2064,7 +2081,7 @@ def html_inbox_news(default_timeline: str,
dogwhistles, ua_str, min_images_for_accounts, dogwhistles, ua_str, min_images_for_accounts,
reverse_sequence, None, buy_sites, reverse_sequence, None, buy_sites,
auto_cw_cache, show_announces, auto_cw_cache, show_announces,
known_epicyon_instances) known_epicyon_instances, mitm_servers)
def html_outbox(default_timeline: str, def html_outbox(default_timeline: str,
@ -2101,7 +2118,8 @@ def html_outbox(default_timeline: str,
buy_sites: {}, buy_sites: {},
auto_cw_cache: {}, auto_cw_cache: {},
show_announces: bool, show_announces: bool,
known_epicyon_instances: []) -> str: known_epicyon_instances: [],
mitm_servers: []) -> str:
"""Show the Outbox as html """Show the Outbox as html
""" """
manually_approve_followers = \ manually_approve_followers = \
@ -2130,4 +2148,5 @@ def html_outbox(default_timeline: str,
cw_lists, lists_enabled, timezone, bold_reading, cw_lists, lists_enabled, timezone, bold_reading,
dogwhistles, ua_str, min_images_for_accounts, dogwhistles, ua_str, min_images_for_accounts,
reverse_sequence, None, buy_sites, auto_cw_cache, reverse_sequence, None, buy_sites, auto_cw_cache,
show_announces, known_epicyon_instances) show_announces, known_epicyon_instances,
mitm_servers)

View File

@ -379,6 +379,7 @@ def update_avatar_image_cache(signing_priv_key_pem: str,
session, base_dir: str, http_prefix: str, session, base_dir: str, http_prefix: str,
actor: str, avatar_url: str, actor: str, avatar_url: str,
person_cache: {}, allow_downloads: bool, person_cache: {}, allow_downloads: bool,
mitm_servers: [],
force: bool = False, debug: bool = False) -> str: force: bool = False, debug: bool = False) -> str:
"""Updates the cached avatar for the given actor """Updates the cached avatar for the given actor
""" """
@ -451,7 +452,7 @@ def update_avatar_image_cache(signing_priv_key_pem: str,
person_json = \ person_json = \
get_json(signing_priv_key_pem, session, actor, get_json(signing_priv_key_pem, session, actor,
session_headers, None, session_headers, None,
debug, __version__, http_prefix, None) debug, mitm_servers, __version__, http_prefix, None)
if get_json_valid(person_json): if get_json_valid(person_json):
if not person_json.get('id'): if not person_json.get('id'):
return None return None
@ -1765,7 +1766,8 @@ def html_highlight_label(label: str, highlight: bool) -> str:
def get_avatar_image_url(session, base_dir: str, http_prefix: str, def get_avatar_image_url(session, base_dir: str, http_prefix: str,
post_actor: str, person_cache: {}, post_actor: str, person_cache: {},
avatar_url: str, allow_downloads: bool, avatar_url: str, allow_downloads: bool,
signing_priv_key_pem: str) -> str: signing_priv_key_pem: str,
mitm_servers: []) -> str:
"""Returns the avatar image url """Returns the avatar image url
""" """
# get the avatar image url for the post actor # get the avatar image url for the post actor
@ -1776,12 +1778,12 @@ def get_avatar_image_url(session, base_dir: str, http_prefix: str,
update_avatar_image_cache(signing_priv_key_pem, update_avatar_image_cache(signing_priv_key_pem,
session, base_dir, http_prefix, session, base_dir, http_prefix,
post_actor, avatar_url, person_cache, post_actor, avatar_url, person_cache,
allow_downloads) allow_downloads, mitm_servers)
else: else:
update_avatar_image_cache(signing_priv_key_pem, update_avatar_image_cache(signing_priv_key_pem,
session, base_dir, http_prefix, session, base_dir, http_prefix,
post_actor, avatar_url, person_cache, post_actor, avatar_url, person_cache,
allow_downloads) allow_downloads, mitm_servers)
if not avatar_url: if not avatar_url:
avatar_url = post_actor + '/avatar.png' avatar_url = post_actor + '/avatar.png'

View File

@ -72,7 +72,8 @@ def webfinger_handle(session, handle: str, http_prefix: str,
cached_webfingers: {}, cached_webfingers: {},
from_domain: str, project_version: str, from_domain: str, project_version: str,
debug: bool, group_account: bool, debug: bool, group_account: bool,
signing_priv_key_pem: str) -> {}: signing_priv_key_pem: str,
mitm_servers: []) -> {}:
"""Gets webfinger result for the given ActivityPub handle """Gets webfinger result for the given ActivityPub handle
NOTE: in earlier implementations group_account modified the acct prefix. NOTE: in earlier implementations group_account modified the acct prefix.
This has been left in, because currently there is still no consensus This has been left in, because currently there is still no consensus
@ -106,7 +107,8 @@ def webfinger_handle(session, handle: str, http_prefix: str,
try: try:
result = \ result = \
get_json(signing_priv_key_pem, session, url, hdr, par, get_json(signing_priv_key_pem, session, url, hdr, par,
debug, project_version, http_prefix, from_domain) debug, mitm_servers,
project_version, http_prefix, from_domain)
except BaseException as ex: except BaseException as ex:
print('ERROR: webfinger_handle ' + wf_handle + ' ' + str(ex)) print('ERROR: webfinger_handle ' + wf_handle + ' ' + str(ex))
return None return None
@ -126,7 +128,8 @@ def webfinger_handle(session, handle: str, http_prefix: str,
try: try:
result = \ result = \
get_json(signing_priv_key_pem, session, url, hdr, par, get_json(signing_priv_key_pem, session, url, hdr, par,
debug, project_version, http_prefix, from_domain) debug, mitm_servers,
project_version, http_prefix, from_domain)
except BaseException as ex: except BaseException as ex:
print('ERROR: webfinger_handle ' + wf_handle + ' ' + str(ex)) print('ERROR: webfinger_handle ' + wf_handle + ' ' + str(ex))
return None return None