mirror of https://gitlab.com/bashrc2/epicyon
Add support for yggdrasil domains
parent
4cd51716b3
commit
6bdfe309ec
|
|
@ -29,6 +29,7 @@ from utils import local_actor_url
|
||||||
from utils import has_actor
|
from utils import has_actor
|
||||||
from utils import has_object_string_type
|
from utils import has_object_string_type
|
||||||
from utils import get_actor_from_post
|
from utils import get_actor_from_post
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from timeFunctions import get_current_time_int
|
from timeFunctions import get_current_time_int
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -140,6 +141,7 @@ def _reject_quote_request(message_json: {}, domain_full: str,
|
||||||
federation_list: [],
|
federation_list: [],
|
||||||
debug: bool,
|
debug: bool,
|
||||||
session, session_onion, session_i2p,
|
session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
base_dir: str,
|
base_dir: str,
|
||||||
http_prefix: str,
|
http_prefix: str,
|
||||||
send_threads: [], post_log: [],
|
send_threads: [], post_log: [],
|
||||||
|
|
@ -147,6 +149,7 @@ def _reject_quote_request(message_json: {}, domain_full: str,
|
||||||
person_cache: {}, project_version: str,
|
person_cache: {}, project_version: str,
|
||||||
signing_priv_key_pem: str,
|
signing_priv_key_pem: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
extra_headers: {},
|
extra_headers: {},
|
||||||
sites_unavailable: {},
|
sites_unavailable: {},
|
||||||
system_language: str,
|
system_language: str,
|
||||||
|
|
@ -235,6 +238,17 @@ def _reject_quote_request(message_json: {}, domain_full: str,
|
||||||
if debug:
|
if debug:
|
||||||
print('Domain switched from ' + domain +
|
print('Domain switched from ' + domain +
|
||||||
' to ' + curr_domain)
|
' to ' + curr_domain)
|
||||||
|
elif (yggdrasil_domain and
|
||||||
|
not is_yggdrasil_address(curr_domain) and
|
||||||
|
is_yggdrasil_address(domain_to_follow)):
|
||||||
|
curr_session = session_yggdrasil
|
||||||
|
curr_http_prefix: str = 'http'
|
||||||
|
curr_domain = yggdrasil_domain
|
||||||
|
curr_port = 80
|
||||||
|
port = 80
|
||||||
|
if debug:
|
||||||
|
print('Domain switched from ' + domain +
|
||||||
|
' to ' + curr_domain)
|
||||||
|
|
||||||
client_to_server = False
|
client_to_server = False
|
||||||
send_signed_json(reject_json, curr_session, base_dir,
|
send_signed_json(reject_json, curr_session, base_dir,
|
||||||
|
|
@ -245,7 +259,8 @@ def _reject_quote_request(message_json: {}, domain_full: str,
|
||||||
send_threads, post_log, cached_webfingers,
|
send_threads, post_log, cached_webfingers,
|
||||||
person_cache, debug, project_version, None,
|
person_cache, debug, project_version, None,
|
||||||
group_account, signing_priv_key_pem,
|
group_account, signing_priv_key_pem,
|
||||||
726235284, curr_domain, onion_domain, i2p_domain,
|
726235284, curr_domain,
|
||||||
|
onion_domain, i2p_domain, yggdrasil_domain,
|
||||||
extra_headers, sites_unavailable,
|
extra_headers, sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
return True
|
return True
|
||||||
|
|
@ -255,7 +270,8 @@ def _reject_quote_request(message_json: {}, domain_full: str,
|
||||||
def _accept_follow(base_dir: str, message_json: {},
|
def _accept_follow(base_dir: str, message_json: {},
|
||||||
federation_list: [], debug: bool,
|
federation_list: [], debug: bool,
|
||||||
curr_domain: str,
|
curr_domain: str,
|
||||||
onion_domain: str, i2p_domain: str) -> None:
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str) -> None:
|
||||||
""" Receiving an ActivityPub follow Accept activity
|
""" Receiving an ActivityPub follow Accept activity
|
||||||
Your follow was accepted
|
Your follow was accepted
|
||||||
"""
|
"""
|
||||||
|
|
@ -339,6 +355,10 @@ def _accept_follow(base_dir: str, message_json: {},
|
||||||
if accepted_domain.endswith('.i2p') and \
|
if accepted_domain.endswith('.i2p') and \
|
||||||
not curr_domain.endswith('.i2p'):
|
not curr_domain.endswith('.i2p'):
|
||||||
accepted_domain = curr_domain
|
accepted_domain = curr_domain
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if is_yggdrasil_address(accepted_domain) and \
|
||||||
|
not is_yggdrasil_address(curr_domain):
|
||||||
|
accepted_domain = curr_domain
|
||||||
|
|
||||||
accepted_domain_full = accepted_domain
|
accepted_domain_full = accepted_domain
|
||||||
if accepted_port:
|
if accepted_port:
|
||||||
|
|
@ -382,7 +402,8 @@ def _accept_follow(base_dir: str, message_json: {},
|
||||||
|
|
||||||
def receive_accept_reject(base_dir: str, domain: str, message_json: {},
|
def receive_accept_reject(base_dir: str, domain: str, message_json: {},
|
||||||
federation_list: [], debug: bool, curr_domain: str,
|
federation_list: [], debug: bool, curr_domain: str,
|
||||||
onion_domain: str, i2p_domain: str) -> bool:
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str) -> bool:
|
||||||
"""Receives an Accept or Reject within the POST section of HTTPServer
|
"""Receives an Accept or Reject within the POST section of HTTPServer
|
||||||
"""
|
"""
|
||||||
if message_json['type'] not in ('Accept', 'Reject'):
|
if message_json['type'] not in ('Accept', 'Reject'):
|
||||||
|
|
@ -410,7 +431,7 @@ def receive_accept_reject(base_dir: str, domain: str, message_json: {},
|
||||||
'Assuming single user instance.')
|
'Assuming single user instance.')
|
||||||
# receive follow accept
|
# receive follow accept
|
||||||
_accept_follow(base_dir, message_json, federation_list, debug,
|
_accept_follow(base_dir, message_json, federation_list, debug,
|
||||||
curr_domain, onion_domain, i2p_domain)
|
curr_domain, onion_domain, i2p_domain, yggdrasil_domain)
|
||||||
if debug:
|
if debug:
|
||||||
print('DEBUG: Uh, ' + message_json['type'] + ', I guess')
|
print('DEBUG: Uh, ' + message_json['type'] + ', I guess')
|
||||||
return True
|
return True
|
||||||
|
|
@ -420,6 +441,7 @@ def receive_quote_request(message_json: {}, federation_list: [],
|
||||||
debug: bool,
|
debug: bool,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
session, session_onion, session_i2p,
|
session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
base_dir: str,
|
base_dir: str,
|
||||||
http_prefix: str,
|
http_prefix: str,
|
||||||
send_threads: [], post_log: [],
|
send_threads: [], post_log: [],
|
||||||
|
|
@ -428,6 +450,7 @@ def receive_quote_request(message_json: {}, federation_list: [],
|
||||||
signing_priv_key_pem: str,
|
signing_priv_key_pem: str,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
extra_headers: {},
|
extra_headers: {},
|
||||||
sites_unavailable: {},
|
sites_unavailable: {},
|
||||||
system_language: str,
|
system_language: str,
|
||||||
|
|
@ -445,14 +468,15 @@ def receive_quote_request(message_json: {}, federation_list: [],
|
||||||
return True
|
return True
|
||||||
_reject_quote_request(message_json, domain_full,
|
_reject_quote_request(message_json, domain_full,
|
||||||
federation_list, debug,
|
federation_list, debug,
|
||||||
session, session_onion, session_i2p, base_dir,
|
session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil, base_dir,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
send_threads, post_log,
|
send_threads, post_log,
|
||||||
cached_webfingers,
|
cached_webfingers,
|
||||||
person_cache, project_version,
|
person_cache, project_version,
|
||||||
signing_priv_key_pem,
|
signing_priv_key_pem,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain, yggdrasil_domain,
|
||||||
extra_headers,
|
extra_headers,
|
||||||
sites_unavailable,
|
sites_unavailable,
|
||||||
system_language,
|
system_language,
|
||||||
|
|
|
||||||
|
|
@ -173,6 +173,7 @@ def create_announce(session, base_dir: str, federation_list: [],
|
||||||
signing_priv_key_pem: str,
|
signing_priv_key_pem: str,
|
||||||
curr_domain: str,
|
curr_domain: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
sites_unavailable: [],
|
sites_unavailable: [],
|
||||||
system_language: str,
|
system_language: str,
|
||||||
mitm_servers: []) -> {}:
|
mitm_servers: []) -> {}:
|
||||||
|
|
@ -242,6 +243,7 @@ def create_announce(session, base_dir: str, federation_list: [],
|
||||||
debug, project_version, None, group_account,
|
debug, project_version, None, group_account,
|
||||||
signing_priv_key_pem, 639633,
|
signing_priv_key_pem, 639633,
|
||||||
curr_domain, onion_domain, i2p_domain,
|
curr_domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
extra_headers, sites_unavailable,
|
extra_headers, sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
|
|
||||||
|
|
@ -257,6 +259,7 @@ def announce_public(session, base_dir: str, federation_list: [],
|
||||||
signing_priv_key_pem: str,
|
signing_priv_key_pem: str,
|
||||||
curr_domain: str,
|
curr_domain: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
sites_unavailable: [],
|
sites_unavailable: [],
|
||||||
system_language: str,
|
system_language: str,
|
||||||
mitm_servers: []) -> {}:
|
mitm_servers: []) -> {}:
|
||||||
|
|
@ -274,7 +277,7 @@ def announce_public(session, base_dir: str, federation_list: [],
|
||||||
person_cache, cached_webfingers,
|
person_cache, cached_webfingers,
|
||||||
debug, project_version,
|
debug, project_version,
|
||||||
signing_priv_key_pem, curr_domain,
|
signing_priv_key_pem, curr_domain,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain, yggdrasil_domain,
|
||||||
sites_unavailable,
|
sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
|
|
||||||
|
|
|
||||||
10
cache.py
10
cache.py
|
|
@ -26,6 +26,7 @@ from utils import load_json
|
||||||
from utils import save_json
|
from utils import save_json
|
||||||
from utils import get_file_case_insensitive
|
from utils import get_file_case_insensitive
|
||||||
from utils import get_user_paths
|
from utils import get_user_paths
|
||||||
|
from utils import is_yggdrasil_url
|
||||||
from formats import get_image_extensions
|
from formats import get_image_extensions
|
||||||
from timeFunctions import date_from_string_format
|
from timeFunctions import date_from_string_format
|
||||||
from timeFunctions import date_utcnow
|
from timeFunctions import date_utcnow
|
||||||
|
|
@ -209,7 +210,7 @@ def get_person_pub_key(base_dir: str, session, person_url: str,
|
||||||
person_cache: {}, debug: bool,
|
person_cache: {}, debug: bool,
|
||||||
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, yggdrasil_domain: str,
|
||||||
signing_priv_key_pem: str,
|
signing_priv_key_pem: str,
|
||||||
mitm_servers: []) -> str:
|
mitm_servers: []) -> str:
|
||||||
"""Get the public key for an actor
|
"""Get the public key for an actor
|
||||||
|
|
@ -243,6 +244,9 @@ def get_person_pub_key(base_dir: str, session, person_url: str,
|
||||||
elif i2p_domain:
|
elif i2p_domain:
|
||||||
if '.i2p/' in person_url:
|
if '.i2p/' in person_url:
|
||||||
person_domain = i2p_domain
|
person_domain = i2p_domain
|
||||||
|
elif yggdrasil_domain:
|
||||||
|
if is_yggdrasil_url(person_url):
|
||||||
|
person_domain = yggdrasil_domain
|
||||||
profile_str: str = 'https://www.w3.org/ns/activitystreams'
|
profile_str: str = 'https://www.w3.org/ns/activitystreams'
|
||||||
accept_str = \
|
accept_str = \
|
||||||
'application/activity+json; profile="' + profile_str + '"'
|
'application/activity+json; profile="' + profile_str + '"'
|
||||||
|
|
@ -272,6 +276,7 @@ def get_person_pub_key(base_dir: str, session, person_url: str,
|
||||||
def cache_svg_images(session, base_dir: str, http_prefix: str,
|
def cache_svg_images(session, base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str,
|
domain: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
post_json_object: {},
|
post_json_object: {},
|
||||||
federation_list: [], debug: bool,
|
federation_list: [], debug: bool,
|
||||||
test_image_filename: str) -> bool:
|
test_image_filename: str) -> bool:
|
||||||
|
|
@ -314,6 +319,9 @@ def cache_svg_images(session, base_dir: str, http_prefix: str,
|
||||||
if i2p_domain:
|
if i2p_domain:
|
||||||
if '://' + i2p_domain in url:
|
if '://' + i2p_domain in url:
|
||||||
continue
|
continue
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if '://' + yggdrasil_domain in url:
|
||||||
|
continue
|
||||||
if '/' in url:
|
if '/' in url:
|
||||||
filename = url.split('/')[-1]
|
filename = url.split('/')[-1]
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
|
|
@ -2037,6 +2037,7 @@ def words_similarity(content1: str, content2: str, min_words: int) -> int:
|
||||||
|
|
||||||
def contains_invalid_local_links(domain_full: str,
|
def contains_invalid_local_links(domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
content: str) -> bool:
|
content: str) -> bool:
|
||||||
"""Returns true if the given content has invalid links
|
"""Returns true if the given content has invalid links
|
||||||
"""
|
"""
|
||||||
|
|
@ -2061,6 +2062,9 @@ def contains_invalid_local_links(domain_full: str,
|
||||||
if i2p_domain:
|
if i2p_domain:
|
||||||
if i2p_domain in url:
|
if i2p_domain in url:
|
||||||
return True
|
return True
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if yggdrasil_domain in url:
|
||||||
|
return True
|
||||||
ctr += 1
|
ctr += 1
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
|
||||||
12
daemon.py
12
daemon.py
|
|
@ -65,6 +65,7 @@ from utils import set_config_param
|
||||||
from utils import get_config_param
|
from utils import get_config_param
|
||||||
from utils import load_json
|
from utils import load_json
|
||||||
from utils import load_instance_software
|
from utils import load_instance_software
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from mitm import load_mitm_servers
|
from mitm import load_mitm_servers
|
||||||
from content import load_auto_cw_cache
|
from content import load_auto_cw_cache
|
||||||
from content import load_dogwhistles
|
from content import load_dogwhistles
|
||||||
|
|
@ -368,6 +369,7 @@ class EpicyonServer(ThreadingHTTPServer):
|
||||||
manual_follower_approval = True
|
manual_follower_approval = True
|
||||||
onion_domain = None
|
onion_domain = None
|
||||||
i2p_domain = None
|
i2p_domain = None
|
||||||
|
yggdrasil_domain = None
|
||||||
media_instance: bool = False
|
media_instance: bool = False
|
||||||
blogs_instance: bool = False
|
blogs_instance: bool = False
|
||||||
translate = {}
|
translate = {}
|
||||||
|
|
@ -420,6 +422,7 @@ class EpicyonServer(ThreadingHTTPServer):
|
||||||
session = None
|
session = None
|
||||||
session_onion = None
|
session_onion = None
|
||||||
session_i2p = None
|
session_i2p = None
|
||||||
|
session_yggdrasil = None
|
||||||
last_getreq = 0
|
last_getreq = 0
|
||||||
last_postreq = 0
|
last_postreq = 0
|
||||||
getreq_busy: bool = False
|
getreq_busy: bool = False
|
||||||
|
|
@ -645,6 +648,7 @@ def run_daemon(accounts_data_dir: str,
|
||||||
domain: str,
|
domain: str,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
yt_replace_domain: str,
|
yt_replace_domain: str,
|
||||||
twitter_replacement_domain: str,
|
twitter_replacement_domain: str,
|
||||||
port: int,
|
port: int,
|
||||||
|
|
@ -1010,8 +1014,11 @@ def run_daemon(accounts_data_dir: str,
|
||||||
onion_domain = domain
|
onion_domain = domain
|
||||||
elif domain.endswith('.i2p'):
|
elif domain.endswith('.i2p'):
|
||||||
i2p_domain = domain
|
i2p_domain = domain
|
||||||
|
elif is_yggdrasil_address(domain):
|
||||||
|
yggdrasil_domain = domain
|
||||||
httpd.onion_domain = onion_domain
|
httpd.onion_domain = onion_domain
|
||||||
httpd.i2p_domain = i2p_domain
|
httpd.i2p_domain = i2p_domain
|
||||||
|
httpd.yggdrasil_domain = yggdrasil_domain
|
||||||
httpd.media_instance = media_instance
|
httpd.media_instance = media_instance
|
||||||
httpd.blogs_instance = blogs_instance
|
httpd.blogs_instance = blogs_instance
|
||||||
|
|
||||||
|
|
@ -1129,6 +1136,9 @@ def run_daemon(accounts_data_dir: str,
|
||||||
save_domain_qrcode(base_dir, 'http', onion_domain, httpd.qrcode_scale)
|
save_domain_qrcode(base_dir, 'http', onion_domain, httpd.qrcode_scale)
|
||||||
elif i2p_domain:
|
elif i2p_domain:
|
||||||
save_domain_qrcode(base_dir, 'http', i2p_domain, httpd.qrcode_scale)
|
save_domain_qrcode(base_dir, 'http', i2p_domain, httpd.qrcode_scale)
|
||||||
|
elif yggdrasil_domain:
|
||||||
|
save_domain_qrcode(base_dir, 'http', yggdrasil_domain,
|
||||||
|
httpd.qrcode_scale)
|
||||||
else:
|
else:
|
||||||
save_domain_qrcode(base_dir, http_prefix, httpd.domain_full,
|
save_domain_qrcode(base_dir, http_prefix, httpd.domain_full,
|
||||||
httpd.qrcode_scale)
|
httpd.qrcode_scale)
|
||||||
|
|
@ -1147,6 +1157,7 @@ def run_daemon(accounts_data_dir: str,
|
||||||
httpd.session = None
|
httpd.session = None
|
||||||
httpd.session_onion = None
|
httpd.session_onion = None
|
||||||
httpd.session_i2p = None
|
httpd.session_i2p = None
|
||||||
|
httpd.session_yggdrasil = None
|
||||||
httpd.last_getreq = 0
|
httpd.last_getreq = 0
|
||||||
httpd.last_postreq = 0
|
httpd.last_postreq = 0
|
||||||
httpd.getreq_busy = False
|
httpd.getreq_busy = False
|
||||||
|
|
@ -1340,6 +1351,7 @@ def run_daemon(accounts_data_dir: str,
|
||||||
httpd.post_log, httpd.cached_webfingers,
|
httpd.post_log, httpd.cached_webfingers,
|
||||||
httpd.person_cache, httpd.inbox_queue,
|
httpd.person_cache, httpd.inbox_queue,
|
||||||
domain, onion_domain, i2p_domain,
|
domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
port, proxy_type,
|
port, proxy_type,
|
||||||
httpd.federation_list,
|
httpd.federation_list,
|
||||||
max_replies,
|
max_replies,
|
||||||
|
|
|
||||||
177
daemon_get.py
177
daemon_get.py
|
|
@ -96,6 +96,7 @@ from flags import is_artist
|
||||||
from flags import is_blog_post
|
from flags import is_blog_post
|
||||||
from timeFunctions import date_utcnow
|
from timeFunctions import date_utcnow
|
||||||
from timeFunctions import get_current_time_int
|
from timeFunctions import get_current_time_int
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from utils import replace_strings
|
from utils import replace_strings
|
||||||
from utils import contains_invalid_chars
|
from utils import contains_invalid_chars
|
||||||
from utils import save_json
|
from utils import save_json
|
||||||
|
|
@ -363,6 +364,13 @@ def daemon_http_get(self) -> None:
|
||||||
print('GET domain blocked: ' + calling_domain)
|
print('GET domain blocked: ' + calling_domain)
|
||||||
http_400(self)
|
http_400(self)
|
||||||
return
|
return
|
||||||
|
elif self.server.yggdrasil_domain:
|
||||||
|
if calling_domain not in (self.server.domain,
|
||||||
|
self.server.domain_full,
|
||||||
|
self.server.yggdrasil_domain):
|
||||||
|
print('GET domain blocked: ' + calling_domain)
|
||||||
|
http_400(self)
|
||||||
|
return
|
||||||
else:
|
else:
|
||||||
if calling_domain not in (self.server.domain,
|
if calling_domain not in (self.server.domain,
|
||||||
self.server.domain_full):
|
self.server.domain_full):
|
||||||
|
|
@ -450,7 +458,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
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.yggdrasil_domain)
|
||||||
if acct_pub_key_json:
|
if acct_pub_key_json:
|
||||||
msg_str = json.dumps(acct_pub_key_json, ensure_ascii=False)
|
msg_str = json.dumps(acct_pub_key_json, ensure_ascii=False)
|
||||||
msg_str = convert_domains(calling_domain,
|
msg_str = convert_domains(calling_domain,
|
||||||
|
|
@ -459,7 +468,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -496,6 +506,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.known_crawlers,
|
self.server.known_crawlers,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
self.server.project_version,
|
self.server.project_version,
|
||||||
self.server.show_node_info_version,
|
self.server.show_node_info_version,
|
||||||
self.server.show_node_info_accounts,
|
self.server.show_node_info_accounts,
|
||||||
|
|
@ -549,7 +560,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
set_headers(self, 'application/json', msglen,
|
set_headers(self, 'application/json', msglen,
|
||||||
|
|
@ -568,7 +580,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -603,7 +616,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
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.yggdrasil_domain) + \
|
||||||
'/users/news'
|
'/users/news'
|
||||||
logout_redirect(self, news_url, calling_domain)
|
logout_redirect(self, news_url, calling_domain)
|
||||||
fitness_performance(getreq_start_time, self.server.fitness,
|
fitness_performance(getreq_start_time, self.server.fitness,
|
||||||
|
|
@ -641,6 +655,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
None, self.server.debug,
|
None, self.server.debug,
|
||||||
self.server.enable_shared_inbox,
|
self.server.enable_shared_inbox,
|
||||||
|
|
@ -686,6 +701,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
self.server.fitness,
|
self.server.fitness,
|
||||||
self.server.debug)
|
self.server.debug)
|
||||||
return
|
return
|
||||||
|
|
@ -752,7 +768,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
set_headers(self, 'application/json', msglen,
|
set_headers(self, 'application/json', msglen,
|
||||||
|
|
@ -791,6 +808,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
self.server.account_timezone,
|
self.server.account_timezone,
|
||||||
self.server.bold_reading,
|
self.server.bold_reading,
|
||||||
self.server.translate,
|
self.server.translate,
|
||||||
|
|
@ -844,7 +862,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
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.yggdrasil_domain) + \
|
||||||
'/users/' + nickname
|
'/users/' + nickname
|
||||||
actor_json = get_person_from_cache(self.server.base_dir, actor,
|
actor_json = get_person_from_cache(self.server.base_dir, actor,
|
||||||
self.server.person_cache)
|
self.server.person_cache)
|
||||||
|
|
@ -917,7 +936,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
set_headers(self, 'application/json', msglen,
|
set_headers(self, 'application/json', msglen,
|
||||||
|
|
@ -999,7 +1019,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -1059,7 +1080,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -1118,7 +1140,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -1203,7 +1226,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -1294,7 +1318,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -1403,7 +1428,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -1441,6 +1467,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
self.server.translate,
|
self.server.translate,
|
||||||
self.server.registration,
|
self.server.registration,
|
||||||
self.server.system_language,
|
self.server.system_language,
|
||||||
|
|
@ -1665,7 +1692,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.followingItemsPerPage,
|
self.server.followingItemsPerPage,
|
||||||
self.server.debug, 'following',
|
self.server.debug, 'following',
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
return
|
return
|
||||||
if '/followers?page=' in self.path:
|
if '/followers?page=' in self.path:
|
||||||
get_following_json(self, self.server.base_dir,
|
get_following_json(self, self.server.base_dir,
|
||||||
|
|
@ -1677,7 +1705,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.followingItemsPerPage,
|
self.server.followingItemsPerPage,
|
||||||
self.server.debug, 'followers',
|
self.server.debug, 'followers',
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
return
|
return
|
||||||
if '/followrequests?page=' in self.path:
|
if '/followrequests?page=' in self.path:
|
||||||
get_following_json(self, self.server.base_dir,
|
get_following_json(self, self.server.base_dir,
|
||||||
|
|
@ -1690,7 +1719,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.debug,
|
self.server.debug,
|
||||||
'followrequests',
|
'followrequests',
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
return
|
return
|
||||||
|
|
||||||
# authorized endpoint used for TTS of posts
|
# authorized endpoint used for TTS of posts
|
||||||
|
|
@ -1742,6 +1772,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.session,
|
self.server.session,
|
||||||
self.server.session_onion,
|
self.server.session_onion,
|
||||||
self.server.session_i2p,
|
self.server.session_i2p,
|
||||||
|
self.server.session_yggdrasil,
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.debug,
|
self.server.debug,
|
||||||
self.server.mitm_servers)
|
self.server.mitm_servers)
|
||||||
|
|
@ -1802,7 +1833,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -1826,7 +1858,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.domain_full,
|
self.server.domain_full,
|
||||||
self.server.system_language,
|
self.server.system_language,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
return
|
return
|
||||||
|
|
||||||
if not html_getreq and \
|
if not html_getreq and \
|
||||||
|
|
@ -1837,7 +1870,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.domain_full,
|
self.server.domain_full,
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
return
|
return
|
||||||
|
|
||||||
fitness_performance(getreq_start_time, self.server.fitness,
|
fitness_performance(getreq_start_time, self.server.fitness,
|
||||||
|
|
@ -1883,7 +1917,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -2050,6 +2085,9 @@ def daemon_http_get(self) -> None:
|
||||||
elif (calling_domain.endswith('.i2p') and
|
elif (calling_domain.endswith('.i2p') and
|
||||||
self.server.i2p_domain):
|
self.server.i2p_domain):
|
||||||
actor = 'http://' + self.server.i2p_domain + users_path
|
actor = 'http://' + self.server.i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and
|
||||||
|
self.server.yggdrasil_domain):
|
||||||
|
actor = 'http://' + self.server.yggdrasil_domain + users_path
|
||||||
redirect_headers(self, actor + '/tlshares',
|
redirect_headers(self, actor + '/tlshares',
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
return
|
return
|
||||||
|
|
@ -2092,6 +2130,9 @@ def daemon_http_get(self) -> None:
|
||||||
elif (calling_domain.endswith('.i2p') and
|
elif (calling_domain.endswith('.i2p') and
|
||||||
self.server.i2p_domain):
|
self.server.i2p_domain):
|
||||||
actor = 'http://' + self.server.i2p_domain + users_path
|
actor = 'http://' + self.server.i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and
|
||||||
|
self.server.yggdrasil_domain):
|
||||||
|
actor = 'http://' + self.server.yggdrasil_domain + users_path
|
||||||
redirect_headers(self, actor + '/tlwanted',
|
redirect_headers(self, actor + '/tlwanted',
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
return
|
return
|
||||||
|
|
@ -2124,6 +2165,9 @@ def daemon_http_get(self) -> None:
|
||||||
elif (calling_domain.endswith('.i2p') and
|
elif (calling_domain.endswith('.i2p') and
|
||||||
self.server.i2p_domain):
|
self.server.i2p_domain):
|
||||||
actor = 'http://' + self.server.i2p_domain + users_path
|
actor = 'http://' + self.server.i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and
|
||||||
|
self.server.yggdrasil_domain):
|
||||||
|
actor = 'http://' + self.server.yggdrasil_domain + users_path
|
||||||
redirect_headers(self, actor + '/tlshares',
|
redirect_headers(self, actor + '/tlshares',
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
return
|
return
|
||||||
|
|
@ -2156,6 +2200,9 @@ def daemon_http_get(self) -> None:
|
||||||
elif (calling_domain.endswith('.i2p') and
|
elif (calling_domain.endswith('.i2p') and
|
||||||
self.server.i2p_domain):
|
self.server.i2p_domain):
|
||||||
actor = 'http://' + self.server.i2p_domain + users_path
|
actor = 'http://' + self.server.i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and
|
||||||
|
self.server.yggdrasil_domain):
|
||||||
|
actor = 'http://' + self.server.yggdrasil_domain + users_path
|
||||||
redirect_headers(self, actor + '/tlwanted',
|
redirect_headers(self, actor + '/tlwanted',
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
return
|
return
|
||||||
|
|
@ -2182,6 +2229,10 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.i2p_domain):
|
self.server.i2p_domain):
|
||||||
msg = html_terms_of_service(self.server.base_dir, 'http',
|
msg = html_terms_of_service(self.server.base_dir, 'http',
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain)
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and
|
||||||
|
self.server.yggdrasil_domain):
|
||||||
|
msg = html_terms_of_service(self.server.base_dir, 'http',
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
else:
|
else:
|
||||||
msg = html_terms_of_service(self.server.base_dir,
|
msg = html_terms_of_service(self.server.base_dir,
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
|
|
@ -2290,6 +2341,7 @@ def daemon_http_get(self) -> None:
|
||||||
msg = \
|
msg = \
|
||||||
html_about(self.server.base_dir, 'http',
|
html_about(self.server.base_dir, 'http',
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
None, self.server.translate,
|
None, self.server.translate,
|
||||||
self.server.system_language)
|
self.server.system_language)
|
||||||
else:
|
else:
|
||||||
|
|
@ -2320,6 +2372,7 @@ def daemon_http_get(self) -> None:
|
||||||
msg = \
|
msg = \
|
||||||
html_specification(self.server.base_dir, 'http',
|
html_specification(self.server.base_dir, 'http',
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
None, self.server.translate,
|
None, self.server.translate,
|
||||||
self.server.system_language)
|
self.server.system_language)
|
||||||
else:
|
else:
|
||||||
|
|
@ -2357,6 +2410,7 @@ def daemon_http_get(self) -> None:
|
||||||
html_known_epicyon_instances(
|
html_known_epicyon_instances(
|
||||||
self.server.base_dir, 'http',
|
self.server.base_dir, 'http',
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
self.server.system_language,
|
self.server.system_language,
|
||||||
self.server.known_epicyon_instances,
|
self.server.known_epicyon_instances,
|
||||||
self.server.translate)
|
self.server.translate)
|
||||||
|
|
@ -2389,6 +2443,7 @@ def daemon_http_get(self) -> None:
|
||||||
msg = \
|
msg = \
|
||||||
html_manual(self.server.base_dir, 'http',
|
html_manual(self.server.base_dir, 'http',
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
None, self.server.translate,
|
None, self.server.translate,
|
||||||
self.server.system_language)
|
self.server.system_language)
|
||||||
else:
|
else:
|
||||||
|
|
@ -2553,6 +2608,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
authorized, self.server.debug,
|
authorized, self.server.debug,
|
||||||
self.server.news_instance,
|
self.server.news_instance,
|
||||||
|
|
@ -2700,6 +2756,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
self.server.port,
|
self.server.port,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
self.server.fitness,
|
self.server.fitness,
|
||||||
|
|
@ -2930,6 +2987,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.path, self.server.debug,
|
self.path, self.server.debug,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.domain_full,
|
self.server.domain_full,
|
||||||
|
|
@ -2969,7 +3027,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
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.yggdrasil_domain) + \
|
||||||
'/users/news'
|
'/users/news'
|
||||||
logout_redirect(self, news_url, calling_domain)
|
logout_redirect(self, news_url, calling_domain)
|
||||||
fitness_performance(getreq_start_time, self.server.fitness,
|
fitness_performance(getreq_start_time, self.server.fitness,
|
||||||
|
|
@ -3147,7 +3206,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
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.yggdrasil_domain) + \
|
||||||
'/users/' + nickname + '/tags/' + hashtag
|
'/users/' + nickname + '/tags/' + hashtag
|
||||||
redirect_headers(self, ht_url, cookie, calling_domain, 303)
|
redirect_headers(self, ht_url, cookie, calling_domain, 303)
|
||||||
else:
|
else:
|
||||||
|
|
@ -3169,6 +3229,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.port,
|
self.server.port,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
self.server.system_language,
|
self.server.system_language,
|
||||||
self.server.fitness,
|
self.server.fitness,
|
||||||
|
|
@ -3185,6 +3246,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.port,
|
self.server.port,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
MAX_POSTS_IN_FEED,
|
MAX_POSTS_IN_FEED,
|
||||||
self.server.fitness,
|
self.server.fitness,
|
||||||
|
|
@ -3200,6 +3262,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.port,
|
self.server.port,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
curr_session,
|
curr_session,
|
||||||
MAX_POSTS_IN_HASHTAG_FEED,
|
MAX_POSTS_IN_HASHTAG_FEED,
|
||||||
|
|
@ -3381,6 +3444,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.session,
|
self.server.session,
|
||||||
self.server.session_onion,
|
self.server.session_onion,
|
||||||
self.server.session_i2p,
|
self.server.session_i2p,
|
||||||
|
self.server.session_yggdrasil,
|
||||||
ua_str)
|
ua_str)
|
||||||
if msg:
|
if msg:
|
||||||
msg = msg.encode('utf-8')
|
msg = msg.encode('utf-8')
|
||||||
|
|
@ -3428,6 +3492,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.session,
|
self.server.session,
|
||||||
self.server.session_onion,
|
self.server.session_onion,
|
||||||
self.server.session_i2p,
|
self.server.session_i2p,
|
||||||
|
self.server.session_yggdrasil,
|
||||||
ua_str)
|
ua_str)
|
||||||
if msg:
|
if msg:
|
||||||
msg = msg.encode('utf-8')
|
msg = msg.encode('utf-8')
|
||||||
|
|
@ -3461,6 +3526,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
getreq_start_time):
|
getreq_start_time):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -3506,6 +3572,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.port,
|
self.server.port,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
repeat_private,
|
repeat_private,
|
||||||
self.server.debug,
|
self.server.debug,
|
||||||
|
|
@ -3542,6 +3609,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.session_yggdrasil,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.instance_software)
|
self.server.instance_software)
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -3564,6 +3632,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
self.server.debug,
|
self.server.debug,
|
||||||
self.server.recent_posts_cache,
|
self.server.recent_posts_cache,
|
||||||
|
|
@ -3572,7 +3641,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.project_version,
|
self.server.project_version,
|
||||||
self.server.fitness,
|
self.server.fitness,
|
||||||
self.server.session_onion,
|
self.server.session_onion,
|
||||||
self.server.session_i2p)
|
self.server.session_i2p,
|
||||||
|
self.server.session_yggdrasil)
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
@ -3590,6 +3660,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
self.server.newswire,
|
self.server.newswire,
|
||||||
self.server.default_timeline,
|
self.server.default_timeline,
|
||||||
|
|
@ -3608,6 +3679,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
self.server.debug,
|
self.server.debug,
|
||||||
self.server.newswire,
|
self.server.newswire,
|
||||||
|
|
@ -3628,6 +3700,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.port,
|
self.server.port,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type,
|
proxy_type,
|
||||||
self.server.debug,
|
self.server.debug,
|
||||||
|
|
@ -3645,6 +3718,7 @@ 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_yggdrasil,
|
||||||
self.server.session,
|
self.server.session,
|
||||||
self.server.mitm_servers)
|
self.server.mitm_servers)
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -3666,6 +3740,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.port,
|
self.server.port,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
self.server.debug,
|
self.server.debug,
|
||||||
self.server.federation_list,
|
self.server.federation_list,
|
||||||
|
|
@ -3682,6 +3757,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.session,
|
self.server.session,
|
||||||
self.server.session_onion,
|
self.server.session_onion,
|
||||||
self.server.session_i2p,
|
self.server.session_i2p,
|
||||||
|
self.server.session_yggdrasil,
|
||||||
self.server.mitm_servers)
|
self.server.mitm_servers)
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -3699,6 +3775,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type,
|
proxy_type,
|
||||||
cookie,
|
cookie,
|
||||||
|
|
@ -3733,6 +3810,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.session_yggdrasil,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.instance_software)
|
self.server.instance_software)
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -3751,6 +3829,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type,
|
proxy_type,
|
||||||
cookie, self.server.debug,
|
cookie, self.server.debug,
|
||||||
|
|
@ -3784,6 +3863,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.iconsCache,
|
self.server.iconsCache,
|
||||||
self.server.session_onion,
|
self.server.session_onion,
|
||||||
self.server.session_i2p,
|
self.server.session_i2p,
|
||||||
|
self.server.session_yggdrasil,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.instance_software)
|
self.server.instance_software)
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -3804,6 +3884,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type,
|
proxy_type,
|
||||||
cookie,
|
cookie,
|
||||||
|
|
@ -3837,6 +3918,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.session_yggdrasil,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.instance_software)
|
self.server.instance_software)
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -3857,6 +3939,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type,
|
proxy_type,
|
||||||
cookie, self.server.debug,
|
cookie, self.server.debug,
|
||||||
|
|
@ -3889,6 +3972,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.session_yggdrasil,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.instance_software)
|
self.server.instance_software)
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -3908,6 +3992,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.port,
|
self.server.port,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type,
|
proxy_type,
|
||||||
cookie, self.server.debug,
|
cookie, self.server.debug,
|
||||||
|
|
@ -3941,6 +4026,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.session_yggdrasil,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.instance_software)
|
self.server.instance_software)
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -3963,6 +4049,7 @@ def daemon_http_get(self) -> None:
|
||||||
curr_session,
|
curr_session,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
self.server.recent_posts_cache,
|
self.server.recent_posts_cache,
|
||||||
self.server.max_recent_posts,
|
self.server.max_recent_posts,
|
||||||
self.server.translate,
|
self.server.translate,
|
||||||
|
|
@ -4006,6 +4093,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.port,
|
self.server.port,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type, cookie,
|
proxy_type, cookie,
|
||||||
self.server.debug,
|
self.server.debug,
|
||||||
|
|
@ -4039,6 +4127,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.session_yggdrasil,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.instance_software)
|
self.server.instance_software)
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -4056,6 +4145,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type, cookie,
|
proxy_type, cookie,
|
||||||
self.server.debug,
|
self.server.debug,
|
||||||
|
|
@ -4085,6 +4175,7 @@ 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.session_yggdrasil,
|
||||||
self.server.default_timeline,
|
self.server.default_timeline,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.instance_software)
|
self.server.instance_software)
|
||||||
|
|
@ -4105,6 +4196,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.port,
|
self.server.port,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
cookie, self.server.debug,
|
cookie, self.server.debug,
|
||||||
curr_session,
|
curr_session,
|
||||||
|
|
@ -4153,6 +4245,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.port,
|
self.server.port,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
cookie, self.server.debug,
|
cookie, self.server.debug,
|
||||||
curr_session,
|
curr_session,
|
||||||
|
|
@ -4582,6 +4675,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.bold_reading,
|
self.server.bold_reading,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.instance_software,
|
self.server.instance_software,
|
||||||
|
|
@ -4716,6 +4810,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.instance_software):
|
self.server.instance_software):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -4773,6 +4868,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.hide_recent_posts):
|
self.server.hide_recent_posts):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -4831,6 +4927,7 @@ def daemon_http_get(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.hide_recent_posts):
|
self.server.hide_recent_posts):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -4877,6 +4974,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.bold_reading,
|
self.server.bold_reading,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.instance_software,
|
self.server.instance_software,
|
||||||
|
|
@ -4925,6 +5023,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.instance_software,
|
self.server.instance_software,
|
||||||
ua_str):
|
ua_str):
|
||||||
|
|
@ -4988,6 +5087,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.hide_announces,
|
self.server.hide_announces,
|
||||||
self.server.mitm_servers):
|
self.server.mitm_servers):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -5049,6 +5149,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.mitm_servers):
|
self.server.mitm_servers):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -5109,6 +5210,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.mitm_servers):
|
self.server.mitm_servers):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -5170,6 +5272,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.hide_announces,
|
self.server.hide_announces,
|
||||||
self.server.mitm_servers):
|
self.server.mitm_servers):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -5232,6 +5335,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.mitm_servers):
|
self.server.mitm_servers):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -5294,6 +5398,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.mitm_servers):
|
self.server.mitm_servers):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -5353,6 +5458,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.mitm_servers):
|
self.server.mitm_servers):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -5615,6 +5721,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.mitm_servers):
|
self.server.mitm_servers):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -5678,6 +5785,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.hide_announces,
|
self.server.hide_announces,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.hide_recent_posts):
|
self.server.hide_recent_posts):
|
||||||
|
|
@ -5741,6 +5849,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.mitm_servers):
|
self.server.mitm_servers):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -5797,6 +5906,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.hide_recent_posts):
|
self.server.hide_recent_posts):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -5855,6 +5965,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.hide_recent_posts):
|
self.server.hide_recent_posts):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -5912,6 +6023,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.hide_recent_posts):
|
self.server.hide_recent_posts):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -5970,6 +6082,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.hide_recent_posts):
|
self.server.hide_recent_posts):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -6028,6 +6141,7 @@ 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.yggdrasil_domain,
|
||||||
self.server.mitm_servers,
|
self.server.mitm_servers,
|
||||||
self.server.hide_recent_posts):
|
self.server.hide_recent_posts):
|
||||||
self.server.getreq_busy = False
|
self.server.getreq_busy = False
|
||||||
|
|
@ -6046,6 +6160,7 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type,
|
proxy_type,
|
||||||
cookie, self.server.debug,
|
cookie, self.server.debug,
|
||||||
|
|
@ -6158,7 +6273,8 @@ def daemon_http_get(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -6313,7 +6429,8 @@ def _browser_config(self, calling_domain: str, referer_domain: str,
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
set_headers(self, 'application/xrd+xml', msglen,
|
set_headers(self, 'application/xrd+xml', msglen,
|
||||||
|
|
@ -6348,7 +6465,8 @@ def _get_speaker(self, calling_domain: str, referer_domain: str,
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
domain,
|
domain,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain)
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
protocol_str = \
|
protocol_str = \
|
||||||
|
|
@ -6411,6 +6529,7 @@ def _confirm_delete_event(self, calling_domain: str, path: str,
|
||||||
base_dir: str, http_prefix: str, cookie: str,
|
base_dir: str, http_prefix: str, cookie: str,
|
||||||
translate: {}, domain_full: str,
|
translate: {}, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time) -> bool:
|
getreq_start_time) -> bool:
|
||||||
"""Confirm whether to delete a calendar event
|
"""Confirm whether to delete a calendar event
|
||||||
"""
|
"""
|
||||||
|
|
@ -6450,6 +6569,10 @@ def _confirm_delete_event(self, calling_domain: str, path: str,
|
||||||
actor = \
|
actor = \
|
||||||
'http://' + i2p_domain + \
|
'http://' + i2p_domain + \
|
||||||
path.split('/eventdelete')[0]
|
path.split('/eventdelete')[0]
|
||||||
|
elif is_yggdrasil_address(calling_domain) and yggdrasil_domain:
|
||||||
|
actor = \
|
||||||
|
'http://' + yggdrasil_domain + \
|
||||||
|
path.split('/eventdelete')[0]
|
||||||
redirect_headers(self, actor + '/calendar',
|
redirect_headers(self, actor + '/calendar',
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
fitness_performance(getreq_start_time,
|
fitness_performance(getreq_start_time,
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@ from httpcodes import http_404
|
||||||
from utils import get_full_domain
|
from utils import get_full_domain
|
||||||
from utils import get_domain_from_actor
|
from utils import get_domain_from_actor
|
||||||
from utils import get_nickname_from_actor
|
from utils import get_nickname_from_actor
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
|
from utils import is_yggdrasil_url
|
||||||
from webapp_confirm import html_confirm_delete
|
from webapp_confirm import html_confirm_delete
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -29,6 +31,7 @@ def follow_approve_button(self, calling_domain: str, path: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str, port: int,
|
domain: str, domain_full: str, port: int,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type: str, debug: bool,
|
proxy_type: str, debug: bool,
|
||||||
curr_session,
|
curr_session,
|
||||||
|
|
@ -44,6 +47,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_yggdrasil,
|
||||||
session, mitm_servers: []) -> None:
|
session, mitm_servers: []) -> None:
|
||||||
"""Follow approve button was pressed
|
"""Follow approve button was pressed
|
||||||
"""
|
"""
|
||||||
|
|
@ -71,6 +75,12 @@ def follow_approve_button(self, calling_domain: str, path: str,
|
||||||
curr_session = session_i2p
|
curr_session = session_i2p
|
||||||
proxy_type = 'i2p'
|
proxy_type = 'i2p'
|
||||||
port = 80
|
port = 80
|
||||||
|
if yggdrasil_domain:
|
||||||
|
following_handle_domain = following_handle.split('@')[1]
|
||||||
|
if is_yggdrasil_address(following_handle_domain):
|
||||||
|
curr_session = session_yggdrasil
|
||||||
|
proxy_type = 'yggdrasil'
|
||||||
|
port = 80
|
||||||
|
|
||||||
curr_session = \
|
curr_session = \
|
||||||
establish_session("follow_approve_button",
|
establish_session("follow_approve_button",
|
||||||
|
|
@ -84,8 +94,10 @@ def follow_approve_button(self, calling_domain: str, path: str,
|
||||||
manual_approve_follow_request_thread(session,
|
manual_approve_follow_request_thread(session,
|
||||||
session_onion,
|
session_onion,
|
||||||
session_i2p,
|
session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
base_dir, http_prefix,
|
base_dir, http_prefix,
|
||||||
follower_nickname,
|
follower_nickname,
|
||||||
domain, port,
|
domain, port,
|
||||||
|
|
@ -111,6 +123,9 @@ def follow_approve_button(self, calling_domain: str, path: str,
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str_absolute = \
|
origin_path_str_absolute = \
|
||||||
'http://' + i2p_domain + origin_path_str
|
'http://' + i2p_domain + origin_path_str
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str_absolute = \
|
||||||
|
'http://' + yggdrasil_domain + origin_path_str
|
||||||
fitness_performance(getreq_start_time, fitness,
|
fitness_performance(getreq_start_time, fitness,
|
||||||
'_GET', '_follow_approve_button',
|
'_GET', '_follow_approve_button',
|
||||||
debug)
|
debug)
|
||||||
|
|
@ -122,6 +137,7 @@ def follow_deny_button(self, calling_domain: str, path: str,
|
||||||
cookie: str, base_dir: str, http_prefix: str,
|
cookie: str, base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str, port: int,
|
domain: str, domain_full: str, port: int,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time, debug: bool,
|
getreq_start_time, debug: bool,
|
||||||
federation_list: [],
|
federation_list: [],
|
||||||
send_threads: {},
|
send_threads: {},
|
||||||
|
|
@ -135,6 +151,7 @@ def follow_deny_button(self, calling_domain: str, path: str,
|
||||||
system_language: str,
|
system_language: str,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
session, session_onion, session_i2p,
|
session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
mitm_servers: []) -> None:
|
mitm_servers: []) -> None:
|
||||||
"""Follow deny button was pressed
|
"""Follow deny button was pressed
|
||||||
"""
|
"""
|
||||||
|
|
@ -155,8 +172,10 @@ def follow_deny_button(self, calling_domain: str, path: str,
|
||||||
manual_deny_follow_request_thread(session,
|
manual_deny_follow_request_thread(session,
|
||||||
session_onion,
|
session_onion,
|
||||||
session_i2p,
|
session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
base_dir, http_prefix,
|
base_dir, http_prefix,
|
||||||
follower_nickname,
|
follower_nickname,
|
||||||
domain, port,
|
domain, port,
|
||||||
|
|
@ -181,6 +200,9 @@ def follow_deny_button(self, calling_domain: str, path: str,
|
||||||
elif calling_domain.endswith('.i2p') and i2p_domain:
|
elif calling_domain.endswith('.i2p') and i2p_domain:
|
||||||
origin_path_str_absolute = \
|
origin_path_str_absolute = \
|
||||||
'http://' + i2p_domain + origin_path_str
|
'http://' + i2p_domain + origin_path_str
|
||||||
|
elif is_yggdrasil_address(calling_domain) and yggdrasil_domain:
|
||||||
|
origin_path_str_absolute = \
|
||||||
|
'http://' + yggdrasil_domain + origin_path_str
|
||||||
redirect_headers(self, origin_path_str_absolute,
|
redirect_headers(self, origin_path_str_absolute,
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
fitness_performance(getreq_start_time, fitness,
|
fitness_performance(getreq_start_time, fitness,
|
||||||
|
|
@ -192,6 +214,7 @@ def delete_button(self, calling_domain: str, path: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type: str, cookie: str,
|
proxy_type: str, cookie: str,
|
||||||
debug: str, curr_session,
|
debug: str, curr_session,
|
||||||
|
|
@ -220,6 +243,7 @@ def delete_button(self, calling_domain: str, path: str,
|
||||||
allow_deletion: bool,
|
allow_deletion: bool,
|
||||||
session_onion,
|
session_onion,
|
||||||
session_i2p,
|
session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
default_timeline: str,
|
default_timeline: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {}) -> None:
|
instance_software: {}) -> None:
|
||||||
|
|
@ -261,6 +285,8 @@ def delete_button(self, calling_domain: str, path: str,
|
||||||
actor = 'http://' + onion_domain + users_path
|
actor = 'http://' + onion_domain + users_path
|
||||||
elif calling_domain.endswith('.i2p') and i2p_domain:
|
elif calling_domain.endswith('.i2p') and i2p_domain:
|
||||||
actor = 'http://' + i2p_domain + users_path
|
actor = 'http://' + i2p_domain + users_path
|
||||||
|
elif is_yggdrasil_address(calling_domain) and yggdrasil_domain:
|
||||||
|
actor = 'http://' + yggdrasil_domain + users_path
|
||||||
redirect_headers(self, actor + '/' + timeline_str,
|
redirect_headers(self, actor + '/' + timeline_str,
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
return
|
return
|
||||||
|
|
@ -271,6 +297,8 @@ def delete_button(self, calling_domain: str, path: str,
|
||||||
actor = 'http://' + onion_domain + users_path
|
actor = 'http://' + onion_domain + users_path
|
||||||
elif calling_domain.endswith('.i2p') and i2p_domain:
|
elif calling_domain.endswith('.i2p') and i2p_domain:
|
||||||
actor = 'http://' + i2p_domain + users_path
|
actor = 'http://' + i2p_domain + users_path
|
||||||
|
elif is_yggdrasil_address(calling_domain) and yggdrasil_domain:
|
||||||
|
actor = 'http://' + yggdrasil_domain + users_path
|
||||||
redirect_headers(self, actor + '/' + timeline_str,
|
redirect_headers(self, actor + '/' + timeline_str,
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
return
|
return
|
||||||
|
|
@ -283,6 +311,10 @@ def delete_button(self, calling_domain: str, path: str,
|
||||||
if '.onion/' in actor:
|
if '.onion/' in actor:
|
||||||
curr_session = session_i2p
|
curr_session = session_i2p
|
||||||
proxy_type = 'i2p'
|
proxy_type = 'i2p'
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if is_yggdrasil_url(actor):
|
||||||
|
curr_session = session_yggdrasil
|
||||||
|
proxy_type = 'yggdrasil'
|
||||||
|
|
||||||
curr_session = \
|
curr_session = \
|
||||||
establish_session("delete_button",
|
establish_session("delete_button",
|
||||||
|
|
@ -334,6 +366,8 @@ def delete_button(self, calling_domain: str, path: str,
|
||||||
actor = 'http://' + onion_domain + users_path
|
actor = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
actor = 'http://' + i2p_domain + users_path
|
actor = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
actor = 'http://' + yggdrasil_domain + users_path
|
||||||
fitness_performance(getreq_start_time, fitness,
|
fitness_performance(getreq_start_time, fitness,
|
||||||
'_GET', '_delete_button',
|
'_GET', '_delete_button',
|
||||||
debug)
|
debug)
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ 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 is_yggdrasil_url
|
||||||
from mitm import detect_mitm
|
from mitm import detect_mitm
|
||||||
from httpheaders import redirect_headers
|
from httpheaders import redirect_headers
|
||||||
from session import establish_session
|
from session import establish_session
|
||||||
|
|
@ -37,6 +38,7 @@ def announce_button(self, calling_domain: str, path: str,
|
||||||
http_prefix: str,
|
http_prefix: str,
|
||||||
domain: str, domain_full: str, port: int,
|
domain: str, domain_full: str, port: int,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
repeat_private: bool,
|
repeat_private: bool,
|
||||||
debug: bool,
|
debug: bool,
|
||||||
|
|
@ -71,6 +73,7 @@ def announce_button(self, calling_domain: str, path: str,
|
||||||
bold_reading_nicknames: {},
|
bold_reading_nicknames: {},
|
||||||
min_images_for_accounts: int,
|
min_images_for_accounts: int,
|
||||||
session_onion, session_i2p,
|
session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {}) -> None:
|
instance_software: {}) -> None:
|
||||||
"""The announce/repeat button was pressed on a post
|
"""The announce/repeat button was pressed on a post
|
||||||
|
|
@ -118,7 +121,8 @@ def announce_button(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
actor
|
actor
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
actor_absolute + '/' + timeline_str + \
|
actor_absolute + '/' + timeline_str + \
|
||||||
|
|
@ -135,6 +139,10 @@ def announce_button(self, calling_domain: str, path: str,
|
||||||
if '.onion/' in actor:
|
if '.onion/' in actor:
|
||||||
curr_session = session_i2p
|
curr_session = session_i2p
|
||||||
proxy_type = 'i2p'
|
proxy_type = 'i2p'
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if is_yggdrasil_url(actor):
|
||||||
|
curr_session = session_yggdrasil
|
||||||
|
proxy_type = 'yggdrasil'
|
||||||
|
|
||||||
curr_session = \
|
curr_session = \
|
||||||
establish_session("announce_button",
|
establish_session("announce_button",
|
||||||
|
|
@ -169,7 +177,9 @@ def announce_button(self, calling_domain: str, path: str,
|
||||||
signing_priv_key_pem,
|
signing_priv_key_pem,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain, sites_unavailable,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
|
sites_unavailable,
|
||||||
system_language,
|
system_language,
|
||||||
mitm_servers)
|
mitm_servers)
|
||||||
announce_filename = None
|
announce_filename = None
|
||||||
|
|
@ -279,7 +289,8 @@ def announce_button(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
'/users/' + self.post_to_nickname
|
'/users/' + self.post_to_nickname
|
||||||
|
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
|
|
@ -295,12 +306,14 @@ def announce_button_undo(self, calling_domain: str, path: str,
|
||||||
base_dir: str, cookie: str, proxy_type: str,
|
base_dir: str, cookie: str, proxy_type: str,
|
||||||
http_prefix: str, domain: str, domain_full: str,
|
http_prefix: str, domain: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time, debug: bool,
|
getreq_start_time, debug: bool,
|
||||||
recent_posts_cache: {}, curr_session,
|
recent_posts_cache: {}, curr_session,
|
||||||
icons_cache: {},
|
icons_cache: {},
|
||||||
project_version: str,
|
project_version: str,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
session_onion, session_i2p) -> None:
|
session_onion, session_i2p,
|
||||||
|
session_yggdrasil) -> None:
|
||||||
"""Undo announce/repeat button was pressed
|
"""Undo announce/repeat button was pressed
|
||||||
"""
|
"""
|
||||||
page_number = 1
|
page_number = 1
|
||||||
|
|
@ -350,7 +363,8 @@ def announce_button_undo(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
actor
|
actor
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
actor_absolute + '/' + timeline_str + '?page=' + \
|
actor_absolute + '/' + timeline_str + '?page=' + \
|
||||||
|
|
@ -367,6 +381,10 @@ def announce_button_undo(self, calling_domain: str, path: str,
|
||||||
if '.onion/' in actor:
|
if '.onion/' in actor:
|
||||||
curr_session = session_i2p
|
curr_session = session_i2p
|
||||||
proxy_type = 'i2p'
|
proxy_type = 'i2p'
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if is_yggdrasil_url(actor):
|
||||||
|
curr_session = session_yggdrasil
|
||||||
|
proxy_type = 'yggdrasil'
|
||||||
|
|
||||||
curr_session = \
|
curr_session = \
|
||||||
establish_session("announce_button_undo",
|
establish_session("announce_button_undo",
|
||||||
|
|
@ -426,7 +444,8 @@ def announce_button_undo(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
'/users/' + self.post_to_nickname
|
'/users/' + self.post_to_nickname
|
||||||
|
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,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 is_yggdrasil_url
|
||||||
from mitm import detect_mitm
|
from mitm import detect_mitm
|
||||||
from session import establish_session
|
from session import establish_session
|
||||||
from httpheaders import redirect_headers
|
from httpheaders import redirect_headers
|
||||||
|
|
@ -33,6 +34,7 @@ def bookmark_button(self, calling_domain: str, path: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str, port: int,
|
domain: str, domain_full: str, port: int,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type: str, cookie: str,
|
proxy_type: str, cookie: str,
|
||||||
debug: str,
|
debug: str,
|
||||||
|
|
@ -66,6 +68,7 @@ def bookmark_button(self, calling_domain: str, path: str,
|
||||||
min_images_for_accounts: [],
|
min_images_for_accounts: [],
|
||||||
session_onion,
|
session_onion,
|
||||||
session_i2p,
|
session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {}) -> None:
|
instance_software: {}) -> None:
|
||||||
"""Bookmark button was pressed
|
"""Bookmark button was pressed
|
||||||
|
|
@ -114,7 +117,8 @@ def bookmark_button(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
actor
|
actor
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
actor_absolute + '/' + timeline_str + \
|
actor_absolute + '/' + timeline_str + \
|
||||||
|
|
@ -131,6 +135,10 @@ def bookmark_button(self, calling_domain: str, path: str,
|
||||||
if '.onion/' in actor:
|
if '.onion/' in actor:
|
||||||
curr_session = session_i2p
|
curr_session = session_i2p
|
||||||
proxy_type = 'i2p'
|
proxy_type = 'i2p'
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if is_yggdrasil_url(actor):
|
||||||
|
curr_session = session_yggdrasil
|
||||||
|
proxy_type = 'yggdrasil'
|
||||||
|
|
||||||
curr_session = \
|
curr_session = \
|
||||||
establish_session("bookmark_button",
|
establish_session("bookmark_button",
|
||||||
|
|
@ -235,7 +243,8 @@ def bookmark_button(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
'/users/' + self.post_to_nickname
|
'/users/' + self.post_to_nickname
|
||||||
|
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
|
|
@ -253,6 +262,7 @@ def bookmark_button_undo(self, calling_domain: str, path: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str, port: int,
|
domain: str, domain_full: str, port: int,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type: str, cookie: str,
|
proxy_type: str, cookie: str,
|
||||||
debug: str,
|
debug: str,
|
||||||
|
|
@ -286,6 +296,7 @@ def bookmark_button_undo(self, calling_domain: str, path: str,
|
||||||
min_images_for_accounts: [],
|
min_images_for_accounts: [],
|
||||||
session_onion,
|
session_onion,
|
||||||
session_i2p,
|
session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {}) -> None:
|
instance_software: {}) -> None:
|
||||||
"""Button pressed to undo a bookmark
|
"""Button pressed to undo a bookmark
|
||||||
|
|
@ -333,7 +344,8 @@ def bookmark_button_undo(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
actor
|
actor
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
actor_absolute + '/' + timeline_str + \
|
actor_absolute + '/' + timeline_str + \
|
||||||
|
|
@ -350,6 +362,10 @@ def bookmark_button_undo(self, calling_domain: str, path: str,
|
||||||
if '.onion/' in actor:
|
if '.onion/' in actor:
|
||||||
curr_session = session_i2p
|
curr_session = session_i2p
|
||||||
proxy_type = 'i2p'
|
proxy_type = 'i2p'
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if is_yggdrasil_url(actor):
|
||||||
|
curr_session = session_yggdrasil
|
||||||
|
proxy_type = 'yggdrasil'
|
||||||
|
|
||||||
curr_session = \
|
curr_session = \
|
||||||
establish_session("bookmark_button_undo",
|
establish_session("bookmark_button_undo",
|
||||||
|
|
@ -455,7 +471,8 @@ def bookmark_button_undo(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
'/users/' + self.post_to_nickname
|
'/users/' + self.post_to_nickname
|
||||||
|
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
|
|
|
||||||
|
|
@ -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 is_yggdrasil_url
|
||||||
from mitm import detect_mitm
|
from mitm 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
|
||||||
|
|
@ -35,6 +36,7 @@ def like_button(self, calling_domain: str, path: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str,
|
domain: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type: str, cookie: str,
|
proxy_type: str, cookie: str,
|
||||||
debug: str,
|
debug: str,
|
||||||
|
|
@ -68,6 +70,7 @@ def like_button(self, calling_domain: str, path: str,
|
||||||
min_images_for_accounts: [],
|
min_images_for_accounts: [],
|
||||||
session_onion,
|
session_onion,
|
||||||
session_i2p,
|
session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {}) -> None:
|
instance_software: {}) -> None:
|
||||||
"""Press the like button
|
"""Press the like button
|
||||||
|
|
@ -116,7 +119,8 @@ def like_button(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
actor
|
actor
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
actor_absolute + '/' + timeline_str + \
|
actor_absolute + '/' + timeline_str + \
|
||||||
|
|
@ -133,6 +137,10 @@ def like_button(self, calling_domain: str, path: str,
|
||||||
if '.onion/' in actor:
|
if '.onion/' in actor:
|
||||||
curr_session = session_i2p
|
curr_session = session_i2p
|
||||||
proxy_type = 'i2p'
|
proxy_type = 'i2p'
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if is_yggdrasil_url(actor):
|
||||||
|
curr_session = session_yggdrasil
|
||||||
|
proxy_type = 'yggdrasil'
|
||||||
|
|
||||||
curr_session = \
|
curr_session = \
|
||||||
establish_session("like_button",
|
establish_session("like_button",
|
||||||
|
|
@ -289,7 +297,8 @@ def like_button(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
'/users/' + self.post_to_nickname
|
'/users/' + self.post_to_nickname
|
||||||
|
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
|
|
@ -307,6 +316,7 @@ def like_button_undo(self, calling_domain: str, path: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str,
|
domain: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type: str, cookie: str,
|
proxy_type: str, cookie: str,
|
||||||
debug: str,
|
debug: str,
|
||||||
|
|
@ -340,6 +350,7 @@ def like_button_undo(self, calling_domain: str, path: str,
|
||||||
icons_cache: {},
|
icons_cache: {},
|
||||||
session_onion,
|
session_onion,
|
||||||
session_i2p,
|
session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {}) -> None:
|
instance_software: {}) -> None:
|
||||||
"""A button is pressed to undo
|
"""A button is pressed to undo
|
||||||
|
|
@ -387,7 +398,8 @@ def like_button_undo(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
actor
|
actor
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
actor_absolute + '/' + timeline_str + \
|
actor_absolute + '/' + timeline_str + \
|
||||||
|
|
@ -404,6 +416,10 @@ def like_button_undo(self, calling_domain: str, path: str,
|
||||||
if '.onion/' in actor:
|
if '.onion/' in actor:
|
||||||
curr_session = session_i2p
|
curr_session = session_i2p
|
||||||
proxy_type = 'i2p'
|
proxy_type = 'i2p'
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if is_yggdrasil_url(actor):
|
||||||
|
curr_session = session_yggdrasil
|
||||||
|
proxy_type = 'yggdrasil'
|
||||||
|
|
||||||
curr_session = \
|
curr_session = \
|
||||||
establish_session("like_button_undo",
|
establish_session("like_button_undo",
|
||||||
|
|
@ -548,7 +564,8 @@ def like_button_undo(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
'/users/' + self.post_to_nickname
|
'/users/' + self.post_to_nickname
|
||||||
|
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,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 is_yggdrasil_address
|
||||||
from mitm import detect_mitm
|
from mitm import detect_mitm
|
||||||
from httpcodes import http_404
|
from httpcodes import http_404
|
||||||
from httpheaders import redirect_headers
|
from httpheaders import redirect_headers
|
||||||
|
|
@ -30,6 +31,7 @@ def mute_button(self, calling_domain: str, path: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str, port: int,
|
domain: str, domain_full: str, port: int,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time, cookie: str,
|
getreq_start_time, cookie: str,
|
||||||
debug: str, curr_session,
|
debug: str, curr_session,
|
||||||
signing_priv_key_pem: str,
|
signing_priv_key_pem: str,
|
||||||
|
|
@ -201,6 +203,10 @@ def mute_button(self, calling_domain: str, path: str,
|
||||||
actor = \
|
actor = \
|
||||||
'http://' + i2p_domain + \
|
'http://' + i2p_domain + \
|
||||||
path.split('?mute=')[0]
|
path.split('?mute=')[0]
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
actor = \
|
||||||
|
'http://' + yggdrasil_domain + \
|
||||||
|
path.split('?mute=')[0]
|
||||||
fitness_performance(getreq_start_time, fitness,
|
fitness_performance(getreq_start_time, fitness,
|
||||||
'_GET', '_mute_button', debug)
|
'_GET', '_mute_button', debug)
|
||||||
|
|
||||||
|
|
@ -215,6 +221,7 @@ def mute_button_undo(self, calling_domain: str, path: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str, port: int,
|
domain: str, domain_full: str, port: int,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time, cookie: str,
|
getreq_start_time, cookie: str,
|
||||||
debug: str, curr_session,
|
debug: str, curr_session,
|
||||||
signing_priv_key_pem: str,
|
signing_priv_key_pem: str,
|
||||||
|
|
@ -383,6 +390,9 @@ def mute_button_undo(self, calling_domain: str, path: str,
|
||||||
elif calling_domain.endswith('.i2p') and i2p_domain:
|
elif calling_domain.endswith('.i2p') and i2p_domain:
|
||||||
actor = \
|
actor = \
|
||||||
'http://' + i2p_domain + path.split('?unmute=')[0]
|
'http://' + i2p_domain + path.split('?unmute=')[0]
|
||||||
|
elif is_yggdrasil_address(calling_domain) and yggdrasil_domain:
|
||||||
|
actor = \
|
||||||
|
'http://' + yggdrasil_domain + path.split('?unmute=')[0]
|
||||||
fitness_performance(getreq_start_time, fitness,
|
fitness_performance(getreq_start_time, fitness,
|
||||||
'_GET', '_undo_mute_button', debug)
|
'_GET', '_undo_mute_button', debug)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ 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 is_yggdrasil_url
|
||||||
from mitm import detect_mitm
|
from mitm import detect_mitm
|
||||||
from httpheaders import redirect_headers
|
from httpheaders import redirect_headers
|
||||||
from session import establish_session
|
from session import establish_session
|
||||||
|
|
@ -36,6 +37,7 @@ def reaction_button(self, calling_domain: str, path: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str,
|
domain: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type: str, cookie: str,
|
proxy_type: str, cookie: str,
|
||||||
debug: str,
|
debug: str,
|
||||||
|
|
@ -67,6 +69,7 @@ def reaction_button(self, calling_domain: str, path: str,
|
||||||
bold_reading_nicknames: {},
|
bold_reading_nicknames: {},
|
||||||
min_images_for_accounts: [],
|
min_images_for_accounts: [],
|
||||||
session_onion, session_i2p,
|
session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {}) -> None:
|
instance_software: {}) -> None:
|
||||||
"""Press an emoji reaction button
|
"""Press an emoji reaction button
|
||||||
|
|
@ -120,7 +123,8 @@ def reaction_button(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
actor
|
actor
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
actor_absolute + '/' + timeline_str + \
|
actor_absolute + '/' + timeline_str + \
|
||||||
|
|
@ -137,7 +141,8 @@ def reaction_button(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
actor
|
actor
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
actor_absolute + '/' + timeline_str + \
|
actor_absolute + '/' + timeline_str + \
|
||||||
|
|
@ -154,6 +159,10 @@ def reaction_button(self, calling_domain: str, path: str,
|
||||||
if '.onion/' in actor:
|
if '.onion/' in actor:
|
||||||
curr_session = session_i2p
|
curr_session = session_i2p
|
||||||
proxy_type = 'i2p'
|
proxy_type = 'i2p'
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if is_yggdrasil_url(actor):
|
||||||
|
curr_session = session_yggdrasil
|
||||||
|
proxy_type = 'yggdrasil'
|
||||||
|
|
||||||
curr_session = \
|
curr_session = \
|
||||||
establish_session("reaction_button",
|
establish_session("reaction_button",
|
||||||
|
|
@ -316,7 +325,8 @@ def reaction_button(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
'/users/' + self.post_to_nickname
|
'/users/' + self.post_to_nickname
|
||||||
|
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
|
|
@ -334,6 +344,7 @@ def reaction_button_undo(self, calling_domain: str, path: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str,
|
domain: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type: str, cookie: str,
|
proxy_type: str, cookie: str,
|
||||||
debug: str,
|
debug: str,
|
||||||
|
|
@ -366,6 +377,7 @@ def reaction_button_undo(self, calling_domain: str, path: str,
|
||||||
min_images_for_accounts: [],
|
min_images_for_accounts: [],
|
||||||
session_onion,
|
session_onion,
|
||||||
session_i2p,
|
session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {}) -> None:
|
instance_software: {}) -> None:
|
||||||
"""A button is pressed to undo emoji reaction
|
"""A button is pressed to undo emoji reaction
|
||||||
|
|
@ -413,7 +425,8 @@ def reaction_button_undo(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
actor
|
actor
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
actor_absolute + '/' + timeline_str + \
|
actor_absolute + '/' + timeline_str + \
|
||||||
|
|
@ -433,7 +446,8 @@ def reaction_button_undo(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
actor
|
actor
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
actor_absolute + '/' + timeline_str + \
|
actor_absolute + '/' + timeline_str + \
|
||||||
|
|
@ -451,6 +465,10 @@ def reaction_button_undo(self, calling_domain: str, path: str,
|
||||||
if '.onion/' in actor:
|
if '.onion/' in actor:
|
||||||
curr_session = session_i2p
|
curr_session = session_i2p
|
||||||
proxy_type = 'i2p'
|
proxy_type = 'i2p'
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if is_yggdrasil_url(actor):
|
||||||
|
curr_session = session_yggdrasil
|
||||||
|
proxy_type = 'yggdrasil'
|
||||||
|
|
||||||
curr_session = \
|
curr_session = \
|
||||||
establish_session("reaction_button_undo",
|
establish_session("reaction_button_undo",
|
||||||
|
|
@ -598,7 +616,8 @@ def reaction_button_undo(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
'/users/' + self.post_to_nickname
|
'/users/' + self.post_to_nickname
|
||||||
|
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,8 @@ def get_featured_collection(self, calling_domain: str,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
system_language: str,
|
system_language: str,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str) -> None:
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str) -> None:
|
||||||
"""Returns the featured posts collections in
|
"""Returns the featured posts collections in
|
||||||
actor/collections/featured
|
actor/collections/featured
|
||||||
"""
|
"""
|
||||||
|
|
@ -37,7 +38,8 @@ def get_featured_collection(self, calling_domain: str,
|
||||||
ensure_ascii=False)
|
ensure_ascii=False)
|
||||||
msg_str = convert_domains(calling_domain, referer_domain,
|
msg_str = convert_domains(calling_domain, referer_domain,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain, onion_domain, i2p_domain)
|
domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -52,7 +54,8 @@ def get_featured_tags_collection(self, calling_domain: str,
|
||||||
referer_domain: str,
|
referer_domain: str,
|
||||||
path: str, http_prefix: str,
|
path: str, http_prefix: str,
|
||||||
domain_full: str, domain: str,
|
domain_full: str, domain: str,
|
||||||
onion_domain: str, i2p_domain: str) -> None:
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str) -> None:
|
||||||
"""Returns the featured tags collections in
|
"""Returns the featured tags collections in
|
||||||
actor/collections/featuredTags
|
actor/collections/featuredTags
|
||||||
"""
|
"""
|
||||||
|
|
@ -71,7 +74,8 @@ def get_featured_tags_collection(self, calling_domain: str,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -88,7 +92,8 @@ def get_following_json(self, base_dir: str, path: str,
|
||||||
domain: str, port: int,
|
domain: str, port: int,
|
||||||
following_items_per_page: int,
|
following_items_per_page: int,
|
||||||
debug: bool, list_name: str,
|
debug: bool, list_name: str,
|
||||||
onion_domain: str, i2p_domain: str) -> None:
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str) -> None:
|
||||||
"""Returns json collection for following.txt
|
"""Returns json collection for following.txt
|
||||||
"""
|
"""
|
||||||
following_json = \
|
following_json = \
|
||||||
|
|
@ -106,7 +111,8 @@ def get_following_json(self, base_dir: str, path: str,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,7 @@ def show_shares_feed(self, authorized: bool,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
hide_recent_posts: {}) -> bool:
|
hide_recent_posts: {}) -> bool:
|
||||||
"""Shows the shares feed for a particular account/actor
|
"""Shows the shares feed for a particular account/actor
|
||||||
|
|
@ -199,7 +200,8 @@ def show_shares_feed(self, authorized: bool,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -260,6 +262,7 @@ def show_following_feed(self, authorized: bool,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
hide_recent_posts: {}) -> bool:
|
hide_recent_posts: {}) -> bool:
|
||||||
"""Shows the following feed for a particular account/actor
|
"""Shows the following feed for a particular account/actor
|
||||||
|
|
@ -403,7 +406,8 @@ def show_following_feed(self, authorized: bool,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -464,6 +468,7 @@ def show_moved_feed(self, authorized: bool,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
hide_recent_posts: {}) -> bool:
|
hide_recent_posts: {}) -> bool:
|
||||||
"""Shows the moved feed for a particular account/actor
|
"""Shows the moved feed for a particular account/actor
|
||||||
|
|
@ -594,7 +599,8 @@ def show_moved_feed(self, authorized: bool,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -655,6 +661,7 @@ def show_inactive_feed(self, authorized: bool,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
hide_recent_posts: {}) -> bool:
|
hide_recent_posts: {}) -> bool:
|
||||||
"""Shows the inactive accounts feed for a particular account/actor
|
"""Shows the inactive accounts feed for a particular account/actor
|
||||||
|
|
@ -787,7 +794,8 @@ def show_inactive_feed(self, authorized: bool,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -849,6 +857,7 @@ def show_followers_feed(self, authorized: bool,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
hide_recent_posts: {}) -> bool:
|
hide_recent_posts: {}) -> bool:
|
||||||
"""Shows the followers feed for a particular account/actor
|
"""Shows the followers feed for a particular account/actor
|
||||||
|
|
@ -989,7 +998,8 @@ def show_followers_feed(self, authorized: bool,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ from httpheaders import set_headers
|
||||||
from blocking import is_blocked_hashtag
|
from blocking import is_blocked_hashtag
|
||||||
from utils import convert_domains
|
from utils import convert_domains
|
||||||
from utils import get_nickname_from_actor
|
from utils import get_nickname_from_actor
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from fitnessFunctions import fitness_performance
|
from fitnessFunctions import fitness_performance
|
||||||
from webapp_utils import html_hashtag_blocked
|
from webapp_utils import html_hashtag_blocked
|
||||||
from webapp_search import html_hashtag_search
|
from webapp_search import html_hashtag_search
|
||||||
|
|
@ -32,6 +33,7 @@ def hashtag_search_rss2(self, calling_domain: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str, port: int,
|
domain: str, domain_full: str, port: int,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
system_language: str,
|
system_language: str,
|
||||||
fitness: {}, debug: bool) -> None:
|
fitness: {}, debug: bool) -> None:
|
||||||
|
|
@ -66,9 +68,12 @@ def hashtag_search_rss2(self, calling_domain: str,
|
||||||
if calling_domain.endswith('.onion') and onion_domain:
|
if calling_domain.endswith('.onion') and onion_domain:
|
||||||
origin_path_str_absolute = \
|
origin_path_str_absolute = \
|
||||||
'http://' + onion_domain + origin_path_str
|
'http://' + onion_domain + origin_path_str
|
||||||
elif (calling_domain.endswith('.i2p') and onion_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str_absolute = \
|
origin_path_str_absolute = \
|
||||||
'http://' + i2p_domain + origin_path_str
|
'http://' + i2p_domain + origin_path_str
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str_absolute = \
|
||||||
|
'http://' + yggdrasil_domain + origin_path_str
|
||||||
redirect_headers(self, origin_path_str_absolute + '/search',
|
redirect_headers(self, origin_path_str_absolute + '/search',
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
fitness_performance(getreq_start_time, fitness,
|
fitness_performance(getreq_start_time, fitness,
|
||||||
|
|
@ -82,6 +87,7 @@ def hashtag_search_json2(self, calling_domain: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str, port: int,
|
domain: str, domain_full: str, port: int,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
max_posts_in_feed: int,
|
max_posts_in_feed: int,
|
||||||
fitness: {}, debug: bool) -> None:
|
fitness: {}, debug: bool) -> None:
|
||||||
|
|
@ -113,7 +119,8 @@ def hashtag_search_json2(self, calling_domain: str,
|
||||||
msg_str = json.dumps(hashtag_json)
|
msg_str = json.dumps(hashtag_json)
|
||||||
msg_str = convert_domains(calling_domain, referer_domain,
|
msg_str = convert_domains(calling_domain, referer_domain,
|
||||||
msg_str, http_prefix, domain,
|
msg_str, http_prefix, domain,
|
||||||
onion_domain, i2p_domain)
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
set_headers(self, 'application/json', msglen,
|
set_headers(self, 'application/json', msglen,
|
||||||
|
|
@ -126,9 +133,12 @@ def hashtag_search_json2(self, calling_domain: str,
|
||||||
if calling_domain.endswith('.onion') and onion_domain:
|
if calling_domain.endswith('.onion') and onion_domain:
|
||||||
origin_path_str_absolute = \
|
origin_path_str_absolute = \
|
||||||
'http://' + onion_domain + origin_path_str
|
'http://' + onion_domain + origin_path_str
|
||||||
elif (calling_domain.endswith('.i2p') and onion_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str_absolute = \
|
origin_path_str_absolute = \
|
||||||
'http://' + i2p_domain + origin_path_str
|
'http://' + i2p_domain + origin_path_str
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str_absolute = \
|
||||||
|
'http://' + yggdrasil_domain + origin_path_str
|
||||||
redirect_headers(self, origin_path_str_absolute,
|
redirect_headers(self, origin_path_str_absolute,
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
fitness_performance(getreq_start_time, fitness,
|
fitness_performance(getreq_start_time, fitness,
|
||||||
|
|
@ -141,6 +151,7 @@ def hashtag_search2(self, calling_domain: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str, port: int,
|
domain: str, domain_full: str, port: int,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
curr_session,
|
curr_session,
|
||||||
max_posts_in_hashtag_feed: int,
|
max_posts_in_hashtag_feed: int,
|
||||||
|
|
@ -258,9 +269,12 @@ def hashtag_search2(self, calling_domain: str,
|
||||||
if calling_domain.endswith('.onion') and onion_domain:
|
if calling_domain.endswith('.onion') and onion_domain:
|
||||||
origin_path_str_absolute = \
|
origin_path_str_absolute = \
|
||||||
'http://' + onion_domain + origin_path_str
|
'http://' + onion_domain + origin_path_str
|
||||||
elif (calling_domain.endswith('.i2p') and onion_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str_absolute = \
|
origin_path_str_absolute = \
|
||||||
'http://' + i2p_domain + origin_path_str
|
'http://' + i2p_domain + origin_path_str
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str_absolute = \
|
||||||
|
'http://' + yggdrasil_domain + origin_path_str
|
||||||
redirect_headers(self, origin_path_str_absolute + '/search',
|
redirect_headers(self, origin_path_str_absolute + '/search',
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
fitness_performance(getreq_start_time, fitness,
|
fitness_performance(getreq_start_time, fitness,
|
||||||
|
|
|
||||||
|
|
@ -486,6 +486,7 @@ def show_media(self, path: str, base_dir: str,
|
||||||
def show_qrcode(self, calling_domain: str, path: str,
|
def show_qrcode(self, calling_domain: str, path: str,
|
||||||
base_dir: str, domain: str, domain_full: str,
|
base_dir: str, domain: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
port: int, getreq_start_time,
|
port: int, getreq_start_time,
|
||||||
fitness: {}, debug: bool) -> bool:
|
fitness: {}, debug: bool) -> bool:
|
||||||
"""Shows a QR code for an account
|
"""Shows a QR code for an account
|
||||||
|
|
@ -500,6 +501,9 @@ def show_qrcode(self, calling_domain: str, path: str,
|
||||||
elif i2p_domain:
|
elif i2p_domain:
|
||||||
qrcode_domain = i2p_domain
|
qrcode_domain = i2p_domain
|
||||||
port = 80
|
port = 80
|
||||||
|
elif yggdrasil_domain:
|
||||||
|
qrcode_domain = yggdrasil_domain
|
||||||
|
port = 80
|
||||||
else:
|
else:
|
||||||
qrcode_domain = domain
|
qrcode_domain = domain
|
||||||
save_person_qrcode(base_dir, nickname, domain, qrcode_domain, port)
|
save_person_qrcode(base_dir, nickname, domain, qrcode_domain, port)
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ def show_instance_actor(self, calling_domain: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str,
|
domain: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
cookie: str, debug: str,
|
cookie: str, debug: str,
|
||||||
enable_shared_inbox: bool,
|
enable_shared_inbox: bool,
|
||||||
|
|
@ -42,7 +43,8 @@ def show_instance_actor(self, calling_domain: str,
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
actor_domain_url = get_instance_url(calling_domain,
|
actor_domain_url = get_instance_url(calling_domain,
|
||||||
http_prefix, domain_full,
|
http_prefix, domain_full,
|
||||||
onion_domain, i2p_domain)
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
actor_url = actor_domain_url + '/users/Actor'
|
actor_url = actor_domain_url + '/users/Actor'
|
||||||
remove_fields = (
|
remove_fields = (
|
||||||
'icon', 'image', 'tts', 'shares',
|
'icon', 'image', 'tts', 'shares',
|
||||||
|
|
@ -75,7 +77,8 @@ def show_instance_actor(self, calling_domain: str,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
if 'application/ld+json' in accept_str:
|
if 'application/ld+json' in accept_str:
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ from webapp_login import html_login
|
||||||
def redirect_to_login_screen(self, calling_domain: str, path: str,
|
def redirect_to_login_screen(self, calling_domain: str, path: str,
|
||||||
http_prefix: str, domain_full: str,
|
http_prefix: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
authorized: bool, debug: bool,
|
authorized: bool, debug: bool,
|
||||||
news_instance: bool, fitness: {}) -> bool:
|
news_instance: bool, fitness: {}) -> bool:
|
||||||
|
|
@ -56,7 +57,8 @@ def redirect_to_login_screen(self, calling_domain: str, path: str,
|
||||||
redirect_url = \
|
redirect_url = \
|
||||||
get_instance_url(calling_domain,
|
get_instance_url(calling_domain,
|
||||||
http_prefix, domain_full,
|
http_prefix, domain_full,
|
||||||
onion_domain, i2p_domain) + \
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
divert_path
|
divert_path
|
||||||
redirect_headers(self, redirect_url, None, calling_domain, 303)
|
redirect_headers(self, redirect_url, None, calling_domain, 303)
|
||||||
fitness_performance(getreq_start_time, fitness,
|
fitness_performance(getreq_start_time, fitness,
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ def masto_api(self, path: str, calling_domain: str,
|
||||||
base_dir: str, nickname: str, domain: str,
|
base_dir: str, nickname: str, domain: str,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
translate: {},
|
translate: {},
|
||||||
registration: bool,
|
registration: bool,
|
||||||
system_language: str,
|
system_language: str,
|
||||||
|
|
@ -44,6 +45,7 @@ def masto_api(self, path: str, calling_domain: str,
|
||||||
if _masto_api_v2(self, path, calling_domain, ua_str, authorized,
|
if _masto_api_v2(self, path, calling_domain, ua_str, authorized,
|
||||||
http_prefix, base_dir, nickname, domain,
|
http_prefix, base_dir, nickname, domain,
|
||||||
domain_full, onion_domain, i2p_domain,
|
domain_full, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
translate, registration, system_language,
|
translate, registration, system_language,
|
||||||
project_version,
|
project_version,
|
||||||
show_node_info_accounts,
|
show_node_info_accounts,
|
||||||
|
|
@ -54,6 +56,7 @@ def masto_api(self, path: str, calling_domain: str,
|
||||||
return _masto_api_v1(self, path, calling_domain, ua_str, authorized,
|
return _masto_api_v1(self, path, calling_domain, ua_str, authorized,
|
||||||
http_prefix, base_dir, nickname, domain,
|
http_prefix, base_dir, nickname, domain,
|
||||||
domain_full, onion_domain, i2p_domain,
|
domain_full, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
translate, registration, system_language,
|
translate, registration, system_language,
|
||||||
project_version, custom_emoji,
|
project_version, custom_emoji,
|
||||||
show_node_info_accounts,
|
show_node_info_accounts,
|
||||||
|
|
@ -70,6 +73,7 @@ def _masto_api_v1(self, path: str, calling_domain: str,
|
||||||
base_dir: str, nickname: str, domain: str,
|
base_dir: str, nickname: str, domain: str,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
translate: {},
|
translate: {},
|
||||||
registration: bool,
|
registration: bool,
|
||||||
system_language: str,
|
system_language: str,
|
||||||
|
|
@ -158,6 +162,7 @@ def _masto_api_v1(self, path: str, calling_domain: str,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
translate,
|
translate,
|
||||||
registration,
|
registration,
|
||||||
system_language,
|
system_language,
|
||||||
|
|
@ -170,7 +175,8 @@ def _masto_api_v1(self, path: str, calling_domain: str,
|
||||||
msg_str = json.dumps(send_json)
|
msg_str = json.dumps(send_json)
|
||||||
msg_str = convert_domains(calling_domain, referer_domain,
|
msg_str = convert_domains(calling_domain, referer_domain,
|
||||||
msg_str, http_prefix, domain,
|
msg_str, http_prefix, domain,
|
||||||
onion_domain, i2p_domain)
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
if has_accept(self, calling_domain):
|
if has_accept(self, calling_domain):
|
||||||
|
|
@ -200,6 +206,7 @@ def _masto_api_v2(self, path: str, calling_domain: str,
|
||||||
base_dir: str, nickname: str, domain: str,
|
base_dir: str, nickname: str, domain: str,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
translate: {},
|
translate: {},
|
||||||
registration: bool,
|
registration: bool,
|
||||||
system_language: str,
|
system_language: str,
|
||||||
|
|
@ -286,6 +293,7 @@ def _masto_api_v2(self, path: str, calling_domain: str,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
translate,
|
translate,
|
||||||
registration,
|
registration,
|
||||||
system_language,
|
system_language,
|
||||||
|
|
@ -297,7 +305,8 @@ def _masto_api_v2(self, path: str, calling_domain: str,
|
||||||
msg_str = json.dumps(send_json)
|
msg_str = json.dumps(send_json)
|
||||||
msg_str = convert_domains(calling_domain, referer_domain,
|
msg_str = convert_domains(calling_domain, referer_domain,
|
||||||
msg_str, http_prefix, domain,
|
msg_str, http_prefix, domain,
|
||||||
onion_domain, i2p_domain)
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
if has_accept(self, calling_domain):
|
if has_accept(self, calling_domain):
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ from httpheaders import set_headers
|
||||||
from newswire import get_rss_from_dict
|
from newswire import get_rss_from_dict
|
||||||
from fitnessFunctions import fitness_performance
|
from fitnessFunctions import fitness_performance
|
||||||
from flags import is_moderator
|
from flags import is_moderator
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from utils import data_dir
|
from utils import data_dir
|
||||||
from utils import local_actor_url
|
from utils import local_actor_url
|
||||||
from utils import save_json
|
from utils import save_json
|
||||||
|
|
@ -65,6 +66,7 @@ def newswire_vote(self, calling_domain: str, path: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
newswire: {}, default_timeline: str,
|
newswire: {}, default_timeline: str,
|
||||||
fitness: {}, debug: bool) -> None:
|
fitness: {}, debug: bool) -> None:
|
||||||
|
|
@ -111,6 +113,9 @@ def newswire_vote(self, calling_domain: str, path: str,
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str_absolute = \
|
origin_path_str_absolute = \
|
||||||
'http://' + i2p_domain + origin_path_str
|
'http://' + i2p_domain + origin_path_str
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str_absolute = \
|
||||||
|
'http://' + yggdrasil_domain + origin_path_str
|
||||||
fitness_performance(getreq_start_time, fitness,
|
fitness_performance(getreq_start_time, fitness,
|
||||||
'_GET', '_newswire_vote',
|
'_GET', '_newswire_vote',
|
||||||
debug)
|
debug)
|
||||||
|
|
@ -122,6 +127,7 @@ def newswire_unvote(self, calling_domain: str, path: str,
|
||||||
cookie: str, base_dir: str, http_prefix: str,
|
cookie: str, base_dir: str, http_prefix: str,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time, debug: bool,
|
getreq_start_time, debug: bool,
|
||||||
newswire: {}, default_timeline: str,
|
newswire: {}, default_timeline: str,
|
||||||
fitness: {}) -> None:
|
fitness: {}) -> None:
|
||||||
|
|
@ -166,6 +172,9 @@ def newswire_unvote(self, calling_domain: str, path: str,
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str_absolute = \
|
origin_path_str_absolute = \
|
||||||
'http://' + i2p_domain + origin_path_str
|
'http://' + i2p_domain + origin_path_str
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str_absolute = \
|
||||||
|
'http://' + yggdrasil_domain + origin_path_str
|
||||||
redirect_headers(self, origin_path_str_absolute,
|
redirect_headers(self, origin_path_str_absolute,
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
fitness_performance(getreq_start_time, fitness,
|
fitness_performance(getreq_start_time, fitness,
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ def get_nodeinfo(self, ua_str: str, calling_domain: str,
|
||||||
known_crawlers: [],
|
known_crawlers: [],
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
project_version: str,
|
project_version: str,
|
||||||
show_node_info_version: bool,
|
show_node_info_version: bool,
|
||||||
show_node_info_accounts: bool,
|
show_node_info_accounts: bool,
|
||||||
|
|
@ -123,7 +124,8 @@ def get_nodeinfo(self, ua_str: str, calling_domain: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
about_url = instance_url + '/about'
|
about_url = instance_url + '/about'
|
||||||
terms_of_service_url = instance_url + '/terms'
|
terms_of_service_url = instance_url + '/terms'
|
||||||
info = meta_data_node_info(base_dir,
|
info = meta_data_node_info(base_dir,
|
||||||
|
|
@ -140,7 +142,8 @@ def get_nodeinfo(self, ua_str: str, calling_domain: str,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
protocol_str = \
|
protocol_str = \
|
||||||
|
|
|
||||||
|
|
@ -86,6 +86,7 @@ def _show_post_from_file(self, post_filename: str, liked_by: str,
|
||||||
fitness: {}, path: str,
|
fitness: {}, path: str,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {},
|
instance_software: {},
|
||||||
ua_str: str) -> bool:
|
ua_str: str) -> bool:
|
||||||
|
|
@ -206,7 +207,8 @@ def _show_post_from_file(self, post_filename: str, liked_by: str,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
protocol_str = \
|
protocol_str = \
|
||||||
|
|
@ -257,6 +259,7 @@ def show_individual_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,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {},
|
instance_software: {},
|
||||||
ua_str: str) -> bool:
|
ua_str: str) -> bool:
|
||||||
|
|
@ -365,6 +368,7 @@ def show_individual_post(self, ssml_getreq: bool, authorized: bool,
|
||||||
fitness, path,
|
fitness, path,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
mitm_servers,
|
mitm_servers,
|
||||||
instance_software,
|
instance_software,
|
||||||
ua_str)
|
ua_str)
|
||||||
|
|
@ -601,6 +605,7 @@ 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,
|
||||||
|
yggdrasil_domain: str,
|
||||||
bold_reading_nicknames: {},
|
bold_reading_nicknames: {},
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {},
|
instance_software: {},
|
||||||
|
|
@ -716,6 +721,7 @@ def show_individual_at_post(self, ssml_getreq: bool, authorized: bool,
|
||||||
fitness, path,
|
fitness, path,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
mitm_servers,
|
mitm_servers,
|
||||||
instance_software,
|
instance_software,
|
||||||
ua_str)
|
ua_str)
|
||||||
|
|
@ -965,6 +971,7 @@ def show_replies_to_post(self, authorized: bool,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {}) -> bool:
|
instance_software: {}) -> bool:
|
||||||
"""Shows the replies to a post
|
"""Shows the replies to a post
|
||||||
|
|
@ -1093,7 +1100,8 @@ def show_replies_to_post(self, authorized: bool,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
protocol_str = \
|
protocol_str = \
|
||||||
get_json_content_from_accept(self.headers['Accept'])
|
get_json_content_from_accept(self.headers['Accept'])
|
||||||
|
|
@ -1214,7 +1222,8 @@ def show_replies_to_post(self, authorized: bool,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
protocol_str = \
|
protocol_str = \
|
||||||
get_json_content_from_accept(self.headers['Accept'])
|
get_json_content_from_accept(self.headers['Accept'])
|
||||||
|
|
@ -1263,6 +1272,7 @@ 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,
|
||||||
|
yggdrasil_domain: str,
|
||||||
bold_reading_nicknames: {},
|
bold_reading_nicknames: {},
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {},
|
instance_software: {},
|
||||||
|
|
@ -1325,6 +1335,7 @@ def show_notify_post(self, authorized: bool,
|
||||||
fitness, path,
|
fitness, path,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
mitm_servers,
|
mitm_servers,
|
||||||
instance_software,
|
instance_software,
|
||||||
ua_str)
|
ua_str)
|
||||||
|
|
@ -1343,6 +1354,7 @@ def show_conversation_thread(self, authorized: bool,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
account_timezone: {},
|
account_timezone: {},
|
||||||
bold_reading_nicknames: {},
|
bold_reading_nicknames: {},
|
||||||
translate: {},
|
translate: {},
|
||||||
|
|
@ -1405,7 +1417,8 @@ def show_conversation_thread(self, authorized: bool,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
post_id = instance_url + post_id
|
post_id = instance_url + post_id
|
||||||
nickname = path.split('/users/')[1]
|
nickname = path.split('/users/')[1]
|
||||||
if conv_separator in nickname:
|
if conv_separator in nickname:
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ def show_person_profile(self, authorized: bool,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain: str,
|
domain: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time,
|
getreq_start_time,
|
||||||
proxy_type: str, cookie: str,
|
proxy_type: str, cookie: str,
|
||||||
debug: str,
|
debug: str,
|
||||||
|
|
@ -88,7 +89,8 @@ def show_person_profile(self, authorized: bool,
|
||||||
actor_json = person_lookup(domain, path, base_dir)
|
actor_json = person_lookup(domain, path, base_dir)
|
||||||
if not actor_json:
|
if not actor_json:
|
||||||
return False
|
return False
|
||||||
add_alternate_domains(actor_json, domain, onion_domain, i2p_domain)
|
add_alternate_domains(actor_json, domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
if request_http(self.headers, debug):
|
if request_http(self.headers, debug):
|
||||||
curr_session = \
|
curr_session = \
|
||||||
establish_session("show_person_profile",
|
establish_session("show_person_profile",
|
||||||
|
|
@ -186,7 +188,8 @@ def show_person_profile(self, authorized: bool,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
if 'application/ld+json' in accept_str:
|
if 'application/ld+json' in accept_str:
|
||||||
|
|
@ -249,6 +252,7 @@ def show_roles(self, calling_domain: str, referer_domain: str,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
hide_recent_posts: {}) -> bool:
|
hide_recent_posts: {}) -> bool:
|
||||||
"""Show roles within profile screen
|
"""Show roles within profile screen
|
||||||
|
|
@ -351,7 +355,8 @@ def show_roles(self, calling_domain: str, referer_domain: str,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
protocol_str = \
|
protocol_str = \
|
||||||
|
|
@ -408,6 +413,7 @@ def show_skills(self, calling_domain: str, referer_domain: str,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
hide_recent_posts: {}) -> bool:
|
hide_recent_posts: {}) -> bool:
|
||||||
"""Show skills on the profile screen
|
"""Show skills on the profile screen
|
||||||
|
|
@ -522,7 +528,8 @@ def show_skills(self, calling_domain: str, referer_domain: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -541,7 +548,7 @@ def show_skills(self, calling_domain: str, referer_domain: str,
|
||||||
actor = path.replace('/skills', '')
|
actor = path.replace('/skills', '')
|
||||||
actor_absolute = \
|
actor_absolute = \
|
||||||
get_instance_url(calling_domain, http_prefix, domain_full,
|
get_instance_url(calling_domain, http_prefix, domain_full,
|
||||||
onion_domain, i2p_domain) + \
|
onion_domain, i2p_domain, yggdrasil_domain) + \
|
||||||
actor
|
actor
|
||||||
redirect_headers(self, actor_absolute, cookie, calling_domain, 303)
|
redirect_headers(self, actor_absolute, cookie, calling_domain, 303)
|
||||||
return True
|
return True
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ def progressive_web_app_manifest(self, base_dir: str,
|
||||||
domain: str,
|
domain: str,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
debug: bool) -> None:
|
debug: bool) -> None:
|
||||||
"""gets the PWA manifest
|
"""gets the PWA manifest
|
||||||
|
|
@ -36,7 +37,8 @@ def progressive_web_app_manifest(self, base_dir: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
|
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ def reaction_picker2(self, calling_domain: str, path: str,
|
||||||
getreq_start_time, cookie: str,
|
getreq_start_time, cookie: str,
|
||||||
debug: str, curr_session,
|
debug: str, curr_session,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
recent_posts_cache: {},
|
recent_posts_cache: {},
|
||||||
max_recent_posts: int,
|
max_recent_posts: int,
|
||||||
translate: {},
|
translate: {},
|
||||||
|
|
@ -86,7 +87,8 @@ def reaction_picker2(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
actor
|
actor
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
actor_absolute + '/' + timeline_str + \
|
actor_absolute + '/' + timeline_str + \
|
||||||
|
|
@ -107,7 +109,8 @@ def reaction_picker2(self, calling_domain: str, path: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
actor
|
actor
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
actor_absolute + '/' + timeline_str + \
|
actor_absolute + '/' + timeline_str + \
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,7 @@ 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,
|
||||||
|
yggdrasil_domain: str,
|
||||||
hide_announces: {},
|
hide_announces: {},
|
||||||
mitm_servers: []) -> bool:
|
mitm_servers: []) -> bool:
|
||||||
"""Shows the media timeline
|
"""Shows the media timeline
|
||||||
|
|
@ -228,7 +229,8 @@ def show_media_timeline(self, authorized: bool,
|
||||||
referer_domain,
|
referer_domain,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain, i2p_domain)
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -305,6 +307,7 @@ def show_blogs_timeline(self, authorized: bool,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: []) -> bool:
|
mitm_servers: []) -> bool:
|
||||||
"""Shows the blogs timeline
|
"""Shows the blogs timeline
|
||||||
"""
|
"""
|
||||||
|
|
@ -443,7 +446,8 @@ def show_blogs_timeline(self, authorized: bool,
|
||||||
referer_domain,
|
referer_domain,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain, i2p_domain)
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -521,6 +525,7 @@ def show_news_timeline(self, authorized: bool,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: []) -> bool:
|
mitm_servers: []) -> bool:
|
||||||
"""Shows the news timeline
|
"""Shows the news timeline
|
||||||
"""
|
"""
|
||||||
|
|
@ -664,7 +669,8 @@ def show_news_timeline(self, authorized: bool,
|
||||||
referer_domain,
|
referer_domain,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain, i2p_domain)
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -740,6 +746,7 @@ def show_features_timeline(self, authorized: bool,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: []) -> bool:
|
mitm_servers: []) -> bool:
|
||||||
"""Shows the features timeline (all local blogs)
|
"""Shows the features timeline (all local blogs)
|
||||||
"""
|
"""
|
||||||
|
|
@ -880,7 +887,8 @@ def show_features_timeline(self, authorized: bool,
|
||||||
msg_str,
|
msg_str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain, i2p_domain)
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -1259,6 +1267,7 @@ def show_bookmarks_timeline(self, authorized: bool,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: []) -> bool:
|
mitm_servers: []) -> bool:
|
||||||
"""Shows the bookmarks timeline
|
"""Shows the bookmarks timeline
|
||||||
"""
|
"""
|
||||||
|
|
@ -1393,7 +1402,8 @@ def show_bookmarks_timeline(self, authorized: bool,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -1471,6 +1481,7 @@ def show_outbox_timeline(self, authorized: bool,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
hide_announces: {},
|
hide_announces: {},
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
hide_recent_posts: {}) -> bool:
|
hide_recent_posts: {}) -> bool:
|
||||||
|
|
@ -1616,7 +1627,8 @@ def show_outbox_timeline(self, authorized: bool,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -1680,6 +1692,7 @@ def show_mod_timeline(self, authorized: bool,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: []) -> bool:
|
mitm_servers: []) -> bool:
|
||||||
"""Shows the moderation timeline
|
"""Shows the moderation timeline
|
||||||
"""
|
"""
|
||||||
|
|
@ -1813,7 +1826,8 @@ def show_mod_timeline(self, authorized: bool,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -1887,6 +1901,7 @@ def show_dms(self, authorized: bool,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: []) -> bool:
|
mitm_servers: []) -> bool:
|
||||||
"""Shows the DMs timeline
|
"""Shows the DMs timeline
|
||||||
"""
|
"""
|
||||||
|
|
@ -2023,7 +2038,8 @@ def show_dms(self, authorized: bool,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -2101,6 +2117,7 @@ def show_replies(self, authorized: bool,
|
||||||
fitness: {},
|
fitness: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: []) -> bool:
|
mitm_servers: []) -> bool:
|
||||||
"""Shows the replies timeline
|
"""Shows the replies timeline
|
||||||
"""
|
"""
|
||||||
|
|
@ -2238,7 +2255,8 @@ def show_replies(self, authorized: bool,
|
||||||
referer_domain,
|
referer_domain,
|
||||||
msg_str, http_prefix,
|
msg_str, http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain, i2p_domain)
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
@ -2315,6 +2333,7 @@ def show_inbox(self, authorized: bool,
|
||||||
auto_cw_cache: {},
|
auto_cw_cache: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
hide_announces: {},
|
hide_announces: {},
|
||||||
mitm_servers: []) -> bool:
|
mitm_servers: []) -> bool:
|
||||||
"""Shows the inbox timeline
|
"""Shows the inbox timeline
|
||||||
|
|
@ -2461,7 +2480,8 @@ def show_inbox(self, authorized: bool,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
set_headers(self, 'text/html', msglen,
|
set_headers(self, 'text/html', msglen,
|
||||||
|
|
@ -2482,7 +2502,8 @@ def show_inbox(self, authorized: bool,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain)
|
i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
accept_str = self.headers['Accept']
|
accept_str = self.headers['Accept']
|
||||||
|
|
|
||||||
|
|
@ -18,12 +18,14 @@ from webfinger import webfinger_meta
|
||||||
from webfinger import wellknown_protocol_handler
|
from webfinger import wellknown_protocol_handler
|
||||||
from utils import get_json_content_from_accept
|
from utils import get_json_content_from_accept
|
||||||
from utils import convert_domains
|
from utils import convert_domains
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from daemon_utils import has_accept
|
from daemon_utils import has_accept
|
||||||
|
|
||||||
|
|
||||||
def get_webfinger(self, calling_domain: str, referer_domain: str,
|
def get_webfinger(self, calling_domain: str, referer_domain: str,
|
||||||
cookie: str, path: str, debug: bool,
|
cookie: str, path: str, debug: bool,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
http_prefix: str, domain: str, domain_full: str,
|
http_prefix: str, domain: str, domain_full: str,
|
||||||
base_dir: str, port: int) -> bool:
|
base_dir: str, port: int) -> bool:
|
||||||
if not path.startswith('/.well-known'):
|
if not path.startswith('/.well-known'):
|
||||||
|
|
@ -42,6 +44,10 @@ def get_webfinger(self, calling_domain: str, referer_domain: str,
|
||||||
i2p_domain):
|
i2p_domain):
|
||||||
wf_result = \
|
wf_result = \
|
||||||
webfinger_meta('http', i2p_domain)
|
webfinger_meta('http', i2p_domain)
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and
|
||||||
|
yggdrasil_domain):
|
||||||
|
wf_result = \
|
||||||
|
webfinger_meta('http', yggdrasil_domain)
|
||||||
else:
|
else:
|
||||||
wf_result = \
|
wf_result = \
|
||||||
webfinger_meta(http_prefix, domain_full)
|
webfinger_meta(http_prefix, domain_full)
|
||||||
|
|
@ -69,6 +75,9 @@ def get_webfinger(self, calling_domain: str, referer_domain: str,
|
||||||
elif calling_domain.endswith('.i2p'):
|
elif calling_domain.endswith('.i2p'):
|
||||||
protocol_url, _ = \
|
protocol_url, _ = \
|
||||||
wellknown_protocol_handler(path, 'http', i2p_domain)
|
wellknown_protocol_handler(path, 'http', i2p_domain)
|
||||||
|
elif is_yggdrasil_address(calling_domain):
|
||||||
|
protocol_url, _ = \
|
||||||
|
wellknown_protocol_handler(path, 'http', yggdrasil_domain)
|
||||||
else:
|
else:
|
||||||
protocol_url, _ = \
|
protocol_url, _ = \
|
||||||
wellknown_protocol_handler(path, http_prefix, domain_full)
|
wellknown_protocol_handler(path, http_prefix, domain_full)
|
||||||
|
|
@ -87,6 +96,9 @@ def get_webfinger(self, calling_domain: str, referer_domain: str,
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
wf_result = \
|
wf_result = \
|
||||||
webfinger_node_info('http', i2p_domain)
|
webfinger_node_info('http', i2p_domain)
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
wf_result = \
|
||||||
|
webfinger_node_info('http', yggdrasil_domain)
|
||||||
else:
|
else:
|
||||||
wf_result = \
|
wf_result = \
|
||||||
webfinger_node_info(http_prefix, domain_full)
|
webfinger_node_info(http_prefix, domain_full)
|
||||||
|
|
@ -94,7 +106,8 @@ def get_webfinger(self, calling_domain: str, referer_domain: str,
|
||||||
msg_str = json.dumps(wf_result)
|
msg_str = json.dumps(wf_result)
|
||||||
msg_str = convert_domains(calling_domain, referer_domain,
|
msg_str = convert_domains(calling_domain, referer_domain,
|
||||||
msg_str, http_prefix, domain,
|
msg_str, http_prefix, domain,
|
||||||
onion_domain, i2p_domain)
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
if has_accept(self, calling_domain):
|
if has_accept(self, calling_domain):
|
||||||
|
|
@ -116,12 +129,13 @@ def get_webfinger(self, calling_domain: str, referer_domain: str,
|
||||||
wf_result = \
|
wf_result = \
|
||||||
webfinger_lookup(path, base_dir,
|
webfinger_lookup(path, base_dir,
|
||||||
domain, onion_domain,
|
domain, onion_domain,
|
||||||
i2p_domain, port, debug)
|
i2p_domain, yggdrasil_domain, port, debug)
|
||||||
if wf_result:
|
if wf_result:
|
||||||
msg_str = json.dumps(wf_result)
|
msg_str = json.dumps(wf_result)
|
||||||
msg_str = convert_domains(calling_domain, referer_domain,
|
msg_str = convert_domains(calling_domain, referer_domain,
|
||||||
msg_str, http_prefix, domain,
|
msg_str, http_prefix, domain,
|
||||||
onion_domain, i2p_domain)
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
msg = msg_str.encode('utf-8')
|
msg = msg_str.encode('utf-8')
|
||||||
msglen = len(msg)
|
msglen = len(msg)
|
||||||
set_headers(self, 'application/jrd+json', msglen,
|
set_headers(self, 'application/jrd+json', msglen,
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import errno
|
||||||
import json
|
import json
|
||||||
from socket import error as SocketError
|
from socket import error as SocketError
|
||||||
from flags import is_corporate
|
from flags import is_corporate
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from utils import replace_strings
|
from utils import replace_strings
|
||||||
from utils import string_ends_with
|
from utils import string_ends_with
|
||||||
from utils import get_config_param
|
from utils import get_config_param
|
||||||
|
|
@ -239,6 +240,13 @@ def daemon_http_post(self) -> None:
|
||||||
print('POST domain blocked: ' + calling_domain)
|
print('POST domain blocked: ' + calling_domain)
|
||||||
http_400(self)
|
http_400(self)
|
||||||
return
|
return
|
||||||
|
elif self.server.yggdrasil_domain:
|
||||||
|
if calling_domain not in (self.server.domain,
|
||||||
|
self.server.domain_full,
|
||||||
|
self.server.yggdrasil_domain):
|
||||||
|
print('POST domain blocked: ' + calling_domain)
|
||||||
|
http_400(self)
|
||||||
|
return
|
||||||
else:
|
else:
|
||||||
if calling_domain not in (self.server.domain,
|
if calling_domain not in (self.server.domain,
|
||||||
self.server.domain_full):
|
self.server.domain_full):
|
||||||
|
|
@ -368,6 +376,7 @@ def daemon_http_post(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
self.server.manual_follower_approval,
|
self.server.manual_follower_approval,
|
||||||
self.server.default_timeline)
|
self.server.default_timeline)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
|
|
@ -388,6 +397,7 @@ def daemon_http_post(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
self.server.max_post_length)
|
self.server.max_post_length)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -400,7 +410,9 @@ def daemon_http_post(self) -> None:
|
||||||
self.server.domain,
|
self.server.domain,
|
||||||
self.server.domain_full,
|
self.server.domain_full,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain, self.server.debug,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
|
self.server.debug,
|
||||||
self.server.allow_local_network_access,
|
self.server.allow_local_network_access,
|
||||||
self.server.system_language,
|
self.server.system_language,
|
||||||
self.server.content_license_url,
|
self.server.content_license_url,
|
||||||
|
|
@ -426,6 +438,7 @@ def daemon_http_post(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
self.server.max_post_length)
|
self.server.max_post_length)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -440,6 +453,7 @@ def daemon_http_post(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
self.server.max_post_length)
|
self.server.max_post_length)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -455,6 +469,7 @@ def daemon_http_post(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
self.server.max_post_length)
|
self.server.max_post_length)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -468,6 +483,7 @@ def daemon_http_post(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
self.server.news_instance,
|
self.server.news_instance,
|
||||||
self.server.max_post_length,
|
self.server.max_post_length,
|
||||||
self.server.system_language,
|
self.server.system_language,
|
||||||
|
|
@ -497,6 +513,7 @@ def daemon_http_post(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
self.server.translate,
|
self.server.translate,
|
||||||
self.server.system_language,
|
self.server.system_language,
|
||||||
self.server.signing_priv_key_pem,
|
self.server.signing_priv_key_pem,
|
||||||
|
|
@ -541,6 +558,7 @@ def daemon_http_post(self) -> None:
|
||||||
search_for_emoji,
|
search_for_emoji,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
postreq_start_time,
|
postreq_start_time,
|
||||||
self.server.debug,
|
self.server.debug,
|
||||||
curr_session,
|
curr_session,
|
||||||
|
|
@ -608,6 +626,7 @@ def daemon_http_post(self) -> None:
|
||||||
self.server.port,
|
self.server.port,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
curr_session,
|
curr_session,
|
||||||
proxy_type,
|
proxy_type,
|
||||||
self.server.base_dir,
|
self.server.base_dir,
|
||||||
|
|
@ -636,6 +655,7 @@ def daemon_http_post(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
curr_session, proxy_type,
|
curr_session, proxy_type,
|
||||||
self.server.person_cache,
|
self.server.person_cache,
|
||||||
self.server.max_shares_on_profile,
|
self.server.max_shares_on_profile,
|
||||||
|
|
@ -651,7 +671,8 @@ def daemon_http_post(self) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
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.yggdrasil_domain)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
@ -676,6 +697,7 @@ def daemon_http_post(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
curr_session, proxy_type)
|
curr_session, proxy_type)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -695,6 +717,7 @@ def daemon_http_post(self) -> None:
|
||||||
self.server.port,
|
self.server.port,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
self.server.debug,
|
self.server.debug,
|
||||||
curr_session,
|
curr_session,
|
||||||
proxy_type, self.server.translate,
|
proxy_type, self.server.translate,
|
||||||
|
|
@ -725,6 +748,7 @@ def daemon_http_post(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
self.server.debug,
|
self.server.debug,
|
||||||
self.server.books_cache)
|
self.server.books_cache)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
|
|
@ -745,6 +769,7 @@ def daemon_http_post(self) -> None:
|
||||||
self.server.port,
|
self.server.port,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
self.server.debug,
|
self.server.debug,
|
||||||
curr_session, proxy_type,
|
curr_session, proxy_type,
|
||||||
self.server.person_cache)
|
self.server.person_cache)
|
||||||
|
|
@ -766,6 +791,7 @@ def daemon_http_post(self) -> None:
|
||||||
self.server.port,
|
self.server.port,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
self.server.debug)
|
self.server.debug)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -785,6 +811,7 @@ def daemon_http_post(self) -> None:
|
||||||
self.server.port,
|
self.server.port,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
self.server.debug)
|
self.server.debug)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -805,6 +832,7 @@ def daemon_http_post(self) -> None:
|
||||||
self.server.port,
|
self.server.port,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
self.server.debug,
|
self.server.debug,
|
||||||
curr_session,
|
curr_session,
|
||||||
authorized,
|
authorized,
|
||||||
|
|
@ -866,6 +894,7 @@ def daemon_http_post(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
access_keys,
|
access_keys,
|
||||||
self.server.default_timeline,
|
self.server.default_timeline,
|
||||||
self.server.access_keys,
|
self.server.access_keys,
|
||||||
|
|
@ -895,6 +924,7 @@ def daemon_http_post(self) -> None:
|
||||||
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.yggdrasil_domain,
|
||||||
self.server.default_timeline,
|
self.server.default_timeline,
|
||||||
self.server.theme_name,
|
self.server.theme_name,
|
||||||
allow_local_network_access,
|
allow_local_network_access,
|
||||||
|
|
@ -924,6 +954,7 @@ def daemon_http_post(self) -> None:
|
||||||
if origin_domain != self.server.domain_full and \
|
if origin_domain != self.server.domain_full and \
|
||||||
origin_domain != self.server.onion_domain and \
|
origin_domain != self.server.onion_domain and \
|
||||||
origin_domain != self.server.i2p_domain and \
|
origin_domain != self.server.i2p_domain and \
|
||||||
|
origin_domain != self.server.yggdrasil_domain and \
|
||||||
origin_domain in self.server.shared_items_federated_domains:
|
origin_domain in self.server.shared_items_federated_domains:
|
||||||
if self.server.debug:
|
if self.server.debug:
|
||||||
print('DEBUG: ' +
|
print('DEBUG: ' +
|
||||||
|
|
@ -1009,6 +1040,7 @@ def daemon_http_post(self) -> None:
|
||||||
self.server.block_federated,
|
self.server.block_federated,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain,
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain,
|
||||||
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,
|
||||||
|
|
@ -1041,6 +1073,15 @@ def daemon_http_post(self) -> None:
|
||||||
'?page=' + str(page_number)
|
'?page=' + str(page_number)
|
||||||
redirect_headers(self, actor_path_str, cookie,
|
redirect_headers(self, actor_path_str, cookie,
|
||||||
calling_domain, 303)
|
calling_domain, 303)
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and
|
||||||
|
self.server.yggdrasil_domain):
|
||||||
|
actor_path_str = \
|
||||||
|
local_actor_url('http', nickname,
|
||||||
|
self.server.yggdrasil_domain) + \
|
||||||
|
'/' + post_redirect + \
|
||||||
|
'?page=' + str(page_number)
|
||||||
|
redirect_headers(self, actor_path_str, cookie,
|
||||||
|
calling_domain, 303)
|
||||||
else:
|
else:
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
local_actor_url(self.server.http_prefix, nickname,
|
local_actor_url(self.server.http_prefix, nickname,
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import urllib.parse
|
||||||
from socket import error as SocketError
|
from socket import error as SocketError
|
||||||
from flags import has_group_type
|
from flags import has_group_type
|
||||||
from flags import is_moderator
|
from flags import is_moderator
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from utils import get_nickname_from_actor
|
from utils import get_nickname_from_actor
|
||||||
from utils import get_domain_from_actor
|
from utils import get_domain_from_actor
|
||||||
from utils import get_full_domain
|
from utils import get_full_domain
|
||||||
|
|
@ -36,6 +37,7 @@ def unfollow_confirm(self, calling_domain: str, cookie: str,
|
||||||
path: str, base_dir: str, http_prefix: str,
|
path: str, base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str, port: int,
|
domain: str, domain_full: str, port: int,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
debug: bool,
|
debug: bool,
|
||||||
curr_session, proxy_type: str,
|
curr_session, proxy_type: str,
|
||||||
person_cache: {}) -> None:
|
person_cache: {}) -> None:
|
||||||
|
|
@ -134,6 +136,8 @@ def unfollow_confirm(self, calling_domain: str, cookie: str,
|
||||||
origin_path_str = 'http://' + onion_domain + users_path
|
origin_path_str = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str = 'http://' + i2p_domain + users_path
|
origin_path_str = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str = 'http://' + yggdrasil_domain + users_path
|
||||||
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
|
|
||||||
|
|
@ -142,6 +146,7 @@ def follow_confirm2(self, calling_domain: str, cookie: str,
|
||||||
path: str, base_dir: str, http_prefix: str,
|
path: str, base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str, port: int,
|
domain: str, domain_full: str, port: int,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
debug: bool,
|
debug: bool,
|
||||||
curr_session, proxy_type: str,
|
curr_session, proxy_type: str,
|
||||||
translate: {},
|
translate: {},
|
||||||
|
|
@ -285,6 +290,15 @@ def follow_confirm2(self, calling_domain: str, cookie: str,
|
||||||
following_port = 80
|
following_port = 80
|
||||||
curr_http_prefix = 'http'
|
curr_http_prefix = 'http'
|
||||||
curr_proxy_type = 'i2p'
|
curr_proxy_type = 'i2p'
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if not is_yggdrasil_address(curr_domain) and \
|
||||||
|
is_yggdrasil_address(following_domain):
|
||||||
|
curr_session = self.server.session_yggdrasil
|
||||||
|
curr_domain = yggdrasil_domain
|
||||||
|
curr_port = 80
|
||||||
|
following_port = 80
|
||||||
|
curr_http_prefix = 'http'
|
||||||
|
curr_proxy_type = 'yggdrasil'
|
||||||
|
|
||||||
curr_session = \
|
curr_session = \
|
||||||
establish_session("follow request confirm",
|
establish_session("follow request confirm",
|
||||||
|
|
@ -310,6 +324,7 @@ def follow_confirm2(self, calling_domain: str, cookie: str,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
sites_unavailable,
|
sites_unavailable,
|
||||||
system_language,
|
system_language,
|
||||||
mitm_servers)
|
mitm_servers)
|
||||||
|
|
@ -328,6 +343,8 @@ def follow_confirm2(self, calling_domain: str, cookie: str,
|
||||||
origin_path_str = 'http://' + onion_domain + users_path
|
origin_path_str = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str = 'http://' + i2p_domain + users_path
|
origin_path_str = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str = 'http://' + yggdrasil_domain + users_path
|
||||||
print('WARN: unable to find blocked nickname or domain in ' +
|
print('WARN: unable to find blocked nickname or domain in ' +
|
||||||
blocking_actor)
|
blocking_actor)
|
||||||
redirect_headers(self, origin_path_str,
|
redirect_headers(self, origin_path_str,
|
||||||
|
|
@ -363,6 +380,8 @@ def follow_confirm2(self, calling_domain: str, cookie: str,
|
||||||
origin_path_str = 'http://' + onion_domain + users_path
|
origin_path_str = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str = 'http://' + i2p_domain + users_path
|
origin_path_str = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str = 'http://' + yggdrasil_domain + users_path
|
||||||
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
|
|
||||||
|
|
@ -371,6 +390,7 @@ def block_confirm2(self, calling_domain: str, cookie: str,
|
||||||
path: str, base_dir: str, http_prefix: str,
|
path: str, base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str, port: int,
|
domain: str, domain_full: str, port: int,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
debug: bool) -> None:
|
debug: bool) -> None:
|
||||||
"""Confirms a block from the person options screen
|
"""Confirms a block from the person options screen
|
||||||
"""
|
"""
|
||||||
|
|
@ -382,6 +402,8 @@ def block_confirm2(self, calling_domain: str, cookie: str,
|
||||||
origin_path_str = 'http://' + onion_domain + users_path
|
origin_path_str = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str = 'http://' + i2p_domain + users_path
|
origin_path_str = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str = 'http://' + yggdrasil_domain + users_path
|
||||||
print('WARN: unable to find nickname in ' + origin_path_str)
|
print('WARN: unable to find nickname in ' + origin_path_str)
|
||||||
redirect_headers(self, origin_path_str,
|
redirect_headers(self, origin_path_str,
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
|
|
@ -427,6 +449,8 @@ def block_confirm2(self, calling_domain: str, cookie: str,
|
||||||
origin_path_str = 'http://' + onion_domain + users_path
|
origin_path_str = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str = 'http://' + i2p_domain + users_path
|
origin_path_str = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str = 'http://' + yggdrasil_domain + users_path
|
||||||
print('WARN: unable to find nickname or domain in ' +
|
print('WARN: unable to find nickname or domain in ' +
|
||||||
blocking_actor)
|
blocking_actor)
|
||||||
redirect_headers(self, origin_path_str,
|
redirect_headers(self, origin_path_str,
|
||||||
|
|
@ -454,6 +478,8 @@ def block_confirm2(self, calling_domain: str, cookie: str,
|
||||||
origin_path_str = 'http://' + onion_domain + users_path
|
origin_path_str = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str = 'http://' + i2p_domain + users_path
|
origin_path_str = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str = 'http://' + yggdrasil_domain + users_path
|
||||||
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
|
|
||||||
|
|
@ -462,6 +488,7 @@ def unblock_confirm(self, calling_domain: str, cookie: str,
|
||||||
path: str, base_dir: str, http_prefix: str,
|
path: str, base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str, port: int,
|
domain: str, domain_full: str, port: int,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
debug: bool) -> None:
|
debug: bool) -> None:
|
||||||
"""Confirms an unblock from the person options screen
|
"""Confirms an unblock from the person options screen
|
||||||
"""
|
"""
|
||||||
|
|
@ -473,6 +500,8 @@ def unblock_confirm(self, calling_domain: str, cookie: str,
|
||||||
origin_path_str = 'http://' + onion_domain + users_path
|
origin_path_str = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str = 'http://' + i2p_domain + users_path
|
origin_path_str = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str = 'http://' + yggdrasil_domain + users_path
|
||||||
print('WARN: unable to find nickname in ' + origin_path_str)
|
print('WARN: unable to find nickname in ' + origin_path_str)
|
||||||
redirect_headers(self, origin_path_str,
|
redirect_headers(self, origin_path_str,
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
|
|
@ -515,6 +544,8 @@ def unblock_confirm(self, calling_domain: str, cookie: str,
|
||||||
origin_path_str = 'http://' + onion_domain + users_path
|
origin_path_str = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str = 'http://' + i2p_domain + users_path
|
origin_path_str = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str = 'http://' + yggdrasil_domain + users_path
|
||||||
print('WARN: unable to find nickname in ' + blocking_actor)
|
print('WARN: unable to find nickname in ' + blocking_actor)
|
||||||
redirect_headers(self, origin_path_str,
|
redirect_headers(self, origin_path_str,
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
|
|
@ -548,6 +579,8 @@ def unblock_confirm(self, calling_domain: str, cookie: str,
|
||||||
origin_path_str = 'http://' + onion_domain + users_path
|
origin_path_str = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str = 'http://' + i2p_domain + users_path
|
origin_path_str = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str = 'http://' + yggdrasil_domain + users_path
|
||||||
redirect_headers(self, origin_path_str,
|
redirect_headers(self, origin_path_str,
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ def set_hashtag_category2(self, calling_domain: str, cookie: str,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
max_post_length: int) -> None:
|
max_post_length: int) -> None:
|
||||||
"""On the screen after selecting a hashtag from the swarm, this sets
|
"""On the screen after selecting a hashtag from the swarm, this sets
|
||||||
the category for that tag
|
the category for that tag
|
||||||
|
|
@ -55,7 +56,8 @@ def set_hashtag_category2(self, calling_domain: str, cookie: str,
|
||||||
actor_str = \
|
actor_str = \
|
||||||
get_instance_url(calling_domain,
|
get_instance_url(calling_domain,
|
||||||
http_prefix, domain_full,
|
http_prefix, domain_full,
|
||||||
onion_domain, i2p_domain) + \
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
users_path
|
users_path
|
||||||
tag_screen_str = actor_str + '/tags/' + hashtag
|
tag_screen_str = actor_str + '/tags/' + hashtag
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,12 +13,14 @@ from socket import error as SocketError
|
||||||
from httpheaders import redirect_headers
|
from httpheaders import redirect_headers
|
||||||
from utils import acct_dir
|
from utils import acct_dir
|
||||||
from utils import save_json
|
from utils import save_json
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
|
|
||||||
|
|
||||||
def keyboard_shortcuts(self, calling_domain: str, cookie: str,
|
def keyboard_shortcuts(self, calling_domain: str, cookie: str,
|
||||||
base_dir: str, http_prefix: str, nickname: str,
|
base_dir: str, http_prefix: str, nickname: str,
|
||||||
domain: str, domain_full: str,
|
domain: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
access_keys2: {}, default_timeline: str,
|
access_keys2: {}, default_timeline: str,
|
||||||
access_keys: {}, key_shortcuts: {}) -> None:
|
access_keys: {}, key_shortcuts: {}) -> None:
|
||||||
"""Receive POST from webapp_accesskeys
|
"""Receive POST from webapp_accesskeys
|
||||||
|
|
@ -63,6 +65,10 @@ def keyboard_shortcuts(self, calling_domain: str, cookie: str,
|
||||||
origin_path_str = \
|
origin_path_str = \
|
||||||
'http://' + i2p_domain + users_path + \
|
'http://' + i2p_domain + users_path + \
|
||||||
'/' + default_timeline
|
'/' + default_timeline
|
||||||
|
elif is_yggdrasil_address(calling_domain) and yggdrasil_domain:
|
||||||
|
origin_path_str = \
|
||||||
|
'http://' + yggdrasil_domain + users_path + \
|
||||||
|
'/' + default_timeline
|
||||||
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -100,6 +106,9 @@ def keyboard_shortcuts(self, calling_domain: str, cookie: str,
|
||||||
elif calling_domain.endswith('.i2p') and i2p_domain:
|
elif calling_domain.endswith('.i2p') and i2p_domain:
|
||||||
origin_path_str = \
|
origin_path_str = \
|
||||||
'http://' + i2p_domain + users_path + '/' + default_timeline
|
'http://' + i2p_domain + users_path + '/' + default_timeline
|
||||||
|
elif is_yggdrasil_address(calling_domain) and yggdrasil_domain:
|
||||||
|
origin_path_str = \
|
||||||
|
'http://' + yggdrasil_domain + users_path + '/' + default_timeline
|
||||||
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -131,6 +131,7 @@ def links_update(self, calling_domain: str, cookie: str,
|
||||||
allow_local_network_access: bool,
|
allow_local_network_access: bool,
|
||||||
http_prefix: str, domain_full: str,
|
http_prefix: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
max_post_length: int) -> None:
|
max_post_length: int) -> None:
|
||||||
"""Updates the left links column of the timeline
|
"""Updates the left links column of the timeline
|
||||||
"""
|
"""
|
||||||
|
|
@ -141,7 +142,8 @@ def links_update(self, calling_domain: str, cookie: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
users_path
|
users_path
|
||||||
|
|
||||||
boundary = None
|
boundary = None
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ from webapp_login import html_get_login_credentials
|
||||||
from webapp_suspended import html_suspended
|
from webapp_suspended import html_suspended
|
||||||
from flags import is_suspended
|
from flags import is_suspended
|
||||||
from flags import is_local_network_address
|
from flags import is_local_network_address
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from utils import data_dir
|
from utils import data_dir
|
||||||
from utils import acct_dir
|
from utils import acct_dir
|
||||||
from utils import get_instance_url
|
from utils import get_instance_url
|
||||||
|
|
@ -45,6 +46,7 @@ def post_login_screen(self, calling_domain: str, cookie: str,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
manual_follower_approval: bool,
|
manual_follower_approval: bool,
|
||||||
default_timeline: str) -> None:
|
default_timeline: str) -> None:
|
||||||
"""POST to login screen, containing credentials
|
"""POST to login screen, containing credentials
|
||||||
|
|
@ -104,7 +106,8 @@ def post_login_screen(self, calling_domain: str, cookie: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
'/login'
|
'/login'
|
||||||
redirect_headers(self, login_url, cookie, calling_domain, 303)
|
redirect_headers(self, login_url, cookie, calling_domain, 303)
|
||||||
return
|
return
|
||||||
|
|
@ -118,7 +121,8 @@ def post_login_screen(self, calling_domain: str, cookie: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
'/login'
|
'/login'
|
||||||
redirect_headers(self, login_url, cookie, calling_domain, 303)
|
redirect_headers(self, login_url, cookie, calling_domain, 303)
|
||||||
return
|
return
|
||||||
|
|
@ -131,7 +135,8 @@ def post_login_screen(self, calling_domain: str, cookie: str,
|
||||||
else:
|
else:
|
||||||
ip_address = self.client_address[0]
|
ip_address = self.client_address[0]
|
||||||
if not domain.endswith('.onion') and \
|
if not domain.endswith('.onion') and \
|
||||||
not domain.endswith('.i2p'):
|
not domain.endswith('.i2p') and \
|
||||||
|
not is_yggdrasil_address(domain):
|
||||||
if not is_local_network_address(ip_address):
|
if not is_local_network_address(ip_address):
|
||||||
print('Login attempt from IP: ' + str(ip_address))
|
print('Login attempt from IP: ' + str(ip_address))
|
||||||
if not authorize_basic(base_dir, '/users/' +
|
if not authorize_basic(base_dir, '/users/' +
|
||||||
|
|
@ -142,7 +147,8 @@ def post_login_screen(self, calling_domain: str, cookie: str,
|
||||||
fail_time = int(time.time())
|
fail_time = int(time.time())
|
||||||
self.server.last_login_failure = fail_time
|
self.server.last_login_failure = fail_time
|
||||||
if not domain.endswith('.onion') and \
|
if not domain.endswith('.onion') and \
|
||||||
not domain.endswith('.i2p'):
|
not domain.endswith('.i2p') and \
|
||||||
|
not is_yggdrasil_address(domain):
|
||||||
if not is_local_network_address(ip_address):
|
if not is_local_network_address(ip_address):
|
||||||
record_login_failure(base_dir, ip_address,
|
record_login_failure(base_dir, ip_address,
|
||||||
self.server.login_failure_count,
|
self.server.login_failure_count,
|
||||||
|
|
@ -216,7 +222,8 @@ def post_login_screen(self, calling_domain: str, cookie: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
'/users/' + login_nickname + '/' + \
|
'/users/' + login_nickname + '/' + \
|
||||||
default_timeline
|
default_timeline
|
||||||
redirect_headers(self, tl_url, cookie_str, calling_domain, 303)
|
redirect_headers(self, tl_url, cookie_str, calling_domain, 303)
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@ def moderator_actions(self, path: str, calling_domain: str, cookie: str,
|
||||||
domain: str, port: int, debug: bool,
|
domain: str, port: int, debug: bool,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
translate: {},
|
translate: {},
|
||||||
system_language: str,
|
system_language: str,
|
||||||
signing_priv_key_pem: str,
|
signing_priv_key_pem: str,
|
||||||
|
|
@ -57,7 +58,8 @@ def moderator_actions(self, path: str, calling_domain: str, cookie: str,
|
||||||
actor_str = \
|
actor_str = \
|
||||||
get_instance_url(calling_domain,
|
get_instance_url(calling_domain,
|
||||||
http_prefix, domain_full,
|
http_prefix, domain_full,
|
||||||
onion_domain, i2p_domain) + \
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
users_path
|
users_path
|
||||||
if not is_moderator(base_dir, nickname):
|
if not is_moderator(base_dir, nickname):
|
||||||
redirect_headers(self, actor_str + '/moderation',
|
redirect_headers(self, actor_str + '/moderation',
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ def newswire_update(self, calling_domain: str, cookie: str,
|
||||||
default_timeline: str,
|
default_timeline: str,
|
||||||
http_prefix: str, domain_full: str,
|
http_prefix: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
max_post_length: int) -> None:
|
max_post_length: int) -> None:
|
||||||
"""Updates the right newswire column of the timeline
|
"""Updates the right newswire column of the timeline
|
||||||
"""
|
"""
|
||||||
|
|
@ -42,7 +43,8 @@ def newswire_update(self, calling_domain: str, cookie: str,
|
||||||
actor_str = \
|
actor_str = \
|
||||||
get_instance_url(calling_domain,
|
get_instance_url(calling_domain,
|
||||||
http_prefix, domain_full,
|
http_prefix, domain_full,
|
||||||
onion_domain, i2p_domain) + \
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
users_path
|
users_path
|
||||||
|
|
||||||
boundary = None
|
boundary = None
|
||||||
|
|
@ -231,6 +233,7 @@ def citations_update(self, calling_domain: str, cookie: str,
|
||||||
newswire: {},
|
newswire: {},
|
||||||
http_prefix: str, domain_full: str,
|
http_prefix: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
max_post_length: int) -> None:
|
max_post_length: int) -> None:
|
||||||
"""Updates the citations for a blog post after hitting
|
"""Updates the citations for a blog post after hitting
|
||||||
update button on the citations screen
|
update button on the citations screen
|
||||||
|
|
@ -239,7 +242,8 @@ def citations_update(self, calling_domain: str, cookie: str,
|
||||||
actor_str = \
|
actor_str = \
|
||||||
get_instance_url(calling_domain,
|
get_instance_url(calling_domain,
|
||||||
http_prefix, domain_full,
|
http_prefix, domain_full,
|
||||||
onion_domain, i2p_domain) + \
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
users_path
|
users_path
|
||||||
nickname = get_nickname_from_actor(actor_str)
|
nickname = get_nickname_from_actor(actor_str)
|
||||||
if not nickname:
|
if not nickname:
|
||||||
|
|
@ -330,6 +334,7 @@ def news_post_edit(self, calling_domain: str, cookie: str,
|
||||||
domain: str, debug: bool,
|
domain: str, debug: bool,
|
||||||
http_prefix: str, domain_full: str,
|
http_prefix: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
news_instance: bool,
|
news_instance: bool,
|
||||||
max_post_length: int,
|
max_post_length: int,
|
||||||
system_language: str,
|
system_language: str,
|
||||||
|
|
@ -342,7 +347,8 @@ def news_post_edit(self, calling_domain: str, cookie: str,
|
||||||
actor_str = \
|
actor_str = \
|
||||||
get_instance_url(calling_domain,
|
get_instance_url(calling_domain,
|
||||||
http_prefix, domain_full,
|
http_prefix, domain_full,
|
||||||
onion_domain, i2p_domain) + \
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
users_path
|
users_path
|
||||||
|
|
||||||
boundary = None
|
boundary = None
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,8 @@ from utils import get_config_param
|
||||||
from utils import get_domain_from_actor
|
from utils import get_domain_from_actor
|
||||||
from utils import get_full_domain
|
from utils import get_full_domain
|
||||||
from utils import remove_eol
|
from utils import remove_eol
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
|
from utils import is_yggdrasil_url
|
||||||
from session import establish_session
|
from session import establish_session
|
||||||
from webapp_profile import html_profile_after_search
|
from webapp_profile import html_profile_after_search
|
||||||
from petnames import set_pet_name
|
from petnames import set_pet_name
|
||||||
|
|
@ -238,6 +240,7 @@ def _person_options_view(self, options_confirm_params: str,
|
||||||
lists_enabled: {},
|
lists_enabled: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
dogwhistles: {},
|
dogwhistles: {},
|
||||||
min_images_for_accounts: {},
|
min_images_for_accounts: {},
|
||||||
buy_sites: [],
|
buy_sites: [],
|
||||||
|
|
@ -276,6 +279,9 @@ def _person_options_view(self, options_confirm_params: str,
|
||||||
profile_handle.endswith('.i2p')):
|
profile_handle.endswith('.i2p')):
|
||||||
curr_proxy_type = 'i2p'
|
curr_proxy_type = 'i2p'
|
||||||
curr_session = self.server.session_i2p
|
curr_session = self.server.session_i2p
|
||||||
|
elif is_yggdrasil_url(profile_handle):
|
||||||
|
curr_proxy_type = 'yggdrasil'
|
||||||
|
curr_session = self.server.session_yggdrasil
|
||||||
|
|
||||||
curr_session = \
|
curr_session = \
|
||||||
establish_session("handle search",
|
establish_session("handle search",
|
||||||
|
|
@ -323,6 +329,7 @@ def _person_options_view(self, options_confirm_params: str,
|
||||||
timezone,
|
timezone,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
bold_reading,
|
bold_reading,
|
||||||
dogwhistles,
|
dogwhistles,
|
||||||
min_images_for_accounts,
|
min_images_for_accounts,
|
||||||
|
|
@ -1075,6 +1082,7 @@ def _person_options_snooze(self, options_confirm_params: str,
|
||||||
options_actor: str, base_dir: str,
|
options_actor: str, base_dir: str,
|
||||||
domain: str, calling_domain: str,
|
domain: str, calling_domain: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
default_timeline: str,
|
default_timeline: str,
|
||||||
page_number: int,
|
page_number: int,
|
||||||
cookie: str) -> bool:
|
cookie: str) -> bool:
|
||||||
|
|
@ -1094,6 +1102,8 @@ def _person_options_snooze(self, options_confirm_params: str,
|
||||||
this_actor = 'http://' + onion_domain + users_path
|
this_actor = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
this_actor = 'http://' + i2p_domain + users_path
|
this_actor = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
this_actor = 'http://' + yggdrasil_domain + users_path
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
this_actor + '/' + default_timeline + \
|
this_actor + '/' + default_timeline + \
|
||||||
'?page=' + str(page_number)
|
'?page=' + str(page_number)
|
||||||
|
|
@ -1111,6 +1121,7 @@ def _person_options_unsnooze(self, options_confirm_params: str,
|
||||||
base_dir: str, domain: str,
|
base_dir: str, domain: str,
|
||||||
calling_domain: str,
|
calling_domain: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
default_timeline: str,
|
default_timeline: str,
|
||||||
page_number: int, cookie: str) -> bool:
|
page_number: int, cookie: str) -> bool:
|
||||||
"""Person options screen, unsnooze button
|
"""Person options screen, unsnooze button
|
||||||
|
|
@ -1129,6 +1140,8 @@ def _person_options_unsnooze(self, options_confirm_params: str,
|
||||||
this_actor = 'http://' + onion_domain + users_path
|
this_actor = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
this_actor = 'http://' + i2p_domain + users_path
|
this_actor = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
this_actor = 'http://' + yggdrasil_domain + users_path
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
this_actor + '/' + default_timeline + \
|
this_actor + '/' + default_timeline + \
|
||||||
'?page=' + str(page_number)
|
'?page=' + str(page_number)
|
||||||
|
|
@ -1279,6 +1292,7 @@ def person_options2(self, path: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str, port: int,
|
domain: str, domain_full: str, port: int,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
debug: bool, curr_session,
|
debug: bool, curr_session,
|
||||||
authorized: bool,
|
authorized: bool,
|
||||||
show_published_date_only: bool,
|
show_published_date_only: bool,
|
||||||
|
|
@ -1328,6 +1342,8 @@ def person_options2(self, path: str,
|
||||||
origin_path_str = 'http://' + onion_domain + users_path
|
origin_path_str = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str = 'http://' + i2p_domain + users_path
|
origin_path_str = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str = 'http://' + yggdrasil_domain + users_path
|
||||||
print('WARN: unable to find nickname in ' + origin_path_str)
|
print('WARN: unable to find nickname in ' + origin_path_str)
|
||||||
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
|
|
@ -1378,6 +1394,8 @@ def person_options2(self, path: str,
|
||||||
origin_path_str = 'http://' + onion_domain + users_path
|
origin_path_str = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str = 'http://' + i2p_domain + users_path
|
origin_path_str = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str = 'http://' + yggdrasil_domain + users_path
|
||||||
print('WARN: unable to find nickname in ' + options_actor)
|
print('WARN: unable to find nickname in ' + options_actor)
|
||||||
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
|
|
@ -1389,6 +1407,8 @@ def person_options2(self, path: str,
|
||||||
origin_path_str = 'http://' + onion_domain + users_path
|
origin_path_str = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str = 'http://' + i2p_domain + users_path
|
origin_path_str = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str = 'http://' + yggdrasil_domain + users_path
|
||||||
print('WARN: unable to find domain in ' + options_actor)
|
print('WARN: unable to find domain in ' + options_actor)
|
||||||
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
|
|
@ -1435,6 +1455,7 @@ def person_options2(self, path: str,
|
||||||
lists_enabled,
|
lists_enabled,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
dogwhistles,
|
dogwhistles,
|
||||||
min_images_for_accounts,
|
min_images_for_accounts,
|
||||||
buy_sites,
|
buy_sites,
|
||||||
|
|
@ -1678,6 +1699,7 @@ def person_options2(self, path: str,
|
||||||
options_actor, base_dir,
|
options_actor, base_dir,
|
||||||
domain, calling_domain,
|
domain, calling_domain,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
default_timeline,
|
default_timeline,
|
||||||
page_number,
|
page_number,
|
||||||
cookie):
|
cookie):
|
||||||
|
|
@ -1690,6 +1712,7 @@ def person_options2(self, path: str,
|
||||||
base_dir, domain,
|
base_dir, domain,
|
||||||
calling_domain,
|
calling_domain,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
default_timeline,
|
default_timeline,
|
||||||
page_number, cookie):
|
page_number, cookie):
|
||||||
return
|
return
|
||||||
|
|
@ -1737,6 +1760,8 @@ def person_options2(self, path: str,
|
||||||
origin_path_str = 'http://' + onion_domain + users_path
|
origin_path_str = 'http://' + onion_domain + users_path
|
||||||
elif calling_domain.endswith('.i2p') and i2p_domain:
|
elif calling_domain.endswith('.i2p') and i2p_domain:
|
||||||
origin_path_str = 'http://' + i2p_domain + users_path
|
origin_path_str = 'http://' + i2p_domain + users_path
|
||||||
|
elif is_yggdrasil_address(calling_domain) and yggdrasil_domain:
|
||||||
|
origin_path_str = 'http://' + yggdrasil_domain + users_path
|
||||||
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -164,6 +164,7 @@ def _profile_post_save_actor(base_dir: str, http_prefix: str,
|
||||||
nickname: str, domain: str, port: int,
|
nickname: str, domain: str, port: int,
|
||||||
actor_json: {}, actor_filename: str,
|
actor_json: {}, actor_filename: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
curr_session, proxy_type: str,
|
curr_session, proxy_type: str,
|
||||||
send_move_activity: bool,
|
send_move_activity: bool,
|
||||||
self, cached_webfingers: {},
|
self, cached_webfingers: {},
|
||||||
|
|
@ -190,7 +191,7 @@ def _profile_post_save_actor(base_dir: str, http_prefix: str,
|
||||||
# save the actor
|
# save the actor
|
||||||
save_json(actor_json, actor_filename)
|
save_json(actor_json, actor_filename)
|
||||||
webfinger_update(base_dir, nickname, domain,
|
webfinger_update(base_dir, nickname, domain,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain, yggdrasil_domain,
|
||||||
cached_webfingers)
|
cached_webfingers)
|
||||||
# also copy to the actors cache and
|
# also copy to the actors cache and
|
||||||
# person_cache in memory
|
# person_cache in memory
|
||||||
|
|
@ -2777,6 +2778,7 @@ def profile_edit(self, calling_domain: str, cookie: str,
|
||||||
path: str, base_dir: str, http_prefix: str,
|
path: str, base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str,
|
domain: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
debug: bool, allow_local_network_access: bool,
|
debug: bool, allow_local_network_access: bool,
|
||||||
system_language: str,
|
system_language: str,
|
||||||
content_license_url: str,
|
content_license_url: str,
|
||||||
|
|
@ -2794,7 +2796,7 @@ def profile_edit(self, calling_domain: str, cookie: str,
|
||||||
users_path = users_path.replace('/editprofile', '')
|
users_path = users_path.replace('/editprofile', '')
|
||||||
actor_str = \
|
actor_str = \
|
||||||
get_instance_url(calling_domain, http_prefix, domain_full,
|
get_instance_url(calling_domain, http_prefix, domain_full,
|
||||||
onion_domain, i2p_domain) + \
|
onion_domain, i2p_domain, yggdrasil_domain) + \
|
||||||
users_path
|
users_path
|
||||||
|
|
||||||
boundary = None
|
boundary = None
|
||||||
|
|
@ -3477,6 +3479,7 @@ def profile_edit(self, calling_domain: str, cookie: str,
|
||||||
self.server.port,
|
self.server.port,
|
||||||
actor_json, actor_filename,
|
actor_json, actor_filename,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
curr_session, proxy_type,
|
curr_session, proxy_type,
|
||||||
send_move_activity,
|
send_move_activity,
|
||||||
self, cached_webfingers,
|
self, cached_webfingers,
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ from utils import get_domain_from_actor
|
||||||
from utils import text_in_file
|
from utils import text_in_file
|
||||||
from utils import get_nickname_from_actor
|
from utils import get_nickname_from_actor
|
||||||
from utils import acct_dir
|
from utils import acct_dir
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from httpheaders import redirect_headers
|
from httpheaders import redirect_headers
|
||||||
from city import get_spoofed_city
|
from city import get_spoofed_city
|
||||||
from languages import get_understood_languages
|
from languages import get_understood_languages
|
||||||
|
|
@ -33,6 +34,7 @@ def receive_vote(self, calling_domain: str, cookie: str,
|
||||||
path: str, http_prefix: str,
|
path: str, http_prefix: str,
|
||||||
domain: str, domain_full: str, port: int,
|
domain: str, domain_full: str, port: int,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
curr_session, proxy_type: str,
|
curr_session, proxy_type: str,
|
||||||
base_dir: str, city: str,
|
base_dir: str, city: str,
|
||||||
person_cache: {}, debug: bool,
|
person_cache: {}, debug: bool,
|
||||||
|
|
@ -96,6 +98,8 @@ def receive_vote(self, calling_domain: str, cookie: str,
|
||||||
actor = 'http://' + onion_domain + users_path
|
actor = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
actor = 'http://' + i2p_domain + users_path
|
actor = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
actor = 'http://' + yggdrasil_domain + users_path
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
actor + '/' + default_timeline + \
|
actor + '/' + default_timeline + \
|
||||||
'?page=' + str(page_number)
|
'?page=' + str(page_number)
|
||||||
|
|
@ -163,6 +167,8 @@ def receive_vote(self, calling_domain: str, cookie: str,
|
||||||
actor = 'http://' + onion_domain + users_path
|
actor = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
actor = 'http://' + i2p_domain + users_path
|
actor = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
actor = 'http://' + yggdrasil_domain + users_path
|
||||||
actor_path_str = \
|
actor_path_str = \
|
||||||
actor + '/' + default_timeline + \
|
actor + '/' + default_timeline + \
|
||||||
'?page=' + str(page_number) + first_post_id + last_post_id
|
'?page=' + str(page_number) + first_post_id + last_post_id
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,7 @@ def _receive_new_post_process_newpost(self, fields: {},
|
||||||
max_replies: int,
|
max_replies: int,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {}) -> int:
|
instance_software: {}) -> 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
|
||||||
|
|
@ -232,6 +233,7 @@ def _receive_new_post_process_newpost(self, fields: {},
|
||||||
buy_sites,
|
buy_sites,
|
||||||
auto_cw_cache,
|
auto_cw_cache,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
mitm_servers,
|
mitm_servers,
|
||||||
instance_software,
|
instance_software,
|
||||||
self.server.block_military,
|
self.server.block_military,
|
||||||
|
|
@ -552,6 +554,7 @@ def _receive_new_post_process_newunlisted(self, fields: {},
|
||||||
max_replies: int,
|
max_replies: int,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {}) -> int:
|
instance_software: {}) -> int:
|
||||||
"""Unlisted post has been received from New Post screen
|
"""Unlisted post has been received from New Post screen
|
||||||
|
|
@ -655,6 +658,7 @@ def _receive_new_post_process_newunlisted(self, fields: {},
|
||||||
buy_sites,
|
buy_sites,
|
||||||
auto_cw_cache,
|
auto_cw_cache,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
mitm_servers,
|
mitm_servers,
|
||||||
instance_software,
|
instance_software,
|
||||||
self.server.block_military,
|
self.server.block_military,
|
||||||
|
|
@ -722,6 +726,7 @@ def _receive_new_post_process_newfollowers(self, fields: {},
|
||||||
max_replies: int,
|
max_replies: int,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {}) -> int:
|
instance_software: {}) -> int:
|
||||||
"""Followers only post has been received from New Post screen
|
"""Followers only post has been received from New Post screen
|
||||||
|
|
@ -835,6 +840,7 @@ def _receive_new_post_process_newfollowers(self, fields: {},
|
||||||
buy_sites,
|
buy_sites,
|
||||||
auto_cw_cache,
|
auto_cw_cache,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
mitm_servers,
|
mitm_servers,
|
||||||
instance_software,
|
instance_software,
|
||||||
self.server.block_military,
|
self.server.block_military,
|
||||||
|
|
@ -903,6 +909,7 @@ def _receive_new_post_process_newdm(self, fields: {},
|
||||||
max_replies: int,
|
max_replies: int,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {}) -> int:
|
instance_software: {}) -> int:
|
||||||
"""Direct message post has been received from New Post screen
|
"""Direct message post has been received from New Post screen
|
||||||
|
|
@ -1024,6 +1031,7 @@ def _receive_new_post_process_newdm(self, fields: {},
|
||||||
buy_sites,
|
buy_sites,
|
||||||
auto_cw_cache,
|
auto_cw_cache,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
mitm_servers,
|
mitm_servers,
|
||||||
instance_software,
|
instance_software,
|
||||||
self.server.block_military,
|
self.server.block_military,
|
||||||
|
|
@ -1091,6 +1099,7 @@ def _receive_new_post_process_newreminder(self, fields: {}, nickname: str,
|
||||||
proxy_type: str,
|
proxy_type: str,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {}) -> int:
|
instance_software: {}) -> int:
|
||||||
"""Reminder post has been received from New Post screen
|
"""Reminder post has been received from New Post screen
|
||||||
|
|
@ -1197,6 +1206,7 @@ def _receive_new_post_process_newreminder(self, fields: {}, nickname: str,
|
||||||
buy_sites,
|
buy_sites,
|
||||||
auto_cw_cache,
|
auto_cw_cache,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
mitm_servers,
|
mitm_servers,
|
||||||
instance_software,
|
instance_software,
|
||||||
self.server.block_military,
|
self.server.block_military,
|
||||||
|
|
@ -1431,6 +1441,7 @@ def _receive_new_post_process_newreading(self, fields: {},
|
||||||
max_replies: int,
|
max_replies: int,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {}) -> int:
|
instance_software: {}) -> int:
|
||||||
"""Reading status post has been received from New Post screen
|
"""Reading status post has been received from New Post screen
|
||||||
|
|
@ -1555,6 +1566,7 @@ def _receive_new_post_process_newreading(self, fields: {},
|
||||||
buy_sites,
|
buy_sites,
|
||||||
auto_cw_cache,
|
auto_cw_cache,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
mitm_servers,
|
mitm_servers,
|
||||||
instance_software,
|
instance_software,
|
||||||
self.server.block_military,
|
self.server.block_military,
|
||||||
|
|
@ -1604,6 +1616,7 @@ def _receive_new_post_process_newshare(self, fields: {},
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
person_cache: {},
|
person_cache: {},
|
||||||
max_shares_on_profile: int,
|
max_shares_on_profile: int,
|
||||||
project_version: str,
|
project_version: str,
|
||||||
|
|
@ -1688,7 +1701,8 @@ def _receive_new_post_process_newshare(self, fields: {},
|
||||||
get_instance_url(calling_domain,
|
get_instance_url(calling_domain,
|
||||||
http_prefix, domain_full,
|
http_prefix, domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
'/users/' + nickname
|
'/users/' + nickname
|
||||||
actor_json = get_person_from_cache(base_dir,
|
actor_json = get_person_from_cache(base_dir,
|
||||||
actor, person_cache)
|
actor, person_cache)
|
||||||
|
|
@ -1770,6 +1784,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
||||||
block_federated: [],
|
block_federated: [],
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: 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,
|
||||||
|
|
@ -2072,6 +2087,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
||||||
max_replies,
|
max_replies,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
mitm_servers,
|
mitm_servers,
|
||||||
instance_software)
|
instance_software)
|
||||||
if post_type == 'newblog':
|
if post_type == 'newblog':
|
||||||
|
|
@ -2150,6 +2166,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
||||||
max_replies,
|
max_replies,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
mitm_servers,
|
mitm_servers,
|
||||||
instance_software)
|
instance_software)
|
||||||
if post_type == 'newfollowers':
|
if post_type == 'newfollowers':
|
||||||
|
|
@ -2196,7 +2213,7 @@ 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, yggdrasil_domain,
|
||||||
mitm_servers,
|
mitm_servers,
|
||||||
instance_software)
|
instance_software)
|
||||||
if post_type == 'newdm':
|
if post_type == 'newdm':
|
||||||
|
|
@ -2246,6 +2263,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
||||||
max_replies,
|
max_replies,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
mitm_servers,
|
mitm_servers,
|
||||||
instance_software)
|
instance_software)
|
||||||
if post_type == 'newreminder':
|
if post_type == 'newreminder':
|
||||||
|
|
@ -2291,7 +2309,7 @@ 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, yggdrasil_domain,
|
||||||
mitm_servers,
|
mitm_servers,
|
||||||
instance_software)
|
instance_software)
|
||||||
if post_type == 'newreport':
|
if post_type == 'newreport':
|
||||||
|
|
@ -2366,7 +2384,7 @@ 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, yggdrasil_domain,
|
||||||
mitm_servers,
|
mitm_servers,
|
||||||
instance_software)
|
instance_software)
|
||||||
if post_type in ('newshare', 'newwanted'):
|
if post_type in ('newshare', 'newwanted'):
|
||||||
|
|
@ -2386,6 +2404,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
person_cache,
|
person_cache,
|
||||||
max_shares_on_profile,
|
max_shares_on_profile,
|
||||||
project_version,
|
project_version,
|
||||||
|
|
@ -2427,6 +2446,7 @@ def receive_new_post(self, post_type, path: str,
|
||||||
block_federated: [],
|
block_federated: [],
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: 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,
|
||||||
|
|
@ -2570,6 +2590,7 @@ def receive_new_post(self, post_type, path: str,
|
||||||
dm_license_url, block_federated,
|
dm_license_url, block_federated,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
max_shares_on_profile,
|
max_shares_on_profile,
|
||||||
watermark_width_percent,
|
watermark_width_percent,
|
||||||
watermark_position,
|
watermark_position,
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ from utils import get_domain_from_actor
|
||||||
from utils import local_actor_url
|
from utils import local_actor_url
|
||||||
from utils import get_config_param
|
from utils import get_config_param
|
||||||
from utils import get_nickname_from_actor
|
from utils import get_nickname_from_actor
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from reading import remove_reading_event
|
from reading import remove_reading_event
|
||||||
from httpheaders import redirect_headers
|
from httpheaders import redirect_headers
|
||||||
from flags import is_moderator
|
from flags import is_moderator
|
||||||
|
|
@ -37,6 +38,7 @@ def remove_reading_status(self, calling_domain: str, cookie: str,
|
||||||
path: str, base_dir: str, http_prefix: str,
|
path: str, base_dir: str, http_prefix: str,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
debug: bool,
|
debug: bool,
|
||||||
books_cache: {}) -> None:
|
books_cache: {}) -> None:
|
||||||
"""Remove a reading status from the profile screen
|
"""Remove a reading status from the profile screen
|
||||||
|
|
@ -103,6 +105,8 @@ def remove_reading_status(self, calling_domain: str, cookie: str,
|
||||||
origin_path_str = 'http://' + onion_domain + users_path
|
origin_path_str = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str = 'http://' + i2p_domain + users_path
|
origin_path_str = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str = 'http://' + yggdrasil_domain + users_path
|
||||||
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
|
|
||||||
|
|
@ -111,6 +115,7 @@ def remove_share(self, calling_domain: str, cookie: str,
|
||||||
authorized: bool, path: str,
|
authorized: bool, path: str,
|
||||||
base_dir: str, http_prefix: str, domain_full: str,
|
base_dir: str, http_prefix: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
curr_session, proxy_type: str,
|
curr_session, proxy_type: str,
|
||||||
person_cache: {},
|
person_cache: {},
|
||||||
max_shares_on_profile: int,
|
max_shares_on_profile: int,
|
||||||
|
|
@ -181,7 +186,8 @@ def remove_share(self, calling_domain: str, cookie: str,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
'/users/' + share_nickname
|
'/users/' + share_nickname
|
||||||
actor_json = get_person_from_cache(base_dir,
|
actor_json = get_person_from_cache(base_dir,
|
||||||
actor, person_cache)
|
actor, person_cache)
|
||||||
|
|
@ -221,6 +227,8 @@ def remove_share(self, calling_domain: str, cookie: str,
|
||||||
origin_path_str = 'http://' + onion_domain + users_path
|
origin_path_str = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str = 'http://' + i2p_domain + users_path
|
origin_path_str = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str = 'http://' + yggdrasil_domain + users_path
|
||||||
redirect_headers(self, origin_path_str + '/tlshares',
|
redirect_headers(self, origin_path_str + '/tlshares',
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
|
|
@ -230,7 +238,8 @@ def remove_wanted(self, calling_domain: str, cookie: str,
|
||||||
authorized: bool, path: str,
|
authorized: bool, path: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str) -> None:
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str) -> None:
|
||||||
"""Removes a wanted item
|
"""Removes a wanted item
|
||||||
"""
|
"""
|
||||||
users_path = path.split('/rmwanted')[0]
|
users_path = path.split('/rmwanted')[0]
|
||||||
|
|
@ -294,6 +303,8 @@ def remove_wanted(self, calling_domain: str, cookie: str,
|
||||||
origin_path_str = 'http://' + onion_domain + users_path
|
origin_path_str = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str = 'http://' + i2p_domain + users_path
|
origin_path_str = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str = 'http://' + yggdrasil_domain + users_path
|
||||||
redirect_headers(self, origin_path_str + '/tlwanted',
|
redirect_headers(self, origin_path_str + '/tlwanted',
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
|
|
@ -303,6 +314,7 @@ def receive_remove_post(self, calling_domain: str, cookie: str,
|
||||||
path: str, base_dir: str, http_prefix: str,
|
path: str, base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str,
|
domain: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
curr_session, proxy_type: str) -> None:
|
curr_session, proxy_type: str) -> None:
|
||||||
"""Endpoint for removing posts after confirmation
|
"""Endpoint for removing posts after confirmation
|
||||||
"""
|
"""
|
||||||
|
|
@ -411,6 +423,8 @@ def receive_remove_post(self, calling_domain: str, cookie: str,
|
||||||
origin_path_str = 'http://' + onion_domain + users_path
|
origin_path_str = 'http://' + onion_domain + users_path
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
origin_path_str = 'http://' + i2p_domain + users_path
|
origin_path_str = 'http://' + i2p_domain + users_path
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
origin_path_str = 'http://' + yggdrasil_domain + users_path
|
||||||
if page_number == 1:
|
if page_number == 1:
|
||||||
redirect_headers(self, origin_path_str + '/outbox', cookie,
|
redirect_headers(self, origin_path_str + '/outbox', cookie,
|
||||||
calling_domain, 303)
|
calling_domain, 303)
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ from utils import get_full_domain
|
||||||
from utils import local_actor_url
|
from utils import local_actor_url
|
||||||
from utils import remove_eol
|
from utils import remove_eol
|
||||||
from utils import valid_nickname
|
from utils import valid_nickname
|
||||||
|
from utils import is_yggdrasil_url
|
||||||
from webapp_utils import get_avatar_image_url
|
from webapp_utils import get_avatar_image_url
|
||||||
from webapp_search import html_hashtag_search
|
from webapp_search import html_hashtag_search
|
||||||
from webapp_search import html_skills_search
|
from webapp_search import html_skills_search
|
||||||
|
|
@ -40,6 +41,7 @@ def _receive_search_redirect(self, calling_domain: str,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
users_path: str,
|
users_path: str,
|
||||||
default_timeline: str,
|
default_timeline: str,
|
||||||
cookie: str) -> None:
|
cookie: str) -> None:
|
||||||
|
|
@ -47,7 +49,8 @@ def _receive_search_redirect(self, calling_domain: str,
|
||||||
"""
|
"""
|
||||||
actor_str = \
|
actor_str = \
|
||||||
get_instance_url(calling_domain, http_prefix,
|
get_instance_url(calling_domain, http_prefix,
|
||||||
domain_full, onion_domain, i2p_domain) + users_path
|
domain_full, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain) + users_path
|
||||||
redirect_headers(self, actor_str + '/' + default_timeline,
|
redirect_headers(self, actor_str + '/' + default_timeline,
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
|
|
@ -432,7 +435,8 @@ def _receive_search_bookmarks(self, search_str: str,
|
||||||
def _receive_search_handle(self, search_str: str,
|
def _receive_search_handle(self, search_str: str,
|
||||||
calling_domain: str, http_prefix: str,
|
calling_domain: str, http_prefix: str,
|
||||||
domain_full: str, onion_domain: str,
|
domain_full: str, onion_domain: str,
|
||||||
i2p_domain: str, users_path: str,
|
i2p_domain: str, yggdrasil_domain: str,
|
||||||
|
users_path: str,
|
||||||
cookie: str, path: str, base_dir: str,
|
cookie: str, path: str, base_dir: str,
|
||||||
domain: str, proxy_type: str,
|
domain: str, proxy_type: str,
|
||||||
person_cache: {}, signing_priv_key_pem: str,
|
person_cache: {}, signing_priv_key_pem: str,
|
||||||
|
|
@ -477,7 +481,8 @@ def _receive_search_handle(self, search_str: str,
|
||||||
actor_str = \
|
actor_str = \
|
||||||
get_instance_url(calling_domain, http_prefix,
|
get_instance_url(calling_domain, http_prefix,
|
||||||
domain_full, onion_domain,
|
domain_full, onion_domain,
|
||||||
i2p_domain) + users_path
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + users_path
|
||||||
redirect_headers(self, actor_str + '/search',
|
redirect_headers(self, actor_str + '/search',
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
|
|
@ -532,6 +537,9 @@ def _receive_search_handle(self, search_str: str,
|
||||||
elif '.i2p/' in actor:
|
elif '.i2p/' in actor:
|
||||||
curr_proxy_type = 'i2p'
|
curr_proxy_type = 'i2p'
|
||||||
curr_session = self.server.session_i2p
|
curr_session = self.server.session_i2p
|
||||||
|
elif is_yggdrasil_url(actor):
|
||||||
|
curr_proxy_type = 'yggdrasil'
|
||||||
|
curr_session = self.server.session_yggdrasil
|
||||||
|
|
||||||
curr_session = \
|
curr_session = \
|
||||||
establish_session("handle search", curr_session,
|
establish_session("handle search", curr_session,
|
||||||
|
|
@ -577,6 +585,9 @@ def _receive_search_handle(self, search_str: str,
|
||||||
profile_handle.endswith('.i2p')):
|
profile_handle.endswith('.i2p')):
|
||||||
curr_proxy_type = 'i2p'
|
curr_proxy_type = 'i2p'
|
||||||
curr_session = self.server.session_i2p
|
curr_session = self.server.session_i2p
|
||||||
|
elif is_yggdrasil_url(profile_handle):
|
||||||
|
curr_proxy_type = 'yggdrasil'
|
||||||
|
curr_session = self.server.session_yggdrasil
|
||||||
|
|
||||||
curr_session = \
|
curr_session = \
|
||||||
establish_session("handle search", curr_session,
|
establish_session("handle search", curr_session,
|
||||||
|
|
@ -622,6 +633,7 @@ def _receive_search_handle(self, search_str: str,
|
||||||
timezone,
|
timezone,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
bold_reading,
|
bold_reading,
|
||||||
dogwhistles,
|
dogwhistles,
|
||||||
min_images_for_accounts,
|
min_images_for_accounts,
|
||||||
|
|
@ -648,7 +660,8 @@ def _receive_search_handle(self, search_str: str,
|
||||||
actor_str = \
|
actor_str = \
|
||||||
get_instance_url(calling_domain,
|
get_instance_url(calling_domain,
|
||||||
http_prefix, domain_full,
|
http_prefix, domain_full,
|
||||||
onion_domain, i2p_domain) + users_path
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain) + users_path
|
||||||
redirect_headers(self, actor_str + '/search',
|
redirect_headers(self, actor_str + '/search',
|
||||||
cookie, calling_domain, 303)
|
cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
|
|
@ -762,6 +775,7 @@ def receive_search_query(self, calling_domain: str, cookie: str,
|
||||||
domain: str, domain_full: str,
|
domain: str, domain_full: str,
|
||||||
port: int, search_for_emoji: bool,
|
port: int, search_for_emoji: bool,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
getreq_start_time, debug: bool,
|
getreq_start_time, debug: bool,
|
||||||
curr_session, proxy_type: str,
|
curr_session, proxy_type: str,
|
||||||
max_posts_in_hashtag_feed: int,
|
max_posts_in_hashtag_feed: int,
|
||||||
|
|
@ -817,7 +831,8 @@ def receive_search_query(self, calling_domain: str, cookie: str,
|
||||||
users_path = path.replace('/searchhandle', '')
|
users_path = path.replace('/searchhandle', '')
|
||||||
actor_str = \
|
actor_str = \
|
||||||
get_instance_url(calling_domain, http_prefix, domain_full,
|
get_instance_url(calling_domain, http_prefix, domain_full,
|
||||||
onion_domain, i2p_domain) + \
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
users_path
|
users_path
|
||||||
length = int(self.headers['Content-length'])
|
length = int(self.headers['Content-length'])
|
||||||
try:
|
try:
|
||||||
|
|
@ -847,6 +862,7 @@ def receive_search_query(self, calling_domain: str, cookie: str,
|
||||||
_receive_search_redirect(self, calling_domain,
|
_receive_search_redirect(self, calling_domain,
|
||||||
http_prefix, domain_full,
|
http_prefix, domain_full,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
users_path, default_timeline,
|
users_path, default_timeline,
|
||||||
cookie)
|
cookie)
|
||||||
return
|
return
|
||||||
|
|
@ -1004,7 +1020,8 @@ def receive_search_query(self, calling_domain: str, cookie: str,
|
||||||
if _receive_search_handle(self, search_str,
|
if _receive_search_handle(self, search_str,
|
||||||
calling_domain, http_prefix,
|
calling_domain, http_prefix,
|
||||||
domain_full, onion_domain,
|
domain_full, onion_domain,
|
||||||
i2p_domain, users_path,
|
i2p_domain, yggdrasil_domain,
|
||||||
|
users_path,
|
||||||
cookie, path, base_dir,
|
cookie, path, base_dir,
|
||||||
domain, proxy_type,
|
domain, proxy_type,
|
||||||
person_cache, signing_priv_key_pem,
|
person_cache, signing_priv_key_pem,
|
||||||
|
|
@ -1074,5 +1091,6 @@ def receive_search_query(self, calling_domain: str, cookie: str,
|
||||||
_receive_search_redirect(self, calling_domain,
|
_receive_search_redirect(self, calling_domain,
|
||||||
http_prefix, domain_full,
|
http_prefix, domain_full,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
users_path, default_timeline,
|
users_path, default_timeline,
|
||||||
cookie)
|
cookie)
|
||||||
|
|
|
||||||
|
|
@ -15,12 +15,14 @@ from theme import set_theme
|
||||||
from theme import set_theme_from_designer
|
from theme import set_theme_from_designer
|
||||||
from httpheaders import redirect_headers
|
from httpheaders import redirect_headers
|
||||||
from utils import load_json
|
from utils import load_json
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
|
|
||||||
|
|
||||||
def theme_designer_edit(self, calling_domain: str, cookie: str,
|
def theme_designer_edit(self, calling_domain: str, cookie: str,
|
||||||
base_dir: str, http_prefix: str, nickname: str,
|
base_dir: str, http_prefix: str, nickname: str,
|
||||||
domain: str, domain_full: str,
|
domain: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
default_timeline: str, theme_name: str,
|
default_timeline: str, theme_name: str,
|
||||||
allow_local_network_access: bool,
|
allow_local_network_access: bool,
|
||||||
system_language: str,
|
system_language: str,
|
||||||
|
|
@ -73,6 +75,10 @@ def theme_designer_edit(self, calling_domain: str, cookie: str,
|
||||||
origin_path_str = \
|
origin_path_str = \
|
||||||
'http://' + i2p_domain + users_path + \
|
'http://' + i2p_domain + users_path + \
|
||||||
'/' + default_timeline
|
'/' + default_timeline
|
||||||
|
elif is_yggdrasil_address(calling_domain) and yggdrasil_domain:
|
||||||
|
origin_path_str = \
|
||||||
|
'http://' + yggdrasil_domain + users_path + \
|
||||||
|
'/' + default_timeline
|
||||||
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
@ -149,6 +155,9 @@ def theme_designer_edit(self, calling_domain: str, cookie: str,
|
||||||
elif calling_domain.endswith('.i2p') and i2p_domain:
|
elif calling_domain.endswith('.i2p') and i2p_domain:
|
||||||
origin_path_str = \
|
origin_path_str = \
|
||||||
'http://' + i2p_domain + users_path + '/' + default_timeline
|
'http://' + i2p_domain + users_path + '/' + default_timeline
|
||||||
|
elif is_yggdrasil_address(calling_domain) and yggdrasil_domain:
|
||||||
|
origin_path_str = \
|
||||||
|
'http://' + yggdrasil_domain + users_path + '/' + default_timeline
|
||||||
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
||||||
self.server.postreq_busy = False
|
self.server.postreq_busy = False
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -119,6 +119,7 @@ def post_to_outbox(self, message_json: {}, version: str,
|
||||||
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.yggdrasil_domain,
|
||||||
self.server.port,
|
self.server.port,
|
||||||
self.server.recent_posts_cache,
|
self.server.recent_posts_cache,
|
||||||
self.server.followers_threads,
|
self.server.followers_threads,
|
||||||
|
|
@ -812,7 +813,8 @@ def show_person_options(self, calling_domain: str, path: str,
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain) + \
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain) + \
|
||||||
origin_path_str
|
origin_path_str
|
||||||
redirect_headers(self, origin_path_str_absolute, cookie,
|
redirect_headers(self, origin_path_str_absolute, cookie,
|
||||||
calling_domain, 303)
|
calling_domain, 303)
|
||||||
|
|
|
||||||
43
epicyon.py
43
epicyon.py
|
|
@ -97,6 +97,7 @@ from utils import valid_nickname
|
||||||
from utils import get_protocol_prefixes
|
from utils import get_protocol_prefixes
|
||||||
from utils import acct_dir
|
from utils import acct_dir
|
||||||
from utils import resembles_url
|
from utils import resembles_url
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from media import archive_media
|
from media import archive_media
|
||||||
from media import get_attachment_media_type
|
from media import get_attachment_media_type
|
||||||
from delete import send_delete_via_server
|
from delete import send_delete_via_server
|
||||||
|
|
@ -261,6 +262,10 @@ def _command_options() -> None:
|
||||||
default=None,
|
default=None,
|
||||||
help='i2p domain name of the server if ' +
|
help='i2p domain name of the server if ' +
|
||||||
'primarily on clearnet')
|
'primarily on clearnet')
|
||||||
|
parser.add_argument('--yggdrasil_domain', dest='yggdrasil_domain',
|
||||||
|
type=str, default=None,
|
||||||
|
help='yggdrasil domain name of the server if ' +
|
||||||
|
'primarily on clearnet')
|
||||||
parser.add_argument('-p', '--port', dest='port', type=int,
|
parser.add_argument('-p', '--port', dest='port', type=int,
|
||||||
default=None,
|
default=None,
|
||||||
help='Port number to run on')
|
help='Port number to run on')
|
||||||
|
|
@ -1669,10 +1674,21 @@ def _command_options() -> None:
|
||||||
print(argb.i2p_domain + ' does not look like an i2p domain')
|
print(argb.i2p_domain + ' does not look like an i2p domain')
|
||||||
sys.exit()
|
sys.exit()
|
||||||
if '://' in argb.i2p_domain:
|
if '://' in argb.i2p_domain:
|
||||||
argb.onion = argb.onion.split('://')[1]
|
argb.i2p_domain = argb.i2p_domain.split('://')[1]
|
||||||
i2p_domain = argb.i2p_domain
|
i2p_domain = argb.i2p_domain
|
||||||
set_config_param(base_dir, 'i2pDomain', i2p_domain)
|
set_config_param(base_dir, 'i2pDomain', i2p_domain)
|
||||||
|
|
||||||
|
yggdrasil_domain = None
|
||||||
|
if argb.yggdrasil_domain:
|
||||||
|
if not is_yggdrasil_address(argb.yggdrasil_domain):
|
||||||
|
print(argb.yggdrasil_domain +
|
||||||
|
' does not look like a yggdrasil domain')
|
||||||
|
sys.exit()
|
||||||
|
if '://' in argb.yggdrasil_domain:
|
||||||
|
argb.yggdrasil_domain = argb.yggdrasil_domain.split('://')[1]
|
||||||
|
yggdrasil_domain = argb.yggdrasil_domain
|
||||||
|
set_config_param(base_dir, 'yggdrasilDomain', yggdrasil_domain)
|
||||||
|
|
||||||
if not argb.language:
|
if not argb.language:
|
||||||
language_code = get_config_param(base_dir, 'language')
|
language_code = get_config_param(base_dir, 'language')
|
||||||
if language_code:
|
if language_code:
|
||||||
|
|
@ -1735,6 +1751,13 @@ def _command_options() -> None:
|
||||||
else:
|
else:
|
||||||
i2p_domain = None
|
i2p_domain = None
|
||||||
|
|
||||||
|
# get yggdrasil domain name from configuration
|
||||||
|
configyggdrasil_domain = get_config_param(base_dir, 'yggdrasilDomain')
|
||||||
|
if configyggdrasil_domain:
|
||||||
|
yggdrasil_domain = configyggdrasil_domain
|
||||||
|
else:
|
||||||
|
yggdrasil_domain = None
|
||||||
|
|
||||||
# get port number from configuration
|
# get port number from configuration
|
||||||
config_port = get_config_param(base_dir, 'port')
|
config_port = get_config_param(base_dir, 'port')
|
||||||
if config_port:
|
if config_port:
|
||||||
|
|
@ -1792,6 +1815,7 @@ def _command_options() -> None:
|
||||||
sys.exit()
|
sys.exit()
|
||||||
session_onion = None
|
session_onion = None
|
||||||
session_i2p = None
|
session_i2p = None
|
||||||
|
session_yggdrasil = None
|
||||||
session = create_session(proxy_type)
|
session = create_session(proxy_type)
|
||||||
send_threads = []
|
send_threads = []
|
||||||
post_log = []
|
post_log = []
|
||||||
|
|
@ -1812,12 +1836,19 @@ def _command_options() -> None:
|
||||||
i2p_domain = argb.i2p_domain
|
i2p_domain = argb.i2p_domain
|
||||||
if i2p_domain:
|
if i2p_domain:
|
||||||
session_i2p = create_session('i2p')
|
session_i2p = create_session('i2p')
|
||||||
|
yggdrasil_domain = get_config_param(base_dir, 'yggdrasilDomain')
|
||||||
|
if argb.yggdrasil_domain:
|
||||||
|
yggdrasil_domain = argb.yggdrasil_domain
|
||||||
|
if yggdrasil_domain:
|
||||||
|
session_yggdrasil = create_session('yggdrasil')
|
||||||
followers_sync_cache = {}
|
followers_sync_cache = {}
|
||||||
sites_unavailable: list[str] = []
|
sites_unavailable: list[str] = []
|
||||||
system_language = argb.language
|
system_language = argb.language
|
||||||
mitm_servers: list[str] = []
|
mitm_servers: list[str] = []
|
||||||
manual_approve_follow_request(session, session_onion, session_i2p,
|
manual_approve_follow_request(session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
base_dir, http_prefix,
|
base_dir, http_prefix,
|
||||||
argb.nickname, domain, port,
|
argb.nickname, domain, port,
|
||||||
argb.approve,
|
argb.approve,
|
||||||
|
|
@ -1841,6 +1872,7 @@ def _command_options() -> None:
|
||||||
sys.exit()
|
sys.exit()
|
||||||
session_onion = None
|
session_onion = None
|
||||||
session_i2p = None
|
session_i2p = None
|
||||||
|
session_yggdrasil = None
|
||||||
session = create_session(proxy_type)
|
session = create_session(proxy_type)
|
||||||
send_threads = []
|
send_threads = []
|
||||||
post_log = []
|
post_log = []
|
||||||
|
|
@ -1861,12 +1893,19 @@ def _command_options() -> None:
|
||||||
i2p_domain = argb.i2p_domain
|
i2p_domain = argb.i2p_domain
|
||||||
if i2p_domain:
|
if i2p_domain:
|
||||||
session_i2p = create_session('i2p')
|
session_i2p = create_session('i2p')
|
||||||
|
yggdrasil_domain = get_config_param(base_dir, 'yggdrasilDomain')
|
||||||
|
if argb.yggdrasil_domain:
|
||||||
|
yggdrasil_domain = argb.yggdrasil_domain
|
||||||
|
if yggdrasil_domain:
|
||||||
|
session_yggdrasil = create_session('yggdrasil')
|
||||||
followers_sync_cache = {}
|
followers_sync_cache = {}
|
||||||
sites_unavailable: list[str] = []
|
sites_unavailable: list[str] = []
|
||||||
mitm_servers: list[str] = []
|
mitm_servers: list[str] = []
|
||||||
system_language = argb.language
|
system_language = argb.language
|
||||||
manual_deny_follow_request2(session, session_onion, session_i2p,
|
manual_deny_follow_request2(session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
base_dir, http_prefix,
|
base_dir, http_prefix,
|
||||||
argb.nickname, domain, port,
|
argb.nickname, domain, port,
|
||||||
argb.deny,
|
argb.deny,
|
||||||
|
|
@ -4311,6 +4350,7 @@ def _command_options() -> None:
|
||||||
opt['domain'] = domain
|
opt['domain'] = domain
|
||||||
opt['onion_domain'] = onion_domain
|
opt['onion_domain'] = onion_domain
|
||||||
opt['i2p_domain'] = i2p_domain
|
opt['i2p_domain'] = i2p_domain
|
||||||
|
opt['yggdrasil_domain'] = yggdrasil_domain
|
||||||
opt['port'] = port
|
opt['port'] = port
|
||||||
opt['proxy_port'] = proxy_port
|
opt['proxy_port'] = proxy_port
|
||||||
opt['http_prefix'] = http_prefix
|
opt['http_prefix'] = http_prefix
|
||||||
|
|
@ -4371,6 +4411,7 @@ if __name__ == "__main__":
|
||||||
opt2['registration'], argb2.language, __version__,
|
opt2['registration'], argb2.language, __version__,
|
||||||
opt2['instance_id'], argb2.client, opt2['base_dir'],
|
opt2['instance_id'], argb2.client, opt2['base_dir'],
|
||||||
opt2['domain'], opt2['onion_domain'], opt2['i2p_domain'],
|
opt2['domain'], opt2['onion_domain'], opt2['i2p_domain'],
|
||||||
|
opt2['yggdrasil_domain'],
|
||||||
argb2.yt_replace_domain,
|
argb2.yt_replace_domain,
|
||||||
argb2.twitter_replacement_domain,
|
argb2.twitter_replacement_domain,
|
||||||
opt2['port'], opt2['proxy_port'], opt2['http_prefix'],
|
opt2['port'], opt2['proxy_port'], opt2['http_prefix'],
|
||||||
|
|
|
||||||
10
follow.py
10
follow.py
|
|
@ -10,6 +10,7 @@ __module_group__ = "ActivityPub"
|
||||||
import os
|
import os
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
from flags import has_group_type
|
from flags import has_group_type
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from utils import get_user_paths
|
from utils import get_user_paths
|
||||||
from utils import acct_handle_dir
|
from utils import acct_handle_dir
|
||||||
from utils import has_object_string_object
|
from utils import has_object_string_object
|
||||||
|
|
@ -766,6 +767,7 @@ def followed_account_accepts(session, base_dir: str, http_prefix: str,
|
||||||
signing_priv_key_pem: str,
|
signing_priv_key_pem: str,
|
||||||
curr_domain: str,
|
curr_domain: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
followers_sync_cache: {},
|
followers_sync_cache: {},
|
||||||
sites_unavailable: [],
|
sites_unavailable: [],
|
||||||
system_language: str,
|
system_language: str,
|
||||||
|
|
@ -825,12 +827,15 @@ def followed_account_accepts(session, base_dir: str, http_prefix: str,
|
||||||
person_cache, debug, project_version, None,
|
person_cache, debug, project_version, None,
|
||||||
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,
|
||||||
|
yggdrasil_domain,
|
||||||
extra_headers, sites_unavailable,
|
extra_headers, sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
|
|
||||||
|
|
||||||
def followed_account_rejects(session, session_onion, session_i2p,
|
def followed_account_rejects(session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
nickname_to_follow: str, domain_to_follow: str,
|
nickname_to_follow: str, domain_to_follow: str,
|
||||||
port: int,
|
port: int,
|
||||||
|
|
@ -896,6 +901,8 @@ def followed_account_rejects(session, session_onion, session_i2p,
|
||||||
curr_session = session_onion
|
curr_session = session_onion
|
||||||
elif domain.endswith('.i2p') and session_i2p:
|
elif domain.endswith('.i2p') and session_i2p:
|
||||||
curr_session = session_i2p
|
curr_session = session_i2p
|
||||||
|
elif is_yggdrasil_address(domain) and session_yggdrasil:
|
||||||
|
curr_session = session_yggdrasil
|
||||||
extra_headers = {}
|
extra_headers = {}
|
||||||
domain_full = get_full_domain(domain, from_port)
|
domain_full = get_full_domain(domain, from_port)
|
||||||
remove_followers_sync(followers_sync_cache,
|
remove_followers_sync(followers_sync_cache,
|
||||||
|
|
@ -912,6 +919,7 @@ def followed_account_rejects(session, session_onion, session_i2p,
|
||||||
group_account, signing_priv_key_pem,
|
group_account, signing_priv_key_pem,
|
||||||
6393063,
|
6393063,
|
||||||
domain, onion_domain, i2p_domain,
|
domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
extra_headers, sites_unavailable,
|
extra_headers, sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
|
|
||||||
|
|
@ -929,6 +937,7 @@ def send_follow_request(session, base_dir: str,
|
||||||
project_version: str, signing_priv_key_pem: str,
|
project_version: str, signing_priv_key_pem: str,
|
||||||
curr_domain: str,
|
curr_domain: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
sites_unavailable: [],
|
sites_unavailable: [],
|
||||||
system_language: str,
|
system_language: str,
|
||||||
mitm_servers: []) -> {}:
|
mitm_servers: []) -> {}:
|
||||||
|
|
@ -1019,6 +1028,7 @@ def send_follow_request(session, base_dir: str,
|
||||||
debug, project_version, None, group_account,
|
debug, project_version, None, group_account,
|
||||||
signing_priv_key_pem, 8234389,
|
signing_priv_key_pem, 8234389,
|
||||||
curr_domain, onion_domain, i2p_domain,
|
curr_domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
extra_headers, sites_unavailable,
|
extra_headers, sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,8 @@ def logout_redirect(self, redirect: str, calling_domain: str) -> None:
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
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.yggdrasil_domain) + \
|
||||||
redirect
|
redirect
|
||||||
print('WARN: redirect was not an absolute url, changed to ' +
|
print('WARN: redirect was not an absolute url, changed to ' +
|
||||||
redirect + ' ' + calling_domain)
|
redirect + ' ' + calling_domain)
|
||||||
|
|
@ -85,7 +86,8 @@ def redirect_headers(self, redirect: str, cookie: str,
|
||||||
self.server.http_prefix,
|
self.server.http_prefix,
|
||||||
self.server.domain_full,
|
self.server.domain_full,
|
||||||
self.server.onion_domain,
|
self.server.onion_domain,
|
||||||
self.server.i2p_domain) + redirect
|
self.server.i2p_domain,
|
||||||
|
self.server.yggdrasil_domain) + redirect
|
||||||
print('WARN: redirect was not an absolute url, changed to ' +
|
print('WARN: redirect was not an absolute url, changed to ' +
|
||||||
redirect)
|
redirect)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ from utils import get_full_domain
|
||||||
from utils import is_account_dir
|
from utils import is_account_dir
|
||||||
from utils import get_nickname_from_actor
|
from utils import get_nickname_from_actor
|
||||||
from utils import get_domain_from_actor
|
from utils import get_domain_from_actor
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from follow import is_following_actor
|
from follow import is_following_actor
|
||||||
from follow import send_follow_request
|
from follow import send_follow_request
|
||||||
from session import create_session
|
from session import create_session
|
||||||
|
|
@ -116,6 +117,7 @@ def _update_import_following(base_dir: str,
|
||||||
curr_proxy_type = httpd.proxy_type
|
curr_proxy_type = httpd.proxy_type
|
||||||
use_onion_session = False
|
use_onion_session = False
|
||||||
use_i2p_session = False
|
use_i2p_session = False
|
||||||
|
use_yggdrasil_session = False
|
||||||
if '.onion' not in domain and \
|
if '.onion' not in domain and \
|
||||||
httpd.onion_domain and '.onion' in following_domain:
|
httpd.onion_domain and '.onion' in following_domain:
|
||||||
curr_session = httpd.session_onion
|
curr_session = httpd.session_onion
|
||||||
|
|
@ -134,6 +136,16 @@ def _update_import_following(base_dir: str,
|
||||||
curr_http_prefix = 'http'
|
curr_http_prefix = 'http'
|
||||||
curr_proxy_type = 'i2p'
|
curr_proxy_type = 'i2p'
|
||||||
use_i2p_session = True
|
use_i2p_session = True
|
||||||
|
if not is_yggdrasil_address(domain) and \
|
||||||
|
httpd.yggdrasil_domain and \
|
||||||
|
is_yggdrasil_address(following_domain):
|
||||||
|
curr_session = httpd.session_yggdrasil
|
||||||
|
curr_domain = httpd.yggdrasil_domain
|
||||||
|
curr_port = 80
|
||||||
|
following_port = 80
|
||||||
|
curr_http_prefix = 'http'
|
||||||
|
curr_proxy_type = 'yggdrasil'
|
||||||
|
use_yggdrasil_session = True
|
||||||
|
|
||||||
curr_session = \
|
curr_session = \
|
||||||
_establish_import_session(httpd, "import follow",
|
_establish_import_session(httpd, "import follow",
|
||||||
|
|
@ -143,6 +155,8 @@ def _update_import_following(base_dir: str,
|
||||||
httpd.session_onion = curr_session
|
httpd.session_onion = curr_session
|
||||||
elif use_i2p_session:
|
elif use_i2p_session:
|
||||||
httpd.session_i2p = curr_session
|
httpd.session_i2p = curr_session
|
||||||
|
elif use_yggdrasil_session:
|
||||||
|
httpd.session_yggdrasil = curr_session
|
||||||
else:
|
else:
|
||||||
main_session = curr_session
|
main_session = curr_session
|
||||||
|
|
||||||
|
|
@ -164,6 +178,7 @@ def _update_import_following(base_dir: str,
|
||||||
httpd.domain,
|
httpd.domain,
|
||||||
httpd.onion_domain,
|
httpd.onion_domain,
|
||||||
httpd.i2p_domain,
|
httpd.i2p_domain,
|
||||||
|
httpd.yggdrasil_domain,
|
||||||
httpd.sites_unavailable,
|
httpd.sites_unavailable,
|
||||||
httpd.system_language,
|
httpd.system_language,
|
||||||
httpd.mitm_servers)
|
httpd.mitm_servers)
|
||||||
|
|
|
||||||
149
inbox.py
149
inbox.py
|
|
@ -29,6 +29,7 @@ from timeFunctions import date_utcnow
|
||||||
from timeFunctions import date_epoch
|
from timeFunctions import date_epoch
|
||||||
from timeFunctions import get_account_timezone
|
from timeFunctions import get_account_timezone
|
||||||
from timeFunctions import get_current_time_int
|
from timeFunctions import get_current_time_int
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from utils import get_mutuals_of_person
|
from utils import get_mutuals_of_person
|
||||||
from utils import harmless_markup
|
from utils import harmless_markup
|
||||||
from utils import lines_in_file
|
from utils import lines_in_file
|
||||||
|
|
@ -645,7 +646,8 @@ def _inbox_post_recipients_add(base_dir: str, to_list: [],
|
||||||
domain_match: str, domain: str,
|
domain_match: str, domain: str,
|
||||||
debug: bool,
|
debug: bool,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str) -> (bool, {}):
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str) -> (bool, {}):
|
||||||
"""Given a list of post recipients (to_list) from 'to' or 'cc' parameters
|
"""Given a list of post recipients (to_list) from 'to' or 'cc' parameters
|
||||||
populate a recipients_dict with the handle for each
|
populate a recipients_dict with the handle for each
|
||||||
"""
|
"""
|
||||||
|
|
@ -662,6 +664,9 @@ def _inbox_post_recipients_add(base_dir: str, to_list: [],
|
||||||
if i2p_domain:
|
if i2p_domain:
|
||||||
if i2p_domain + '/' in recipient:
|
if i2p_domain + '/' in recipient:
|
||||||
recipient = recipient.replace(i2p_domain, domain)
|
recipient = recipient.replace(i2p_domain, domain)
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if yggdrasil_domain + '/' in recipient:
|
||||||
|
recipient = recipient.replace(yggdrasil_domain, domain)
|
||||||
# is this a to an account on this instance?
|
# is this a to an account on this instance?
|
||||||
if domain_match in recipient:
|
if domain_match in recipient:
|
||||||
# get the handle for the account on this instance
|
# get the handle for the account on this instance
|
||||||
|
|
@ -699,7 +704,8 @@ def _inbox_post_recipients_add(base_dir: str, to_list: [],
|
||||||
def _inbox_post_recipients(base_dir: str, post_json_object: {},
|
def _inbox_post_recipients(base_dir: str, post_json_object: {},
|
||||||
domain: str, port: int,
|
domain: str, port: int,
|
||||||
debug: bool,
|
debug: bool,
|
||||||
onion_domain: str, i2p_domain: str) -> ([], []):
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str) -> ([], []):
|
||||||
"""Returns dictionaries containing the recipients of the given post
|
"""Returns dictionaries containing the recipients of the given post
|
||||||
The shared dictionary contains followers
|
The shared dictionary contains followers
|
||||||
"""
|
"""
|
||||||
|
|
@ -735,7 +741,8 @@ def _inbox_post_recipients(base_dir: str, post_json_object: {},
|
||||||
recipients_dict,
|
recipients_dict,
|
||||||
domain_match, domain_base,
|
domain_match, domain_base,
|
||||||
debug,
|
debug,
|
||||||
onion_domain, i2p_domain)
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
if includes_followers:
|
if includes_followers:
|
||||||
follower_recipients = True
|
follower_recipients = True
|
||||||
else:
|
else:
|
||||||
|
|
@ -753,7 +760,8 @@ def _inbox_post_recipients(base_dir: str, post_json_object: {},
|
||||||
recipients_dict,
|
recipients_dict,
|
||||||
domain_match, domain_base,
|
domain_match, domain_base,
|
||||||
debug,
|
debug,
|
||||||
onion_domain, i2p_domain)
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
if includes_followers:
|
if includes_followers:
|
||||||
follower_recipients = True
|
follower_recipients = True
|
||||||
else:
|
else:
|
||||||
|
|
@ -779,7 +787,8 @@ def _inbox_post_recipients(base_dir: str, post_json_object: {},
|
||||||
recipients_dict,
|
recipients_dict,
|
||||||
domain_match, domain_base,
|
domain_match, domain_base,
|
||||||
debug,
|
debug,
|
||||||
onion_domain, i2p_domain)
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
if includes_followers:
|
if includes_followers:
|
||||||
follower_recipients = True
|
follower_recipients = True
|
||||||
|
|
||||||
|
|
@ -794,7 +803,8 @@ def _inbox_post_recipients(base_dir: str, post_json_object: {},
|
||||||
recipients_dict,
|
recipients_dict,
|
||||||
domain_match, domain_base,
|
domain_match, domain_base,
|
||||||
debug,
|
debug,
|
||||||
onion_domain, i2p_domain)
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
if includes_followers:
|
if includes_followers:
|
||||||
follower_recipients = True
|
follower_recipients = True
|
||||||
|
|
||||||
|
|
@ -838,6 +848,7 @@ def update_edited_post(base_dir: str,
|
||||||
auto_cw_cache: {},
|
auto_cw_cache: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {},
|
instance_software: {},
|
||||||
block_military: {},
|
block_military: {},
|
||||||
|
|
@ -894,6 +905,7 @@ def update_edited_post(base_dir: str,
|
||||||
max_hashtags, buy_sites,
|
max_hashtags, buy_sites,
|
||||||
auto_cw_cache,
|
auto_cw_cache,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
mitm_servers,
|
mitm_servers,
|
||||||
instance_software,
|
instance_software,
|
||||||
block_military,
|
block_military,
|
||||||
|
|
@ -993,6 +1005,7 @@ def populate_replies(base_dir: str, http_prefix: str, domain: str,
|
||||||
def _obtain_avatar_for_reply_post(session, base_dir: str, http_prefix: str,
|
def _obtain_avatar_for_reply_post(session, base_dir: str, http_prefix: str,
|
||||||
domain: str, onion_domain: str,
|
domain: str, onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
person_cache: {},
|
person_cache: {},
|
||||||
post_json_object: {}, debug: bool,
|
post_json_object: {}, debug: bool,
|
||||||
signing_priv_key_pem: str,
|
signing_priv_key_pem: str,
|
||||||
|
|
@ -1029,6 +1042,7 @@ 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,
|
||||||
|
yggdrasil_domain,
|
||||||
signing_priv_key_pem,
|
signing_priv_key_pem,
|
||||||
mitm_servers)
|
mitm_servers)
|
||||||
if pub_key:
|
if pub_key:
|
||||||
|
|
@ -1135,7 +1149,8 @@ def _group_handle(base_dir: str, handle: str) -> bool:
|
||||||
return actor_json['type'] == 'Group'
|
return actor_json['type'] == 'Group'
|
||||||
|
|
||||||
|
|
||||||
def _send_to_group_members(server, session, session_onion, session_i2p,
|
def _send_to_group_members(server, session, session_onion,
|
||||||
|
session_i2p, session_yggdrasil,
|
||||||
base_dir: str, handle: str, port: int,
|
base_dir: str, handle: str, port: int,
|
||||||
post_json_object: {},
|
post_json_object: {},
|
||||||
http_prefix: str, federation_list: [],
|
http_prefix: str, federation_list: [],
|
||||||
|
|
@ -1144,6 +1159,7 @@ def _send_to_group_members(server, session, session_onion, session_i2p,
|
||||||
person_cache: {}, debug: bool,
|
person_cache: {}, debug: bool,
|
||||||
curr_domain: str,
|
curr_domain: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
signing_priv_key_pem: str,
|
signing_priv_key_pem: str,
|
||||||
sites_unavailable: [],
|
sites_unavailable: [],
|
||||||
system_language: str,
|
system_language: str,
|
||||||
|
|
@ -1204,12 +1220,15 @@ 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,
|
||||||
|
yggdrasil_domain,
|
||||||
sites_unavailable, system_language,
|
sites_unavailable, system_language,
|
||||||
mitm_servers)
|
mitm_servers)
|
||||||
|
|
||||||
send_to_followers_thread(server, session, session_onion, session_i2p,
|
send_to_followers_thread(server, session, session_onion,
|
||||||
|
session_i2p, session_yggdrasil,
|
||||||
base_dir, nickname, domain,
|
base_dir, nickname, domain,
|
||||||
onion_domain, i2p_domain, port,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain, port,
|
||||||
http_prefix, federation_list,
|
http_prefix, federation_list,
|
||||||
send_threads, post_log,
|
send_threads, post_log,
|
||||||
cached_webfingers, person_cache,
|
cached_webfingers, person_cache,
|
||||||
|
|
@ -1352,6 +1371,7 @@ 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,
|
||||||
|
yggdrasil_domain: str,
|
||||||
sites_unavailable: [],
|
sites_unavailable: [],
|
||||||
mitm_servers: []) -> bool:
|
mitm_servers: []) -> bool:
|
||||||
"""Sends a bounce message back to the sending handle
|
"""Sends a bounce message back to the sending handle
|
||||||
|
|
@ -1439,6 +1459,7 @@ 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,
|
||||||
|
yggdrasil_domain,
|
||||||
extra_headers, sites_unavailable, system_language,
|
extra_headers, sites_unavailable, system_language,
|
||||||
mitm_servers)
|
mitm_servers)
|
||||||
return True
|
return True
|
||||||
|
|
@ -1458,6 +1479,7 @@ 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,
|
||||||
|
yggdrasil_domain: str,
|
||||||
sites_unavailable: [],
|
sites_unavailable: [],
|
||||||
mitm_servers: []) -> bool:
|
mitm_servers: []) -> bool:
|
||||||
"""Is the given message a valid DM?
|
"""Is the given message a valid DM?
|
||||||
|
|
@ -1566,6 +1588,7 @@ 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,
|
||||||
|
yggdrasil_domain,
|
||||||
sites_unavailable,
|
sites_unavailable,
|
||||||
mitm_servers)
|
mitm_servers)
|
||||||
return False
|
return False
|
||||||
|
|
@ -1747,7 +1770,8 @@ def _former_representations_to_edits(base_dir: str,
|
||||||
max_hashtags: int,
|
max_hashtags: int,
|
||||||
port: int,
|
port: int,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str) -> bool:
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str) -> bool:
|
||||||
""" Some instances use formerRepresentations to store
|
""" Some instances use formerRepresentations to store
|
||||||
previous edits
|
previous edits
|
||||||
"""
|
"""
|
||||||
|
|
@ -1806,7 +1830,8 @@ def _former_representations_to_edits(base_dir: str,
|
||||||
allow_local_network_access, debug,
|
allow_local_network_access, debug,
|
||||||
system_language, http_prefix,
|
system_language, http_prefix,
|
||||||
domain_full, person_cache,
|
domain_full, person_cache,
|
||||||
max_hashtags, onion_domain, i2p_domain):
|
max_hashtags, onion_domain,
|
||||||
|
i2p_domain, yggdrasil_domain):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
post_history_json[published_str] = prev_post_json
|
post_history_json[published_str] = prev_post_json
|
||||||
|
|
@ -1821,10 +1846,12 @@ def _former_representations_to_edits(base_dir: str,
|
||||||
def _inbox_after_initial(server, inbox_start_time,
|
def _inbox_after_initial(server, inbox_start_time,
|
||||||
recent_posts_cache: {}, max_recent_posts: int,
|
recent_posts_cache: {}, max_recent_posts: int,
|
||||||
session, session_onion, session_i2p,
|
session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
key_id: str, handle: str, message_json: {},
|
key_id: str, handle: str, message_json: {},
|
||||||
base_dir: str, http_prefix: str, send_threads: [],
|
base_dir: str, http_prefix: str, send_threads: [],
|
||||||
post_log: [], cached_webfingers: {}, person_cache: {},
|
post_log: [], cached_webfingers: {}, person_cache: {},
|
||||||
domain: str, onion_domain: str, i2p_domain: str,
|
domain: str, onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
port: int, federation_list: [], debug: bool,
|
port: int, federation_list: [], debug: bool,
|
||||||
queue_filename: str, destination_filename: str,
|
queue_filename: str, destination_filename: str,
|
||||||
max_replies: int, allow_deletion: bool,
|
max_replies: int, allow_deletion: bool,
|
||||||
|
|
@ -1853,7 +1880,7 @@ def _inbox_after_initial(server, inbox_start_time,
|
||||||
"""
|
"""
|
||||||
# if this is a clearnet instance then replace any onion/i2p
|
# if this is a clearnet instance then replace any onion/i2p
|
||||||
# domains with the account domain
|
# domains with the account domain
|
||||||
if onion_domain or i2p_domain:
|
if onion_domain or i2p_domain or yggdrasil_domain:
|
||||||
message_str = json.dumps(message_json, ensure_ascii=False)
|
message_str = json.dumps(message_json, ensure_ascii=False)
|
||||||
if onion_domain:
|
if onion_domain:
|
||||||
if onion_domain in message_str:
|
if onion_domain in message_str:
|
||||||
|
|
@ -1877,6 +1904,17 @@ def _inbox_after_initial(server, inbox_start_time,
|
||||||
str(message_str))
|
str(message_str))
|
||||||
inbox_start_time = time.time()
|
inbox_start_time = time.time()
|
||||||
return False
|
return False
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if yggdrasil_domain in message_str:
|
||||||
|
message_str = message_str.replace(yggdrasil_domain, domain)
|
||||||
|
try:
|
||||||
|
message_json = json.loads(message_str)
|
||||||
|
except json.decoder.JSONDecodeError as ex:
|
||||||
|
print('EX: json decode error ' + str(ex) +
|
||||||
|
' from _inbox_after_initial yggdrasil ' +
|
||||||
|
str(message_str))
|
||||||
|
inbox_start_time = time.time()
|
||||||
|
return False
|
||||||
|
|
||||||
actor = key_id
|
actor = key_id
|
||||||
if '#' in actor:
|
if '#' in actor:
|
||||||
|
|
@ -1947,6 +1985,7 @@ def _inbox_after_initial(server, inbox_start_time,
|
||||||
base_dir, http_prefix,
|
base_dir, http_prefix,
|
||||||
domain, port,
|
domain, port,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
cached_webfingers,
|
cached_webfingers,
|
||||||
person_cache,
|
person_cache,
|
||||||
message_json,
|
message_json,
|
||||||
|
|
@ -2193,7 +2232,8 @@ def _inbox_after_initial(server, inbox_start_time,
|
||||||
if receive_announce(recent_posts_cache,
|
if receive_announce(recent_posts_cache,
|
||||||
session, handle,
|
session, handle,
|
||||||
base_dir, http_prefix,
|
base_dir, http_prefix,
|
||||||
domain, onion_domain, i2p_domain, port,
|
domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain, port,
|
||||||
cached_webfingers,
|
cached_webfingers,
|
||||||
person_cache,
|
person_cache,
|
||||||
message_json,
|
message_json,
|
||||||
|
|
@ -2269,7 +2309,9 @@ def _inbox_after_initial(server, inbox_start_time,
|
||||||
http_prefix, handle, debug,
|
http_prefix, handle, debug,
|
||||||
post_json_object, recent_posts_cache,
|
post_json_object, recent_posts_cache,
|
||||||
session, session_onion, session_i2p,
|
session, session_onion, session_i2p,
|
||||||
onion_domain, i2p_domain, port,
|
session_yggdrasil,
|
||||||
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain, port,
|
||||||
federation_list, send_threads, post_log,
|
federation_list, send_threads, post_log,
|
||||||
cached_webfingers, person_cache,
|
cached_webfingers, person_cache,
|
||||||
signing_priv_key_pem,
|
signing_priv_key_pem,
|
||||||
|
|
@ -2305,7 +2347,8 @@ def _inbox_after_initial(server, inbox_start_time,
|
||||||
allow_local_network_access, debug,
|
allow_local_network_access, debug,
|
||||||
system_language, http_prefix,
|
system_language, http_prefix,
|
||||||
domain_full, person_cache,
|
domain_full, person_cache,
|
||||||
max_hashtags, onion_domain, i2p_domain):
|
max_hashtags, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain):
|
||||||
fitness_performance(inbox_start_time, server.fitness,
|
fitness_performance(inbox_start_time, server.fitness,
|
||||||
'INBOX', 'valid_post_content',
|
'INBOX', 'valid_post_content',
|
||||||
debug)
|
debug)
|
||||||
|
|
@ -2388,6 +2431,7 @@ def _inbox_after_initial(server, inbox_start_time,
|
||||||
languages_understood,
|
languages_understood,
|
||||||
domain,
|
domain,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
server.sites_unavailable,
|
server.sites_unavailable,
|
||||||
mitm_servers):
|
mitm_servers):
|
||||||
if debug:
|
if debug:
|
||||||
|
|
@ -2445,6 +2489,7 @@ def _inbox_after_initial(server, inbox_start_time,
|
||||||
_obtain_avatar_for_reply_post(session, base_dir,
|
_obtain_avatar_for_reply_post(session, base_dir,
|
||||||
http_prefix, domain,
|
http_prefix, domain,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
person_cache, post_json_object, debug,
|
person_cache, post_json_object, debug,
|
||||||
signing_priv_key_pem, mitm_servers)
|
signing_priv_key_pem, mitm_servers)
|
||||||
fitness_performance(inbox_start_time, server.fitness,
|
fitness_performance(inbox_start_time, server.fitness,
|
||||||
|
|
@ -2456,6 +2501,7 @@ def _inbox_after_initial(server, inbox_start_time,
|
||||||
cache_svg_images(session, base_dir, http_prefix,
|
cache_svg_images(session, base_dir, http_prefix,
|
||||||
domain, domain_full,
|
domain, domain_full,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
post_json_object,
|
post_json_object,
|
||||||
federation_list, debug, None)
|
federation_list, debug, None)
|
||||||
|
|
||||||
|
|
@ -2527,7 +2573,8 @@ def _inbox_after_initial(server, inbox_start_time,
|
||||||
person_cache,
|
person_cache,
|
||||||
max_hashtags, port,
|
max_hashtags, port,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain):
|
i2p_domain,
|
||||||
|
yggdrasil_domain):
|
||||||
# ensure that there is an updated entry
|
# ensure that there is an updated entry
|
||||||
# for the publication date
|
# for the publication date
|
||||||
if post_json_object['object'].get('published') and \
|
if post_json_object['object'].get('published') and \
|
||||||
|
|
@ -2712,6 +2759,7 @@ def _inbox_after_initial(server, inbox_start_time,
|
||||||
if is_group:
|
if is_group:
|
||||||
_send_to_group_members(server,
|
_send_to_group_members(server,
|
||||||
session, session_onion, session_i2p,
|
session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
base_dir, handle, port,
|
base_dir, handle, port,
|
||||||
post_json_object,
|
post_json_object,
|
||||||
http_prefix, federation_list,
|
http_prefix, federation_list,
|
||||||
|
|
@ -2719,6 +2767,7 @@ def _inbox_after_initial(server, inbox_start_time,
|
||||||
post_log, cached_webfingers,
|
post_log, cached_webfingers,
|
||||||
person_cache, debug,
|
person_cache, debug,
|
||||||
domain, onion_domain, i2p_domain,
|
domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
signing_priv_key_pem,
|
signing_priv_key_pem,
|
||||||
sites_unavailable,
|
sites_unavailable,
|
||||||
system_language,
|
system_language,
|
||||||
|
|
@ -2983,6 +3032,7 @@ def _check_json_signature(base_dir: str, queue_json: {}) -> (bool, bool):
|
||||||
|
|
||||||
|
|
||||||
def _receive_follow_request(session, session_onion, session_i2p,
|
def _receive_follow_request(session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
base_dir: str, http_prefix: str,
|
base_dir: str, http_prefix: str,
|
||||||
port: int, send_threads: [], post_log: [],
|
port: int, send_threads: [], post_log: [],
|
||||||
cached_webfingers: {}, person_cache: {},
|
cached_webfingers: {}, person_cache: {},
|
||||||
|
|
@ -2990,7 +3040,8 @@ def _receive_follow_request(session, session_onion, session_i2p,
|
||||||
debug: bool, project_version: str,
|
debug: bool, project_version: str,
|
||||||
max_followers: int,
|
max_followers: int,
|
||||||
this_domain: str, onion_domain: str,
|
this_domain: str, onion_domain: str,
|
||||||
i2p_domain: str, signing_priv_key_pem: str,
|
i2p_domain: str, yggdrasil_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: [],
|
sites_unavailable: [],
|
||||||
|
|
@ -3052,6 +3103,9 @@ def _receive_follow_request(session, session_onion, session_i2p,
|
||||||
if i2p_domain:
|
if i2p_domain:
|
||||||
if domain_to_follow.endswith(i2p_domain):
|
if domain_to_follow.endswith(i2p_domain):
|
||||||
domain_to_follow = this_domain
|
domain_to_follow = this_domain
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if domain_to_follow.endswith(yggdrasil_domain):
|
||||||
|
domain_to_follow = this_domain
|
||||||
if not domain_permitted(domain_to_follow, federation_list):
|
if not domain_permitted(domain_to_follow, federation_list):
|
||||||
if debug:
|
if debug:
|
||||||
print('DEBUG: follow domain not permitted ' + domain_to_follow)
|
print('DEBUG: follow domain not permitted ' + domain_to_follow)
|
||||||
|
|
@ -3119,6 +3173,16 @@ def _receive_follow_request(session, session_onion, session_i2p,
|
||||||
port = 80
|
port = 80
|
||||||
if debug:
|
if debug:
|
||||||
print('Domain switched from ' + domain + ' to ' + curr_domain)
|
print('Domain switched from ' + domain + ' to ' + curr_domain)
|
||||||
|
elif (yggdrasil_domain and
|
||||||
|
not is_yggdrasil_address(curr_domain) and
|
||||||
|
is_yggdrasil_address(domain_to_follow)):
|
||||||
|
curr_session = session_yggdrasil
|
||||||
|
curr_http_prefix = 'http'
|
||||||
|
curr_domain = yggdrasil_domain
|
||||||
|
curr_port = 80
|
||||||
|
port = 80
|
||||||
|
if debug:
|
||||||
|
print('Domain switched from ' + domain + ' to ' + curr_domain)
|
||||||
|
|
||||||
# is the actor sending the request valid?
|
# is the actor sending the request valid?
|
||||||
if not valid_sending_actor(curr_session, base_dir,
|
if not valid_sending_actor(curr_session, base_dir,
|
||||||
|
|
@ -3163,7 +3227,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, yggdrasil_domain,
|
||||||
|
signing_priv_key_pem,
|
||||||
mitm_servers)
|
mitm_servers)
|
||||||
if not pubkey_result:
|
if not pubkey_result:
|
||||||
if debug:
|
if debug:
|
||||||
|
|
@ -3215,6 +3280,7 @@ 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,
|
||||||
|
yggdrasil_domain,
|
||||||
signing_priv_key_pem,
|
signing_priv_key_pem,
|
||||||
mitm_servers)
|
mitm_servers)
|
||||||
if not pubkey_result:
|
if not pubkey_result:
|
||||||
|
|
@ -3279,6 +3345,7 @@ def _receive_follow_request(session, session_onion, session_i2p,
|
||||||
debug, project_version, True,
|
debug, project_version, True,
|
||||||
signing_priv_key_pem,
|
signing_priv_key_pem,
|
||||||
this_domain, onion_domain, i2p_domain,
|
this_domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
followers_sync_cache, sites_unavailable,
|
followers_sync_cache, sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
|
|
||||||
|
|
@ -3291,6 +3358,7 @@ def run_inbox_queue(server,
|
||||||
cached_webfingers: {}, person_cache: {}, queue: [],
|
cached_webfingers: {}, person_cache: {}, queue: [],
|
||||||
domain: str,
|
domain: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
port: int, proxy_type: str,
|
port: int, proxy_type: str,
|
||||||
federation_list: [], max_replies: int,
|
federation_list: [], max_replies: int,
|
||||||
domain_max_posts_per_day: int,
|
domain_max_posts_per_day: int,
|
||||||
|
|
@ -3329,8 +3397,10 @@ def run_inbox_queue(server,
|
||||||
# for onion and i2p domains
|
# for onion and i2p domains
|
||||||
session_onion = None
|
session_onion = None
|
||||||
session_i2p = None
|
session_i2p = None
|
||||||
|
session_yggdrasil = None
|
||||||
session_last_update_onion = 0
|
session_last_update_onion = 0
|
||||||
session_last_update_i2p = 0
|
session_last_update_i2p = 0
|
||||||
|
session_last_update_yggdrasil = 0
|
||||||
if proxy_type != 'tor' and onion_domain:
|
if proxy_type != 'tor' and onion_domain:
|
||||||
print('Starting onion session when starting inbox queue')
|
print('Starting onion session when starting inbox queue')
|
||||||
session_onion = create_session('tor')
|
session_onion = create_session('tor')
|
||||||
|
|
@ -3341,6 +3411,11 @@ def run_inbox_queue(server,
|
||||||
session_i2p = create_session('i2p')
|
session_i2p = create_session('i2p')
|
||||||
if session_i2p:
|
if session_i2p:
|
||||||
session_i2p = curr_session_time
|
session_i2p = curr_session_time
|
||||||
|
if proxy_type != 'yggdrasil' and yggdrasil_domain:
|
||||||
|
print('Starting yggdrasil session when starting inbox queue')
|
||||||
|
session_yggdrasil = create_session('yggdrasil')
|
||||||
|
if session_yggdrasil:
|
||||||
|
session_yggdrasil = curr_session_time
|
||||||
|
|
||||||
inbox_handle = 'inbox@' + domain
|
inbox_handle = 'inbox@' + domain
|
||||||
if debug:
|
if debug:
|
||||||
|
|
@ -3513,6 +3588,18 @@ def run_inbox_queue(server,
|
||||||
else:
|
else:
|
||||||
print('WARN: inbox i2p session not created')
|
print('WARN: inbox i2p session not created')
|
||||||
continue
|
continue
|
||||||
|
if yggdrasil_domain:
|
||||||
|
time_diff = curr_time - session_last_update_yggdrasil
|
||||||
|
if not session_yggdrasil or \
|
||||||
|
time_diff > session_restart_interval_secs:
|
||||||
|
print('Regenerating inbox queue ' +
|
||||||
|
'yggdrasil session at 5hr interval')
|
||||||
|
session_yggdrasil = create_session('yggdrasil')
|
||||||
|
if session_yggdrasil:
|
||||||
|
session_last_update_yggdrasil = curr_time
|
||||||
|
else:
|
||||||
|
print('WARN: inbox yggdrasil session not created')
|
||||||
|
continue
|
||||||
fitness_performance(inbox_start_time, server.fitness,
|
fitness_performance(inbox_start_time, server.fitness,
|
||||||
'INBOX', 'recreate_session', debug)
|
'INBOX', 'recreate_session', debug)
|
||||||
inbox_start_time = time.time()
|
inbox_start_time = time.time()
|
||||||
|
|
@ -3541,6 +3628,9 @@ def run_inbox_queue(server,
|
||||||
elif (sender_domain.endswith('.i2p') and
|
elif (sender_domain.endswith('.i2p') and
|
||||||
session_i2p and proxy_type != 'i2p'):
|
session_i2p and proxy_type != 'i2p'):
|
||||||
curr_session = session_i2p
|
curr_session = session_i2p
|
||||||
|
elif (is_yggdrasil_address(sender_domain) and
|
||||||
|
session_yggdrasil and proxy_type != 'yggdrasil'):
|
||||||
|
curr_session = session_yggdrasil
|
||||||
|
|
||||||
if debug:
|
if debug:
|
||||||
print('Obtaining public key for actor ' +
|
print('Obtaining public key for actor ' +
|
||||||
|
|
@ -3572,6 +3662,7 @@ 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,
|
||||||
|
yggdrasil_domain,
|
||||||
signing_priv_key_pem,
|
signing_priv_key_pem,
|
||||||
server.mitm_servers)
|
server.mitm_servers)
|
||||||
fitness_performance(inbox_start_time, server.fitness,
|
fitness_performance(inbox_start_time, server.fitness,
|
||||||
|
|
@ -3713,7 +3804,8 @@ def run_inbox_queue(server,
|
||||||
# queue_json['post']['id'] = queue_json['id']
|
# queue_json['post']['id'] = queue_json['id']
|
||||||
|
|
||||||
if receive_undo(base_dir, queue_json['post'],
|
if receive_undo(base_dir, queue_json['post'],
|
||||||
debug, domain, onion_domain, i2p_domain):
|
debug, domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain):
|
||||||
print('Queue: Undo accepted from ' + key_id)
|
print('Queue: Undo accepted from ' + key_id)
|
||||||
if os.path.isfile(queue_filename):
|
if os.path.isfile(queue_filename):
|
||||||
try:
|
try:
|
||||||
|
|
@ -3731,7 +3823,8 @@ def run_inbox_queue(server,
|
||||||
|
|
||||||
if debug:
|
if debug:
|
||||||
print('DEBUG: checking for follow requests')
|
print('DEBUG: checking for follow requests')
|
||||||
if _receive_follow_request(curr_session, session_onion, session_i2p,
|
if _receive_follow_request(curr_session, session_onion,
|
||||||
|
session_i2p, session_yggdrasil,
|
||||||
base_dir, http_prefix, port,
|
base_dir, http_prefix, port,
|
||||||
send_threads, post_log,
|
send_threads, post_log,
|
||||||
cached_webfingers,
|
cached_webfingers,
|
||||||
|
|
@ -3741,6 +3834,7 @@ def run_inbox_queue(server,
|
||||||
debug, project_version,
|
debug, project_version,
|
||||||
max_followers, domain,
|
max_followers, domain,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
signing_priv_key_pem, unit_test,
|
signing_priv_key_pem, unit_test,
|
||||||
system_language,
|
system_language,
|
||||||
server.followers_sync_cache,
|
server.followers_sync_cache,
|
||||||
|
|
@ -3767,7 +3861,8 @@ def run_inbox_queue(server,
|
||||||
|
|
||||||
if receive_accept_reject(base_dir, domain, queue_json['post'],
|
if receive_accept_reject(base_dir, domain, queue_json['post'],
|
||||||
federation_list, debug,
|
federation_list, debug,
|
||||||
domain, onion_domain, i2p_domain):
|
domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain):
|
||||||
print('Queue: Accept/Reject received from ' + key_id)
|
print('Queue: Accept/Reject received from ' + key_id)
|
||||||
if os.path.isfile(queue_filename):
|
if os.path.isfile(queue_filename):
|
||||||
try:
|
try:
|
||||||
|
|
@ -3787,6 +3882,7 @@ def run_inbox_queue(server,
|
||||||
federation_list,
|
federation_list,
|
||||||
debug, domain,
|
debug, domain,
|
||||||
session, session_onion, session_i2p,
|
session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
base_dir,
|
base_dir,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
send_threads, post_log,
|
send_threads, post_log,
|
||||||
|
|
@ -3794,7 +3890,7 @@ def run_inbox_queue(server,
|
||||||
person_cache, project_version,
|
person_cache, project_version,
|
||||||
signing_priv_key_pem,
|
signing_priv_key_pem,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain, {},
|
i2p_domain, yggdrasil_domain, {},
|
||||||
server.sites_unavailable,
|
server.sites_unavailable,
|
||||||
system_language,
|
system_language,
|
||||||
server.mitm_servers,
|
server.mitm_servers,
|
||||||
|
|
@ -3828,6 +3924,7 @@ def run_inbox_queue(server,
|
||||||
federation_list,
|
federation_list,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
server.sites_unavailable,
|
server.sites_unavailable,
|
||||||
server.blocked_cache,
|
server.blocked_cache,
|
||||||
server.block_federated,
|
server.block_federated,
|
||||||
|
|
@ -3873,7 +3970,8 @@ 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, server.mitm_servers,
|
i2p_domain, yggdrasil_domain,
|
||||||
|
server.mitm_servers,
|
||||||
server.instance_software,
|
server.instance_software,
|
||||||
server.block_military,
|
server.block_military,
|
||||||
server.block_government,
|
server.block_government,
|
||||||
|
|
@ -3899,7 +3997,8 @@ def run_inbox_queue(server,
|
||||||
recipients_dict, recipients_dict_followers = \
|
recipients_dict, recipients_dict_followers = \
|
||||||
_inbox_post_recipients(base_dir, queue_json['post'],
|
_inbox_post_recipients(base_dir, queue_json['post'],
|
||||||
domain, port, debug,
|
domain, port, debug,
|
||||||
onion_domain, i2p_domain)
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
if len(recipients_dict.items()) == 0 and \
|
if len(recipients_dict.items()) == 0 and \
|
||||||
len(recipients_dict_followers.items()) == 0:
|
len(recipients_dict_followers.items()) == 0:
|
||||||
if debug:
|
if debug:
|
||||||
|
|
@ -3980,6 +4079,7 @@ def run_inbox_queue(server,
|
||||||
recent_posts_cache,
|
recent_posts_cache,
|
||||||
max_recent_posts,
|
max_recent_posts,
|
||||||
session, session_onion, session_i2p,
|
session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
key_id, handle,
|
key_id, handle,
|
||||||
queue_json['post'],
|
queue_json['post'],
|
||||||
base_dir, http_prefix,
|
base_dir, http_prefix,
|
||||||
|
|
@ -3987,6 +4087,7 @@ def run_inbox_queue(server,
|
||||||
cached_webfingers,
|
cached_webfingers,
|
||||||
person_cache, domain,
|
person_cache, domain,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
port, federation_list,
|
port, federation_list,
|
||||||
debug,
|
debug,
|
||||||
queue_filename, destination,
|
queue_filename, destination,
|
||||||
|
|
|
||||||
|
|
@ -393,6 +393,7 @@ def receive_edit_to_post(recent_posts_cache: {}, message_json: {},
|
||||||
auto_cw_cache: {},
|
auto_cw_cache: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {},
|
instance_software: {},
|
||||||
block_military: {},
|
block_military: {},
|
||||||
|
|
@ -426,7 +427,8 @@ def receive_edit_to_post(recent_posts_cache: {}, message_json: {},
|
||||||
allow_local_network_access, debug,
|
allow_local_network_access, debug,
|
||||||
system_language, http_prefix,
|
system_language, http_prefix,
|
||||||
domain_full, person_cache,
|
domain_full, person_cache,
|
||||||
max_hashtags, onion_domain, i2p_domain):
|
max_hashtags, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain):
|
||||||
print('EDITPOST: contains invalid content' + str(message_json))
|
print('EDITPOST: contains invalid content' + str(message_json))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
@ -562,6 +564,7 @@ def receive_move_activity(session, base_dir: str,
|
||||||
federation_list: [],
|
federation_list: [],
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
sites_unavailable: [],
|
sites_unavailable: [],
|
||||||
blocked_cache: [],
|
blocked_cache: [],
|
||||||
block_federated: [],
|
block_federated: [],
|
||||||
|
|
@ -655,6 +658,7 @@ def receive_move_activity(session, base_dir: str,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
sites_unavailable,
|
sites_unavailable,
|
||||||
system_language,
|
system_language,
|
||||||
mitm_servers)
|
mitm_servers)
|
||||||
|
|
@ -684,6 +688,7 @@ def receive_update_activity(recent_posts_cache: {}, session, base_dir: str,
|
||||||
auto_cw_cache: {},
|
auto_cw_cache: {},
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
mitm_servers: [],
|
mitm_servers: [],
|
||||||
instance_software: {},
|
instance_software: {},
|
||||||
block_military: {},
|
block_military: {},
|
||||||
|
|
@ -736,6 +741,7 @@ def receive_update_activity(recent_posts_cache: {}, session, base_dir: str,
|
||||||
max_hashtags, buy_sites,
|
max_hashtags, buy_sites,
|
||||||
auto_cw_cache,
|
auto_cw_cache,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
mitm_servers,
|
mitm_servers,
|
||||||
instance_software,
|
instance_software,
|
||||||
block_military,
|
block_military,
|
||||||
|
|
@ -840,6 +846,7 @@ def _already_reacted(base_dir: str, nickname: str, domain: str,
|
||||||
|
|
||||||
def _like_notify(base_dir: str, domain: str,
|
def _like_notify(base_dir: str, domain: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
handle: str, actor: str, url: str) -> None:
|
handle: str, actor: str, url: str) -> None:
|
||||||
"""Creates a notification that a like has arrived
|
"""Creates a notification that a like has arrived
|
||||||
"""
|
"""
|
||||||
|
|
@ -856,7 +863,10 @@ def _like_notify(base_dir: str, domain: str,
|
||||||
if i2p_domain:
|
if i2p_domain:
|
||||||
if '/' + i2p_domain + '/users/' + nickname not in url:
|
if '/' + i2p_domain + '/users/' + nickname not in url:
|
||||||
return
|
return
|
||||||
if not i2p_domain and not onion_domain:
|
if yggdrasil_domain:
|
||||||
|
if '/' + yggdrasil_domain + '/users/' + nickname not in url:
|
||||||
|
return
|
||||||
|
if not i2p_domain and not onion_domain and not yggdrasil_domain:
|
||||||
return
|
return
|
||||||
|
|
||||||
account_dir = acct_handle_dir(base_dir, handle)
|
account_dir = acct_handle_dir(base_dir, handle)
|
||||||
|
|
@ -981,6 +991,7 @@ def receive_like(recent_posts_cache: {},
|
||||||
session, handle: str, base_dir: str,
|
session, handle: str, base_dir: str,
|
||||||
http_prefix: str, domain: str, port: int,
|
http_prefix: str, domain: str, port: int,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
cached_webfingers: {},
|
cached_webfingers: {},
|
||||||
person_cache: {}, message_json: {},
|
person_cache: {}, message_json: {},
|
||||||
debug: bool,
|
debug: bool,
|
||||||
|
|
@ -1051,7 +1062,8 @@ def receive_like(recent_posts_cache: {},
|
||||||
handle_name, handle_dom,
|
handle_name, handle_dom,
|
||||||
post_liked_id,
|
post_liked_id,
|
||||||
like_actor):
|
like_actor):
|
||||||
_like_notify(base_dir, domain, onion_domain, i2p_domain, handle,
|
_like_notify(base_dir, domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain, handle,
|
||||||
like_actor, post_liked_id)
|
like_actor, post_liked_id)
|
||||||
update_likes_collection(recent_posts_cache, base_dir, post_filename,
|
update_likes_collection(recent_posts_cache, base_dir, post_filename,
|
||||||
post_liked_id, like_actor,
|
post_liked_id, like_actor,
|
||||||
|
|
@ -1803,7 +1815,8 @@ def receive_announce(recent_posts_cache: {},
|
||||||
session, handle: str, base_dir: str,
|
session, handle: str, base_dir: str,
|
||||||
http_prefix: str,
|
http_prefix: str,
|
||||||
domain: str,
|
domain: str,
|
||||||
onion_domain: str, i2p_domain: str, port: int,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str, port: int,
|
||||||
cached_webfingers: {},
|
cached_webfingers: {},
|
||||||
person_cache: {}, message_json: {},
|
person_cache: {}, message_json: {},
|
||||||
debug: bool, translate: {},
|
debug: bool, translate: {},
|
||||||
|
|
@ -2155,6 +2168,7 @@ def receive_announce(recent_posts_cache: {},
|
||||||
__version__, http_prefix,
|
__version__, http_prefix,
|
||||||
domain, onion_domain,
|
domain, onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
signing_priv_key_pem,
|
signing_priv_key_pem,
|
||||||
mitm_servers)
|
mitm_servers)
|
||||||
if pub_key:
|
if pub_key:
|
||||||
|
|
@ -2183,7 +2197,9 @@ def receive_question_vote(server, base_dir: str, nickname: str, domain: str,
|
||||||
http_prefix: str, handle: str, debug: bool,
|
http_prefix: str, handle: str, debug: bool,
|
||||||
post_json_object: {}, recent_posts_cache: {},
|
post_json_object: {}, recent_posts_cache: {},
|
||||||
session, session_onion, session_i2p,
|
session, session_onion, session_i2p,
|
||||||
onion_domain: str, i2p_domain: str, port: int,
|
session_yggdrasil,
|
||||||
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str, port: int,
|
||||||
federation_list: [], send_threads: [], post_log: [],
|
federation_list: [], send_threads: [], post_log: [],
|
||||||
cached_webfingers: {}, person_cache: {},
|
cached_webfingers: {}, person_cache: {},
|
||||||
signing_priv_key_pem: str,
|
signing_priv_key_pem: str,
|
||||||
|
|
@ -2286,8 +2302,10 @@ def receive_question_vote(server, base_dir: str, nickname: str, domain: str,
|
||||||
shared_items_federated_domains: list[str] = []
|
shared_items_federated_domains: list[str] = []
|
||||||
shared_item_federation_tokens = {}
|
shared_item_federation_tokens = {}
|
||||||
send_to_followers_thread(server, session, session_onion, session_i2p,
|
send_to_followers_thread(server, session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
base_dir, nickname, domain,
|
base_dir, nickname, domain,
|
||||||
onion_domain, i2p_domain, port,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain, port,
|
||||||
http_prefix, federation_list,
|
http_prefix, federation_list,
|
||||||
send_threads, post_log,
|
send_threads, post_log,
|
||||||
cached_webfingers, person_cache,
|
cached_webfingers, person_cache,
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,8 @@ from reaction import undo_reaction_collection_entry
|
||||||
|
|
||||||
def _receive_undo_follow(base_dir: str, message_json: {},
|
def _receive_undo_follow(base_dir: str, message_json: {},
|
||||||
debug: bool, domain: str,
|
debug: bool, domain: str,
|
||||||
onion_domain: str, i2p_domain: str) -> bool:
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str) -> bool:
|
||||||
"""
|
"""
|
||||||
Receives an undo follow
|
Receives an undo follow
|
||||||
{
|
{
|
||||||
|
|
@ -113,6 +114,9 @@ def _receive_undo_follow(base_dir: str, message_json: {},
|
||||||
if i2p_domain:
|
if i2p_domain:
|
||||||
if domain_following.endswith(i2p_domain):
|
if domain_following.endswith(i2p_domain):
|
||||||
domain_following = domain
|
domain_following = domain
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if domain_following.endswith(yggdrasil_domain):
|
||||||
|
domain_following = domain
|
||||||
domain_following_full = get_full_domain(domain_following, port_following)
|
domain_following_full = get_full_domain(domain_following, port_following)
|
||||||
|
|
||||||
group_account = has_group_type(base_dir, actor, None)
|
group_account = has_group_type(base_dir, actor, None)
|
||||||
|
|
@ -133,7 +137,8 @@ def _receive_undo_follow(base_dir: str, message_json: {},
|
||||||
|
|
||||||
|
|
||||||
def receive_undo(base_dir: str, message_json: {}, debug: bool,
|
def receive_undo(base_dir: str, message_json: {}, debug: bool,
|
||||||
domain: str, onion_domain: str, i2p_domain: str) -> bool:
|
domain: str, onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str) -> bool:
|
||||||
"""Receives an undo request within the POST section of HTTPServer
|
"""Receives an undo request within the POST section of HTTPServer
|
||||||
"""
|
"""
|
||||||
if not message_json['type'].startswith('Undo'):
|
if not message_json['type'].startswith('Undo'):
|
||||||
|
|
@ -152,7 +157,8 @@ def receive_undo(base_dir: str, message_json: {}, debug: bool,
|
||||||
if message_json['object']['type'] == 'Follow' or \
|
if message_json['object']['type'] == 'Follow' or \
|
||||||
message_json['object']['type'] == 'Join':
|
message_json['object']['type'] == 'Join':
|
||||||
_receive_undo_follow(base_dir, message_json,
|
_receive_undo_follow(base_dir, message_json,
|
||||||
debug, domain, onion_domain, i2p_domain)
|
debug, domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain)
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
|
||||||
4
like.py
4
like.py
|
|
@ -80,6 +80,7 @@ def _create_like(recent_posts_cache: {},
|
||||||
signing_priv_key_pem: str,
|
signing_priv_key_pem: str,
|
||||||
curr_domain: str,
|
curr_domain: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
sites_unavailable: [],
|
sites_unavailable: [],
|
||||||
system_language: str,
|
system_language: str,
|
||||||
mitm_servers: []) -> {}:
|
mitm_servers: []) -> {}:
|
||||||
|
|
@ -153,6 +154,7 @@ def _create_like(recent_posts_cache: {},
|
||||||
debug, project_version, None, group_account,
|
debug, project_version, None, group_account,
|
||||||
signing_priv_key_pem, 7367374,
|
signing_priv_key_pem, 7367374,
|
||||||
curr_domain, onion_domain, i2p_domain,
|
curr_domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
extra_headers, sites_unavailable,
|
extra_headers, sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
|
|
||||||
|
|
@ -170,6 +172,7 @@ def like_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,
|
||||||
|
yggdrasil_domain: str,
|
||||||
sites_unavailable: [],
|
sites_unavailable: [],
|
||||||
system_language: str,
|
system_language: str,
|
||||||
mitm_servers: []) -> {}:
|
mitm_servers: []) -> {}:
|
||||||
|
|
@ -189,6 +192,7 @@ 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,
|
||||||
|
yggdrasil_domain,
|
||||||
sites_unavailable, system_language,
|
sites_unavailable, system_language,
|
||||||
mitm_servers)
|
mitm_servers)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,13 +20,16 @@ from utils import acct_dir
|
||||||
from utils import text_in_file
|
from utils import text_in_file
|
||||||
from utils import remove_eol
|
from utils import remove_eol
|
||||||
from utils import get_actor_from_post
|
from utils import get_actor_from_post
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from threads import thread_with_trace
|
from threads import thread_with_trace
|
||||||
from threads import begin_thread
|
from threads import begin_thread
|
||||||
from session import create_session
|
from session import create_session
|
||||||
|
|
||||||
|
|
||||||
def manual_deny_follow_request2(session, session_onion, session_i2p,
|
def manual_deny_follow_request2(session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_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,
|
||||||
deny_handle: str,
|
deny_handle: str,
|
||||||
|
|
@ -72,7 +75,9 @@ def manual_deny_follow_request2(session, session_onion, session_i2p,
|
||||||
deny_port = get_port_from_domain(deny_domain)
|
deny_port = get_port_from_domain(deny_domain)
|
||||||
deny_domain = remove_domain_port(deny_domain)
|
deny_domain = remove_domain_port(deny_domain)
|
||||||
followed_account_rejects(session, session_onion, session_i2p,
|
followed_account_rejects(session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
base_dir, http_prefix,
|
base_dir, http_prefix,
|
||||||
nickname, domain, port,
|
nickname, domain, port,
|
||||||
deny_nickname, deny_domain, deny_port,
|
deny_nickname, deny_domain, deny_port,
|
||||||
|
|
@ -89,7 +94,9 @@ def manual_deny_follow_request2(session, session_onion, session_i2p,
|
||||||
|
|
||||||
|
|
||||||
def manual_deny_follow_request_thread(session, session_onion, session_i2p,
|
def manual_deny_follow_request_thread(session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_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,
|
||||||
deny_handle: str,
|
deny_handle: str,
|
||||||
|
|
@ -110,7 +117,9 @@ def manual_deny_follow_request_thread(session, session_onion, session_i2p,
|
||||||
thr = \
|
thr = \
|
||||||
thread_with_trace(target=manual_deny_follow_request2,
|
thread_with_trace(target=manual_deny_follow_request2,
|
||||||
args=(session, session_onion, session_i2p,
|
args=(session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
base_dir, http_prefix,
|
base_dir, http_prefix,
|
||||||
nickname, domain, port,
|
nickname, domain, port,
|
||||||
deny_handle,
|
deny_handle,
|
||||||
|
|
@ -154,7 +163,9 @@ def _approve_follower_handle(account_dir: str, approve_handle: str) -> None:
|
||||||
|
|
||||||
|
|
||||||
def manual_approve_follow_request(session, session_onion, session_i2p,
|
def manual_approve_follow_request(session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_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,
|
||||||
approve_handle: str,
|
approve_handle: str,
|
||||||
|
|
@ -290,6 +301,15 @@ def manual_approve_follow_request(session, session_onion, session_i2p,
|
||||||
curr_session = session_i2p
|
curr_session = session_i2p
|
||||||
curr_http_prefix = 'http'
|
curr_http_prefix = 'http'
|
||||||
curr_proxy_type = 'i2p'
|
curr_proxy_type = 'i2p'
|
||||||
|
elif (yggdrasil_domain and
|
||||||
|
not is_yggdrasil_address(curr_domain) and
|
||||||
|
is_yggdrasil_address(approve_domain)):
|
||||||
|
curr_domain = yggdrasil_domain
|
||||||
|
curr_port = 80
|
||||||
|
approve_port = 80
|
||||||
|
curr_session = session_yggdrasil
|
||||||
|
curr_http_prefix = 'http'
|
||||||
|
curr_proxy_type = 'yggdrasil'
|
||||||
|
|
||||||
if not curr_session:
|
if not curr_session:
|
||||||
curr_session = create_session(curr_proxy_type)
|
curr_session = create_session(curr_proxy_type)
|
||||||
|
|
@ -317,6 +337,7 @@ def manual_approve_follow_request(session, session_onion, session_i2p,
|
||||||
domain,
|
domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
followers_sync_cache,
|
followers_sync_cache,
|
||||||
sites_unavailable,
|
sites_unavailable,
|
||||||
system_language,
|
system_language,
|
||||||
|
|
@ -387,7 +408,9 @@ def manual_approve_follow_request(session, session_onion, session_i2p,
|
||||||
|
|
||||||
|
|
||||||
def manual_approve_follow_request_thread(session, session_onion, session_i2p,
|
def manual_approve_follow_request_thread(session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_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,
|
||||||
approve_handle: str,
|
approve_handle: str,
|
||||||
|
|
@ -410,7 +433,9 @@ def manual_approve_follow_request_thread(session, session_onion, session_i2p,
|
||||||
thr = \
|
thr = \
|
||||||
thread_with_trace(target=manual_approve_follow_request,
|
thread_with_trace(target=manual_approve_follow_request,
|
||||||
args=(session, session_onion, session_i2p,
|
args=(session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
base_dir, http_prefix,
|
base_dir, http_prefix,
|
||||||
nickname, domain, port,
|
nickname, domain, port,
|
||||||
approve_handle,
|
approve_handle,
|
||||||
|
|
|
||||||
4
maps.py
4
maps.py
|
|
@ -19,6 +19,7 @@ from utils import save_json
|
||||||
from utils import locate_post
|
from utils import locate_post
|
||||||
from utils import remove_html
|
from utils import remove_html
|
||||||
from utils import has_object_dict
|
from utils import has_object_dict
|
||||||
|
from utils import is_yggdrasil_url
|
||||||
from timeFunctions import date_epoch
|
from timeFunctions import date_epoch
|
||||||
from timeFunctions import date_from_string_format
|
from timeFunctions import date_from_string_format
|
||||||
from timeFunctions import date_utcnow
|
from timeFunctions import date_utcnow
|
||||||
|
|
@ -849,6 +850,7 @@ def html_open_street_map(url: str,
|
||||||
bounding_box_degrees: float,
|
bounding_box_degrees: float,
|
||||||
translate: {}, session,
|
translate: {}, session,
|
||||||
session_onion, session_i2p,
|
session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
width: str = "725",
|
width: str = "725",
|
||||||
height: str = "650") -> str:
|
height: str = "650") -> str:
|
||||||
"""Returns embed html for an OSM link
|
"""Returns embed html for an OSM link
|
||||||
|
|
@ -859,6 +861,8 @@ def html_open_street_map(url: str,
|
||||||
map_session = session_onion
|
map_session = session_onion
|
||||||
elif '.i2p/' in url:
|
elif '.i2p/' in url:
|
||||||
map_session = session_i2p
|
map_session = session_i2p
|
||||||
|
elif is_yggdrasil_url(url):
|
||||||
|
map_session = session_yggdrasil
|
||||||
zoom, latitude, longitude = \
|
zoom, latitude, longitude = \
|
||||||
geocoords_from_map_link(url, osm_domain, map_session)
|
geocoords_from_map_link(url, osm_domain, map_session)
|
||||||
if not latitude:
|
if not latitude:
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ from utils import get_status_count
|
||||||
from utils import lines_in_file
|
from utils import lines_in_file
|
||||||
from utils import data_dir
|
from utils import data_dir
|
||||||
from utils import account_is_indexable
|
from utils import account_is_indexable
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
|
|
||||||
|
|
||||||
def _meta_data_instance_v1(show_accounts: bool,
|
def _meta_data_instance_v1(show_accounts: bool,
|
||||||
|
|
@ -314,6 +315,7 @@ def masto_api_v1_response(path: str, calling_domain: str,
|
||||||
base_dir: str, nickname: str, domain: str,
|
base_dir: str, nickname: str, domain: str,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
translate: {},
|
translate: {},
|
||||||
registration: bool,
|
registration: bool,
|
||||||
system_language: str,
|
system_language: str,
|
||||||
|
|
@ -449,6 +451,9 @@ def masto_api_v1_response(path: str, calling_domain: str,
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
domain_full = i2p_domain
|
domain_full = i2p_domain
|
||||||
http_prefix = 'http'
|
http_prefix = 'http'
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
domain_full = yggdrasil_domain
|
||||||
|
http_prefix = 'http'
|
||||||
|
|
||||||
if broch_mode:
|
if broch_mode:
|
||||||
show_node_info_accounts = False
|
show_node_info_accounts = False
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ from utils import no_of_accounts
|
||||||
from utils import lines_in_file
|
from utils import lines_in_file
|
||||||
from utils import data_dir
|
from utils import data_dir
|
||||||
from utils import account_is_indexable
|
from utils import account_is_indexable
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from formats import get_image_mime_type
|
from formats import get_image_mime_type
|
||||||
from formats import get_image_extensions
|
from formats import get_image_extensions
|
||||||
from formats import get_audio_extensions
|
from formats import get_audio_extensions
|
||||||
|
|
@ -264,6 +265,7 @@ def masto_api_v2_response(path: str, calling_domain: str,
|
||||||
base_dir: str, domain: str,
|
base_dir: str, domain: str,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
translate: {},
|
translate: {},
|
||||||
registration: bool,
|
registration: bool,
|
||||||
system_language: str,
|
system_language: str,
|
||||||
|
|
@ -290,6 +292,9 @@ def masto_api_v2_response(path: str, calling_domain: str,
|
||||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||||
domain_full = i2p_domain
|
domain_full = i2p_domain
|
||||||
http_prefix = 'http'
|
http_prefix = 'http'
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||||
|
domain_full = yggdrasil_domain
|
||||||
|
http_prefix = 'http'
|
||||||
|
|
||||||
if broch_mode:
|
if broch_mode:
|
||||||
show_node_info_accounts = False
|
show_node_info_accounts = False
|
||||||
|
|
|
||||||
|
|
@ -274,7 +274,8 @@ def post_message_to_outbox(session, translate: {},
|
||||||
message_json: {}, post_to_nickname: str,
|
message_json: {}, post_to_nickname: str,
|
||||||
server, base_dir: str, http_prefix: str,
|
server, base_dir: str, http_prefix: str,
|
||||||
domain: str, domain_full: str,
|
domain: str, domain_full: str,
|
||||||
onion_domain: str, i2p_domain: str, port: int,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str, port: int,
|
||||||
recent_posts_cache: {}, followers_threads: [],
|
recent_posts_cache: {}, followers_threads: [],
|
||||||
federation_list: [], send_threads: [],
|
federation_list: [], send_threads: [],
|
||||||
post_log: [], cached_webfingers: {},
|
post_log: [], cached_webfingers: {},
|
||||||
|
|
@ -741,9 +742,11 @@ def post_message_to_outbox(session, translate: {},
|
||||||
send_to_followers_thread(server, server.session,
|
send_to_followers_thread(server, server.session,
|
||||||
server.session_onion,
|
server.session_onion,
|
||||||
server.session_i2p,
|
server.session_i2p,
|
||||||
|
server.session_yggdrasil,
|
||||||
base_dir,
|
base_dir,
|
||||||
post_to_nickname,
|
post_to_nickname,
|
||||||
domain, onion_domain, i2p_domain,
|
domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
port, http_prefix,
|
port, http_prefix,
|
||||||
federation_list,
|
federation_list,
|
||||||
send_threads,
|
send_threads,
|
||||||
|
|
@ -877,8 +880,10 @@ def post_message_to_outbox(session, translate: {},
|
||||||
send_to_named_addresses_thread(server, server.session,
|
send_to_named_addresses_thread(server, server.session,
|
||||||
server.session_onion,
|
server.session_onion,
|
||||||
server.session_i2p,
|
server.session_i2p,
|
||||||
|
server.session_yggdrasil,
|
||||||
base_dir, post_to_nickname,
|
base_dir, post_to_nickname,
|
||||||
domain, onion_domain, i2p_domain, port,
|
domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain, port,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
federation_list,
|
federation_list,
|
||||||
send_threads,
|
send_threads,
|
||||||
|
|
|
||||||
18
person.py
18
person.py
|
|
@ -1071,10 +1071,11 @@ def person_upgrade_actor(base_dir: str, person_json: {},
|
||||||
|
|
||||||
|
|
||||||
def add_alternate_domains(actor_json: {}, domain: str,
|
def add_alternate_domains(actor_json: {}, domain: str,
|
||||||
onion_domain: str, i2p_domain: str) -> None:
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str) -> None:
|
||||||
"""Adds alternate onion and/or i2p domains to alsoKnownAs
|
"""Adds alternate onion and/or i2p domains to alsoKnownAs
|
||||||
"""
|
"""
|
||||||
if not onion_domain and not i2p_domain:
|
if not onion_domain and not i2p_domain and not yggdrasil_domain:
|
||||||
return
|
return
|
||||||
if not actor_json.get('id'):
|
if not actor_json.get('id'):
|
||||||
return
|
return
|
||||||
|
|
@ -1093,6 +1094,10 @@ def add_alternate_domains(actor_json: {}, domain: str,
|
||||||
i2p_actor = 'http://' + i2p_domain + '/users/' + nickname
|
i2p_actor = 'http://' + i2p_domain + '/users/' + nickname
|
||||||
if i2p_actor not in actor_json['alsoKnownAs']:
|
if i2p_actor not in actor_json['alsoKnownAs']:
|
||||||
actor_json['alsoKnownAs'].append(i2p_actor)
|
actor_json['alsoKnownAs'].append(i2p_actor)
|
||||||
|
if yggdrasil_domain:
|
||||||
|
yggdrasil_actor = 'http://' + yggdrasil_domain + '/users/' + nickname
|
||||||
|
if yggdrasil_actor not in actor_json['alsoKnownAs']:
|
||||||
|
actor_json['alsoKnownAs'].append(yggdrasil_actor)
|
||||||
|
|
||||||
|
|
||||||
def person_lookup(domain: str, path: str, base_dir: str) -> {}:
|
def person_lookup(domain: str, path: str, base_dir: str) -> {}:
|
||||||
|
|
@ -2465,7 +2470,8 @@ def get_account_pub_key(path: str, person_cache: {},
|
||||||
http_prefix: str,
|
http_prefix: str,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str) -> str:
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str) -> str:
|
||||||
"""Returns the public key for an account
|
"""Returns the public key for an account
|
||||||
"""
|
"""
|
||||||
if '/users/' not in path:
|
if '/users/' not in path:
|
||||||
|
|
@ -2485,7 +2491,8 @@ def get_account_pub_key(path: str, person_cache: {},
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
'/users/' + nickname
|
'/users/' + nickname
|
||||||
actor_json = get_person_from_cache(base_dir, actor, person_cache)
|
actor_json = get_person_from_cache(base_dir, actor, person_cache)
|
||||||
if not actor_json:
|
if not actor_json:
|
||||||
|
|
@ -2505,7 +2512,8 @@ def get_account_pub_key(path: str, person_cache: {},
|
||||||
http_prefix,
|
http_prefix,
|
||||||
domain_full,
|
domain_full,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain) + \
|
i2p_domain,
|
||||||
|
yggdrasil_domain) + \
|
||||||
path
|
path
|
||||||
pub_key, _ = \
|
pub_key, _ = \
|
||||||
get_actor_public_key_from_id(actor_json, original_person_url)
|
get_actor_public_key_from_id(actor_json, original_person_url)
|
||||||
|
|
|
||||||
67
posts.py
67
posts.py
|
|
@ -45,6 +45,7 @@ from timeFunctions import date_utcnow
|
||||||
from timeFunctions import date_from_string_format
|
from timeFunctions import date_from_string_format
|
||||||
from timeFunctions import date_epoch
|
from timeFunctions import date_epoch
|
||||||
from timeFunctions import valid_post_date
|
from timeFunctions import valid_post_date
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from utils import resembles_url
|
from utils import resembles_url
|
||||||
from utils import get_person_icon
|
from utils import get_person_icon
|
||||||
from utils import remove_post_from_index
|
from utils import remove_post_from_index
|
||||||
|
|
@ -3492,6 +3493,7 @@ def send_signed_json(post_json_object: {}, session, base_dir: str,
|
||||||
signing_priv_key_pem: str,
|
signing_priv_key_pem: 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,
|
||||||
|
yggdrasil_domain: str,
|
||||||
extra_headers: {}, sites_unavailable: [],
|
extra_headers: {}, sites_unavailable: [],
|
||||||
system_language: str,
|
system_language: str,
|
||||||
mitm_servers: []) -> int:
|
mitm_servers: []) -> int:
|
||||||
|
|
@ -3535,6 +3537,8 @@ def send_signed_json(post_json_object: {}, session, base_dir: str,
|
||||||
ua_domain = onion_domain
|
ua_domain = onion_domain
|
||||||
elif to_domain.endswith('.i2p'):
|
elif to_domain.endswith('.i2p'):
|
||||||
ua_domain = i2p_domain
|
ua_domain = i2p_domain
|
||||||
|
elif is_yggdrasil_address(to_domain):
|
||||||
|
ua_domain = yggdrasil_domain
|
||||||
|
|
||||||
# lookup the inbox for the To handle
|
# lookup the inbox for the To handle
|
||||||
wf_request = webfinger_handle(session, handle, http_prefix,
|
wf_request = webfinger_handle(session, handle, http_prefix,
|
||||||
|
|
@ -3608,6 +3612,9 @@ def send_signed_json(post_json_object: {}, session, base_dir: str,
|
||||||
if i2p_domain:
|
if i2p_domain:
|
||||||
if account_domain == i2p_domain:
|
if account_domain == i2p_domain:
|
||||||
account_domain = curr_domain
|
account_domain = curr_domain
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if account_domain == yggdrasil_domain:
|
||||||
|
account_domain = curr_domain
|
||||||
private_key_pem = \
|
private_key_pem = \
|
||||||
get_person_key(nickname, account_domain, base_dir, 'private', debug)
|
get_person_key(nickname, account_domain, base_dir, 'private', debug)
|
||||||
if len(private_key_pem) == 0:
|
if len(private_key_pem) == 0:
|
||||||
|
|
@ -3804,9 +3811,11 @@ def _is_profile_update(post_json_object: {}) -> bool:
|
||||||
|
|
||||||
|
|
||||||
def _send_to_named_addresses(server, session, session_onion, session_i2p,
|
def _send_to_named_addresses(server, session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
base_dir: str,
|
base_dir: str,
|
||||||
nickname: str, domain: str,
|
nickname: str, domain: str,
|
||||||
onion_domain: str, i2p_domain: str, port: int,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str, port: int,
|
||||||
http_prefix: str, federation_list: [],
|
http_prefix: str, federation_list: [],
|
||||||
send_threads: [], post_log: [],
|
send_threads: [], post_log: [],
|
||||||
cached_webfingers: {}, person_cache: {},
|
cached_webfingers: {}, person_cache: {},
|
||||||
|
|
@ -3957,6 +3966,17 @@ def _send_to_named_addresses(server, session, session_onion, session_i2p,
|
||||||
to_port = 80
|
to_port = 80
|
||||||
curr_proxy_type = 'i2p'
|
curr_proxy_type = 'i2p'
|
||||||
session_type = 'i2p'
|
session_type = 'i2p'
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if not is_yggdrasil_address(from_domain) and \
|
||||||
|
is_yggdrasil_address(to_domain):
|
||||||
|
from_domain = yggdrasil_domain
|
||||||
|
from_domain_full = yggdrasil_domain
|
||||||
|
from_http_prefix = 'http'
|
||||||
|
curr_session = session_yggdrasil
|
||||||
|
port = 80
|
||||||
|
to_port = 80
|
||||||
|
curr_proxy_type = 'yggdrasil'
|
||||||
|
session_type = 'yggdrasil'
|
||||||
|
|
||||||
extra_headers = {}
|
extra_headers = {}
|
||||||
# followers synchronization header
|
# followers synchronization header
|
||||||
|
|
@ -4002,6 +4022,8 @@ def _send_to_named_addresses(server, session, session_onion, session_i2p,
|
||||||
server.session_onion = curr_session
|
server.session_onion = curr_session
|
||||||
elif session_type == 'i2p':
|
elif session_type == 'i2p':
|
||||||
server.session_i2p = curr_session
|
server.session_i2p = curr_session
|
||||||
|
elif session_type == 'yggdrasil':
|
||||||
|
server.session_yggdrasil = curr_session
|
||||||
else:
|
else:
|
||||||
server.session = curr_session
|
server.session = curr_session
|
||||||
|
|
||||||
|
|
@ -4015,14 +4037,17 @@ def _send_to_named_addresses(server, session, session_onion, session_i2p,
|
||||||
shared_items_token, group_account,
|
shared_items_token, group_account,
|
||||||
signing_priv_key_pem, 34436782,
|
signing_priv_key_pem, 34436782,
|
||||||
domain, onion_domain, i2p_domain,
|
domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
extra_headers, sites_unavailable,
|
extra_headers, sites_unavailable,
|
||||||
system_language, mitm_servers)
|
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,
|
||||||
|
session_yggdrasil,
|
||||||
base_dir: str, nickname: str, domain: str,
|
base_dir: str, nickname: str, domain: str,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str, port: int,
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str, port: int,
|
||||||
http_prefix: str, federation_list: [],
|
http_prefix: str, federation_list: [],
|
||||||
send_threads: [], post_log: [],
|
send_threads: [], post_log: [],
|
||||||
cached_webfingers: {}, person_cache: {},
|
cached_webfingers: {}, person_cache: {},
|
||||||
|
|
@ -4042,8 +4067,10 @@ def send_to_named_addresses_thread(server, session, session_onion, session_i2p,
|
||||||
send_thread = \
|
send_thread = \
|
||||||
thread_with_trace(target=_send_to_named_addresses,
|
thread_with_trace(target=_send_to_named_addresses,
|
||||||
args=(server, session, session_onion, session_i2p,
|
args=(server, session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
base_dir, nickname, domain,
|
base_dir, nickname, domain,
|
||||||
onion_domain, i2p_domain, port,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain, port,
|
||||||
http_prefix, federation_list,
|
http_prefix, federation_list,
|
||||||
send_threads, post_log,
|
send_threads, post_log,
|
||||||
cached_webfingers, person_cache,
|
cached_webfingers, person_cache,
|
||||||
|
|
@ -4099,8 +4126,10 @@ def _sending_profile_update(post_json_object: {}) -> bool:
|
||||||
|
|
||||||
|
|
||||||
def send_to_followers(server, session, session_onion, session_i2p,
|
def send_to_followers(server, session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
base_dir: str, nickname: str, domain: str,
|
base_dir: str, nickname: str, domain: str,
|
||||||
onion_domain: str, i2p_domain: str, port: int,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str, port: int,
|
||||||
http_prefix: str, federation_list: [],
|
http_prefix: str, federation_list: [],
|
||||||
send_threads: [], post_log: [],
|
send_threads: [], post_log: [],
|
||||||
cached_webfingers: {}, person_cache: {},
|
cached_webfingers: {}, person_cache: {},
|
||||||
|
|
@ -4195,6 +4224,10 @@ def send_to_followers(server, session, session_onion, session_i2p,
|
||||||
if follower_domain.endswith('.i2p'):
|
if follower_domain.endswith('.i2p'):
|
||||||
curr_session = session_i2p
|
curr_session = session_i2p
|
||||||
curr_http_prefix = 'http'
|
curr_http_prefix = 'http'
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if is_yggdrasil_address(follower_domain):
|
||||||
|
curr_session = session_yggdrasil
|
||||||
|
curr_http_prefix = 'http'
|
||||||
|
|
||||||
# get the domain showin by the user agent
|
# get the domain showin by the user agent
|
||||||
ua_domain = domain
|
ua_domain = domain
|
||||||
|
|
@ -4202,6 +4235,8 @@ def send_to_followers(server, session, session_onion, session_i2p,
|
||||||
ua_domain = onion_domain
|
ua_domain = onion_domain
|
||||||
elif follower_domain.endswith('.i2p'):
|
elif follower_domain.endswith('.i2p'):
|
||||||
ua_domain = i2p_domain
|
ua_domain = i2p_domain
|
||||||
|
elif is_yggdrasil_address(follower_domain):
|
||||||
|
ua_domain = yggdrasil_domain
|
||||||
|
|
||||||
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,
|
||||||
|
|
@ -4242,6 +4277,14 @@ def send_to_followers(server, session, session_onion, session_i2p,
|
||||||
to_port = 80
|
to_port = 80
|
||||||
curr_proxy_type = 'i2p'
|
curr_proxy_type = 'i2p'
|
||||||
session_type = 'i2p'
|
session_type = 'i2p'
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if is_yggdrasil_address(to_domain):
|
||||||
|
from_domain = yggdrasil_domain
|
||||||
|
from_http_prefix = 'http'
|
||||||
|
port = 80
|
||||||
|
to_port = 80
|
||||||
|
curr_proxy_type = 'yggdrasil'
|
||||||
|
session_type = 'yggdrasil'
|
||||||
|
|
||||||
if not curr_session:
|
if not curr_session:
|
||||||
curr_session = create_session(curr_proxy_type)
|
curr_session = create_session(curr_proxy_type)
|
||||||
|
|
@ -4250,6 +4293,8 @@ def send_to_followers(server, session, session_onion, session_i2p,
|
||||||
server.session_onion = curr_session
|
server.session_onion = curr_session
|
||||||
elif session_type == 'i2p':
|
elif session_type == 'i2p':
|
||||||
server.session_i2p = curr_session
|
server.session_i2p = curr_session
|
||||||
|
elif session_type == 'yggdrasil':
|
||||||
|
server.session_yggdrasil = curr_session
|
||||||
else:
|
else:
|
||||||
server.session = curr_session
|
server.session = curr_session
|
||||||
|
|
||||||
|
|
@ -4286,6 +4331,7 @@ def send_to_followers(server, session, session_onion, session_i2p,
|
||||||
shared_items_token, group_account,
|
shared_items_token, group_account,
|
||||||
signing_priv_key_pem, 639342,
|
signing_priv_key_pem, 639342,
|
||||||
domain, onion_domain, i2p_domain,
|
domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
extra_headers, sites_unavailable,
|
extra_headers, sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
else:
|
else:
|
||||||
|
|
@ -4321,6 +4367,7 @@ def send_to_followers(server, session, session_onion, session_i2p,
|
||||||
shared_items_token, group_account,
|
shared_items_token, group_account,
|
||||||
signing_priv_key_pem, 634219,
|
signing_priv_key_pem, 634219,
|
||||||
domain, onion_domain, i2p_domain,
|
domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
extra_headers, sites_unavailable,
|
extra_headers, sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
|
|
||||||
|
|
@ -4336,8 +4383,10 @@ def send_to_followers(server, session, session_onion, session_i2p,
|
||||||
|
|
||||||
|
|
||||||
def send_to_followers_thread(server, session, session_onion, session_i2p,
|
def send_to_followers_thread(server, session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
base_dir: str, nickname: str, domain: str,
|
base_dir: str, nickname: str, domain: str,
|
||||||
onion_domain: str, i2p_domain: str, port: int,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str, port: int,
|
||||||
http_prefix: str, federation_list: [],
|
http_prefix: str, federation_list: [],
|
||||||
send_threads: [], post_log: [],
|
send_threads: [], post_log: [],
|
||||||
cached_webfingers: {}, person_cache: {},
|
cached_webfingers: {}, person_cache: {},
|
||||||
|
|
@ -4355,8 +4404,10 @@ def send_to_followers_thread(server, session, session_onion, session_i2p,
|
||||||
send_thread = \
|
send_thread = \
|
||||||
thread_with_trace(target=send_to_followers,
|
thread_with_trace(target=send_to_followers,
|
||||||
args=(server, session, session_onion, session_i2p,
|
args=(server, session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
base_dir, nickname, domain,
|
base_dir, nickname, domain,
|
||||||
onion_domain, i2p_domain, port,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain, port,
|
||||||
http_prefix, federation_list,
|
http_prefix, federation_list,
|
||||||
send_threads, post_log,
|
send_threads, post_log,
|
||||||
cached_webfingers, person_cache,
|
cached_webfingers, person_cache,
|
||||||
|
|
@ -7157,7 +7208,8 @@ def valid_post_content(base_dir: str, nickname: str, domain: str,
|
||||||
http_prefix: str, domain_full: str,
|
http_prefix: str, domain_full: str,
|
||||||
person_cache: {},
|
person_cache: {},
|
||||||
max_hashtags: int,
|
max_hashtags: int,
|
||||||
onion_domain: str, i2p_domain: str) -> bool:
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str) -> bool:
|
||||||
"""Is the content of a received post valid?
|
"""Is the content of a received post valid?
|
||||||
Check for bad html
|
Check for bad html
|
||||||
Check for hellthreads
|
Check for hellthreads
|
||||||
|
|
@ -7272,6 +7324,7 @@ def valid_post_content(base_dir: str, nickname: str, domain: str,
|
||||||
|
|
||||||
if contains_invalid_local_links(domain_full,
|
if contains_invalid_local_links(domain_full,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
content_str):
|
content_str):
|
||||||
if message_json['object'].get('id'):
|
if message_json['object'].get('id'):
|
||||||
print('REJECT: post contains invalid local links ' +
|
print('REJECT: post contains invalid local links ' +
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,7 @@ def _reactionpost(recent_posts_cache: {},
|
||||||
signing_priv_key_pem: str,
|
signing_priv_key_pem: str,
|
||||||
curr_domain: str,
|
curr_domain: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
sites_unavailable: [],
|
sites_unavailable: [],
|
||||||
system_language: str,
|
system_language: str,
|
||||||
mitm_servers: []) -> {}:
|
mitm_servers: []) -> {}:
|
||||||
|
|
@ -155,6 +156,7 @@ def _reactionpost(recent_posts_cache: {},
|
||||||
debug, project_version, None, group_account,
|
debug, project_version, None, group_account,
|
||||||
signing_priv_key_pem, 7165392,
|
signing_priv_key_pem, 7165392,
|
||||||
curr_domain, onion_domain, i2p_domain,
|
curr_domain, onion_domain, i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
extra_headers, sites_unavailable,
|
extra_headers, sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
|
|
||||||
|
|
@ -173,6 +175,7 @@ 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,
|
||||||
|
yggdrasil_domain: str,
|
||||||
sites_unavailable: [], system_language: str,
|
sites_unavailable: [], system_language: str,
|
||||||
mitm_servers: []) -> {}:
|
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
|
||||||
|
|
@ -192,6 +195,7 @@ 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,
|
||||||
|
yggdrasil_domain,
|
||||||
sites_unavailable, system_language,
|
sites_unavailable, system_language,
|
||||||
mitm_servers)
|
mitm_servers)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -127,6 +127,7 @@ def _update_post_schedule(base_dir: str, handle: str, httpd,
|
||||||
httpd.domain_full,
|
httpd.domain_full,
|
||||||
httpd.onion_domain,
|
httpd.onion_domain,
|
||||||
httpd.i2p_domain,
|
httpd.i2p_domain,
|
||||||
|
httpd.yggdrasil_domain,
|
||||||
httpd.port,
|
httpd.port,
|
||||||
httpd.recent_posts_cache,
|
httpd.recent_posts_cache,
|
||||||
httpd.followers_threads,
|
httpd.followers_threads,
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ from session import establish_session
|
||||||
from flags import url_permitted
|
from flags import url_permitted
|
||||||
from httpsig import signed_get_key_id
|
from httpsig import signed_get_key_id
|
||||||
from cache import get_person_pub_key
|
from cache import get_person_pub_key
|
||||||
|
from utils import is_yggdrasil_url
|
||||||
|
|
||||||
|
|
||||||
def secure_mode(curr_session, proxy_type: str,
|
def secure_mode(curr_session, proxy_type: str,
|
||||||
|
|
@ -43,6 +44,11 @@ def secure_mode(curr_session, proxy_type: str,
|
||||||
if '.i2p/' in key_id:
|
if '.i2p/' in key_id:
|
||||||
curr_session = server.session_i2p
|
curr_session = server.session_i2p
|
||||||
proxy_type = 'i2p'
|
proxy_type = 'i2p'
|
||||||
|
if server.yggdrasil_domain:
|
||||||
|
# TODO improve yggdrasil detection
|
||||||
|
if is_yggdrasil_url(key_id):
|
||||||
|
curr_session = server.session_yggdrasil
|
||||||
|
proxy_type = 'yggdrasil'
|
||||||
|
|
||||||
curr_session = \
|
curr_session = \
|
||||||
establish_session("secure mode",
|
establish_session("secure mode",
|
||||||
|
|
@ -61,6 +67,7 @@ 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.yggdrasil_domain,
|
||||||
server.signing_priv_key_pem,
|
server.signing_priv_key_pem,
|
||||||
server.mitm_servers)
|
server.mitm_servers)
|
||||||
if not pub_key:
|
if not pub_key:
|
||||||
|
|
|
||||||
14
session.py
14
session.py
|
|
@ -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 get_domain_from_actor
|
from utils import get_domain_from_actor
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
|
from utils import is_yggdrasil_url
|
||||||
from formats import image_mime_types_dict
|
from formats import image_mime_types_dict
|
||||||
from mitm import detect_mitm
|
from mitm import detect_mitm
|
||||||
from httpsig import create_signed_header
|
from httpsig import create_signed_header
|
||||||
|
|
@ -1033,6 +1035,13 @@ def get_session_for_domains(server, calling_domain: str, referer_domain: str):
|
||||||
if not server.domain.endswith('.i2p'):
|
if not server.domain.endswith('.i2p'):
|
||||||
if server.i2p_domain and server.session_i2p:
|
if server.i2p_domain and server.session_i2p:
|
||||||
return server.session_i2p, 'i2p'
|
return server.session_i2p, 'i2p'
|
||||||
|
if is_yggdrasil_url(calling_domain) or \
|
||||||
|
is_yggdrasil_address(calling_domain) or \
|
||||||
|
is_yggdrasil_url(referer_domain) or \
|
||||||
|
is_yggdrasil_address(referer_domain):
|
||||||
|
if not is_yggdrasil_address(server.domain):
|
||||||
|
if server.yggdrasil_domain and server.session_yggdrasil:
|
||||||
|
return server.session_yggdrasil, 'yggdrasil'
|
||||||
return server.session, server.proxy_type
|
return server.session, server.proxy_type
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1055,6 +1064,11 @@ def set_session_for_sender(server, proxy_type: str, new_session) -> None:
|
||||||
if server.i2p_domain and server.session_i2p:
|
if server.i2p_domain and server.session_i2p:
|
||||||
server.session_i2p = new_session
|
server.session_i2p = new_session
|
||||||
return
|
return
|
||||||
|
if proxy_type == 'yggdrasil':
|
||||||
|
if not is_yggdrasil_address(server.domain):
|
||||||
|
if server.yggdrasil_domain and server.session_yggdrasil:
|
||||||
|
server.session_yggdrasil = new_session
|
||||||
|
return
|
||||||
server.session = new_session
|
server.session = new_session
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
49
tests.py
49
tests.py
|
|
@ -67,6 +67,7 @@ from flags import is_right_to_left_text
|
||||||
from status import actor_status_expired
|
from status import actor_status_expired
|
||||||
from status import get_actor_status
|
from status import get_actor_status
|
||||||
from unicodetext import uninvert_text
|
from unicodetext import uninvert_text
|
||||||
|
from utils import is_yggdrasil_url
|
||||||
from utils import replace_strings
|
from utils import replace_strings
|
||||||
from utils import valid_content_warning
|
from utils import valid_content_warning
|
||||||
from utils import data_dir
|
from utils import data_dir
|
||||||
|
|
@ -890,6 +891,7 @@ def create_server_alice(path: str, domain: str, port: int,
|
||||||
max_emoji = 10
|
max_emoji = 10
|
||||||
onion_domain = None
|
onion_domain = None
|
||||||
i2p_domain = None
|
i2p_domain = None
|
||||||
|
yggdrasil_domain = None
|
||||||
allow_local_network_access = True
|
allow_local_network_access = True
|
||||||
max_newswire_posts = 20
|
max_newswire_posts = 20
|
||||||
dormant_months = 3
|
dormant_months = 3
|
||||||
|
|
@ -947,7 +949,8 @@ def create_server_alice(path: str, domain: str, port: int,
|
||||||
0, False, 1, False, False, False,
|
0, False, 1, False, False, False,
|
||||||
5, True, True, 'en', __version__,
|
5, True, True, 'en', __version__,
|
||||||
"instance_id", False, path, domain,
|
"instance_id", False, path, domain,
|
||||||
onion_domain, i2p_domain, None, None, port, port,
|
onion_domain, i2p_domain, yggdrasil_domain,
|
||||||
|
None, None, port, port,
|
||||||
http_prefix, federation_list, max_mentions, max_emoji, False,
|
http_prefix, federation_list, max_mentions, max_emoji, False,
|
||||||
proxy_type, max_replies,
|
proxy_type, max_replies,
|
||||||
domain_max_posts_per_day, account_max_posts_per_day,
|
domain_max_posts_per_day, account_max_posts_per_day,
|
||||||
|
|
@ -1091,6 +1094,7 @@ def create_server_bob(path: str, domain: str, port: int,
|
||||||
max_emoji = 10
|
max_emoji = 10
|
||||||
onion_domain = None
|
onion_domain = None
|
||||||
i2p_domain = None
|
i2p_domain = None
|
||||||
|
yggdrasil_domain = None
|
||||||
allow_local_network_access = True
|
allow_local_network_access = True
|
||||||
max_newswire_posts = 20
|
max_newswire_posts = 20
|
||||||
dormant_months = 3
|
dormant_months = 3
|
||||||
|
|
@ -1148,7 +1152,8 @@ def create_server_bob(path: str, domain: str, port: int,
|
||||||
False, 1, False, False, False,
|
False, 1, False, False, False,
|
||||||
5, True, True, 'en', __version__,
|
5, True, True, 'en', __version__,
|
||||||
"instance_id", False, path, domain,
|
"instance_id", False, path, domain,
|
||||||
onion_domain, i2p_domain, None, None, port, port,
|
onion_domain, i2p_domain, yggdrasil_domain,
|
||||||
|
None, None, port, port,
|
||||||
http_prefix, federation_list, max_mentions, max_emoji, False,
|
http_prefix, federation_list, max_mentions, max_emoji, False,
|
||||||
proxy_type, max_replies,
|
proxy_type, max_replies,
|
||||||
domain_max_posts_per_day, account_max_posts_per_day,
|
domain_max_posts_per_day, account_max_posts_per_day,
|
||||||
|
|
@ -1187,6 +1192,7 @@ def create_server_eve(path: str, domain: str, port: int, federation_list: [],
|
||||||
max_emoji = 10
|
max_emoji = 10
|
||||||
onion_domain = None
|
onion_domain = None
|
||||||
i2p_domain = None
|
i2p_domain = None
|
||||||
|
yggdrasil_domain = None
|
||||||
allow_local_network_access = True
|
allow_local_network_access = True
|
||||||
max_newswire_posts = 20
|
max_newswire_posts = 20
|
||||||
dormant_months = 3
|
dormant_months = 3
|
||||||
|
|
@ -1259,6 +1265,7 @@ def create_server_eve(path: str, domain: str, port: int, federation_list: [],
|
||||||
path, domain,
|
path, domain,
|
||||||
onion_domain,
|
onion_domain,
|
||||||
i2p_domain,
|
i2p_domain,
|
||||||
|
yggdrasil_domain,
|
||||||
None, None,
|
None, None,
|
||||||
port, port,
|
port, port,
|
||||||
http_prefix,
|
http_prefix,
|
||||||
|
|
@ -1312,6 +1319,7 @@ def create_server_group(path: str, domain: str, port: int,
|
||||||
max_emoji = 10
|
max_emoji = 10
|
||||||
onion_domain = None
|
onion_domain = None
|
||||||
i2p_domain = None
|
i2p_domain = None
|
||||||
|
yggdrasil_domain = None
|
||||||
allow_local_network_access = True
|
allow_local_network_access = True
|
||||||
max_newswire_posts = 20
|
max_newswire_posts = 20
|
||||||
dormant_months = 3
|
dormant_months = 3
|
||||||
|
|
@ -1370,7 +1378,8 @@ def create_server_group(path: str, domain: str, port: int,
|
||||||
0, False, 1, False, False, False,
|
0, False, 1, False, False, False,
|
||||||
5, True, True, 'en', __version__,
|
5, True, True, 'en', __version__,
|
||||||
"instance_id", False, path, domain,
|
"instance_id", False, path, domain,
|
||||||
onion_domain, i2p_domain, None, None, port, port,
|
onion_domain, i2p_domain, yggdrasil_domain,
|
||||||
|
None, None, port, port,
|
||||||
http_prefix, federation_list, max_mentions, max_emoji, False,
|
http_prefix, federation_list, max_mentions, max_emoji, False,
|
||||||
proxy_type, max_replies,
|
proxy_type, max_replies,
|
||||||
domain_max_posts_per_day, account_max_posts_per_day,
|
domain_max_posts_per_day, account_max_posts_per_day,
|
||||||
|
|
@ -1629,7 +1638,7 @@ def test_post_message_between_servers(base_dir: str) -> None:
|
||||||
status_number, False, bob_send_threads, bob_post_log,
|
status_number, False, bob_send_threads, bob_post_log,
|
||||||
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, None, sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
|
|
||||||
for _ in range(20):
|
for _ in range(20):
|
||||||
|
|
@ -1655,7 +1664,7 @@ def test_post_message_between_servers(base_dir: str) -> None:
|
||||||
False, bob_send_threads, bob_post_log,
|
False, bob_send_threads, bob_post_log,
|
||||||
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, None, sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
|
|
||||||
for _ in range(20):
|
for _ in range(20):
|
||||||
|
|
@ -1696,7 +1705,7 @@ def test_post_message_between_servers(base_dir: str) -> None:
|
||||||
False, bob_send_threads, bob_post_log,
|
False, bob_send_threads, bob_post_log,
|
||||||
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, None, sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
announce_message_arrived = False
|
announce_message_arrived = False
|
||||||
outbox_message_arrived = False
|
outbox_message_arrived = False
|
||||||
|
|
@ -1847,7 +1856,8 @@ def test_follow_between_servers(base_dir: str) -> None:
|
||||||
alice_send_threads, alice_post_log,
|
alice_send_threads, alice_post_log,
|
||||||
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, None,
|
||||||
|
sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
print('send_result: ' + str(send_result))
|
print('send_result: ' + str(send_result))
|
||||||
|
|
||||||
|
|
@ -2088,7 +2098,8 @@ def test_shared_items_federation(base_dir: str) -> None:
|
||||||
alice_send_threads, alice_post_log,
|
alice_send_threads, alice_post_log,
|
||||||
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, None,
|
||||||
|
sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
print('send_result: ' + str(send_result))
|
print('send_result: ' + str(send_result))
|
||||||
|
|
||||||
|
|
@ -2593,7 +2604,8 @@ def test_group_follow(base_dir: str) -> None:
|
||||||
alice_send_threads, alice_post_log,
|
alice_send_threads, alice_post_log,
|
||||||
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, None,
|
||||||
|
sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
print('send_result: ' + str(send_result))
|
print('send_result: ' + str(send_result))
|
||||||
|
|
||||||
|
|
@ -2674,7 +2686,8 @@ def test_group_follow(base_dir: str) -> None:
|
||||||
bob_send_threads, bob_post_log,
|
bob_send_threads, bob_post_log,
|
||||||
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, None,
|
||||||
|
sites_unavailable,
|
||||||
system_language, mitm_servers)
|
system_language, mitm_servers)
|
||||||
print('send_result: ' + str(send_result))
|
print('send_result: ' + str(send_result))
|
||||||
|
|
||||||
|
|
@ -4577,6 +4590,7 @@ def _test_danger_svg(base_dir: str) -> None:
|
||||||
domain_full = domain
|
domain_full = domain
|
||||||
onion_domain = None
|
onion_domain = None
|
||||||
i2p_domain = None
|
i2p_domain = None
|
||||||
|
yggdrasil_domain = None
|
||||||
federation_list: list[str] = []
|
federation_list: list[str] = []
|
||||||
debug = True
|
debug = True
|
||||||
svg_image_filename = base_dir + '/.unit_test_safe.svg'
|
svg_image_filename = base_dir + '/.unit_test_safe.svg'
|
||||||
|
|
@ -4600,7 +4614,7 @@ def _test_danger_svg(base_dir: str) -> None:
|
||||||
|
|
||||||
assert cache_svg_images(session, base_dir, http_prefix,
|
assert cache_svg_images(session, base_dir, http_prefix,
|
||||||
domain, domain_full,
|
domain, domain_full,
|
||||||
onion_domain, i2p_domain,
|
onion_domain, i2p_domain, yggdrasil_domain,
|
||||||
post_json_object,
|
post_json_object,
|
||||||
federation_list, debug,
|
federation_list, debug,
|
||||||
svg_image_filename)
|
svg_image_filename)
|
||||||
|
|
@ -9631,6 +9645,18 @@ def _test_replace_gemini_links() -> None:
|
||||||
assert result == expected
|
assert result == expected
|
||||||
|
|
||||||
|
|
||||||
|
def _test_yggdrasil_addresses() -> None:
|
||||||
|
print('yggdrasil_addresses')
|
||||||
|
text = 'https://some.domain'
|
||||||
|
assert not is_yggdrasil_url(text)
|
||||||
|
text = 'http://[200:abcd:abcd:abcd:abcd:abcd:abcd:abcd]/something'
|
||||||
|
assert is_yggdrasil_url(text)
|
||||||
|
text = 'http://[200:abcd:abcd:abcd:abcd:abcd:abcd:abcd]:5026/something'
|
||||||
|
assert is_yggdrasil_url(text)
|
||||||
|
text = 'http://[203:abcd:abcd:abcd:abcd:abcd:abcd]/something'
|
||||||
|
assert not is_yggdrasil_url(text)
|
||||||
|
|
||||||
|
|
||||||
def run_all_tests():
|
def run_all_tests():
|
||||||
base_dir = os.getcwd()
|
base_dir = os.getcwd()
|
||||||
data_dir_testing(base_dir)
|
data_dir_testing(base_dir)
|
||||||
|
|
@ -9649,6 +9675,7 @@ def run_all_tests():
|
||||||
_test_checkbox_names()
|
_test_checkbox_names()
|
||||||
_test_thread_functions()
|
_test_thread_functions()
|
||||||
_test_functions()
|
_test_functions()
|
||||||
|
_test_yggdrasil_addresses()
|
||||||
_test_replace_gemini_links()
|
_test_replace_gemini_links()
|
||||||
_test_markdown_blog(base_dir)
|
_test_markdown_blog(base_dir)
|
||||||
_test_gemini_blog(base_dir)
|
_test_gemini_blog(base_dir)
|
||||||
|
|
|
||||||
66
utils.py
66
utils.py
|
|
@ -3349,6 +3349,56 @@ def _is_i2p_request(calling_domain: str, referer_domain: str,
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def is_yggdrasil_address(domain: str) -> bool:
|
||||||
|
"""is the given domain a yggdrassil address?
|
||||||
|
"""
|
||||||
|
if not domain.startswith('[2') and \
|
||||||
|
not domain.startswith('[3'):
|
||||||
|
return False
|
||||||
|
if not domain.endswith(']'):
|
||||||
|
if ']:' in domain:
|
||||||
|
if not domain.split(']:')[1].isdigit():
|
||||||
|
return False
|
||||||
|
domain = domain.split(']:')[0] + ']'
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
if domain.count(':') != 7:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def is_yggdrasil_url(url: str) -> bool:
|
||||||
|
"""does the given url contain a yggdrassil domain?
|
||||||
|
"""
|
||||||
|
if '[' not in url:
|
||||||
|
return False
|
||||||
|
url2 = '[' + url.split('[', 1)[1]
|
||||||
|
if ']' not in url2:
|
||||||
|
return False
|
||||||
|
domain = url2.split(']')[0] + ']'
|
||||||
|
if ':' not in domain:
|
||||||
|
return False
|
||||||
|
return is_yggdrasil_address(domain)
|
||||||
|
|
||||||
|
|
||||||
|
def _is_yggdrasil_request(calling_domain: str, referer_domain: str,
|
||||||
|
domain: str, yggdrasil_domain: str) -> bool:
|
||||||
|
"""Do the given domains indicate that this is a request
|
||||||
|
from a yggdrasil instance
|
||||||
|
"""
|
||||||
|
if not yggdrasil_domain:
|
||||||
|
return False
|
||||||
|
if domain == yggdrasil_domain:
|
||||||
|
return True
|
||||||
|
if is_yggdrasil_address(calling_domain):
|
||||||
|
return True
|
||||||
|
if not referer_domain:
|
||||||
|
return False
|
||||||
|
if is_yggdrasil_address(referer_domain):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def disallow_reply(content: str) -> bool:
|
def disallow_reply(content: str) -> bool:
|
||||||
"""Are replies not allowed for the given post?
|
"""Are replies not allowed for the given post?
|
||||||
"""
|
"""
|
||||||
|
|
@ -3944,7 +3994,8 @@ def convert_domains(calling_domain: str, referer_domain: str,
|
||||||
msg_str: str, http_prefix: str,
|
msg_str: str, http_prefix: str,
|
||||||
domain: str,
|
domain: str,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str) -> str:
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str) -> str:
|
||||||
"""Convert domains to onion or i2p, depending upon who is asking
|
"""Convert domains to onion or i2p, depending upon who is asking
|
||||||
"""
|
"""
|
||||||
curr_http_prefix = http_prefix + '://'
|
curr_http_prefix = http_prefix + '://'
|
||||||
|
|
@ -3962,6 +4013,13 @@ def convert_domains(calling_domain: str, referer_domain: str,
|
||||||
domain,
|
domain,
|
||||||
'http://' +
|
'http://' +
|
||||||
i2p_domain)
|
i2p_domain)
|
||||||
|
elif _is_yggdrasil_request(calling_domain, referer_domain,
|
||||||
|
domain,
|
||||||
|
yggdrasil_domain):
|
||||||
|
msg_str = msg_str.replace(curr_http_prefix +
|
||||||
|
domain,
|
||||||
|
'http://' +
|
||||||
|
yggdrasil_domain)
|
||||||
return msg_str
|
return msg_str
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -3969,7 +4027,8 @@ def get_instance_url(calling_domain: str,
|
||||||
http_prefix: str,
|
http_prefix: str,
|
||||||
domain_full: str,
|
domain_full: str,
|
||||||
onion_domain: str,
|
onion_domain: str,
|
||||||
i2p_domain: str) -> str:
|
i2p_domain: str,
|
||||||
|
yggdrasil_domain: str) -> str:
|
||||||
"""Returns the URL for this instance
|
"""Returns the URL for this instance
|
||||||
"""
|
"""
|
||||||
if calling_domain.endswith('.onion') and \
|
if calling_domain.endswith('.onion') and \
|
||||||
|
|
@ -3978,6 +4037,9 @@ def get_instance_url(calling_domain: str,
|
||||||
elif (calling_domain.endswith('.i2p') and
|
elif (calling_domain.endswith('.i2p') and
|
||||||
i2p_domain):
|
i2p_domain):
|
||||||
instance_url = 'http://' + i2p_domain
|
instance_url = 'http://' + i2p_domain
|
||||||
|
elif (is_yggdrasil_address(calling_domain) and
|
||||||
|
yggdrasil_domain):
|
||||||
|
instance_url = 'http://' + yggdrasil_domain
|
||||||
else:
|
else:
|
||||||
instance_url = \
|
instance_url = \
|
||||||
http_prefix + '://' + domain_full
|
http_prefix + '://' + domain_full
|
||||||
|
|
|
||||||
|
|
@ -122,6 +122,7 @@ def _html_calendar_day(person_cache: {}, translate: {},
|
||||||
theme: str, access_keys: {},
|
theme: str, access_keys: {},
|
||||||
system_language: str,
|
system_language: str,
|
||||||
session, session_onion, session_i2p,
|
session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
ua_str: str) -> str:
|
ua_str: str) -> str:
|
||||||
"""Show a day within the calendar
|
"""Show a day within the calendar
|
||||||
"""
|
"""
|
||||||
|
|
@ -247,6 +248,7 @@ def _html_calendar_day(person_cache: {}, translate: {},
|
||||||
translate, session,
|
translate, session,
|
||||||
session_onion,
|
session_onion,
|
||||||
session_i2p,
|
session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
'320', '320')
|
'320', '320')
|
||||||
if event_map:
|
if event_map:
|
||||||
event_place = event_map
|
event_place = event_map
|
||||||
|
|
@ -384,6 +386,7 @@ def html_calendar(person_cache: {}, translate: {},
|
||||||
icalendar: bool, system_language: str,
|
icalendar: bool, system_language: str,
|
||||||
default_timeline: str, theme: str,
|
default_timeline: str, theme: str,
|
||||||
session, session_onion, session_i2p,
|
session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
ua_str: str) -> str:
|
ua_str: str) -> str:
|
||||||
"""Show the calendar for a person
|
"""Show the calendar for a person
|
||||||
"""
|
"""
|
||||||
|
|
@ -473,6 +476,7 @@ def html_calendar(person_cache: {}, translate: {},
|
||||||
theme, access_keys,
|
theme, access_keys,
|
||||||
system_language, session,
|
system_language, session,
|
||||||
session_onion, session_i2p,
|
session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
ua_str)
|
ua_str)
|
||||||
|
|
||||||
if icalendar:
|
if icalendar:
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ from utils import data_dir
|
||||||
from utils import get_url_from_post
|
from utils import get_url_from_post
|
||||||
from utils import get_config_param
|
from utils import get_config_param
|
||||||
from utils import remove_html
|
from utils import remove_html
|
||||||
|
from utils import is_yggdrasil_url
|
||||||
from media import path_is_audio
|
from media import path_is_audio
|
||||||
from content import safe_web_text
|
from content import safe_web_text
|
||||||
from webapp_utils import get_broken_link_substitute
|
from webapp_utils import get_broken_link_substitute
|
||||||
|
|
@ -33,6 +34,7 @@ MAX_LINK_LENGTH = 40
|
||||||
|
|
||||||
def _html_podcast_chapters(link_url: str,
|
def _html_podcast_chapters(link_url: str,
|
||||||
session, session_onion, session_i2p,
|
session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
http_prefix: str, domain: str,
|
http_prefix: str, domain: str,
|
||||||
podcast_properties: {},
|
podcast_properties: {},
|
||||||
debug: bool,
|
debug: bool,
|
||||||
|
|
@ -62,6 +64,8 @@ def _html_podcast_chapters(link_url: str,
|
||||||
curr_session = session_onion
|
curr_session = session_onion
|
||||||
elif chapters_url.endswith('.i2p'):
|
elif chapters_url.endswith('.i2p'):
|
||||||
curr_session = session_i2p
|
curr_session = session_i2p
|
||||||
|
elif is_yggdrasil_url(chapters_url):
|
||||||
|
curr_session = session_yggdrasil
|
||||||
|
|
||||||
as_header = {
|
as_header = {
|
||||||
'Accept': url_type
|
'Accept': url_type
|
||||||
|
|
@ -310,6 +314,7 @@ 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,
|
||||||
|
session_yggdrasil,
|
||||||
http_prefix: str, debug: bool,
|
http_prefix: str, debug: bool,
|
||||||
mitm_servers: []) -> str:
|
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
|
||||||
|
|
@ -516,6 +521,7 @@ def html_podcast_episode(translate: {},
|
||||||
podcast_str += \
|
podcast_str += \
|
||||||
_html_podcast_chapters(link_url,
|
_html_podcast_chapters(link_url,
|
||||||
session, session_onion, session_i2p,
|
session, session_onion, session_i2p,
|
||||||
|
session_yggdrasil,
|
||||||
http_prefix, domain,
|
http_prefix, domain,
|
||||||
podcast_properties, debug, mitm_servers)
|
podcast_properties, debug, mitm_servers)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3287,7 +3287,7 @@ def individual_post_as_html(signing_priv_key_pem: str,
|
||||||
html_open_street_map(loc_str,
|
html_open_street_map(loc_str,
|
||||||
bounding_box_degrees,
|
bounding_box_degrees,
|
||||||
translate, session,
|
translate, session,
|
||||||
session, session)
|
session, session, session)
|
||||||
if map_str:
|
if map_str:
|
||||||
event_category = ''
|
event_category = ''
|
||||||
if category_str:
|
if category_str:
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ from textmode import text_mode_removals
|
||||||
from unicodetext import uninvert_text
|
from unicodetext import uninvert_text
|
||||||
from unicodetext import standardize_text
|
from unicodetext import standardize_text
|
||||||
from occupation import get_occupation_name
|
from occupation import get_occupation_name
|
||||||
|
from utils import is_yggdrasil_address
|
||||||
from utils import chatbot_nicknames
|
from utils import chatbot_nicknames
|
||||||
from utils import get_actor_type
|
from utils import get_actor_type
|
||||||
from utils import get_mutuals_of_person
|
from utils import get_mutuals_of_person
|
||||||
|
|
@ -254,6 +255,7 @@ def html_profile_after_search(authorized: bool,
|
||||||
cw_lists: {}, lists_enabled: str,
|
cw_lists: {}, lists_enabled: str,
|
||||||
timezone: str,
|
timezone: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
bold_reading: bool, dogwhistles: {},
|
bold_reading: bool, dogwhistles: {},
|
||||||
min_images_for_accounts: [],
|
min_images_for_accounts: [],
|
||||||
buy_sites: {},
|
buy_sites: {},
|
||||||
|
|
@ -290,6 +292,18 @@ def html_profile_after_search(authorized: bool,
|
||||||
if '.i2p/' in profile_handle or profile_handle.endswith('.i2p'):
|
if '.i2p/' in profile_handle or profile_handle.endswith('.i2p'):
|
||||||
from_domain = i2p_domain
|
from_domain = i2p_domain
|
||||||
http = True
|
http = True
|
||||||
|
if yggdrasil_domain:
|
||||||
|
profile_domain = ''
|
||||||
|
if '@' in profile_handle:
|
||||||
|
profile_domain = profile_handle.split('@')[1]
|
||||||
|
else:
|
||||||
|
if '://' in profile_handle:
|
||||||
|
profile_domain = profile_handle.split('://')[1]
|
||||||
|
if '/' in profile_domain:
|
||||||
|
profile_domain = profile_domain.split('/')[0]
|
||||||
|
if is_yggdrasil_address(profile_domain):
|
||||||
|
from_domain = yggdrasil_domain
|
||||||
|
http = True
|
||||||
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,
|
||||||
|
|
|
||||||
25
webfinger.py
25
webfinger.py
|
|
@ -310,6 +310,7 @@ def wellknown_protocol_handler(path: str, http_prefix: str,
|
||||||
|
|
||||||
def webfinger_lookup(path: str, base_dir: str,
|
def webfinger_lookup(path: str, base_dir: str,
|
||||||
domain: str, onion_domain: str, i2p_domain: str,
|
domain: str, onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
port: int, debug: bool) -> {}:
|
port: int, debug: bool) -> {}:
|
||||||
"""Lookup the webfinger endpoint for an account
|
"""Lookup the webfinger endpoint for an account
|
||||||
GET /.well-known/webfinger?resource=acct:user@domain
|
GET /.well-known/webfinger?resource=acct:user@domain
|
||||||
|
|
@ -408,6 +409,11 @@ def webfinger_lookup(path: str, base_dir: str,
|
||||||
if i2p_domain in handle:
|
if i2p_domain in handle:
|
||||||
handle = handle.replace(i2p_domain, domain)
|
handle = handle.replace(i2p_domain, domain)
|
||||||
i2pify = True
|
i2pify = True
|
||||||
|
yggdrasilify = False
|
||||||
|
if yggdrasil_domain:
|
||||||
|
if yggdrasil_domain in handle:
|
||||||
|
handle = handle.replace(yggdrasil_domain, domain)
|
||||||
|
yggdrasilify = True
|
||||||
# instance actor
|
# instance actor
|
||||||
if handle.startswith('actor@'):
|
if handle.startswith('actor@'):
|
||||||
handle = handle.replace('actor@', 'inbox@', 1)
|
handle = handle.replace('actor@', 'inbox@', 1)
|
||||||
|
|
@ -420,14 +426,17 @@ def webfinger_lookup(path: str, base_dir: str,
|
||||||
if debug:
|
if debug:
|
||||||
print('DEBUG: WEBFINGER filename not found ' + filename)
|
print('DEBUG: WEBFINGER filename not found ' + filename)
|
||||||
return None
|
return None
|
||||||
if not onionify and not i2pify:
|
if not onionify and not i2pify and not yggdrasilify:
|
||||||
wf_json = load_json(filename)
|
wf_json = load_json(filename)
|
||||||
elif onionify:
|
elif onionify:
|
||||||
print('Webfinger request for onionified ' + handle)
|
print('Webfinger request for onionified ' + handle)
|
||||||
wf_json = load_json_onionify(filename, domain, onion_domain)
|
wf_json = load_json_onionify(filename, domain, onion_domain)
|
||||||
else:
|
elif i2pify:
|
||||||
print('Webfinger request for i2pified ' + handle)
|
print('Webfinger request for i2pified ' + handle)
|
||||||
wf_json = load_json_onionify(filename, domain, i2p_domain)
|
wf_json = load_json_onionify(filename, domain, i2p_domain)
|
||||||
|
else:
|
||||||
|
print('Webfinger request for yggdrasilified ' + handle)
|
||||||
|
wf_json = load_json_onionify(filename, domain, yggdrasil_domain)
|
||||||
if not wf_json:
|
if not wf_json:
|
||||||
wf_json = {"nickname": "unknown"}
|
wf_json = {"nickname": "unknown"}
|
||||||
return wf_json
|
return wf_json
|
||||||
|
|
@ -606,6 +615,7 @@ def _webfinger_update_from_profile(wf_json: {}, actor_json: {}) -> bool:
|
||||||
|
|
||||||
def webfinger_update(base_dir: str, nickname: str, domain: str,
|
def webfinger_update(base_dir: str, nickname: str, domain: str,
|
||||||
onion_domain: str, i2p_domain: str,
|
onion_domain: str, i2p_domain: str,
|
||||||
|
yggdrasil_domain: str,
|
||||||
cached_webfingers: {}) -> None:
|
cached_webfingers: {}) -> None:
|
||||||
"""Regenerates stored webfinger
|
"""Regenerates stored webfinger
|
||||||
"""
|
"""
|
||||||
|
|
@ -617,6 +627,7 @@ def webfinger_update(base_dir: str, nickname: str, domain: str,
|
||||||
filename = base_dir + wf_subdir + '/' + handle + '.json'
|
filename = base_dir + wf_subdir + '/' + handle + '.json'
|
||||||
onionify = False
|
onionify = False
|
||||||
i2pify = False
|
i2pify = False
|
||||||
|
yggdrasilify = False
|
||||||
if onion_domain:
|
if onion_domain:
|
||||||
if onion_domain in handle:
|
if onion_domain in handle:
|
||||||
handle = handle.replace(onion_domain, domain)
|
handle = handle.replace(onion_domain, domain)
|
||||||
|
|
@ -625,11 +636,17 @@ def webfinger_update(base_dir: str, nickname: str, domain: str,
|
||||||
if i2p_domain in handle:
|
if i2p_domain in handle:
|
||||||
handle = handle.replace(i2p_domain, domain)
|
handle = handle.replace(i2p_domain, domain)
|
||||||
i2pify = True
|
i2pify = True
|
||||||
|
elif yggdrasil_domain:
|
||||||
|
if yggdrasil_domain in handle:
|
||||||
|
handle = handle.replace(yggdrasil_domain, domain)
|
||||||
|
yggdrasilify = True
|
||||||
if not onionify:
|
if not onionify:
|
||||||
if not i2pify:
|
if not i2pify and not yggdrasilify:
|
||||||
wf_json = load_json(filename)
|
wf_json = load_json(filename)
|
||||||
else:
|
elif i2pify:
|
||||||
wf_json = load_json_onionify(filename, domain, i2p_domain)
|
wf_json = load_json_onionify(filename, domain, i2p_domain)
|
||||||
|
else:
|
||||||
|
wf_json = load_json_onionify(filename, domain, yggdrasil_domain)
|
||||||
else:
|
else:
|
||||||
wf_json = load_json_onionify(filename, domain, onion_domain)
|
wf_json = load_json_onionify(filename, domain, onion_domain)
|
||||||
if not wf_json:
|
if not wf_json:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue