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_object_string_type
|
||||
from utils import get_actor_from_post
|
||||
from utils import is_yggdrasil_address
|
||||
from timeFunctions import get_current_time_int
|
||||
|
||||
|
||||
|
|
@ -140,6 +141,7 @@ def _reject_quote_request(message_json: {}, domain_full: str,
|
|||
federation_list: [],
|
||||
debug: bool,
|
||||
session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
base_dir: str,
|
||||
http_prefix: str,
|
||||
send_threads: [], post_log: [],
|
||||
|
|
@ -147,6 +149,7 @@ def _reject_quote_request(message_json: {}, domain_full: str,
|
|||
person_cache: {}, project_version: str,
|
||||
signing_priv_key_pem: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
extra_headers: {},
|
||||
sites_unavailable: {},
|
||||
system_language: str,
|
||||
|
|
@ -235,6 +238,17 @@ def _reject_quote_request(message_json: {}, domain_full: str,
|
|||
if debug:
|
||||
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: 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
|
||||
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,
|
||||
person_cache, debug, project_version, None,
|
||||
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,
|
||||
system_language, mitm_servers)
|
||||
return True
|
||||
|
|
@ -255,7 +270,8 @@ def _reject_quote_request(message_json: {}, domain_full: str,
|
|||
def _accept_follow(base_dir: str, message_json: {},
|
||||
federation_list: [], debug: bool,
|
||||
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
|
||||
Your follow was accepted
|
||||
"""
|
||||
|
|
@ -339,6 +355,10 @@ def _accept_follow(base_dir: str, message_json: {},
|
|||
if accepted_domain.endswith('.i2p') and \
|
||||
not curr_domain.endswith('.i2p'):
|
||||
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
|
||||
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: {},
|
||||
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
|
||||
"""
|
||||
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.')
|
||||
# receive follow accept
|
||||
_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:
|
||||
print('DEBUG: Uh, ' + message_json['type'] + ', I guess')
|
||||
return True
|
||||
|
|
@ -420,6 +441,7 @@ def receive_quote_request(message_json: {}, federation_list: [],
|
|||
debug: bool,
|
||||
domain_full: str,
|
||||
session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
base_dir: str,
|
||||
http_prefix: str,
|
||||
send_threads: [], post_log: [],
|
||||
|
|
@ -428,6 +450,7 @@ def receive_quote_request(message_json: {}, federation_list: [],
|
|||
signing_priv_key_pem: str,
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
extra_headers: {},
|
||||
sites_unavailable: {},
|
||||
system_language: str,
|
||||
|
|
@ -445,14 +468,15 @@ def receive_quote_request(message_json: {}, federation_list: [],
|
|||
return True
|
||||
_reject_quote_request(message_json, domain_full,
|
||||
federation_list, debug,
|
||||
session, session_onion, session_i2p, base_dir,
|
||||
session, session_onion, session_i2p,
|
||||
session_yggdrasil, base_dir,
|
||||
http_prefix,
|
||||
send_threads, post_log,
|
||||
cached_webfingers,
|
||||
person_cache, project_version,
|
||||
signing_priv_key_pem,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
i2p_domain, yggdrasil_domain,
|
||||
extra_headers,
|
||||
sites_unavailable,
|
||||
system_language,
|
||||
|
|
|
|||
|
|
@ -173,6 +173,7 @@ def create_announce(session, base_dir: str, federation_list: [],
|
|||
signing_priv_key_pem: str,
|
||||
curr_domain: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
sites_unavailable: [],
|
||||
system_language: str,
|
||||
mitm_servers: []) -> {}:
|
||||
|
|
@ -242,6 +243,7 @@ def create_announce(session, base_dir: str, federation_list: [],
|
|||
debug, project_version, None, group_account,
|
||||
signing_priv_key_pem, 639633,
|
||||
curr_domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
extra_headers, sites_unavailable,
|
||||
system_language, mitm_servers)
|
||||
|
||||
|
|
@ -257,6 +259,7 @@ def announce_public(session, base_dir: str, federation_list: [],
|
|||
signing_priv_key_pem: str,
|
||||
curr_domain: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
sites_unavailable: [],
|
||||
system_language: str,
|
||||
mitm_servers: []) -> {}:
|
||||
|
|
@ -274,7 +277,7 @@ def announce_public(session, base_dir: str, federation_list: [],
|
|||
person_cache, cached_webfingers,
|
||||
debug, project_version,
|
||||
signing_priv_key_pem, curr_domain,
|
||||
onion_domain, i2p_domain,
|
||||
onion_domain, i2p_domain, yggdrasil_domain,
|
||||
sites_unavailable,
|
||||
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 get_file_case_insensitive
|
||||
from utils import get_user_paths
|
||||
from utils import is_yggdrasil_url
|
||||
from formats import get_image_extensions
|
||||
from timeFunctions import date_from_string_format
|
||||
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,
|
||||
project_version: str, http_prefix: str,
|
||||
domain: str, onion_domain: str,
|
||||
i2p_domain: str,
|
||||
i2p_domain: str, yggdrasil_domain: str,
|
||||
signing_priv_key_pem: str,
|
||||
mitm_servers: []) -> str:
|
||||
"""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:
|
||||
if '.i2p/' in person_url:
|
||||
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'
|
||||
accept_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,
|
||||
domain: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
post_json_object: {},
|
||||
federation_list: [], debug: 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 in url:
|
||||
continue
|
||||
if yggdrasil_domain:
|
||||
if '://' + yggdrasil_domain in url:
|
||||
continue
|
||||
if '/' in url:
|
||||
filename = url.split('/')[-1]
|
||||
else:
|
||||
|
|
|
|||
|
|
@ -2037,6 +2037,7 @@ def words_similarity(content1: str, content2: str, min_words: int) -> int:
|
|||
|
||||
def contains_invalid_local_links(domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
content: str) -> bool:
|
||||
"""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 in url:
|
||||
return True
|
||||
if yggdrasil_domain:
|
||||
if yggdrasil_domain in url:
|
||||
return True
|
||||
ctr += 1
|
||||
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 load_json
|
||||
from utils import load_instance_software
|
||||
from utils import is_yggdrasil_address
|
||||
from mitm import load_mitm_servers
|
||||
from content import load_auto_cw_cache
|
||||
from content import load_dogwhistles
|
||||
|
|
@ -368,6 +369,7 @@ class EpicyonServer(ThreadingHTTPServer):
|
|||
manual_follower_approval = True
|
||||
onion_domain = None
|
||||
i2p_domain = None
|
||||
yggdrasil_domain = None
|
||||
media_instance: bool = False
|
||||
blogs_instance: bool = False
|
||||
translate = {}
|
||||
|
|
@ -420,6 +422,7 @@ class EpicyonServer(ThreadingHTTPServer):
|
|||
session = None
|
||||
session_onion = None
|
||||
session_i2p = None
|
||||
session_yggdrasil = None
|
||||
last_getreq = 0
|
||||
last_postreq = 0
|
||||
getreq_busy: bool = False
|
||||
|
|
@ -645,6 +648,7 @@ def run_daemon(accounts_data_dir: str,
|
|||
domain: str,
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
yt_replace_domain: str,
|
||||
twitter_replacement_domain: str,
|
||||
port: int,
|
||||
|
|
@ -1010,8 +1014,11 @@ def run_daemon(accounts_data_dir: str,
|
|||
onion_domain = domain
|
||||
elif domain.endswith('.i2p'):
|
||||
i2p_domain = domain
|
||||
elif is_yggdrasil_address(domain):
|
||||
yggdrasil_domain = domain
|
||||
httpd.onion_domain = onion_domain
|
||||
httpd.i2p_domain = i2p_domain
|
||||
httpd.yggdrasil_domain = yggdrasil_domain
|
||||
httpd.media_instance = media_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)
|
||||
elif i2p_domain:
|
||||
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:
|
||||
save_domain_qrcode(base_dir, http_prefix, httpd.domain_full,
|
||||
httpd.qrcode_scale)
|
||||
|
|
@ -1147,6 +1157,7 @@ def run_daemon(accounts_data_dir: str,
|
|||
httpd.session = None
|
||||
httpd.session_onion = None
|
||||
httpd.session_i2p = None
|
||||
httpd.session_yggdrasil = None
|
||||
httpd.last_getreq = 0
|
||||
httpd.last_postreq = 0
|
||||
httpd.getreq_busy = False
|
||||
|
|
@ -1340,6 +1351,7 @@ def run_daemon(accounts_data_dir: str,
|
|||
httpd.post_log, httpd.cached_webfingers,
|
||||
httpd.person_cache, httpd.inbox_queue,
|
||||
domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
port, proxy_type,
|
||||
httpd.federation_list,
|
||||
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 timeFunctions import date_utcnow
|
||||
from timeFunctions import get_current_time_int
|
||||
from utils import is_yggdrasil_address
|
||||
from utils import replace_strings
|
||||
from utils import contains_invalid_chars
|
||||
from utils import save_json
|
||||
|
|
@ -363,6 +364,13 @@ def daemon_http_get(self) -> None:
|
|||
print('GET domain blocked: ' + calling_domain)
|
||||
http_400(self)
|
||||
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:
|
||||
if calling_domain not in (self.server.domain,
|
||||
self.server.domain_full):
|
||||
|
|
@ -450,7 +458,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
if acct_pub_key_json:
|
||||
msg_str = json.dumps(acct_pub_key_json, ensure_ascii=False)
|
||||
msg_str = convert_domains(calling_domain,
|
||||
|
|
@ -459,7 +468,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -496,6 +506,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.known_crawlers,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.project_version,
|
||||
self.server.show_node_info_version,
|
||||
self.server.show_node_info_accounts,
|
||||
|
|
@ -549,7 +560,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
set_headers(self, 'application/json', msglen,
|
||||
|
|
@ -568,7 +580,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -603,7 +616,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain) + \
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain) + \
|
||||
'/users/news'
|
||||
logout_redirect(self, news_url, calling_domain)
|
||||
fitness_performance(getreq_start_time, self.server.fitness,
|
||||
|
|
@ -641,6 +655,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
None, self.server.debug,
|
||||
self.server.enable_shared_inbox,
|
||||
|
|
@ -686,6 +701,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.fitness,
|
||||
self.server.debug)
|
||||
return
|
||||
|
|
@ -752,7 +768,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
set_headers(self, 'application/json', msglen,
|
||||
|
|
@ -791,6 +808,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.account_timezone,
|
||||
self.server.bold_reading,
|
||||
self.server.translate,
|
||||
|
|
@ -844,7 +862,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain) + \
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain) + \
|
||||
'/users/' + nickname
|
||||
actor_json = get_person_from_cache(self.server.base_dir, actor,
|
||||
self.server.person_cache)
|
||||
|
|
@ -917,7 +936,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
set_headers(self, 'application/json', msglen,
|
||||
|
|
@ -999,7 +1019,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -1059,7 +1080,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -1118,7 +1140,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -1203,7 +1226,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -1294,7 +1318,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -1403,7 +1428,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -1441,6 +1467,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.translate,
|
||||
self.server.registration,
|
||||
self.server.system_language,
|
||||
|
|
@ -1665,7 +1692,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.followingItemsPerPage,
|
||||
self.server.debug, 'following',
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
return
|
||||
if '/followers?page=' in self.path:
|
||||
get_following_json(self, self.server.base_dir,
|
||||
|
|
@ -1677,7 +1705,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.followingItemsPerPage,
|
||||
self.server.debug, 'followers',
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
return
|
||||
if '/followrequests?page=' in self.path:
|
||||
get_following_json(self, self.server.base_dir,
|
||||
|
|
@ -1690,7 +1719,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.debug,
|
||||
'followrequests',
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
return
|
||||
|
||||
# authorized endpoint used for TTS of posts
|
||||
|
|
@ -1742,6 +1772,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.session,
|
||||
self.server.session_onion,
|
||||
self.server.session_i2p,
|
||||
self.server.session_yggdrasil,
|
||||
self.server.http_prefix,
|
||||
self.server.debug,
|
||||
self.server.mitm_servers)
|
||||
|
|
@ -1802,7 +1833,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -1826,7 +1858,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.system_language,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
return
|
||||
|
||||
if not html_getreq and \
|
||||
|
|
@ -1837,7 +1870,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
return
|
||||
|
||||
fitness_performance(getreq_start_time, self.server.fitness,
|
||||
|
|
@ -1883,7 +1917,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -2050,6 +2085,9 @@ def daemon_http_get(self) -> None:
|
|||
elif (calling_domain.endswith('.i2p') and
|
||||
self.server.i2p_domain):
|
||||
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',
|
||||
cookie, calling_domain, 303)
|
||||
return
|
||||
|
|
@ -2092,6 +2130,9 @@ def daemon_http_get(self) -> None:
|
|||
elif (calling_domain.endswith('.i2p') and
|
||||
self.server.i2p_domain):
|
||||
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',
|
||||
cookie, calling_domain, 303)
|
||||
return
|
||||
|
|
@ -2124,6 +2165,9 @@ def daemon_http_get(self) -> None:
|
|||
elif (calling_domain.endswith('.i2p') and
|
||||
self.server.i2p_domain):
|
||||
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',
|
||||
cookie, calling_domain, 303)
|
||||
return
|
||||
|
|
@ -2156,6 +2200,9 @@ def daemon_http_get(self) -> None:
|
|||
elif (calling_domain.endswith('.i2p') and
|
||||
self.server.i2p_domain):
|
||||
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',
|
||||
cookie, calling_domain, 303)
|
||||
return
|
||||
|
|
@ -2182,6 +2229,10 @@ def daemon_http_get(self) -> None:
|
|||
self.server.i2p_domain):
|
||||
msg = html_terms_of_service(self.server.base_dir, 'http',
|
||||
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:
|
||||
msg = html_terms_of_service(self.server.base_dir,
|
||||
self.server.http_prefix,
|
||||
|
|
@ -2290,6 +2341,7 @@ def daemon_http_get(self) -> None:
|
|||
msg = \
|
||||
html_about(self.server.base_dir, 'http',
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
None, self.server.translate,
|
||||
self.server.system_language)
|
||||
else:
|
||||
|
|
@ -2320,6 +2372,7 @@ def daemon_http_get(self) -> None:
|
|||
msg = \
|
||||
html_specification(self.server.base_dir, 'http',
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
None, self.server.translate,
|
||||
self.server.system_language)
|
||||
else:
|
||||
|
|
@ -2357,6 +2410,7 @@ def daemon_http_get(self) -> None:
|
|||
html_known_epicyon_instances(
|
||||
self.server.base_dir, 'http',
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.system_language,
|
||||
self.server.known_epicyon_instances,
|
||||
self.server.translate)
|
||||
|
|
@ -2389,6 +2443,7 @@ def daemon_http_get(self) -> None:
|
|||
msg = \
|
||||
html_manual(self.server.base_dir, 'http',
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
None, self.server.translate,
|
||||
self.server.system_language)
|
||||
else:
|
||||
|
|
@ -2553,6 +2608,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
authorized, self.server.debug,
|
||||
self.server.news_instance,
|
||||
|
|
@ -2700,6 +2756,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.port,
|
||||
getreq_start_time,
|
||||
self.server.fitness,
|
||||
|
|
@ -2930,6 +2987,7 @@ def daemon_http_get(self) -> None:
|
|||
self.path, self.server.debug,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.http_prefix,
|
||||
self.server.domain,
|
||||
self.server.domain_full,
|
||||
|
|
@ -2969,7 +3027,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain) + \
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain) + \
|
||||
'/users/news'
|
||||
logout_redirect(self, news_url, calling_domain)
|
||||
fitness_performance(getreq_start_time, self.server.fitness,
|
||||
|
|
@ -3147,7 +3206,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain) + \
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain) + \
|
||||
'/users/' + nickname + '/tags/' + hashtag
|
||||
redirect_headers(self, ht_url, cookie, calling_domain, 303)
|
||||
else:
|
||||
|
|
@ -3169,6 +3229,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.port,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
self.server.system_language,
|
||||
self.server.fitness,
|
||||
|
|
@ -3185,6 +3246,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.port,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
MAX_POSTS_IN_FEED,
|
||||
self.server.fitness,
|
||||
|
|
@ -3200,6 +3262,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.port,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
curr_session,
|
||||
MAX_POSTS_IN_HASHTAG_FEED,
|
||||
|
|
@ -3381,6 +3444,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.session,
|
||||
self.server.session_onion,
|
||||
self.server.session_i2p,
|
||||
self.server.session_yggdrasil,
|
||||
ua_str)
|
||||
if msg:
|
||||
msg = msg.encode('utf-8')
|
||||
|
|
@ -3428,6 +3492,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.session,
|
||||
self.server.session_onion,
|
||||
self.server.session_i2p,
|
||||
self.server.session_yggdrasil,
|
||||
ua_str)
|
||||
if msg:
|
||||
msg = msg.encode('utf-8')
|
||||
|
|
@ -3461,6 +3526,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time):
|
||||
self.server.getreq_busy = False
|
||||
return
|
||||
|
|
@ -3506,6 +3572,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.port,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
repeat_private,
|
||||
self.server.debug,
|
||||
|
|
@ -3542,6 +3609,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.min_images_for_accounts,
|
||||
self.server.session_onion,
|
||||
self.server.session_i2p,
|
||||
self.server.session_yggdrasil,
|
||||
self.server.mitm_servers,
|
||||
self.server.instance_software)
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -3564,6 +3632,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
self.server.debug,
|
||||
self.server.recent_posts_cache,
|
||||
|
|
@ -3572,7 +3641,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.project_version,
|
||||
self.server.fitness,
|
||||
self.server.session_onion,
|
||||
self.server.session_i2p)
|
||||
self.server.session_i2p,
|
||||
self.server.session_yggdrasil)
|
||||
self.server.getreq_busy = False
|
||||
return
|
||||
|
||||
|
|
@ -3590,6 +3660,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
self.server.newswire,
|
||||
self.server.default_timeline,
|
||||
|
|
@ -3608,6 +3679,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
self.server.debug,
|
||||
self.server.newswire,
|
||||
|
|
@ -3628,6 +3700,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.port,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
proxy_type,
|
||||
self.server.debug,
|
||||
|
|
@ -3645,6 +3718,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.followers_sync_cache,
|
||||
self.server.session_onion,
|
||||
self.server.session_i2p,
|
||||
self.server.session_yggdrasil,
|
||||
self.server.session,
|
||||
self.server.mitm_servers)
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -3666,6 +3740,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.port,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
self.server.debug,
|
||||
self.server.federation_list,
|
||||
|
|
@ -3682,6 +3757,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.session,
|
||||
self.server.session_onion,
|
||||
self.server.session_i2p,
|
||||
self.server.session_yggdrasil,
|
||||
self.server.mitm_servers)
|
||||
self.server.getreq_busy = False
|
||||
return
|
||||
|
|
@ -3699,6 +3775,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
proxy_type,
|
||||
cookie,
|
||||
|
|
@ -3733,6 +3810,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.min_images_for_accounts,
|
||||
self.server.session_onion,
|
||||
self.server.session_i2p,
|
||||
self.server.session_yggdrasil,
|
||||
self.server.mitm_servers,
|
||||
self.server.instance_software)
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -3751,6 +3829,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
proxy_type,
|
||||
cookie, self.server.debug,
|
||||
|
|
@ -3784,6 +3863,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.iconsCache,
|
||||
self.server.session_onion,
|
||||
self.server.session_i2p,
|
||||
self.server.session_yggdrasil,
|
||||
self.server.mitm_servers,
|
||||
self.server.instance_software)
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -3804,6 +3884,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
proxy_type,
|
||||
cookie,
|
||||
|
|
@ -3837,6 +3918,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.min_images_for_accounts,
|
||||
self.server.session_onion,
|
||||
self.server.session_i2p,
|
||||
self.server.session_yggdrasil,
|
||||
self.server.mitm_servers,
|
||||
self.server.instance_software)
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -3857,6 +3939,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
proxy_type,
|
||||
cookie, self.server.debug,
|
||||
|
|
@ -3889,6 +3972,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.min_images_for_accounts,
|
||||
self.server.session_onion,
|
||||
self.server.session_i2p,
|
||||
self.server.session_yggdrasil,
|
||||
self.server.mitm_servers,
|
||||
self.server.instance_software)
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -3908,6 +3992,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.port,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
proxy_type,
|
||||
cookie, self.server.debug,
|
||||
|
|
@ -3941,6 +4026,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.min_images_for_accounts,
|
||||
self.server.session_onion,
|
||||
self.server.session_i2p,
|
||||
self.server.session_yggdrasil,
|
||||
self.server.mitm_servers,
|
||||
self.server.instance_software)
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -3963,6 +4049,7 @@ def daemon_http_get(self) -> None:
|
|||
curr_session,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.recent_posts_cache,
|
||||
self.server.max_recent_posts,
|
||||
self.server.translate,
|
||||
|
|
@ -4006,6 +4093,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.port,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
proxy_type, cookie,
|
||||
self.server.debug,
|
||||
|
|
@ -4039,6 +4127,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.min_images_for_accounts,
|
||||
self.server.session_onion,
|
||||
self.server.session_i2p,
|
||||
self.server.session_yggdrasil,
|
||||
self.server.mitm_servers,
|
||||
self.server.instance_software)
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -4056,6 +4145,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
proxy_type, cookie,
|
||||
self.server.debug,
|
||||
|
|
@ -4085,6 +4175,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.allow_deletion,
|
||||
self.server.session_onion,
|
||||
self.server.session_i2p,
|
||||
self.server.session_yggdrasil,
|
||||
self.server.default_timeline,
|
||||
self.server.mitm_servers,
|
||||
self.server.instance_software)
|
||||
|
|
@ -4105,6 +4196,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.port,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
cookie, self.server.debug,
|
||||
curr_session,
|
||||
|
|
@ -4153,6 +4245,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.port,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
cookie, self.server.debug,
|
||||
curr_session,
|
||||
|
|
@ -4582,6 +4675,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.auto_cw_cache,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.bold_reading,
|
||||
self.server.mitm_servers,
|
||||
self.server.instance_software,
|
||||
|
|
@ -4716,6 +4810,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.fitness,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.mitm_servers,
|
||||
self.server.instance_software):
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -4773,6 +4868,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.fitness,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.mitm_servers,
|
||||
self.server.hide_recent_posts):
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -4831,6 +4927,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.mitm_servers,
|
||||
self.server.hide_recent_posts):
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -4877,6 +4974,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.auto_cw_cache,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.bold_reading,
|
||||
self.server.mitm_servers,
|
||||
self.server.instance_software,
|
||||
|
|
@ -4925,6 +5023,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.auto_cw_cache,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.mitm_servers,
|
||||
self.server.instance_software,
|
||||
ua_str):
|
||||
|
|
@ -4988,6 +5087,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.auto_cw_cache,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.hide_announces,
|
||||
self.server.mitm_servers):
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -5049,6 +5149,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.fitness,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.mitm_servers):
|
||||
self.server.getreq_busy = False
|
||||
return
|
||||
|
|
@ -5109,6 +5210,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.fitness,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.mitm_servers):
|
||||
self.server.getreq_busy = False
|
||||
return
|
||||
|
|
@ -5170,6 +5272,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.full_width_tl_button_header,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.hide_announces,
|
||||
self.server.mitm_servers):
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -5232,6 +5335,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.fitness,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.mitm_servers):
|
||||
self.server.getreq_busy = False
|
||||
return
|
||||
|
|
@ -5294,6 +5398,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.fitness,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.mitm_servers):
|
||||
self.server.getreq_busy = False
|
||||
return
|
||||
|
|
@ -5353,6 +5458,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.fitness,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.mitm_servers):
|
||||
self.server.getreq_busy = False
|
||||
return
|
||||
|
|
@ -5615,6 +5721,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.fitness,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.mitm_servers):
|
||||
self.server.getreq_busy = False
|
||||
return
|
||||
|
|
@ -5678,6 +5785,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.fitness,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.hide_announces,
|
||||
self.server.mitm_servers,
|
||||
self.server.hide_recent_posts):
|
||||
|
|
@ -5741,6 +5849,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.fitness,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.mitm_servers):
|
||||
self.server.getreq_busy = False
|
||||
return
|
||||
|
|
@ -5797,6 +5906,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.fitness,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.mitm_servers,
|
||||
self.server.hide_recent_posts):
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -5855,6 +5965,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.fitness,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.mitm_servers,
|
||||
self.server.hide_recent_posts):
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -5912,6 +6023,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.fitness,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.mitm_servers,
|
||||
self.server.hide_recent_posts):
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -5970,6 +6082,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.fitness,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.mitm_servers,
|
||||
self.server.hide_recent_posts):
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -6028,6 +6141,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.fitness,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.mitm_servers,
|
||||
self.server.hide_recent_posts):
|
||||
self.server.getreq_busy = False
|
||||
|
|
@ -6046,6 +6160,7 @@ def daemon_http_get(self) -> None:
|
|||
self.server.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
getreq_start_time,
|
||||
proxy_type,
|
||||
cookie, self.server.debug,
|
||||
|
|
@ -6158,7 +6273,8 @@ def daemon_http_get(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
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.domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
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,
|
||||
domain,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
protocol_str = \
|
||||
|
|
@ -6411,6 +6529,7 @@ def _confirm_delete_event(self, calling_domain: str, path: str,
|
|||
base_dir: str, http_prefix: str, cookie: str,
|
||||
translate: {}, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time) -> bool:
|
||||
"""Confirm whether to delete a calendar event
|
||||
"""
|
||||
|
|
@ -6450,6 +6569,10 @@ def _confirm_delete_event(self, calling_domain: str, path: str,
|
|||
actor = \
|
||||
'http://' + i2p_domain + \
|
||||
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',
|
||||
cookie, calling_domain, 303)
|
||||
fitness_performance(getreq_start_time,
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@ from httpcodes import http_404
|
|||
from utils import get_full_domain
|
||||
from utils import get_domain_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
|
||||
|
||||
|
||||
|
|
@ -29,6 +31,7 @@ def follow_approve_button(self, calling_domain: str, path: str,
|
|||
base_dir: str, http_prefix: str,
|
||||
domain: str, domain_full: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time,
|
||||
proxy_type: str, debug: bool,
|
||||
curr_session,
|
||||
|
|
@ -44,6 +47,7 @@ def follow_approve_button(self, calling_domain: str, path: str,
|
|||
signing_priv_key_pem: str,
|
||||
followers_sync_cache: {},
|
||||
session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
session, mitm_servers: []) -> None:
|
||||
"""Follow approve button was pressed
|
||||
"""
|
||||
|
|
@ -71,6 +75,12 @@ def follow_approve_button(self, calling_domain: str, path: str,
|
|||
curr_session = session_i2p
|
||||
proxy_type = 'i2p'
|
||||
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 = \
|
||||
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,
|
||||
session_onion,
|
||||
session_i2p,
|
||||
session_yggdrasil,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
base_dir, http_prefix,
|
||||
follower_nickname,
|
||||
domain, port,
|
||||
|
|
@ -111,6 +123,9 @@ def follow_approve_button(self, calling_domain: str, path: str,
|
|||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
origin_path_str_absolute = \
|
||||
'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,
|
||||
'_GET', '_follow_approve_button',
|
||||
debug)
|
||||
|
|
@ -122,6 +137,7 @@ def follow_deny_button(self, calling_domain: str, path: str,
|
|||
cookie: str, base_dir: str, http_prefix: str,
|
||||
domain: str, domain_full: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time, debug: bool,
|
||||
federation_list: [],
|
||||
send_threads: {},
|
||||
|
|
@ -135,6 +151,7 @@ def follow_deny_button(self, calling_domain: str, path: str,
|
|||
system_language: str,
|
||||
fitness: {},
|
||||
session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
mitm_servers: []) -> None:
|
||||
"""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,
|
||||
session_onion,
|
||||
session_i2p,
|
||||
session_yggdrasil,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
base_dir, http_prefix,
|
||||
follower_nickname,
|
||||
domain, port,
|
||||
|
|
@ -181,6 +200,9 @@ def follow_deny_button(self, calling_domain: str, path: str,
|
|||
elif calling_domain.endswith('.i2p') and i2p_domain:
|
||||
origin_path_str_absolute = \
|
||||
'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,
|
||||
cookie, calling_domain, 303)
|
||||
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,
|
||||
domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time,
|
||||
proxy_type: str, cookie: str,
|
||||
debug: str, curr_session,
|
||||
|
|
@ -220,6 +243,7 @@ def delete_button(self, calling_domain: str, path: str,
|
|||
allow_deletion: bool,
|
||||
session_onion,
|
||||
session_i2p,
|
||||
session_yggdrasil,
|
||||
default_timeline: str,
|
||||
mitm_servers: [],
|
||||
instance_software: {}) -> None:
|
||||
|
|
@ -261,6 +285,8 @@ def delete_button(self, calling_domain: str, path: str,
|
|||
actor = 'http://' + onion_domain + users_path
|
||||
elif calling_domain.endswith('.i2p') and i2p_domain:
|
||||
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,
|
||||
cookie, calling_domain, 303)
|
||||
return
|
||||
|
|
@ -271,6 +297,8 @@ def delete_button(self, calling_domain: str, path: str,
|
|||
actor = 'http://' + onion_domain + users_path
|
||||
elif calling_domain.endswith('.i2p') and i2p_domain:
|
||||
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,
|
||||
cookie, calling_domain, 303)
|
||||
return
|
||||
|
|
@ -283,6 +311,10 @@ def delete_button(self, calling_domain: str, path: str,
|
|||
if '.onion/' in actor:
|
||||
curr_session = session_i2p
|
||||
proxy_type = 'i2p'
|
||||
if yggdrasil_domain:
|
||||
if is_yggdrasil_url(actor):
|
||||
curr_session = session_yggdrasil
|
||||
proxy_type = 'yggdrasil'
|
||||
|
||||
curr_session = \
|
||||
establish_session("delete_button",
|
||||
|
|
@ -334,6 +366,8 @@ def delete_button(self, calling_domain: str, path: str,
|
|||
actor = 'http://' + onion_domain + users_path
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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,
|
||||
'_GET', '_delete_button',
|
||||
debug)
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ from utils import remove_id_ending
|
|||
from utils import local_actor_url
|
||||
from utils import get_nickname_from_actor
|
||||
from utils import get_instance_url
|
||||
from utils import is_yggdrasil_url
|
||||
from mitm import detect_mitm
|
||||
from httpheaders import redirect_headers
|
||||
from session import establish_session
|
||||
|
|
@ -37,6 +38,7 @@ def announce_button(self, calling_domain: str, path: str,
|
|||
http_prefix: str,
|
||||
domain: str, domain_full: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time,
|
||||
repeat_private: bool,
|
||||
debug: bool,
|
||||
|
|
@ -71,6 +73,7 @@ def announce_button(self, calling_domain: str, path: str,
|
|||
bold_reading_nicknames: {},
|
||||
min_images_for_accounts: int,
|
||||
session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
mitm_servers: [],
|
||||
instance_software: {}) -> None:
|
||||
"""The announce/repeat button was pressed on a post
|
||||
|
|
@ -118,7 +121,8 @@ def announce_button(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
actor
|
||||
actor_path_str = \
|
||||
actor_absolute + '/' + timeline_str + \
|
||||
|
|
@ -135,6 +139,10 @@ def announce_button(self, calling_domain: str, path: str,
|
|||
if '.onion/' in actor:
|
||||
curr_session = session_i2p
|
||||
proxy_type = 'i2p'
|
||||
if yggdrasil_domain:
|
||||
if is_yggdrasil_url(actor):
|
||||
curr_session = session_yggdrasil
|
||||
proxy_type = 'yggdrasil'
|
||||
|
||||
curr_session = \
|
||||
establish_session("announce_button",
|
||||
|
|
@ -169,7 +177,9 @@ def announce_button(self, calling_domain: str, path: str,
|
|||
signing_priv_key_pem,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain, sites_unavailable,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
sites_unavailable,
|
||||
system_language,
|
||||
mitm_servers)
|
||||
announce_filename = None
|
||||
|
|
@ -279,7 +289,8 @@ def announce_button(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
'/users/' + self.post_to_nickname
|
||||
|
||||
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,
|
||||
http_prefix: str, domain: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time, debug: bool,
|
||||
recent_posts_cache: {}, curr_session,
|
||||
icons_cache: {},
|
||||
project_version: str,
|
||||
fitness: {},
|
||||
session_onion, session_i2p) -> None:
|
||||
session_onion, session_i2p,
|
||||
session_yggdrasil) -> None:
|
||||
"""Undo announce/repeat button was pressed
|
||||
"""
|
||||
page_number = 1
|
||||
|
|
@ -350,7 +363,8 @@ def announce_button_undo(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
actor
|
||||
actor_path_str = \
|
||||
actor_absolute + '/' + timeline_str + '?page=' + \
|
||||
|
|
@ -367,6 +381,10 @@ def announce_button_undo(self, calling_domain: str, path: str,
|
|||
if '.onion/' in actor:
|
||||
curr_session = session_i2p
|
||||
proxy_type = 'i2p'
|
||||
if yggdrasil_domain:
|
||||
if is_yggdrasil_url(actor):
|
||||
curr_session = session_yggdrasil
|
||||
proxy_type = 'yggdrasil'
|
||||
|
||||
curr_session = \
|
||||
establish_session("announce_button_undo",
|
||||
|
|
@ -426,7 +444,8 @@ def announce_button_undo(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
'/users/' + self.post_to_nickname
|
||||
|
||||
actor_path_str = \
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ from utils import is_dm
|
|||
from utils import get_nickname_from_actor
|
||||
from utils import get_instance_url
|
||||
from utils import local_actor_url
|
||||
from utils import is_yggdrasil_url
|
||||
from mitm import detect_mitm
|
||||
from session import establish_session
|
||||
from httpheaders import redirect_headers
|
||||
|
|
@ -33,6 +34,7 @@ def bookmark_button(self, calling_domain: str, path: str,
|
|||
base_dir: str, http_prefix: str,
|
||||
domain: str, domain_full: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time,
|
||||
proxy_type: str, cookie: str,
|
||||
debug: str,
|
||||
|
|
@ -66,6 +68,7 @@ def bookmark_button(self, calling_domain: str, path: str,
|
|||
min_images_for_accounts: [],
|
||||
session_onion,
|
||||
session_i2p,
|
||||
session_yggdrasil,
|
||||
mitm_servers: [],
|
||||
instance_software: {}) -> None:
|
||||
"""Bookmark button was pressed
|
||||
|
|
@ -114,7 +117,8 @@ def bookmark_button(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
actor
|
||||
actor_path_str = \
|
||||
actor_absolute + '/' + timeline_str + \
|
||||
|
|
@ -131,6 +135,10 @@ def bookmark_button(self, calling_domain: str, path: str,
|
|||
if '.onion/' in actor:
|
||||
curr_session = session_i2p
|
||||
proxy_type = 'i2p'
|
||||
if yggdrasil_domain:
|
||||
if is_yggdrasil_url(actor):
|
||||
curr_session = session_yggdrasil
|
||||
proxy_type = 'yggdrasil'
|
||||
|
||||
curr_session = \
|
||||
establish_session("bookmark_button",
|
||||
|
|
@ -235,7 +243,8 @@ def bookmark_button(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
'/users/' + self.post_to_nickname
|
||||
|
||||
actor_path_str = \
|
||||
|
|
@ -253,6 +262,7 @@ def bookmark_button_undo(self, calling_domain: str, path: str,
|
|||
base_dir: str, http_prefix: str,
|
||||
domain: str, domain_full: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time,
|
||||
proxy_type: str, cookie: str,
|
||||
debug: str,
|
||||
|
|
@ -286,6 +296,7 @@ def bookmark_button_undo(self, calling_domain: str, path: str,
|
|||
min_images_for_accounts: [],
|
||||
session_onion,
|
||||
session_i2p,
|
||||
session_yggdrasil,
|
||||
mitm_servers: [],
|
||||
instance_software: {}) -> None:
|
||||
"""Button pressed to undo a bookmark
|
||||
|
|
@ -333,7 +344,8 @@ def bookmark_button_undo(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
actor
|
||||
actor_path_str = \
|
||||
actor_absolute + '/' + timeline_str + \
|
||||
|
|
@ -350,6 +362,10 @@ def bookmark_button_undo(self, calling_domain: str, path: str,
|
|||
if '.onion/' in actor:
|
||||
curr_session = session_i2p
|
||||
proxy_type = 'i2p'
|
||||
if yggdrasil_domain:
|
||||
if is_yggdrasil_url(actor):
|
||||
curr_session = session_yggdrasil
|
||||
proxy_type = 'yggdrasil'
|
||||
|
||||
curr_session = \
|
||||
establish_session("bookmark_button_undo",
|
||||
|
|
@ -455,7 +471,8 @@ def bookmark_button_undo(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
'/users/' + self.post_to_nickname
|
||||
|
||||
actor_path_str = \
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ from utils import locate_post
|
|||
from utils import local_actor_url
|
||||
from utils import get_nickname_from_actor
|
||||
from utils import get_instance_url
|
||||
from utils import is_yggdrasil_url
|
||||
from mitm import detect_mitm
|
||||
from daemon_utils import post_to_outbox
|
||||
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,
|
||||
domain: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time,
|
||||
proxy_type: str, cookie: str,
|
||||
debug: str,
|
||||
|
|
@ -68,6 +70,7 @@ def like_button(self, calling_domain: str, path: str,
|
|||
min_images_for_accounts: [],
|
||||
session_onion,
|
||||
session_i2p,
|
||||
session_yggdrasil,
|
||||
mitm_servers: [],
|
||||
instance_software: {}) -> None:
|
||||
"""Press the like button
|
||||
|
|
@ -116,7 +119,8 @@ def like_button(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
actor
|
||||
actor_path_str = \
|
||||
actor_absolute + '/' + timeline_str + \
|
||||
|
|
@ -133,6 +137,10 @@ def like_button(self, calling_domain: str, path: str,
|
|||
if '.onion/' in actor:
|
||||
curr_session = session_i2p
|
||||
proxy_type = 'i2p'
|
||||
if yggdrasil_domain:
|
||||
if is_yggdrasil_url(actor):
|
||||
curr_session = session_yggdrasil
|
||||
proxy_type = 'yggdrasil'
|
||||
|
||||
curr_session = \
|
||||
establish_session("like_button",
|
||||
|
|
@ -289,7 +297,8 @@ def like_button(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
'/users/' + self.post_to_nickname
|
||||
|
||||
actor_path_str = \
|
||||
|
|
@ -307,6 +316,7 @@ def like_button_undo(self, calling_domain: str, path: str,
|
|||
base_dir: str, http_prefix: str,
|
||||
domain: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time,
|
||||
proxy_type: str, cookie: str,
|
||||
debug: str,
|
||||
|
|
@ -340,6 +350,7 @@ def like_button_undo(self, calling_domain: str, path: str,
|
|||
icons_cache: {},
|
||||
session_onion,
|
||||
session_i2p,
|
||||
session_yggdrasil,
|
||||
mitm_servers: [],
|
||||
instance_software: {}) -> None:
|
||||
"""A button is pressed to undo
|
||||
|
|
@ -387,7 +398,8 @@ def like_button_undo(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
actor
|
||||
actor_path_str = \
|
||||
actor_absolute + '/' + timeline_str + \
|
||||
|
|
@ -404,6 +416,10 @@ def like_button_undo(self, calling_domain: str, path: str,
|
|||
if '.onion/' in actor:
|
||||
curr_session = session_i2p
|
||||
proxy_type = 'i2p'
|
||||
if yggdrasil_domain:
|
||||
if is_yggdrasil_url(actor):
|
||||
curr_session = session_yggdrasil
|
||||
proxy_type = 'yggdrasil'
|
||||
|
||||
curr_session = \
|
||||
establish_session("like_button_undo",
|
||||
|
|
@ -548,7 +564,8 @@ def like_button_undo(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
'/users/' + self.post_to_nickname
|
||||
|
||||
actor_path_str = \
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ from utils import get_cached_post_filename
|
|||
from utils import load_json
|
||||
from utils import locate_post
|
||||
from utils import get_nickname_from_actor
|
||||
from utils import is_yggdrasil_address
|
||||
from mitm import detect_mitm
|
||||
from httpcodes import http_404
|
||||
from httpheaders import redirect_headers
|
||||
|
|
@ -30,6 +31,7 @@ def mute_button(self, calling_domain: str, path: str,
|
|||
base_dir: str, http_prefix: str,
|
||||
domain: str, domain_full: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time, cookie: str,
|
||||
debug: str, curr_session,
|
||||
signing_priv_key_pem: str,
|
||||
|
|
@ -201,6 +203,10 @@ def mute_button(self, calling_domain: str, path: str,
|
|||
actor = \
|
||||
'http://' + i2p_domain + \
|
||||
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,
|
||||
'_GET', '_mute_button', debug)
|
||||
|
||||
|
|
@ -215,6 +221,7 @@ def mute_button_undo(self, calling_domain: str, path: str,
|
|||
base_dir: str, http_prefix: str,
|
||||
domain: str, domain_full: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time, cookie: str,
|
||||
debug: str, curr_session,
|
||||
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:
|
||||
actor = \
|
||||
'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,
|
||||
'_GET', '_undo_mute_button', debug)
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ from utils import is_dm
|
|||
from utils import local_actor_url
|
||||
from utils import get_instance_url
|
||||
from utils import get_nickname_from_actor
|
||||
from utils import is_yggdrasil_url
|
||||
from mitm import detect_mitm
|
||||
from httpheaders import redirect_headers
|
||||
from session import establish_session
|
||||
|
|
@ -36,6 +37,7 @@ def reaction_button(self, calling_domain: str, path: str,
|
|||
base_dir: str, http_prefix: str,
|
||||
domain: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time,
|
||||
proxy_type: str, cookie: str,
|
||||
debug: str,
|
||||
|
|
@ -67,6 +69,7 @@ def reaction_button(self, calling_domain: str, path: str,
|
|||
bold_reading_nicknames: {},
|
||||
min_images_for_accounts: [],
|
||||
session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
mitm_servers: [],
|
||||
instance_software: {}) -> None:
|
||||
"""Press an emoji reaction button
|
||||
|
|
@ -120,7 +123,8 @@ def reaction_button(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
actor
|
||||
actor_path_str = \
|
||||
actor_absolute + '/' + timeline_str + \
|
||||
|
|
@ -137,7 +141,8 @@ def reaction_button(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
actor
|
||||
actor_path_str = \
|
||||
actor_absolute + '/' + timeline_str + \
|
||||
|
|
@ -154,6 +159,10 @@ def reaction_button(self, calling_domain: str, path: str,
|
|||
if '.onion/' in actor:
|
||||
curr_session = session_i2p
|
||||
proxy_type = 'i2p'
|
||||
if yggdrasil_domain:
|
||||
if is_yggdrasil_url(actor):
|
||||
curr_session = session_yggdrasil
|
||||
proxy_type = 'yggdrasil'
|
||||
|
||||
curr_session = \
|
||||
establish_session("reaction_button",
|
||||
|
|
@ -316,7 +325,8 @@ def reaction_button(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
'/users/' + self.post_to_nickname
|
||||
|
||||
actor_path_str = \
|
||||
|
|
@ -334,6 +344,7 @@ def reaction_button_undo(self, calling_domain: str, path: str,
|
|||
base_dir: str, http_prefix: str,
|
||||
domain: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time,
|
||||
proxy_type: str, cookie: str,
|
||||
debug: str,
|
||||
|
|
@ -366,6 +377,7 @@ def reaction_button_undo(self, calling_domain: str, path: str,
|
|||
min_images_for_accounts: [],
|
||||
session_onion,
|
||||
session_i2p,
|
||||
session_yggdrasil,
|
||||
mitm_servers: [],
|
||||
instance_software: {}) -> None:
|
||||
"""A button is pressed to undo emoji reaction
|
||||
|
|
@ -413,7 +425,8 @@ def reaction_button_undo(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
actor
|
||||
actor_path_str = \
|
||||
actor_absolute + '/' + timeline_str + \
|
||||
|
|
@ -433,7 +446,8 @@ def reaction_button_undo(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
actor
|
||||
actor_path_str = \
|
||||
actor_absolute + '/' + timeline_str + \
|
||||
|
|
@ -451,6 +465,10 @@ def reaction_button_undo(self, calling_domain: str, path: str,
|
|||
if '.onion/' in actor:
|
||||
curr_session = session_i2p
|
||||
proxy_type = 'i2p'
|
||||
if yggdrasil_domain:
|
||||
if is_yggdrasil_url(actor):
|
||||
curr_session = session_yggdrasil
|
||||
proxy_type = 'yggdrasil'
|
||||
|
||||
curr_session = \
|
||||
establish_session("reaction_button_undo",
|
||||
|
|
@ -598,7 +616,8 @@ def reaction_button_undo(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
'/users/' + self.post_to_nickname
|
||||
|
||||
actor_path_str = \
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ def get_featured_collection(self, calling_domain: str,
|
|||
domain_full: str,
|
||||
system_language: str,
|
||||
onion_domain: str,
|
||||
i2p_domain: str) -> None:
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str) -> None:
|
||||
"""Returns the featured posts collections in
|
||||
actor/collections/featured
|
||||
"""
|
||||
|
|
@ -37,7 +38,8 @@ def get_featured_collection(self, calling_domain: str,
|
|||
ensure_ascii=False)
|
||||
msg_str = convert_domains(calling_domain, referer_domain,
|
||||
msg_str, http_prefix,
|
||||
domain, onion_domain, i2p_domain)
|
||||
domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -52,7 +54,8 @@ def get_featured_tags_collection(self, calling_domain: str,
|
|||
referer_domain: str,
|
||||
path: str, http_prefix: 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
|
||||
actor/collections/featuredTags
|
||||
"""
|
||||
|
|
@ -71,7 +74,8 @@ def get_featured_tags_collection(self, calling_domain: str,
|
|||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -88,7 +92,8 @@ def get_following_json(self, base_dir: str, path: str,
|
|||
domain: str, port: int,
|
||||
following_items_per_page: int,
|
||||
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
|
||||
"""
|
||||
following_json = \
|
||||
|
|
@ -106,7 +111,8 @@ def get_following_json(self, base_dir: str, path: str,
|
|||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@ def show_shares_feed(self, authorized: bool,
|
|||
fitness: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
hide_recent_posts: {}) -> bool:
|
||||
"""Shows the shares feed for a particular account/actor
|
||||
|
|
@ -199,7 +200,8 @@ def show_shares_feed(self, authorized: bool,
|
|||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -260,6 +262,7 @@ def show_following_feed(self, authorized: bool,
|
|||
fitness: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
hide_recent_posts: {}) -> bool:
|
||||
"""Shows the following feed for a particular account/actor
|
||||
|
|
@ -403,7 +406,8 @@ def show_following_feed(self, authorized: bool,
|
|||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -464,6 +468,7 @@ def show_moved_feed(self, authorized: bool,
|
|||
fitness: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
hide_recent_posts: {}) -> bool:
|
||||
"""Shows the moved feed for a particular account/actor
|
||||
|
|
@ -594,7 +599,8 @@ def show_moved_feed(self, authorized: bool,
|
|||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -655,6 +661,7 @@ def show_inactive_feed(self, authorized: bool,
|
|||
fitness: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
hide_recent_posts: {}) -> bool:
|
||||
"""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,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -849,6 +857,7 @@ def show_followers_feed(self, authorized: bool,
|
|||
fitness: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
hide_recent_posts: {}) -> bool:
|
||||
"""Shows the followers feed for a particular account/actor
|
||||
|
|
@ -989,7 +998,8 @@ def show_followers_feed(self, authorized: bool,
|
|||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ from httpheaders import set_headers
|
|||
from blocking import is_blocked_hashtag
|
||||
from utils import convert_domains
|
||||
from utils import get_nickname_from_actor
|
||||
from utils import is_yggdrasil_address
|
||||
from fitnessFunctions import fitness_performance
|
||||
from webapp_utils import html_hashtag_blocked
|
||||
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,
|
||||
domain: str, domain_full: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time,
|
||||
system_language: str,
|
||||
fitness: {}, debug: bool) -> None:
|
||||
|
|
@ -66,9 +68,12 @@ def hashtag_search_rss2(self, calling_domain: str,
|
|||
if calling_domain.endswith('.onion') and onion_domain:
|
||||
origin_path_str_absolute = \
|
||||
'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 = \
|
||||
'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',
|
||||
cookie, calling_domain, 303)
|
||||
fitness_performance(getreq_start_time, fitness,
|
||||
|
|
@ -82,6 +87,7 @@ def hashtag_search_json2(self, calling_domain: str,
|
|||
base_dir: str, http_prefix: str,
|
||||
domain: str, domain_full: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time,
|
||||
max_posts_in_feed: int,
|
||||
fitness: {}, debug: bool) -> None:
|
||||
|
|
@ -113,7 +119,8 @@ def hashtag_search_json2(self, calling_domain: str,
|
|||
msg_str = json.dumps(hashtag_json)
|
||||
msg_str = convert_domains(calling_domain, referer_domain,
|
||||
msg_str, http_prefix, domain,
|
||||
onion_domain, i2p_domain)
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
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:
|
||||
origin_path_str_absolute = \
|
||||
'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 = \
|
||||
'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,
|
||||
cookie, calling_domain, 303)
|
||||
fitness_performance(getreq_start_time, fitness,
|
||||
|
|
@ -141,6 +151,7 @@ def hashtag_search2(self, calling_domain: str,
|
|||
base_dir: str, http_prefix: str,
|
||||
domain: str, domain_full: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time,
|
||||
curr_session,
|
||||
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:
|
||||
origin_path_str_absolute = \
|
||||
'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 = \
|
||||
'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',
|
||||
cookie, calling_domain, 303)
|
||||
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,
|
||||
base_dir: str, domain: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
port: int, getreq_start_time,
|
||||
fitness: {}, debug: bool) -> bool:
|
||||
"""Shows a QR code for an account
|
||||
|
|
@ -500,6 +501,9 @@ def show_qrcode(self, calling_domain: str, path: str,
|
|||
elif i2p_domain:
|
||||
qrcode_domain = i2p_domain
|
||||
port = 80
|
||||
elif yggdrasil_domain:
|
||||
qrcode_domain = yggdrasil_domain
|
||||
port = 80
|
||||
else:
|
||||
qrcode_domain = domain
|
||||
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,
|
||||
domain: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time,
|
||||
cookie: str, debug: str,
|
||||
enable_shared_inbox: bool,
|
||||
|
|
@ -42,7 +43,8 @@ def show_instance_actor(self, calling_domain: str,
|
|||
accept_str = self.headers['Accept']
|
||||
actor_domain_url = get_instance_url(calling_domain,
|
||||
http_prefix, domain_full,
|
||||
onion_domain, i2p_domain)
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
actor_url = actor_domain_url + '/users/Actor'
|
||||
remove_fields = (
|
||||
'icon', 'image', 'tts', 'shares',
|
||||
|
|
@ -75,7 +77,8 @@ def show_instance_actor(self, calling_domain: str,
|
|||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
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,
|
||||
http_prefix: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time,
|
||||
authorized: bool, debug: bool,
|
||||
news_instance: bool, fitness: {}) -> bool:
|
||||
|
|
@ -56,7 +57,8 @@ def redirect_to_login_screen(self, calling_domain: str, path: str,
|
|||
redirect_url = \
|
||||
get_instance_url(calling_domain,
|
||||
http_prefix, domain_full,
|
||||
onion_domain, i2p_domain) + \
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
divert_path
|
||||
redirect_headers(self, redirect_url, None, calling_domain, 303)
|
||||
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,
|
||||
domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
translate: {},
|
||||
registration: bool,
|
||||
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,
|
||||
http_prefix, base_dir, nickname, domain,
|
||||
domain_full, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
translate, registration, system_language,
|
||||
project_version,
|
||||
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,
|
||||
http_prefix, base_dir, nickname, domain,
|
||||
domain_full, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
translate, registration, system_language,
|
||||
project_version, custom_emoji,
|
||||
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,
|
||||
domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
translate: {},
|
||||
registration: bool,
|
||||
system_language: str,
|
||||
|
|
@ -158,6 +162,7 @@ def _masto_api_v1(self, path: str, calling_domain: str,
|
|||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
translate,
|
||||
registration,
|
||||
system_language,
|
||||
|
|
@ -170,7 +175,8 @@ def _masto_api_v1(self, path: str, calling_domain: str,
|
|||
msg_str = json.dumps(send_json)
|
||||
msg_str = convert_domains(calling_domain, referer_domain,
|
||||
msg_str, http_prefix, domain,
|
||||
onion_domain, i2p_domain)
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
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,
|
||||
domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
translate: {},
|
||||
registration: bool,
|
||||
system_language: str,
|
||||
|
|
@ -286,6 +293,7 @@ def _masto_api_v2(self, path: str, calling_domain: str,
|
|||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
translate,
|
||||
registration,
|
||||
system_language,
|
||||
|
|
@ -297,7 +305,8 @@ def _masto_api_v2(self, path: str, calling_domain: str,
|
|||
msg_str = json.dumps(send_json)
|
||||
msg_str = convert_domains(calling_domain, referer_domain,
|
||||
msg_str, http_prefix, domain,
|
||||
onion_domain, i2p_domain)
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
if has_accept(self, calling_domain):
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ from httpheaders import set_headers
|
|||
from newswire import get_rss_from_dict
|
||||
from fitnessFunctions import fitness_performance
|
||||
from flags import is_moderator
|
||||
from utils import is_yggdrasil_address
|
||||
from utils import data_dir
|
||||
from utils import local_actor_url
|
||||
from utils import save_json
|
||||
|
|
@ -65,6 +66,7 @@ def newswire_vote(self, calling_domain: str, path: str,
|
|||
base_dir: str, http_prefix: str,
|
||||
domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time,
|
||||
newswire: {}, default_timeline: str,
|
||||
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):
|
||||
origin_path_str_absolute = \
|
||||
'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,
|
||||
'_GET', '_newswire_vote',
|
||||
debug)
|
||||
|
|
@ -122,6 +127,7 @@ def newswire_unvote(self, calling_domain: str, path: str,
|
|||
cookie: str, base_dir: str, http_prefix: str,
|
||||
domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time, debug: bool,
|
||||
newswire: {}, default_timeline: str,
|
||||
fitness: {}) -> None:
|
||||
|
|
@ -166,6 +172,9 @@ def newswire_unvote(self, calling_domain: str, path: str,
|
|||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
origin_path_str_absolute = \
|
||||
'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,
|
||||
cookie, calling_domain, 303)
|
||||
fitness_performance(getreq_start_time, fitness,
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ def get_nodeinfo(self, ua_str: str, calling_domain: str,
|
|||
known_crawlers: [],
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
project_version: str,
|
||||
show_node_info_version: bool,
|
||||
show_node_info_accounts: bool,
|
||||
|
|
@ -123,7 +124,8 @@ def get_nodeinfo(self, ua_str: str, calling_domain: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
about_url = instance_url + '/about'
|
||||
terms_of_service_url = instance_url + '/terms'
|
||||
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,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
protocol_str = \
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@ def _show_post_from_file(self, post_filename: str, liked_by: str,
|
|||
fitness: {}, path: str,
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
instance_software: {},
|
||||
ua_str: str) -> bool:
|
||||
|
|
@ -206,7 +207,8 @@ def _show_post_from_file(self, post_filename: str, liked_by: str,
|
|||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
protocol_str = \
|
||||
|
|
@ -257,6 +259,7 @@ def show_individual_post(self, ssml_getreq: bool, authorized: bool,
|
|||
auto_cw_cache: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
instance_software: {},
|
||||
ua_str: str) -> bool:
|
||||
|
|
@ -365,6 +368,7 @@ def show_individual_post(self, ssml_getreq: bool, authorized: bool,
|
|||
fitness, path,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
mitm_servers,
|
||||
instance_software,
|
||||
ua_str)
|
||||
|
|
@ -601,6 +605,7 @@ def show_individual_at_post(self, ssml_getreq: bool, authorized: bool,
|
|||
auto_cw_cache: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
bold_reading_nicknames: {},
|
||||
mitm_servers: [],
|
||||
instance_software: {},
|
||||
|
|
@ -716,6 +721,7 @@ def show_individual_at_post(self, ssml_getreq: bool, authorized: bool,
|
|||
fitness, path,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
mitm_servers,
|
||||
instance_software,
|
||||
ua_str)
|
||||
|
|
@ -965,6 +971,7 @@ def show_replies_to_post(self, authorized: bool,
|
|||
fitness: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
instance_software: {}) -> bool:
|
||||
"""Shows the replies to a post
|
||||
|
|
@ -1093,7 +1100,8 @@ def show_replies_to_post(self, authorized: bool,
|
|||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
protocol_str = \
|
||||
get_json_content_from_accept(self.headers['Accept'])
|
||||
|
|
@ -1214,7 +1222,8 @@ def show_replies_to_post(self, authorized: bool,
|
|||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
protocol_str = \
|
||||
get_json_content_from_accept(self.headers['Accept'])
|
||||
|
|
@ -1263,6 +1272,7 @@ def show_notify_post(self, authorized: bool,
|
|||
auto_cw_cache: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
bold_reading_nicknames: {},
|
||||
mitm_servers: [],
|
||||
instance_software: {},
|
||||
|
|
@ -1325,6 +1335,7 @@ def show_notify_post(self, authorized: bool,
|
|||
fitness, path,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
mitm_servers,
|
||||
instance_software,
|
||||
ua_str)
|
||||
|
|
@ -1343,6 +1354,7 @@ def show_conversation_thread(self, authorized: bool,
|
|||
domain_full: str,
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
account_timezone: {},
|
||||
bold_reading_nicknames: {},
|
||||
translate: {},
|
||||
|
|
@ -1405,7 +1417,8 @@ def show_conversation_thread(self, authorized: bool,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
post_id = instance_url + post_id
|
||||
nickname = path.split('/users/')[1]
|
||||
if conv_separator in nickname:
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ def show_person_profile(self, authorized: bool,
|
|||
base_dir: str, http_prefix: str,
|
||||
domain: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time,
|
||||
proxy_type: str, cookie: str,
|
||||
debug: str,
|
||||
|
|
@ -88,7 +89,8 @@ def show_person_profile(self, authorized: bool,
|
|||
actor_json = person_lookup(domain, path, base_dir)
|
||||
if not actor_json:
|
||||
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):
|
||||
curr_session = \
|
||||
establish_session("show_person_profile",
|
||||
|
|
@ -186,7 +188,8 @@ def show_person_profile(self, authorized: bool,
|
|||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
if 'application/ld+json' in accept_str:
|
||||
|
|
@ -249,6 +252,7 @@ def show_roles(self, calling_domain: str, referer_domain: str,
|
|||
fitness: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
hide_recent_posts: {}) -> bool:
|
||||
"""Show roles within profile screen
|
||||
|
|
@ -351,7 +355,8 @@ def show_roles(self, calling_domain: str, referer_domain: str,
|
|||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
protocol_str = \
|
||||
|
|
@ -408,6 +413,7 @@ def show_skills(self, calling_domain: str, referer_domain: str,
|
|||
domain_full: str,
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
hide_recent_posts: {}) -> bool:
|
||||
"""Show skills on the profile screen
|
||||
|
|
@ -522,7 +528,8 @@ def show_skills(self, calling_domain: str, referer_domain: str,
|
|||
http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -541,7 +548,7 @@ def show_skills(self, calling_domain: str, referer_domain: str,
|
|||
actor = path.replace('/skills', '')
|
||||
actor_absolute = \
|
||||
get_instance_url(calling_domain, http_prefix, domain_full,
|
||||
onion_domain, i2p_domain) + \
|
||||
onion_domain, i2p_domain, yggdrasil_domain) + \
|
||||
actor
|
||||
redirect_headers(self, actor_absolute, cookie, calling_domain, 303)
|
||||
return True
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ def progressive_web_app_manifest(self, base_dir: str,
|
|||
domain: str,
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
fitness: {},
|
||||
debug: bool) -> None:
|
||||
"""gets the PWA manifest
|
||||
|
|
@ -36,7 +37,8 @@ def progressive_web_app_manifest(self, base_dir: str,
|
|||
http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
|
||||
msglen = len(msg)
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ def reaction_picker2(self, calling_domain: str, path: str,
|
|||
getreq_start_time, cookie: str,
|
||||
debug: str, curr_session,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
recent_posts_cache: {},
|
||||
max_recent_posts: int,
|
||||
translate: {},
|
||||
|
|
@ -86,7 +87,8 @@ def reaction_picker2(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
actor
|
||||
actor_path_str = \
|
||||
actor_absolute + '/' + timeline_str + \
|
||||
|
|
@ -107,7 +109,8 @@ def reaction_picker2(self, calling_domain: str, path: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
actor
|
||||
actor_path_str = \
|
||||
actor_absolute + '/' + timeline_str + \
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@ def show_media_timeline(self, authorized: bool,
|
|||
full_width_tl_button_header: bool,
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
hide_announces: {},
|
||||
mitm_servers: []) -> bool:
|
||||
"""Shows the media timeline
|
||||
|
|
@ -228,7 +229,8 @@ def show_media_timeline(self, authorized: bool,
|
|||
referer_domain,
|
||||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain, i2p_domain)
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -305,6 +307,7 @@ def show_blogs_timeline(self, authorized: bool,
|
|||
fitness: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: []) -> bool:
|
||||
"""Shows the blogs timeline
|
||||
"""
|
||||
|
|
@ -443,7 +446,8 @@ def show_blogs_timeline(self, authorized: bool,
|
|||
referer_domain,
|
||||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain, i2p_domain)
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -521,6 +525,7 @@ def show_news_timeline(self, authorized: bool,
|
|||
fitness: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: []) -> bool:
|
||||
"""Shows the news timeline
|
||||
"""
|
||||
|
|
@ -664,7 +669,8 @@ def show_news_timeline(self, authorized: bool,
|
|||
referer_domain,
|
||||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain, i2p_domain)
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -740,6 +746,7 @@ def show_features_timeline(self, authorized: bool,
|
|||
fitness: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: []) -> bool:
|
||||
"""Shows the features timeline (all local blogs)
|
||||
"""
|
||||
|
|
@ -880,7 +887,8 @@ def show_features_timeline(self, authorized: bool,
|
|||
msg_str,
|
||||
http_prefix,
|
||||
domain,
|
||||
onion_domain, i2p_domain)
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -1259,6 +1267,7 @@ def show_bookmarks_timeline(self, authorized: bool,
|
|||
fitness: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: []) -> bool:
|
||||
"""Shows the bookmarks timeline
|
||||
"""
|
||||
|
|
@ -1393,7 +1402,8 @@ def show_bookmarks_timeline(self, authorized: bool,
|
|||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -1471,6 +1481,7 @@ def show_outbox_timeline(self, authorized: bool,
|
|||
fitness: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
hide_announces: {},
|
||||
mitm_servers: [],
|
||||
hide_recent_posts: {}) -> bool:
|
||||
|
|
@ -1616,7 +1627,8 @@ def show_outbox_timeline(self, authorized: bool,
|
|||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -1680,6 +1692,7 @@ def show_mod_timeline(self, authorized: bool,
|
|||
fitness: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: []) -> bool:
|
||||
"""Shows the moderation timeline
|
||||
"""
|
||||
|
|
@ -1813,7 +1826,8 @@ def show_mod_timeline(self, authorized: bool,
|
|||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -1887,6 +1901,7 @@ def show_dms(self, authorized: bool,
|
|||
fitness: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: []) -> bool:
|
||||
"""Shows the DMs timeline
|
||||
"""
|
||||
|
|
@ -2023,7 +2038,8 @@ def show_dms(self, authorized: bool,
|
|||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -2101,6 +2117,7 @@ def show_replies(self, authorized: bool,
|
|||
fitness: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: []) -> bool:
|
||||
"""Shows the replies timeline
|
||||
"""
|
||||
|
|
@ -2238,7 +2255,8 @@ def show_replies(self, authorized: bool,
|
|||
referer_domain,
|
||||
msg_str, http_prefix,
|
||||
domain,
|
||||
onion_domain, i2p_domain)
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
@ -2315,6 +2333,7 @@ def show_inbox(self, authorized: bool,
|
|||
auto_cw_cache: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
hide_announces: {},
|
||||
mitm_servers: []) -> bool:
|
||||
"""Shows the inbox timeline
|
||||
|
|
@ -2461,7 +2480,8 @@ def show_inbox(self, authorized: bool,
|
|||
http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
set_headers(self, 'text/html', msglen,
|
||||
|
|
@ -2482,7 +2502,8 @@ def show_inbox(self, authorized: bool,
|
|||
http_prefix,
|
||||
domain,
|
||||
onion_domain,
|
||||
i2p_domain)
|
||||
i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
accept_str = self.headers['Accept']
|
||||
|
|
|
|||
|
|
@ -18,12 +18,14 @@ from webfinger import webfinger_meta
|
|||
from webfinger import wellknown_protocol_handler
|
||||
from utils import get_json_content_from_accept
|
||||
from utils import convert_domains
|
||||
from utils import is_yggdrasil_address
|
||||
from daemon_utils import has_accept
|
||||
|
||||
|
||||
def get_webfinger(self, calling_domain: str, referer_domain: str,
|
||||
cookie: str, path: str, debug: bool,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
http_prefix: str, domain: str, domain_full: str,
|
||||
base_dir: str, port: int) -> bool:
|
||||
if not path.startswith('/.well-known'):
|
||||
|
|
@ -42,6 +44,10 @@ def get_webfinger(self, calling_domain: str, referer_domain: str,
|
|||
i2p_domain):
|
||||
wf_result = \
|
||||
webfinger_meta('http', i2p_domain)
|
||||
elif (is_yggdrasil_address(calling_domain) and
|
||||
yggdrasil_domain):
|
||||
wf_result = \
|
||||
webfinger_meta('http', yggdrasil_domain)
|
||||
else:
|
||||
wf_result = \
|
||||
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'):
|
||||
protocol_url, _ = \
|
||||
wellknown_protocol_handler(path, 'http', i2p_domain)
|
||||
elif is_yggdrasil_address(calling_domain):
|
||||
protocol_url, _ = \
|
||||
wellknown_protocol_handler(path, 'http', yggdrasil_domain)
|
||||
else:
|
||||
protocol_url, _ = \
|
||||
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):
|
||||
wf_result = \
|
||||
webfinger_node_info('http', i2p_domain)
|
||||
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||
wf_result = \
|
||||
webfinger_node_info('http', yggdrasil_domain)
|
||||
else:
|
||||
wf_result = \
|
||||
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 = convert_domains(calling_domain, referer_domain,
|
||||
msg_str, http_prefix, domain,
|
||||
onion_domain, i2p_domain)
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
if has_accept(self, calling_domain):
|
||||
|
|
@ -116,12 +129,13 @@ def get_webfinger(self, calling_domain: str, referer_domain: str,
|
|||
wf_result = \
|
||||
webfinger_lookup(path, base_dir,
|
||||
domain, onion_domain,
|
||||
i2p_domain, port, debug)
|
||||
i2p_domain, yggdrasil_domain, port, debug)
|
||||
if wf_result:
|
||||
msg_str = json.dumps(wf_result)
|
||||
msg_str = convert_domains(calling_domain, referer_domain,
|
||||
msg_str, http_prefix, domain,
|
||||
onion_domain, i2p_domain)
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
msg = msg_str.encode('utf-8')
|
||||
msglen = len(msg)
|
||||
set_headers(self, 'application/jrd+json', msglen,
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import errno
|
|||
import json
|
||||
from socket import error as SocketError
|
||||
from flags import is_corporate
|
||||
from utils import is_yggdrasil_address
|
||||
from utils import replace_strings
|
||||
from utils import string_ends_with
|
||||
from utils import get_config_param
|
||||
|
|
@ -239,6 +240,13 @@ def daemon_http_post(self) -> None:
|
|||
print('POST domain blocked: ' + calling_domain)
|
||||
http_400(self)
|
||||
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:
|
||||
if calling_domain not in (self.server.domain,
|
||||
self.server.domain_full):
|
||||
|
|
@ -368,6 +376,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.manual_follower_approval,
|
||||
self.server.default_timeline)
|
||||
self.server.postreq_busy = False
|
||||
|
|
@ -388,6 +397,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.max_post_length)
|
||||
self.server.postreq_busy = False
|
||||
return
|
||||
|
|
@ -400,7 +410,9 @@ def daemon_http_post(self) -> None:
|
|||
self.server.domain,
|
||||
self.server.domain_full,
|
||||
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.system_language,
|
||||
self.server.content_license_url,
|
||||
|
|
@ -426,6 +438,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.max_post_length)
|
||||
self.server.postreq_busy = False
|
||||
return
|
||||
|
|
@ -440,6 +453,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.max_post_length)
|
||||
self.server.postreq_busy = False
|
||||
return
|
||||
|
|
@ -455,6 +469,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.max_post_length)
|
||||
self.server.postreq_busy = False
|
||||
return
|
||||
|
|
@ -468,6 +483,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.news_instance,
|
||||
self.server.max_post_length,
|
||||
self.server.system_language,
|
||||
|
|
@ -497,6 +513,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.translate,
|
||||
self.server.system_language,
|
||||
self.server.signing_priv_key_pem,
|
||||
|
|
@ -541,6 +558,7 @@ def daemon_http_post(self) -> None:
|
|||
search_for_emoji,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
postreq_start_time,
|
||||
self.server.debug,
|
||||
curr_session,
|
||||
|
|
@ -608,6 +626,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.port,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
curr_session,
|
||||
proxy_type,
|
||||
self.server.base_dir,
|
||||
|
|
@ -636,6 +655,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
curr_session, proxy_type,
|
||||
self.server.person_cache,
|
||||
self.server.max_shares_on_profile,
|
||||
|
|
@ -651,7 +671,8 @@ def daemon_http_post(self) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain)
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain)
|
||||
self.server.postreq_busy = False
|
||||
return
|
||||
|
||||
|
|
@ -676,6 +697,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
curr_session, proxy_type)
|
||||
self.server.postreq_busy = False
|
||||
return
|
||||
|
|
@ -695,6 +717,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.port,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.debug,
|
||||
curr_session,
|
||||
proxy_type, self.server.translate,
|
||||
|
|
@ -725,6 +748,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.debug,
|
||||
self.server.books_cache)
|
||||
self.server.postreq_busy = False
|
||||
|
|
@ -745,6 +769,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.port,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.debug,
|
||||
curr_session, proxy_type,
|
||||
self.server.person_cache)
|
||||
|
|
@ -766,6 +791,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.port,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.debug)
|
||||
self.server.postreq_busy = False
|
||||
return
|
||||
|
|
@ -785,6 +811,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.port,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.debug)
|
||||
self.server.postreq_busy = False
|
||||
return
|
||||
|
|
@ -805,6 +832,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.port,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.debug,
|
||||
curr_session,
|
||||
authorized,
|
||||
|
|
@ -866,6 +894,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
access_keys,
|
||||
self.server.default_timeline,
|
||||
self.server.access_keys,
|
||||
|
|
@ -895,6 +924,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.default_timeline,
|
||||
self.server.theme_name,
|
||||
allow_local_network_access,
|
||||
|
|
@ -924,6 +954,7 @@ def daemon_http_post(self) -> None:
|
|||
if origin_domain != self.server.domain_full and \
|
||||
origin_domain != self.server.onion_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:
|
||||
if self.server.debug:
|
||||
print('DEBUG: ' +
|
||||
|
|
@ -1009,6 +1040,7 @@ def daemon_http_post(self) -> None:
|
|||
self.server.block_federated,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.max_shares_on_profile,
|
||||
self.server.watermark_width_percent,
|
||||
self.server.watermark_position,
|
||||
|
|
@ -1041,6 +1073,15 @@ def daemon_http_post(self) -> None:
|
|||
'?page=' + str(page_number)
|
||||
redirect_headers(self, actor_path_str, cookie,
|
||||
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:
|
||||
actor_path_str = \
|
||||
local_actor_url(self.server.http_prefix, nickname,
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import urllib.parse
|
|||
from socket import error as SocketError
|
||||
from flags import has_group_type
|
||||
from flags import is_moderator
|
||||
from utils import is_yggdrasil_address
|
||||
from utils import get_nickname_from_actor
|
||||
from utils import get_domain_from_actor
|
||||
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,
|
||||
domain: str, domain_full: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
debug: bool,
|
||||
curr_session, proxy_type: str,
|
||||
person_cache: {}) -> None:
|
||||
|
|
@ -134,6 +136,8 @@ def unfollow_confirm(self, calling_domain: str, cookie: str,
|
|||
origin_path_str = 'http://' + onion_domain + users_path
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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)
|
||||
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,
|
||||
domain: str, domain_full: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
debug: bool,
|
||||
curr_session, proxy_type: str,
|
||||
translate: {},
|
||||
|
|
@ -285,6 +290,15 @@ def follow_confirm2(self, calling_domain: str, cookie: str,
|
|||
following_port = 80
|
||||
curr_http_prefix = 'http'
|
||||
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 = \
|
||||
establish_session("follow request confirm",
|
||||
|
|
@ -310,6 +324,7 @@ def follow_confirm2(self, calling_domain: str, cookie: str,
|
|||
domain,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
sites_unavailable,
|
||||
system_language,
|
||||
mitm_servers)
|
||||
|
|
@ -328,6 +343,8 @@ def follow_confirm2(self, calling_domain: str, cookie: str,
|
|||
origin_path_str = 'http://' + onion_domain + users_path
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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 ' +
|
||||
blocking_actor)
|
||||
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
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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)
|
||||
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,
|
||||
domain: str, domain_full: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
debug: bool) -> None:
|
||||
"""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
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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)
|
||||
redirect_headers(self, origin_path_str,
|
||||
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
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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 ' +
|
||||
blocking_actor)
|
||||
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
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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)
|
||||
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,
|
||||
domain: str, domain_full: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
debug: bool) -> None:
|
||||
"""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
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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)
|
||||
redirect_headers(self, origin_path_str,
|
||||
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
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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)
|
||||
redirect_headers(self, origin_path_str,
|
||||
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
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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)
|
||||
self.server.postreq_busy = False
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ def set_hashtag_category2(self, calling_domain: str, cookie: str,
|
|||
domain_full: str,
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
max_post_length: int) -> None:
|
||||
"""On the screen after selecting a hashtag from the swarm, this sets
|
||||
the category for that tag
|
||||
|
|
@ -55,7 +56,8 @@ def set_hashtag_category2(self, calling_domain: str, cookie: str,
|
|||
actor_str = \
|
||||
get_instance_url(calling_domain,
|
||||
http_prefix, domain_full,
|
||||
onion_domain, i2p_domain) + \
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
users_path
|
||||
tag_screen_str = actor_str + '/tags/' + hashtag
|
||||
|
||||
|
|
|
|||
|
|
@ -13,12 +13,14 @@ from socket import error as SocketError
|
|||
from httpheaders import redirect_headers
|
||||
from utils import acct_dir
|
||||
from utils import save_json
|
||||
from utils import is_yggdrasil_address
|
||||
|
||||
|
||||
def keyboard_shortcuts(self, calling_domain: str, cookie: str,
|
||||
base_dir: str, http_prefix: str, nickname: str,
|
||||
domain: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
access_keys2: {}, default_timeline: str,
|
||||
access_keys: {}, key_shortcuts: {}) -> None:
|
||||
"""Receive POST from webapp_accesskeys
|
||||
|
|
@ -63,6 +65,10 @@ def keyboard_shortcuts(self, calling_domain: str, cookie: str,
|
|||
origin_path_str = \
|
||||
'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)
|
||||
self.server.postreq_busy = False
|
||||
return
|
||||
|
|
@ -100,6 +106,9 @@ def keyboard_shortcuts(self, calling_domain: str, cookie: str,
|
|||
elif calling_domain.endswith('.i2p') and i2p_domain:
|
||||
origin_path_str = \
|
||||
'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)
|
||||
self.server.postreq_busy = False
|
||||
return
|
||||
|
|
|
|||
|
|
@ -131,6 +131,7 @@ def links_update(self, calling_domain: str, cookie: str,
|
|||
allow_local_network_access: bool,
|
||||
http_prefix: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
max_post_length: int) -> None:
|
||||
"""Updates the left links column of the timeline
|
||||
"""
|
||||
|
|
@ -141,7 +142,8 @@ def links_update(self, calling_domain: str, cookie: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
users_path
|
||||
|
||||
boundary = None
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ from webapp_login import html_get_login_credentials
|
|||
from webapp_suspended import html_suspended
|
||||
from flags import is_suspended
|
||||
from flags import is_local_network_address
|
||||
from utils import is_yggdrasil_address
|
||||
from utils import data_dir
|
||||
from utils import acct_dir
|
||||
from utils import get_instance_url
|
||||
|
|
@ -45,6 +46,7 @@ def post_login_screen(self, calling_domain: str, cookie: str,
|
|||
domain_full: str,
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
manual_follower_approval: bool,
|
||||
default_timeline: str) -> None:
|
||||
"""POST to login screen, containing credentials
|
||||
|
|
@ -104,7 +106,8 @@ def post_login_screen(self, calling_domain: str, cookie: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
'/login'
|
||||
redirect_headers(self, login_url, cookie, calling_domain, 303)
|
||||
return
|
||||
|
|
@ -118,7 +121,8 @@ def post_login_screen(self, calling_domain: str, cookie: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
'/login'
|
||||
redirect_headers(self, login_url, cookie, calling_domain, 303)
|
||||
return
|
||||
|
|
@ -131,7 +135,8 @@ def post_login_screen(self, calling_domain: str, cookie: str,
|
|||
else:
|
||||
ip_address = self.client_address[0]
|
||||
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):
|
||||
print('Login attempt from IP: ' + str(ip_address))
|
||||
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())
|
||||
self.server.last_login_failure = fail_time
|
||||
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):
|
||||
record_login_failure(base_dir, ip_address,
|
||||
self.server.login_failure_count,
|
||||
|
|
@ -216,7 +222,8 @@ def post_login_screen(self, calling_domain: str, cookie: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
'/users/' + login_nickname + '/' + \
|
||||
default_timeline
|
||||
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_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
translate: {},
|
||||
system_language: str,
|
||||
signing_priv_key_pem: str,
|
||||
|
|
@ -57,7 +58,8 @@ def moderator_actions(self, path: str, calling_domain: str, cookie: str,
|
|||
actor_str = \
|
||||
get_instance_url(calling_domain,
|
||||
http_prefix, domain_full,
|
||||
onion_domain, i2p_domain) + \
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
users_path
|
||||
if not is_moderator(base_dir, nickname):
|
||||
redirect_headers(self, actor_str + '/moderation',
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ def newswire_update(self, calling_domain: str, cookie: str,
|
|||
default_timeline: str,
|
||||
http_prefix: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
max_post_length: int) -> None:
|
||||
"""Updates the right newswire column of the timeline
|
||||
"""
|
||||
|
|
@ -42,7 +43,8 @@ def newswire_update(self, calling_domain: str, cookie: str,
|
|||
actor_str = \
|
||||
get_instance_url(calling_domain,
|
||||
http_prefix, domain_full,
|
||||
onion_domain, i2p_domain) + \
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
users_path
|
||||
|
||||
boundary = None
|
||||
|
|
@ -231,6 +233,7 @@ def citations_update(self, calling_domain: str, cookie: str,
|
|||
newswire: {},
|
||||
http_prefix: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
max_post_length: int) -> None:
|
||||
"""Updates the citations for a blog post after hitting
|
||||
update button on the citations screen
|
||||
|
|
@ -239,7 +242,8 @@ def citations_update(self, calling_domain: str, cookie: str,
|
|||
actor_str = \
|
||||
get_instance_url(calling_domain,
|
||||
http_prefix, domain_full,
|
||||
onion_domain, i2p_domain) + \
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
users_path
|
||||
nickname = get_nickname_from_actor(actor_str)
|
||||
if not nickname:
|
||||
|
|
@ -330,6 +334,7 @@ def news_post_edit(self, calling_domain: str, cookie: str,
|
|||
domain: str, debug: bool,
|
||||
http_prefix: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
news_instance: bool,
|
||||
max_post_length: int,
|
||||
system_language: str,
|
||||
|
|
@ -342,7 +347,8 @@ def news_post_edit(self, calling_domain: str, cookie: str,
|
|||
actor_str = \
|
||||
get_instance_url(calling_domain,
|
||||
http_prefix, domain_full,
|
||||
onion_domain, i2p_domain) + \
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
users_path
|
||||
|
||||
boundary = None
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@ from utils import get_config_param
|
|||
from utils import get_domain_from_actor
|
||||
from utils import get_full_domain
|
||||
from utils import remove_eol
|
||||
from utils import is_yggdrasil_address
|
||||
from utils import is_yggdrasil_url
|
||||
from session import establish_session
|
||||
from webapp_profile import html_profile_after_search
|
||||
from petnames import set_pet_name
|
||||
|
|
@ -238,6 +240,7 @@ def _person_options_view(self, options_confirm_params: str,
|
|||
lists_enabled: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
dogwhistles: {},
|
||||
min_images_for_accounts: {},
|
||||
buy_sites: [],
|
||||
|
|
@ -276,6 +279,9 @@ def _person_options_view(self, options_confirm_params: str,
|
|||
profile_handle.endswith('.i2p')):
|
||||
curr_proxy_type = '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 = \
|
||||
establish_session("handle search",
|
||||
|
|
@ -323,6 +329,7 @@ def _person_options_view(self, options_confirm_params: str,
|
|||
timezone,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
bold_reading,
|
||||
dogwhistles,
|
||||
min_images_for_accounts,
|
||||
|
|
@ -1075,6 +1082,7 @@ def _person_options_snooze(self, options_confirm_params: str,
|
|||
options_actor: str, base_dir: str,
|
||||
domain: str, calling_domain: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
default_timeline: str,
|
||||
page_number: int,
|
||||
cookie: str) -> bool:
|
||||
|
|
@ -1094,6 +1102,8 @@ def _person_options_snooze(self, options_confirm_params: str,
|
|||
this_actor = 'http://' + onion_domain + users_path
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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 = \
|
||||
this_actor + '/' + default_timeline + \
|
||||
'?page=' + str(page_number)
|
||||
|
|
@ -1111,6 +1121,7 @@ def _person_options_unsnooze(self, options_confirm_params: str,
|
|||
base_dir: str, domain: str,
|
||||
calling_domain: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
default_timeline: str,
|
||||
page_number: int, cookie: str) -> bool:
|
||||
"""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
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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 = \
|
||||
this_actor + '/' + default_timeline + \
|
||||
'?page=' + str(page_number)
|
||||
|
|
@ -1279,6 +1292,7 @@ def person_options2(self, path: str,
|
|||
base_dir: str, http_prefix: str,
|
||||
domain: str, domain_full: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
debug: bool, curr_session,
|
||||
authorized: bool,
|
||||
show_published_date_only: bool,
|
||||
|
|
@ -1328,6 +1342,8 @@ def person_options2(self, path: str,
|
|||
origin_path_str = 'http://' + onion_domain + users_path
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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)
|
||||
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
||||
self.server.postreq_busy = False
|
||||
|
|
@ -1378,6 +1394,8 @@ def person_options2(self, path: str,
|
|||
origin_path_str = 'http://' + onion_domain + users_path
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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)
|
||||
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
||||
self.server.postreq_busy = False
|
||||
|
|
@ -1389,6 +1407,8 @@ def person_options2(self, path: str,
|
|||
origin_path_str = 'http://' + onion_domain + users_path
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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)
|
||||
redirect_headers(self, origin_path_str, cookie, calling_domain, 303)
|
||||
self.server.postreq_busy = False
|
||||
|
|
@ -1435,6 +1455,7 @@ def person_options2(self, path: str,
|
|||
lists_enabled,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
dogwhistles,
|
||||
min_images_for_accounts,
|
||||
buy_sites,
|
||||
|
|
@ -1678,6 +1699,7 @@ def person_options2(self, path: str,
|
|||
options_actor, base_dir,
|
||||
domain, calling_domain,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
default_timeline,
|
||||
page_number,
|
||||
cookie):
|
||||
|
|
@ -1690,6 +1712,7 @@ def person_options2(self, path: str,
|
|||
base_dir, domain,
|
||||
calling_domain,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
default_timeline,
|
||||
page_number, cookie):
|
||||
return
|
||||
|
|
@ -1737,6 +1760,8 @@ def person_options2(self, path: str,
|
|||
origin_path_str = 'http://' + onion_domain + users_path
|
||||
elif calling_domain.endswith('.i2p') and i2p_domain:
|
||||
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)
|
||||
self.server.postreq_busy = False
|
||||
return
|
||||
|
|
|
|||
|
|
@ -164,6 +164,7 @@ def _profile_post_save_actor(base_dir: str, http_prefix: str,
|
|||
nickname: str, domain: str, port: int,
|
||||
actor_json: {}, actor_filename: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
curr_session, proxy_type: str,
|
||||
send_move_activity: bool,
|
||||
self, cached_webfingers: {},
|
||||
|
|
@ -190,7 +191,7 @@ def _profile_post_save_actor(base_dir: str, http_prefix: str,
|
|||
# save the actor
|
||||
save_json(actor_json, actor_filename)
|
||||
webfinger_update(base_dir, nickname, domain,
|
||||
onion_domain, i2p_domain,
|
||||
onion_domain, i2p_domain, yggdrasil_domain,
|
||||
cached_webfingers)
|
||||
# also copy to the actors cache and
|
||||
# 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,
|
||||
domain: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
debug: bool, allow_local_network_access: bool,
|
||||
system_language: str,
|
||||
content_license_url: str,
|
||||
|
|
@ -2794,7 +2796,7 @@ def profile_edit(self, calling_domain: str, cookie: str,
|
|||
users_path = users_path.replace('/editprofile', '')
|
||||
actor_str = \
|
||||
get_instance_url(calling_domain, http_prefix, domain_full,
|
||||
onion_domain, i2p_domain) + \
|
||||
onion_domain, i2p_domain, yggdrasil_domain) + \
|
||||
users_path
|
||||
|
||||
boundary = None
|
||||
|
|
@ -3477,6 +3479,7 @@ def profile_edit(self, calling_domain: str, cookie: str,
|
|||
self.server.port,
|
||||
actor_json, actor_filename,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
curr_session, proxy_type,
|
||||
send_move_activity,
|
||||
self, cached_webfingers,
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ from utils import get_domain_from_actor
|
|||
from utils import text_in_file
|
||||
from utils import get_nickname_from_actor
|
||||
from utils import acct_dir
|
||||
from utils import is_yggdrasil_address
|
||||
from httpheaders import redirect_headers
|
||||
from city import get_spoofed_city
|
||||
from languages import get_understood_languages
|
||||
|
|
@ -33,6 +34,7 @@ def receive_vote(self, calling_domain: str, cookie: str,
|
|||
path: str, http_prefix: str,
|
||||
domain: str, domain_full: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
curr_session, proxy_type: str,
|
||||
base_dir: str, city: str,
|
||||
person_cache: {}, debug: bool,
|
||||
|
|
@ -96,6 +98,8 @@ def receive_vote(self, calling_domain: str, cookie: str,
|
|||
actor = 'http://' + onion_domain + users_path
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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 + '/' + default_timeline + \
|
||||
'?page=' + str(page_number)
|
||||
|
|
@ -163,6 +167,8 @@ def receive_vote(self, calling_domain: str, cookie: str,
|
|||
actor = 'http://' + onion_domain + users_path
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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 + '/' + default_timeline + \
|
||||
'?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,
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
instance_software: {}) -> int:
|
||||
""" 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,
|
||||
auto_cw_cache,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
mitm_servers,
|
||||
instance_software,
|
||||
self.server.block_military,
|
||||
|
|
@ -552,6 +554,7 @@ def _receive_new_post_process_newunlisted(self, fields: {},
|
|||
max_replies: int,
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
instance_software: {}) -> int:
|
||||
"""Unlisted post has been received from New Post screen
|
||||
|
|
@ -655,6 +658,7 @@ def _receive_new_post_process_newunlisted(self, fields: {},
|
|||
buy_sites,
|
||||
auto_cw_cache,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
mitm_servers,
|
||||
instance_software,
|
||||
self.server.block_military,
|
||||
|
|
@ -722,6 +726,7 @@ def _receive_new_post_process_newfollowers(self, fields: {},
|
|||
max_replies: int,
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
instance_software: {}) -> int:
|
||||
"""Followers only post has been received from New Post screen
|
||||
|
|
@ -835,6 +840,7 @@ def _receive_new_post_process_newfollowers(self, fields: {},
|
|||
buy_sites,
|
||||
auto_cw_cache,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
mitm_servers,
|
||||
instance_software,
|
||||
self.server.block_military,
|
||||
|
|
@ -903,6 +909,7 @@ def _receive_new_post_process_newdm(self, fields: {},
|
|||
max_replies: int,
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
instance_software: {}) -> int:
|
||||
"""Direct message post has been received from New Post screen
|
||||
|
|
@ -1024,6 +1031,7 @@ def _receive_new_post_process_newdm(self, fields: {},
|
|||
buy_sites,
|
||||
auto_cw_cache,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
mitm_servers,
|
||||
instance_software,
|
||||
self.server.block_military,
|
||||
|
|
@ -1091,6 +1099,7 @@ def _receive_new_post_process_newreminder(self, fields: {}, nickname: str,
|
|||
proxy_type: str,
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
instance_software: {}) -> int:
|
||||
"""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,
|
||||
auto_cw_cache,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
mitm_servers,
|
||||
instance_software,
|
||||
self.server.block_military,
|
||||
|
|
@ -1431,6 +1441,7 @@ def _receive_new_post_process_newreading(self, fields: {},
|
|||
max_replies: int,
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
instance_software: {}) -> int:
|
||||
"""Reading status post has been received from New Post screen
|
||||
|
|
@ -1555,6 +1566,7 @@ def _receive_new_post_process_newreading(self, fields: {},
|
|||
buy_sites,
|
||||
auto_cw_cache,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
mitm_servers,
|
||||
instance_software,
|
||||
self.server.block_military,
|
||||
|
|
@ -1604,6 +1616,7 @@ def _receive_new_post_process_newshare(self, fields: {},
|
|||
domain_full: str,
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
person_cache: {},
|
||||
max_shares_on_profile: int,
|
||||
project_version: str,
|
||||
|
|
@ -1688,7 +1701,8 @@ def _receive_new_post_process_newshare(self, fields: {},
|
|||
get_instance_url(calling_domain,
|
||||
http_prefix, domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
'/users/' + nickname
|
||||
actor_json = get_person_from_cache(base_dir,
|
||||
actor, person_cache)
|
||||
|
|
@ -1770,6 +1784,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
|||
block_federated: [],
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
max_shares_on_profile: int,
|
||||
watermark_width_percent: int,
|
||||
watermark_position: str,
|
||||
|
|
@ -2072,6 +2087,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
|||
max_replies,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
mitm_servers,
|
||||
instance_software)
|
||||
if post_type == 'newblog':
|
||||
|
|
@ -2150,6 +2166,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
|||
max_replies,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
mitm_servers,
|
||||
instance_software)
|
||||
if post_type == 'newfollowers':
|
||||
|
|
@ -2196,7 +2213,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
|||
project_version,
|
||||
proxy_type,
|
||||
max_replies,
|
||||
onion_domain, i2p_domain,
|
||||
onion_domain, i2p_domain, yggdrasil_domain,
|
||||
mitm_servers,
|
||||
instance_software)
|
||||
if post_type == 'newdm':
|
||||
|
|
@ -2246,6 +2263,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
|||
max_replies,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
mitm_servers,
|
||||
instance_software)
|
||||
if post_type == 'newreminder':
|
||||
|
|
@ -2291,7 +2309,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
|||
buy_sites,
|
||||
project_version,
|
||||
proxy_type,
|
||||
onion_domain, i2p_domain,
|
||||
onion_domain, i2p_domain, yggdrasil_domain,
|
||||
mitm_servers,
|
||||
instance_software)
|
||||
if post_type == 'newreport':
|
||||
|
|
@ -2366,7 +2384,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
|||
project_version,
|
||||
proxy_type,
|
||||
max_replies,
|
||||
onion_domain, i2p_domain,
|
||||
onion_domain, i2p_domain, yggdrasil_domain,
|
||||
mitm_servers,
|
||||
instance_software)
|
||||
if post_type in ('newshare', 'newwanted'):
|
||||
|
|
@ -2386,6 +2404,7 @@ def _receive_new_post_process(self, post_type: str, path: str, headers: {},
|
|||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
person_cache,
|
||||
max_shares_on_profile,
|
||||
project_version,
|
||||
|
|
@ -2427,6 +2446,7 @@ def receive_new_post(self, post_type, path: str,
|
|||
block_federated: [],
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
max_shares_on_profile: int,
|
||||
watermark_width_percent: int,
|
||||
watermark_position: str,
|
||||
|
|
@ -2570,6 +2590,7 @@ def receive_new_post(self, post_type, path: str,
|
|||
dm_license_url, block_federated,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
max_shares_on_profile,
|
||||
watermark_width_percent,
|
||||
watermark_position,
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ from utils import get_domain_from_actor
|
|||
from utils import local_actor_url
|
||||
from utils import get_config_param
|
||||
from utils import get_nickname_from_actor
|
||||
from utils import is_yggdrasil_address
|
||||
from reading import remove_reading_event
|
||||
from httpheaders import redirect_headers
|
||||
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,
|
||||
domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
debug: bool,
|
||||
books_cache: {}) -> None:
|
||||
"""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
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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)
|
||||
self.server.postreq_busy = False
|
||||
|
||||
|
|
@ -111,6 +115,7 @@ def remove_share(self, calling_domain: str, cookie: str,
|
|||
authorized: bool, path: str,
|
||||
base_dir: str, http_prefix: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
curr_session, proxy_type: str,
|
||||
person_cache: {},
|
||||
max_shares_on_profile: int,
|
||||
|
|
@ -181,7 +186,8 @@ def remove_share(self, calling_domain: str, cookie: str,
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
'/users/' + share_nickname
|
||||
actor_json = get_person_from_cache(base_dir,
|
||||
actor, person_cache)
|
||||
|
|
@ -221,6 +227,8 @@ def remove_share(self, calling_domain: str, cookie: str,
|
|||
origin_path_str = 'http://' + onion_domain + users_path
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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',
|
||||
cookie, calling_domain, 303)
|
||||
self.server.postreq_busy = False
|
||||
|
|
@ -230,7 +238,8 @@ def remove_wanted(self, calling_domain: str, cookie: str,
|
|||
authorized: bool, path: str,
|
||||
base_dir: str, http_prefix: 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
|
||||
"""
|
||||
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
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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',
|
||||
cookie, calling_domain, 303)
|
||||
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,
|
||||
domain: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
curr_session, proxy_type: str) -> None:
|
||||
"""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
|
||||
elif (calling_domain.endswith('.i2p') and i2p_domain):
|
||||
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:
|
||||
redirect_headers(self, origin_path_str + '/outbox', cookie,
|
||||
calling_domain, 303)
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ from utils import get_full_domain
|
|||
from utils import local_actor_url
|
||||
from utils import remove_eol
|
||||
from utils import valid_nickname
|
||||
from utils import is_yggdrasil_url
|
||||
from webapp_utils import get_avatar_image_url
|
||||
from webapp_search import html_hashtag_search
|
||||
from webapp_search import html_skills_search
|
||||
|
|
@ -40,6 +41,7 @@ def _receive_search_redirect(self, calling_domain: str,
|
|||
domain_full: str,
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
users_path: str,
|
||||
default_timeline: str,
|
||||
cookie: str) -> None:
|
||||
|
|
@ -47,7 +49,8 @@ def _receive_search_redirect(self, calling_domain: str,
|
|||
"""
|
||||
actor_str = \
|
||||
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,
|
||||
cookie, calling_domain, 303)
|
||||
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,
|
||||
calling_domain: str, http_prefix: 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,
|
||||
domain: str, proxy_type: str,
|
||||
person_cache: {}, signing_priv_key_pem: str,
|
||||
|
|
@ -477,7 +481,8 @@ def _receive_search_handle(self, search_str: str,
|
|||
actor_str = \
|
||||
get_instance_url(calling_domain, http_prefix,
|
||||
domain_full, onion_domain,
|
||||
i2p_domain) + users_path
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + users_path
|
||||
redirect_headers(self, actor_str + '/search',
|
||||
cookie, calling_domain, 303)
|
||||
self.server.postreq_busy = False
|
||||
|
|
@ -532,6 +537,9 @@ def _receive_search_handle(self, search_str: str,
|
|||
elif '.i2p/' in actor:
|
||||
curr_proxy_type = 'i2p'
|
||||
curr_session = self.server.session_i2p
|
||||
elif is_yggdrasil_url(actor):
|
||||
curr_proxy_type = 'yggdrasil'
|
||||
curr_session = self.server.session_yggdrasil
|
||||
|
||||
curr_session = \
|
||||
establish_session("handle search", curr_session,
|
||||
|
|
@ -577,6 +585,9 @@ def _receive_search_handle(self, search_str: str,
|
|||
profile_handle.endswith('.i2p')):
|
||||
curr_proxy_type = '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 = \
|
||||
establish_session("handle search", curr_session,
|
||||
|
|
@ -622,6 +633,7 @@ def _receive_search_handle(self, search_str: str,
|
|||
timezone,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
bold_reading,
|
||||
dogwhistles,
|
||||
min_images_for_accounts,
|
||||
|
|
@ -648,7 +660,8 @@ def _receive_search_handle(self, search_str: str,
|
|||
actor_str = \
|
||||
get_instance_url(calling_domain,
|
||||
http_prefix, domain_full,
|
||||
onion_domain, i2p_domain) + users_path
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain) + users_path
|
||||
redirect_headers(self, actor_str + '/search',
|
||||
cookie, calling_domain, 303)
|
||||
self.server.postreq_busy = False
|
||||
|
|
@ -762,6 +775,7 @@ def receive_search_query(self, calling_domain: str, cookie: str,
|
|||
domain: str, domain_full: str,
|
||||
port: int, search_for_emoji: bool,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
getreq_start_time, debug: bool,
|
||||
curr_session, proxy_type: str,
|
||||
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', '')
|
||||
actor_str = \
|
||||
get_instance_url(calling_domain, http_prefix, domain_full,
|
||||
onion_domain, i2p_domain) + \
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
users_path
|
||||
length = int(self.headers['Content-length'])
|
||||
try:
|
||||
|
|
@ -847,6 +862,7 @@ def receive_search_query(self, calling_domain: str, cookie: str,
|
|||
_receive_search_redirect(self, calling_domain,
|
||||
http_prefix, domain_full,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
users_path, default_timeline,
|
||||
cookie)
|
||||
return
|
||||
|
|
@ -1004,7 +1020,8 @@ def receive_search_query(self, calling_domain: str, cookie: str,
|
|||
if _receive_search_handle(self, search_str,
|
||||
calling_domain, http_prefix,
|
||||
domain_full, onion_domain,
|
||||
i2p_domain, users_path,
|
||||
i2p_domain, yggdrasil_domain,
|
||||
users_path,
|
||||
cookie, path, base_dir,
|
||||
domain, proxy_type,
|
||||
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,
|
||||
http_prefix, domain_full,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
users_path, default_timeline,
|
||||
cookie)
|
||||
|
|
|
|||
|
|
@ -15,12 +15,14 @@ from theme import set_theme
|
|||
from theme import set_theme_from_designer
|
||||
from httpheaders import redirect_headers
|
||||
from utils import load_json
|
||||
from utils import is_yggdrasil_address
|
||||
|
||||
|
||||
def theme_designer_edit(self, calling_domain: str, cookie: str,
|
||||
base_dir: str, http_prefix: str, nickname: str,
|
||||
domain: str, domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
default_timeline: str, theme_name: str,
|
||||
allow_local_network_access: bool,
|
||||
system_language: str,
|
||||
|
|
@ -73,6 +75,10 @@ def theme_designer_edit(self, calling_domain: str, cookie: str,
|
|||
origin_path_str = \
|
||||
'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)
|
||||
self.server.postreq_busy = False
|
||||
return
|
||||
|
|
@ -149,6 +155,9 @@ def theme_designer_edit(self, calling_domain: str, cookie: str,
|
|||
elif calling_domain.endswith('.i2p') and i2p_domain:
|
||||
origin_path_str = \
|
||||
'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)
|
||||
self.server.postreq_busy = False
|
||||
return
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@ def post_to_outbox(self, message_json: {}, version: str,
|
|||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain,
|
||||
self.server.port,
|
||||
self.server.recent_posts_cache,
|
||||
self.server.followers_threads,
|
||||
|
|
@ -812,7 +813,8 @@ def show_person_options(self, calling_domain: str, path: str,
|
|||
self.server.http_prefix,
|
||||
domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain) + \
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain) + \
|
||||
origin_path_str
|
||||
redirect_headers(self, origin_path_str_absolute, cookie,
|
||||
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 acct_dir
|
||||
from utils import resembles_url
|
||||
from utils import is_yggdrasil_address
|
||||
from media import archive_media
|
||||
from media import get_attachment_media_type
|
||||
from delete import send_delete_via_server
|
||||
|
|
@ -261,6 +262,10 @@ def _command_options() -> None:
|
|||
default=None,
|
||||
help='i2p domain name of the server if ' +
|
||||
'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,
|
||||
default=None,
|
||||
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')
|
||||
sys.exit()
|
||||
if '://' in argb.i2p_domain:
|
||||
argb.onion = argb.onion.split('://')[1]
|
||||
argb.i2p_domain = argb.i2p_domain.split('://')[1]
|
||||
i2p_domain = argb.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:
|
||||
language_code = get_config_param(base_dir, 'language')
|
||||
if language_code:
|
||||
|
|
@ -1735,6 +1751,13 @@ def _command_options() -> None:
|
|||
else:
|
||||
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
|
||||
config_port = get_config_param(base_dir, 'port')
|
||||
if config_port:
|
||||
|
|
@ -1792,6 +1815,7 @@ def _command_options() -> None:
|
|||
sys.exit()
|
||||
session_onion = None
|
||||
session_i2p = None
|
||||
session_yggdrasil = None
|
||||
session = create_session(proxy_type)
|
||||
send_threads = []
|
||||
post_log = []
|
||||
|
|
@ -1812,12 +1836,19 @@ def _command_options() -> None:
|
|||
i2p_domain = argb.i2p_domain
|
||||
if i2p_domain:
|
||||
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 = {}
|
||||
sites_unavailable: list[str] = []
|
||||
system_language = argb.language
|
||||
mitm_servers: list[str] = []
|
||||
manual_approve_follow_request(session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
base_dir, http_prefix,
|
||||
argb.nickname, domain, port,
|
||||
argb.approve,
|
||||
|
|
@ -1841,6 +1872,7 @@ def _command_options() -> None:
|
|||
sys.exit()
|
||||
session_onion = None
|
||||
session_i2p = None
|
||||
session_yggdrasil = None
|
||||
session = create_session(proxy_type)
|
||||
send_threads = []
|
||||
post_log = []
|
||||
|
|
@ -1861,12 +1893,19 @@ def _command_options() -> None:
|
|||
i2p_domain = argb.i2p_domain
|
||||
if i2p_domain:
|
||||
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 = {}
|
||||
sites_unavailable: list[str] = []
|
||||
mitm_servers: list[str] = []
|
||||
system_language = argb.language
|
||||
manual_deny_follow_request2(session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
base_dir, http_prefix,
|
||||
argb.nickname, domain, port,
|
||||
argb.deny,
|
||||
|
|
@ -4311,6 +4350,7 @@ def _command_options() -> None:
|
|||
opt['domain'] = domain
|
||||
opt['onion_domain'] = onion_domain
|
||||
opt['i2p_domain'] = i2p_domain
|
||||
opt['yggdrasil_domain'] = yggdrasil_domain
|
||||
opt['port'] = port
|
||||
opt['proxy_port'] = proxy_port
|
||||
opt['http_prefix'] = http_prefix
|
||||
|
|
@ -4371,6 +4411,7 @@ if __name__ == "__main__":
|
|||
opt2['registration'], argb2.language, __version__,
|
||||
opt2['instance_id'], argb2.client, opt2['base_dir'],
|
||||
opt2['domain'], opt2['onion_domain'], opt2['i2p_domain'],
|
||||
opt2['yggdrasil_domain'],
|
||||
argb2.yt_replace_domain,
|
||||
argb2.twitter_replacement_domain,
|
||||
opt2['port'], opt2['proxy_port'], opt2['http_prefix'],
|
||||
|
|
|
|||
10
follow.py
10
follow.py
|
|
@ -10,6 +10,7 @@ __module_group__ = "ActivityPub"
|
|||
import os
|
||||
from pprint import pprint
|
||||
from flags import has_group_type
|
||||
from utils import is_yggdrasil_address
|
||||
from utils import get_user_paths
|
||||
from utils import acct_handle_dir
|
||||
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,
|
||||
curr_domain: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
followers_sync_cache: {},
|
||||
sites_unavailable: [],
|
||||
system_language: str,
|
||||
|
|
@ -825,12 +827,15 @@ def followed_account_accepts(session, base_dir: str, http_prefix: str,
|
|||
person_cache, debug, project_version, None,
|
||||
group_account, signing_priv_key_pem,
|
||||
7856837, curr_domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
extra_headers, sites_unavailable,
|
||||
system_language, mitm_servers)
|
||||
|
||||
|
||||
def followed_account_rejects(session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
base_dir: str, http_prefix: str,
|
||||
nickname_to_follow: str, domain_to_follow: str,
|
||||
port: int,
|
||||
|
|
@ -896,6 +901,8 @@ def followed_account_rejects(session, session_onion, session_i2p,
|
|||
curr_session = session_onion
|
||||
elif domain.endswith('.i2p') and session_i2p:
|
||||
curr_session = session_i2p
|
||||
elif is_yggdrasil_address(domain) and session_yggdrasil:
|
||||
curr_session = session_yggdrasil
|
||||
extra_headers = {}
|
||||
domain_full = get_full_domain(domain, from_port)
|
||||
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,
|
||||
6393063,
|
||||
domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
extra_headers, sites_unavailable,
|
||||
system_language, mitm_servers)
|
||||
|
||||
|
|
@ -929,6 +937,7 @@ def send_follow_request(session, base_dir: str,
|
|||
project_version: str, signing_priv_key_pem: str,
|
||||
curr_domain: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
sites_unavailable: [],
|
||||
system_language: str,
|
||||
mitm_servers: []) -> {}:
|
||||
|
|
@ -1019,6 +1028,7 @@ def send_follow_request(session, base_dir: str,
|
|||
debug, project_version, None, group_account,
|
||||
signing_priv_key_pem, 8234389,
|
||||
curr_domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
extra_headers, sites_unavailable,
|
||||
system_language, mitm_servers)
|
||||
|
||||
|
|
|
|||
|
|
@ -60,7 +60,8 @@ def logout_redirect(self, redirect: str, calling_domain: str) -> None:
|
|||
self.server.http_prefix,
|
||||
self.server.domain_full,
|
||||
self.server.onion_domain,
|
||||
self.server.i2p_domain) + \
|
||||
self.server.i2p_domain,
|
||||
self.server.yggdrasil_domain) + \
|
||||
redirect
|
||||
print('WARN: redirect was not an absolute url, changed to ' +
|
||||
redirect + ' ' + calling_domain)
|
||||
|
|
@ -85,7 +86,8 @@ def redirect_headers(self, redirect: str, cookie: str,
|
|||
self.server.http_prefix,
|
||||
self.server.domain_full,
|
||||
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 ' +
|
||||
redirect)
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ from utils import get_full_domain
|
|||
from utils import is_account_dir
|
||||
from utils import get_nickname_from_actor
|
||||
from utils import get_domain_from_actor
|
||||
from utils import is_yggdrasil_address
|
||||
from follow import is_following_actor
|
||||
from follow import send_follow_request
|
||||
from session import create_session
|
||||
|
|
@ -116,6 +117,7 @@ def _update_import_following(base_dir: str,
|
|||
curr_proxy_type = httpd.proxy_type
|
||||
use_onion_session = False
|
||||
use_i2p_session = False
|
||||
use_yggdrasil_session = False
|
||||
if '.onion' not in domain and \
|
||||
httpd.onion_domain and '.onion' in following_domain:
|
||||
curr_session = httpd.session_onion
|
||||
|
|
@ -134,6 +136,16 @@ def _update_import_following(base_dir: str,
|
|||
curr_http_prefix = 'http'
|
||||
curr_proxy_type = 'i2p'
|
||||
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 = \
|
||||
_establish_import_session(httpd, "import follow",
|
||||
|
|
@ -143,6 +155,8 @@ def _update_import_following(base_dir: str,
|
|||
httpd.session_onion = curr_session
|
||||
elif use_i2p_session:
|
||||
httpd.session_i2p = curr_session
|
||||
elif use_yggdrasil_session:
|
||||
httpd.session_yggdrasil = curr_session
|
||||
else:
|
||||
main_session = curr_session
|
||||
|
||||
|
|
@ -164,6 +178,7 @@ def _update_import_following(base_dir: str,
|
|||
httpd.domain,
|
||||
httpd.onion_domain,
|
||||
httpd.i2p_domain,
|
||||
httpd.yggdrasil_domain,
|
||||
httpd.sites_unavailable,
|
||||
httpd.system_language,
|
||||
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 get_account_timezone
|
||||
from timeFunctions import get_current_time_int
|
||||
from utils import is_yggdrasil_address
|
||||
from utils import get_mutuals_of_person
|
||||
from utils import harmless_markup
|
||||
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,
|
||||
debug: bool,
|
||||
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
|
||||
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 + '/' in recipient:
|
||||
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?
|
||||
if domain_match in recipient:
|
||||
# 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: {},
|
||||
domain: str, port: int,
|
||||
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
|
||||
The shared dictionary contains followers
|
||||
"""
|
||||
|
|
@ -735,7 +741,8 @@ def _inbox_post_recipients(base_dir: str, post_json_object: {},
|
|||
recipients_dict,
|
||||
domain_match, domain_base,
|
||||
debug,
|
||||
onion_domain, i2p_domain)
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
if includes_followers:
|
||||
follower_recipients = True
|
||||
else:
|
||||
|
|
@ -753,7 +760,8 @@ def _inbox_post_recipients(base_dir: str, post_json_object: {},
|
|||
recipients_dict,
|
||||
domain_match, domain_base,
|
||||
debug,
|
||||
onion_domain, i2p_domain)
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
if includes_followers:
|
||||
follower_recipients = True
|
||||
else:
|
||||
|
|
@ -779,7 +787,8 @@ def _inbox_post_recipients(base_dir: str, post_json_object: {},
|
|||
recipients_dict,
|
||||
domain_match, domain_base,
|
||||
debug,
|
||||
onion_domain, i2p_domain)
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
if includes_followers:
|
||||
follower_recipients = True
|
||||
|
||||
|
|
@ -794,7 +803,8 @@ def _inbox_post_recipients(base_dir: str, post_json_object: {},
|
|||
recipients_dict,
|
||||
domain_match, domain_base,
|
||||
debug,
|
||||
onion_domain, i2p_domain)
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
if includes_followers:
|
||||
follower_recipients = True
|
||||
|
||||
|
|
@ -838,6 +848,7 @@ def update_edited_post(base_dir: str,
|
|||
auto_cw_cache: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
instance_software: {},
|
||||
block_military: {},
|
||||
|
|
@ -894,6 +905,7 @@ def update_edited_post(base_dir: str,
|
|||
max_hashtags, buy_sites,
|
||||
auto_cw_cache,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
mitm_servers,
|
||||
instance_software,
|
||||
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,
|
||||
domain: str, onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
person_cache: {},
|
||||
post_json_object: {}, debug: bool,
|
||||
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,
|
||||
__version__, http_prefix,
|
||||
domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
signing_priv_key_pem,
|
||||
mitm_servers)
|
||||
if pub_key:
|
||||
|
|
@ -1135,7 +1149,8 @@ def _group_handle(base_dir: str, handle: str) -> bool:
|
|||
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,
|
||||
post_json_object: {},
|
||||
http_prefix: str, federation_list: [],
|
||||
|
|
@ -1144,6 +1159,7 @@ def _send_to_group_members(server, session, session_onion, session_i2p,
|
|||
person_cache: {}, debug: bool,
|
||||
curr_domain: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
signing_priv_key_pem: str,
|
||||
sites_unavailable: [],
|
||||
system_language: str,
|
||||
|
|
@ -1204,12 +1220,15 @@ def _send_to_group_members(server, session, session_onion, session_i2p,
|
|||
person_cache, cached_webfingers,
|
||||
debug, __version__, signing_priv_key_pem,
|
||||
curr_domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
sites_unavailable, system_language,
|
||||
mitm_servers)
|
||||
|
||||
send_to_followers_thread(server, session, session_onion, session_i2p,
|
||||
send_to_followers_thread(server, session, session_onion,
|
||||
session_i2p, session_yggdrasil,
|
||||
base_dir, nickname, domain,
|
||||
onion_domain, i2p_domain, port,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain, port,
|
||||
http_prefix, federation_list,
|
||||
send_threads, post_log,
|
||||
cached_webfingers, person_cache,
|
||||
|
|
@ -1352,6 +1371,7 @@ def _bounce_dm(sender_post_id: str, session, http_prefix: str,
|
|||
languages_understood: [],
|
||||
bounce_is_chat: bool,
|
||||
curr_domain: str, onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
sites_unavailable: [],
|
||||
mitm_servers: []) -> bool:
|
||||
"""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,
|
||||
signing_priv_key_pem, 7238634,
|
||||
curr_domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
extra_headers, sites_unavailable, system_language,
|
||||
mitm_servers)
|
||||
return True
|
||||
|
|
@ -1458,6 +1479,7 @@ def _is_valid_dm(base_dir: str, nickname: str, domain: str, port: int,
|
|||
dm_license_url: str,
|
||||
languages_understood: [],
|
||||
curr_domain: str, onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
sites_unavailable: [],
|
||||
mitm_servers: []) -> bool:
|
||||
"""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,
|
||||
curr_domain,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
sites_unavailable,
|
||||
mitm_servers)
|
||||
return False
|
||||
|
|
@ -1747,7 +1770,8 @@ def _former_representations_to_edits(base_dir: str,
|
|||
max_hashtags: int,
|
||||
port: int,
|
||||
onion_domain: str,
|
||||
i2p_domain: str) -> bool:
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str) -> bool:
|
||||
""" Some instances use formerRepresentations to store
|
||||
previous edits
|
||||
"""
|
||||
|
|
@ -1806,7 +1830,8 @@ def _former_representations_to_edits(base_dir: str,
|
|||
allow_local_network_access, debug,
|
||||
system_language, http_prefix,
|
||||
domain_full, person_cache,
|
||||
max_hashtags, onion_domain, i2p_domain):
|
||||
max_hashtags, onion_domain,
|
||||
i2p_domain, yggdrasil_domain):
|
||||
continue
|
||||
|
||||
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,
|
||||
recent_posts_cache: {}, max_recent_posts: int,
|
||||
session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
key_id: str, handle: str, message_json: {},
|
||||
base_dir: str, http_prefix: str, send_threads: [],
|
||||
post_log: [], cached_webfingers: {}, person_cache: {},
|
||||
domain: str, onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
port: int, federation_list: [], debug: bool,
|
||||
queue_filename: str, destination_filename: str,
|
||||
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
|
||||
# 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)
|
||||
if onion_domain:
|
||||
if onion_domain in message_str:
|
||||
|
|
@ -1877,6 +1904,17 @@ def _inbox_after_initial(server, inbox_start_time,
|
|||
str(message_str))
|
||||
inbox_start_time = time.time()
|
||||
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
|
||||
if '#' in actor:
|
||||
|
|
@ -1947,6 +1985,7 @@ def _inbox_after_initial(server, inbox_start_time,
|
|||
base_dir, http_prefix,
|
||||
domain, port,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
cached_webfingers,
|
||||
person_cache,
|
||||
message_json,
|
||||
|
|
@ -2193,7 +2232,8 @@ def _inbox_after_initial(server, inbox_start_time,
|
|||
if receive_announce(recent_posts_cache,
|
||||
session, handle,
|
||||
base_dir, http_prefix,
|
||||
domain, onion_domain, i2p_domain, port,
|
||||
domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain, port,
|
||||
cached_webfingers,
|
||||
person_cache,
|
||||
message_json,
|
||||
|
|
@ -2269,7 +2309,9 @@ def _inbox_after_initial(server, inbox_start_time,
|
|||
http_prefix, handle, debug,
|
||||
post_json_object, recent_posts_cache,
|
||||
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,
|
||||
cached_webfingers, person_cache,
|
||||
signing_priv_key_pem,
|
||||
|
|
@ -2305,7 +2347,8 @@ def _inbox_after_initial(server, inbox_start_time,
|
|||
allow_local_network_access, debug,
|
||||
system_language, http_prefix,
|
||||
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,
|
||||
'INBOX', 'valid_post_content',
|
||||
debug)
|
||||
|
|
@ -2388,6 +2431,7 @@ def _inbox_after_initial(server, inbox_start_time,
|
|||
languages_understood,
|
||||
domain,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
server.sites_unavailable,
|
||||
mitm_servers):
|
||||
if debug:
|
||||
|
|
@ -2445,6 +2489,7 @@ def _inbox_after_initial(server, inbox_start_time,
|
|||
_obtain_avatar_for_reply_post(session, base_dir,
|
||||
http_prefix, domain,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
person_cache, post_json_object, debug,
|
||||
signing_priv_key_pem, mitm_servers)
|
||||
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,
|
||||
domain, domain_full,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
post_json_object,
|
||||
federation_list, debug, None)
|
||||
|
||||
|
|
@ -2527,7 +2573,8 @@ def _inbox_after_initial(server, inbox_start_time,
|
|||
person_cache,
|
||||
max_hashtags, port,
|
||||
onion_domain,
|
||||
i2p_domain):
|
||||
i2p_domain,
|
||||
yggdrasil_domain):
|
||||
# ensure that there is an updated entry
|
||||
# for the publication date
|
||||
if post_json_object['object'].get('published') and \
|
||||
|
|
@ -2712,6 +2759,7 @@ def _inbox_after_initial(server, inbox_start_time,
|
|||
if is_group:
|
||||
_send_to_group_members(server,
|
||||
session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
base_dir, handle, port,
|
||||
post_json_object,
|
||||
http_prefix, federation_list,
|
||||
|
|
@ -2719,6 +2767,7 @@ def _inbox_after_initial(server, inbox_start_time,
|
|||
post_log, cached_webfingers,
|
||||
person_cache, debug,
|
||||
domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
signing_priv_key_pem,
|
||||
sites_unavailable,
|
||||
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,
|
||||
session_yggdrasil,
|
||||
base_dir: str, http_prefix: str,
|
||||
port: int, send_threads: [], post_log: [],
|
||||
cached_webfingers: {}, person_cache: {},
|
||||
|
|
@ -2990,7 +3040,8 @@ def _receive_follow_request(session, session_onion, session_i2p,
|
|||
debug: bool, project_version: str,
|
||||
max_followers: int,
|
||||
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,
|
||||
followers_sync_cache: {},
|
||||
sites_unavailable: [],
|
||||
|
|
@ -3052,6 +3103,9 @@ def _receive_follow_request(session, session_onion, session_i2p,
|
|||
if i2p_domain:
|
||||
if domain_to_follow.endswith(i2p_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 debug:
|
||||
print('DEBUG: follow domain not permitted ' + domain_to_follow)
|
||||
|
|
@ -3119,6 +3173,16 @@ def _receive_follow_request(session, session_onion, session_i2p,
|
|||
port = 80
|
||||
if debug:
|
||||
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?
|
||||
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,
|
||||
curr_http_prefix,
|
||||
this_domain, onion_domain,
|
||||
i2p_domain, signing_priv_key_pem,
|
||||
i2p_domain, yggdrasil_domain,
|
||||
signing_priv_key_pem,
|
||||
mitm_servers)
|
||||
if not pubkey_result:
|
||||
if debug:
|
||||
|
|
@ -3215,6 +3280,7 @@ def _receive_follow_request(session, session_onion, session_i2p,
|
|||
person_cache, debug, project_version,
|
||||
curr_http_prefix, this_domain,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
signing_priv_key_pem,
|
||||
mitm_servers)
|
||||
if not pubkey_result:
|
||||
|
|
@ -3279,6 +3345,7 @@ def _receive_follow_request(session, session_onion, session_i2p,
|
|||
debug, project_version, True,
|
||||
signing_priv_key_pem,
|
||||
this_domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
followers_sync_cache, sites_unavailable,
|
||||
system_language, mitm_servers)
|
||||
|
||||
|
|
@ -3291,6 +3358,7 @@ def run_inbox_queue(server,
|
|||
cached_webfingers: {}, person_cache: {}, queue: [],
|
||||
domain: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
port: int, proxy_type: str,
|
||||
federation_list: [], max_replies: int,
|
||||
domain_max_posts_per_day: int,
|
||||
|
|
@ -3329,8 +3397,10 @@ def run_inbox_queue(server,
|
|||
# for onion and i2p domains
|
||||
session_onion = None
|
||||
session_i2p = None
|
||||
session_yggdrasil = None
|
||||
session_last_update_onion = 0
|
||||
session_last_update_i2p = 0
|
||||
session_last_update_yggdrasil = 0
|
||||
if proxy_type != 'tor' and onion_domain:
|
||||
print('Starting onion session when starting inbox queue')
|
||||
session_onion = create_session('tor')
|
||||
|
|
@ -3341,6 +3411,11 @@ def run_inbox_queue(server,
|
|||
session_i2p = create_session('i2p')
|
||||
if session_i2p:
|
||||
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
|
||||
if debug:
|
||||
|
|
@ -3513,6 +3588,18 @@ def run_inbox_queue(server,
|
|||
else:
|
||||
print('WARN: inbox i2p session not created')
|
||||
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,
|
||||
'INBOX', 'recreate_session', debug)
|
||||
inbox_start_time = time.time()
|
||||
|
|
@ -3541,6 +3628,9 @@ def run_inbox_queue(server,
|
|||
elif (sender_domain.endswith('.i2p') and
|
||||
session_i2p and proxy_type != 'i2p'):
|
||||
curr_session = session_i2p
|
||||
elif (is_yggdrasil_address(sender_domain) and
|
||||
session_yggdrasil and proxy_type != 'yggdrasil'):
|
||||
curr_session = session_yggdrasil
|
||||
|
||||
if debug:
|
||||
print('Obtaining public key for actor ' +
|
||||
|
|
@ -3572,6 +3662,7 @@ def run_inbox_queue(server,
|
|||
person_cache, debug,
|
||||
project_version, http_prefix,
|
||||
domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
signing_priv_key_pem,
|
||||
server.mitm_servers)
|
||||
fitness_performance(inbox_start_time, server.fitness,
|
||||
|
|
@ -3713,7 +3804,8 @@ def run_inbox_queue(server,
|
|||
# queue_json['post']['id'] = queue_json['id']
|
||||
|
||||
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)
|
||||
if os.path.isfile(queue_filename):
|
||||
try:
|
||||
|
|
@ -3731,7 +3823,8 @@ def run_inbox_queue(server,
|
|||
|
||||
if debug:
|
||||
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,
|
||||
send_threads, post_log,
|
||||
cached_webfingers,
|
||||
|
|
@ -3741,6 +3834,7 @@ def run_inbox_queue(server,
|
|||
debug, project_version,
|
||||
max_followers, domain,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
signing_priv_key_pem, unit_test,
|
||||
system_language,
|
||||
server.followers_sync_cache,
|
||||
|
|
@ -3767,7 +3861,8 @@ def run_inbox_queue(server,
|
|||
|
||||
if receive_accept_reject(base_dir, domain, queue_json['post'],
|
||||
federation_list, debug,
|
||||
domain, onion_domain, i2p_domain):
|
||||
domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain):
|
||||
print('Queue: Accept/Reject received from ' + key_id)
|
||||
if os.path.isfile(queue_filename):
|
||||
try:
|
||||
|
|
@ -3787,6 +3882,7 @@ def run_inbox_queue(server,
|
|||
federation_list,
|
||||
debug, domain,
|
||||
session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
base_dir,
|
||||
http_prefix,
|
||||
send_threads, post_log,
|
||||
|
|
@ -3794,7 +3890,7 @@ def run_inbox_queue(server,
|
|||
person_cache, project_version,
|
||||
signing_priv_key_pem,
|
||||
onion_domain,
|
||||
i2p_domain, {},
|
||||
i2p_domain, yggdrasil_domain, {},
|
||||
server.sites_unavailable,
|
||||
system_language,
|
||||
server.mitm_servers,
|
||||
|
|
@ -3828,6 +3924,7 @@ def run_inbox_queue(server,
|
|||
federation_list,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
server.sites_unavailable,
|
||||
server.blocked_cache,
|
||||
server.block_federated,
|
||||
|
|
@ -3873,7 +3970,8 @@ def run_inbox_queue(server,
|
|||
max_hashtags, server.buy_sites,
|
||||
server.auto_cw_cache,
|
||||
onion_domain,
|
||||
i2p_domain, server.mitm_servers,
|
||||
i2p_domain, yggdrasil_domain,
|
||||
server.mitm_servers,
|
||||
server.instance_software,
|
||||
server.block_military,
|
||||
server.block_government,
|
||||
|
|
@ -3899,7 +3997,8 @@ def run_inbox_queue(server,
|
|||
recipients_dict, recipients_dict_followers = \
|
||||
_inbox_post_recipients(base_dir, queue_json['post'],
|
||||
domain, port, debug,
|
||||
onion_domain, i2p_domain)
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
if len(recipients_dict.items()) == 0 and \
|
||||
len(recipients_dict_followers.items()) == 0:
|
||||
if debug:
|
||||
|
|
@ -3980,6 +4079,7 @@ def run_inbox_queue(server,
|
|||
recent_posts_cache,
|
||||
max_recent_posts,
|
||||
session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
key_id, handle,
|
||||
queue_json['post'],
|
||||
base_dir, http_prefix,
|
||||
|
|
@ -3987,6 +4087,7 @@ def run_inbox_queue(server,
|
|||
cached_webfingers,
|
||||
person_cache, domain,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
port, federation_list,
|
||||
debug,
|
||||
queue_filename, destination,
|
||||
|
|
|
|||
|
|
@ -393,6 +393,7 @@ def receive_edit_to_post(recent_posts_cache: {}, message_json: {},
|
|||
auto_cw_cache: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
instance_software: {},
|
||||
block_military: {},
|
||||
|
|
@ -426,7 +427,8 @@ def receive_edit_to_post(recent_posts_cache: {}, message_json: {},
|
|||
allow_local_network_access, debug,
|
||||
system_language, http_prefix,
|
||||
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))
|
||||
return False
|
||||
|
||||
|
|
@ -562,6 +564,7 @@ def receive_move_activity(session, base_dir: str,
|
|||
federation_list: [],
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
sites_unavailable: [],
|
||||
blocked_cache: [],
|
||||
block_federated: [],
|
||||
|
|
@ -655,6 +658,7 @@ def receive_move_activity(session, base_dir: str,
|
|||
domain,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
sites_unavailable,
|
||||
system_language,
|
||||
mitm_servers)
|
||||
|
|
@ -684,6 +688,7 @@ def receive_update_activity(recent_posts_cache: {}, session, base_dir: str,
|
|||
auto_cw_cache: {},
|
||||
onion_domain: str,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
mitm_servers: [],
|
||||
instance_software: {},
|
||||
block_military: {},
|
||||
|
|
@ -736,6 +741,7 @@ def receive_update_activity(recent_posts_cache: {}, session, base_dir: str,
|
|||
max_hashtags, buy_sites,
|
||||
auto_cw_cache,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
mitm_servers,
|
||||
instance_software,
|
||||
block_military,
|
||||
|
|
@ -840,6 +846,7 @@ def _already_reacted(base_dir: str, nickname: str, domain: str,
|
|||
|
||||
def _like_notify(base_dir: str, domain: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
handle: str, actor: str, url: str) -> None:
|
||||
"""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 + '/users/' + nickname not in url:
|
||||
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
|
||||
|
||||
account_dir = acct_handle_dir(base_dir, handle)
|
||||
|
|
@ -981,6 +991,7 @@ def receive_like(recent_posts_cache: {},
|
|||
session, handle: str, base_dir: str,
|
||||
http_prefix: str, domain: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
cached_webfingers: {},
|
||||
person_cache: {}, message_json: {},
|
||||
debug: bool,
|
||||
|
|
@ -1051,7 +1062,8 @@ def receive_like(recent_posts_cache: {},
|
|||
handle_name, handle_dom,
|
||||
post_liked_id,
|
||||
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)
|
||||
update_likes_collection(recent_posts_cache, base_dir, post_filename,
|
||||
post_liked_id, like_actor,
|
||||
|
|
@ -1803,7 +1815,8 @@ def receive_announce(recent_posts_cache: {},
|
|||
session, handle: str, base_dir: str,
|
||||
http_prefix: str,
|
||||
domain: str,
|
||||
onion_domain: str, i2p_domain: str, port: int,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str, port: int,
|
||||
cached_webfingers: {},
|
||||
person_cache: {}, message_json: {},
|
||||
debug: bool, translate: {},
|
||||
|
|
@ -2155,6 +2168,7 @@ def receive_announce(recent_posts_cache: {},
|
|||
__version__, http_prefix,
|
||||
domain, onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
signing_priv_key_pem,
|
||||
mitm_servers)
|
||||
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,
|
||||
post_json_object: {}, recent_posts_cache: {},
|
||||
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: [],
|
||||
cached_webfingers: {}, person_cache: {},
|
||||
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_item_federation_tokens = {}
|
||||
send_to_followers_thread(server, session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
base_dir, nickname, domain,
|
||||
onion_domain, i2p_domain, port,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain, port,
|
||||
http_prefix, federation_list,
|
||||
send_threads, post_log,
|
||||
cached_webfingers, person_cache,
|
||||
|
|
|
|||
|
|
@ -40,7 +40,8 @@ from reaction import undo_reaction_collection_entry
|
|||
|
||||
def _receive_undo_follow(base_dir: str, message_json: {},
|
||||
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
|
||||
{
|
||||
|
|
@ -113,6 +114,9 @@ def _receive_undo_follow(base_dir: str, message_json: {},
|
|||
if i2p_domain:
|
||||
if domain_following.endswith(i2p_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)
|
||||
|
||||
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,
|
||||
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
|
||||
"""
|
||||
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 \
|
||||
message_json['object']['type'] == 'Join':
|
||||
_receive_undo_follow(base_dir, message_json,
|
||||
debug, domain, onion_domain, i2p_domain)
|
||||
debug, domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain)
|
||||
return True
|
||||
return False
|
||||
|
||||
|
|
|
|||
4
like.py
4
like.py
|
|
@ -80,6 +80,7 @@ def _create_like(recent_posts_cache: {},
|
|||
signing_priv_key_pem: str,
|
||||
curr_domain: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
sites_unavailable: [],
|
||||
system_language: str,
|
||||
mitm_servers: []) -> {}:
|
||||
|
|
@ -153,6 +154,7 @@ def _create_like(recent_posts_cache: {},
|
|||
debug, project_version, None, group_account,
|
||||
signing_priv_key_pem, 7367374,
|
||||
curr_domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
extra_headers, sites_unavailable,
|
||||
system_language, mitm_servers)
|
||||
|
||||
|
|
@ -170,6 +172,7 @@ def like_post(recent_posts_cache: {},
|
|||
debug: bool, project_version: str,
|
||||
signing_priv_key_pem: str,
|
||||
curr_domain: str, onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
sites_unavailable: [],
|
||||
system_language: str,
|
||||
mitm_servers: []) -> {}:
|
||||
|
|
@ -189,6 +192,7 @@ def like_post(recent_posts_cache: {},
|
|||
cached_webfingers,
|
||||
debug, project_version, signing_priv_key_pem,
|
||||
curr_domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
sites_unavailable, system_language,
|
||||
mitm_servers)
|
||||
|
||||
|
|
|
|||
|
|
@ -20,13 +20,16 @@ from utils import acct_dir
|
|||
from utils import text_in_file
|
||||
from utils import remove_eol
|
||||
from utils import get_actor_from_post
|
||||
from utils import is_yggdrasil_address
|
||||
from threads import thread_with_trace
|
||||
from threads import begin_thread
|
||||
from session import create_session
|
||||
|
||||
|
||||
def manual_deny_follow_request2(session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
base_dir: str, http_prefix: str,
|
||||
nickname: str, domain: str, port: int,
|
||||
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_domain = remove_domain_port(deny_domain)
|
||||
followed_account_rejects(session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
base_dir, http_prefix,
|
||||
nickname, domain, 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,
|
||||
session_yggdrasil,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
base_dir: str, http_prefix: str,
|
||||
nickname: str, domain: str, port: int,
|
||||
deny_handle: str,
|
||||
|
|
@ -110,7 +117,9 @@ def manual_deny_follow_request_thread(session, session_onion, session_i2p,
|
|||
thr = \
|
||||
thread_with_trace(target=manual_deny_follow_request2,
|
||||
args=(session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
base_dir, http_prefix,
|
||||
nickname, domain, port,
|
||||
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,
|
||||
session_yggdrasil,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
base_dir: str, http_prefix: str,
|
||||
nickname: str, domain: str, port: int,
|
||||
approve_handle: str,
|
||||
|
|
@ -290,6 +301,15 @@ def manual_approve_follow_request(session, session_onion, session_i2p,
|
|||
curr_session = session_i2p
|
||||
curr_http_prefix = 'http'
|
||||
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:
|
||||
curr_session = create_session(curr_proxy_type)
|
||||
|
|
@ -317,6 +337,7 @@ def manual_approve_follow_request(session, session_onion, session_i2p,
|
|||
domain,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
followers_sync_cache,
|
||||
sites_unavailable,
|
||||
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,
|
||||
session_yggdrasil,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
base_dir: str, http_prefix: str,
|
||||
nickname: str, domain: str, port: int,
|
||||
approve_handle: str,
|
||||
|
|
@ -410,7 +433,9 @@ def manual_approve_follow_request_thread(session, session_onion, session_i2p,
|
|||
thr = \
|
||||
thread_with_trace(target=manual_approve_follow_request,
|
||||
args=(session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
base_dir, http_prefix,
|
||||
nickname, domain, port,
|
||||
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 remove_html
|
||||
from utils import has_object_dict
|
||||
from utils import is_yggdrasil_url
|
||||
from timeFunctions import date_epoch
|
||||
from timeFunctions import date_from_string_format
|
||||
from timeFunctions import date_utcnow
|
||||
|
|
@ -849,6 +850,7 @@ def html_open_street_map(url: str,
|
|||
bounding_box_degrees: float,
|
||||
translate: {}, session,
|
||||
session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
width: str = "725",
|
||||
height: str = "650") -> str:
|
||||
"""Returns embed html for an OSM link
|
||||
|
|
@ -859,6 +861,8 @@ def html_open_street_map(url: str,
|
|||
map_session = session_onion
|
||||
elif '.i2p/' in url:
|
||||
map_session = session_i2p
|
||||
elif is_yggdrasil_url(url):
|
||||
map_session = session_yggdrasil
|
||||
zoom, latitude, longitude = \
|
||||
geocoords_from_map_link(url, osm_domain, map_session)
|
||||
if not latitude:
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ from utils import get_status_count
|
|||
from utils import lines_in_file
|
||||
from utils import data_dir
|
||||
from utils import account_is_indexable
|
||||
from utils import is_yggdrasil_address
|
||||
|
||||
|
||||
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,
|
||||
domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
translate: {},
|
||||
registration: bool,
|
||||
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):
|
||||
domain_full = i2p_domain
|
||||
http_prefix = 'http'
|
||||
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||
domain_full = yggdrasil_domain
|
||||
http_prefix = 'http'
|
||||
|
||||
if broch_mode:
|
||||
show_node_info_accounts = False
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ from utils import no_of_accounts
|
|||
from utils import lines_in_file
|
||||
from utils import data_dir
|
||||
from utils import account_is_indexable
|
||||
from utils import is_yggdrasil_address
|
||||
from formats import get_image_mime_type
|
||||
from formats import get_image_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,
|
||||
domain_full: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
translate: {},
|
||||
registration: bool,
|
||||
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):
|
||||
domain_full = i2p_domain
|
||||
http_prefix = 'http'
|
||||
elif (is_yggdrasil_address(calling_domain) and yggdrasil_domain):
|
||||
domain_full = yggdrasil_domain
|
||||
http_prefix = 'http'
|
||||
|
||||
if broch_mode:
|
||||
show_node_info_accounts = False
|
||||
|
|
|
|||
|
|
@ -274,7 +274,8 @@ def post_message_to_outbox(session, translate: {},
|
|||
message_json: {}, post_to_nickname: str,
|
||||
server, base_dir: str, http_prefix: 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: [],
|
||||
federation_list: [], send_threads: [],
|
||||
post_log: [], cached_webfingers: {},
|
||||
|
|
@ -741,9 +742,11 @@ def post_message_to_outbox(session, translate: {},
|
|||
send_to_followers_thread(server, server.session,
|
||||
server.session_onion,
|
||||
server.session_i2p,
|
||||
server.session_yggdrasil,
|
||||
base_dir,
|
||||
post_to_nickname,
|
||||
domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
port, http_prefix,
|
||||
federation_list,
|
||||
send_threads,
|
||||
|
|
@ -877,8 +880,10 @@ def post_message_to_outbox(session, translate: {},
|
|||
send_to_named_addresses_thread(server, server.session,
|
||||
server.session_onion,
|
||||
server.session_i2p,
|
||||
server.session_yggdrasil,
|
||||
base_dir, post_to_nickname,
|
||||
domain, onion_domain, i2p_domain, port,
|
||||
domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain, port,
|
||||
http_prefix,
|
||||
federation_list,
|
||||
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,
|
||||
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
|
||||
"""
|
||||
if not onion_domain and not i2p_domain:
|
||||
if not onion_domain and not i2p_domain and not yggdrasil_domain:
|
||||
return
|
||||
if not actor_json.get('id'):
|
||||
return
|
||||
|
|
@ -1093,6 +1094,10 @@ def add_alternate_domains(actor_json: {}, domain: str,
|
|||
i2p_actor = 'http://' + i2p_domain + '/users/' + nickname
|
||||
if i2p_actor not in actor_json['alsoKnownAs']:
|
||||
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) -> {}:
|
||||
|
|
@ -2465,7 +2470,8 @@ def get_account_pub_key(path: str, person_cache: {},
|
|||
http_prefix: str,
|
||||
domain_full: str,
|
||||
onion_domain: str,
|
||||
i2p_domain: str) -> str:
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str) -> str:
|
||||
"""Returns the public key for an account
|
||||
"""
|
||||
if '/users/' not in path:
|
||||
|
|
@ -2485,7 +2491,8 @@ def get_account_pub_key(path: str, person_cache: {},
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
'/users/' + nickname
|
||||
actor_json = get_person_from_cache(base_dir, actor, person_cache)
|
||||
if not actor_json:
|
||||
|
|
@ -2505,7 +2512,8 @@ def get_account_pub_key(path: str, person_cache: {},
|
|||
http_prefix,
|
||||
domain_full,
|
||||
onion_domain,
|
||||
i2p_domain) + \
|
||||
i2p_domain,
|
||||
yggdrasil_domain) + \
|
||||
path
|
||||
pub_key, _ = \
|
||||
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_epoch
|
||||
from timeFunctions import valid_post_date
|
||||
from utils import is_yggdrasil_address
|
||||
from utils import resembles_url
|
||||
from utils import get_person_icon
|
||||
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,
|
||||
source_id: int, curr_domain: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
extra_headers: {}, sites_unavailable: [],
|
||||
system_language: str,
|
||||
mitm_servers: []) -> int:
|
||||
|
|
@ -3535,6 +3537,8 @@ def send_signed_json(post_json_object: {}, session, base_dir: str,
|
|||
ua_domain = onion_domain
|
||||
elif to_domain.endswith('.i2p'):
|
||||
ua_domain = i2p_domain
|
||||
elif is_yggdrasil_address(to_domain):
|
||||
ua_domain = yggdrasil_domain
|
||||
|
||||
# lookup the inbox for the To handle
|
||||
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 account_domain == i2p_domain:
|
||||
account_domain = curr_domain
|
||||
if yggdrasil_domain:
|
||||
if account_domain == yggdrasil_domain:
|
||||
account_domain = curr_domain
|
||||
private_key_pem = \
|
||||
get_person_key(nickname, account_domain, base_dir, 'private', debug)
|
||||
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,
|
||||
session_yggdrasil,
|
||||
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: [],
|
||||
send_threads: [], post_log: [],
|
||||
cached_webfingers: {}, person_cache: {},
|
||||
|
|
@ -3957,6 +3966,17 @@ def _send_to_named_addresses(server, session, session_onion, session_i2p,
|
|||
to_port = 80
|
||||
curr_proxy_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 = {}
|
||||
# followers synchronization header
|
||||
|
|
@ -4002,6 +4022,8 @@ def _send_to_named_addresses(server, session, session_onion, session_i2p,
|
|||
server.session_onion = curr_session
|
||||
elif session_type == 'i2p':
|
||||
server.session_i2p = curr_session
|
||||
elif session_type == 'yggdrasil':
|
||||
server.session_yggdrasil = curr_session
|
||||
else:
|
||||
server.session = curr_session
|
||||
|
||||
|
|
@ -4015,14 +4037,17 @@ def _send_to_named_addresses(server, session, session_onion, session_i2p,
|
|||
shared_items_token, group_account,
|
||||
signing_priv_key_pem, 34436782,
|
||||
domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
extra_headers, sites_unavailable,
|
||||
system_language, mitm_servers)
|
||||
|
||||
|
||||
def send_to_named_addresses_thread(server, session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
base_dir: str, nickname: str, domain: str,
|
||||
onion_domain: str,
|
||||
i2p_domain: str, port: int,
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str, port: int,
|
||||
http_prefix: str, federation_list: [],
|
||||
send_threads: [], post_log: [],
|
||||
cached_webfingers: {}, person_cache: {},
|
||||
|
|
@ -4042,8 +4067,10 @@ def send_to_named_addresses_thread(server, session, session_onion, session_i2p,
|
|||
send_thread = \
|
||||
thread_with_trace(target=_send_to_named_addresses,
|
||||
args=(server, session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
base_dir, nickname, domain,
|
||||
onion_domain, i2p_domain, port,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain, port,
|
||||
http_prefix, federation_list,
|
||||
send_threads, post_log,
|
||||
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,
|
||||
session_yggdrasil,
|
||||
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: [],
|
||||
send_threads: [], post_log: [],
|
||||
cached_webfingers: {}, person_cache: {},
|
||||
|
|
@ -4195,6 +4224,10 @@ def send_to_followers(server, session, session_onion, session_i2p,
|
|||
if follower_domain.endswith('.i2p'):
|
||||
curr_session = session_i2p
|
||||
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
|
||||
ua_domain = domain
|
||||
|
|
@ -4202,6 +4235,8 @@ def send_to_followers(server, session, session_onion, session_i2p,
|
|||
ua_domain = onion_domain
|
||||
elif follower_domain.endswith('.i2p'):
|
||||
ua_domain = i2p_domain
|
||||
elif is_yggdrasil_address(follower_domain):
|
||||
ua_domain = yggdrasil_domain
|
||||
|
||||
with_shared_inbox = \
|
||||
_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
|
||||
curr_proxy_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:
|
||||
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
|
||||
elif session_type == 'i2p':
|
||||
server.session_i2p = curr_session
|
||||
elif session_type == 'yggdrasil':
|
||||
server.session_yggdrasil = curr_session
|
||||
else:
|
||||
server.session = curr_session
|
||||
|
||||
|
|
@ -4286,6 +4331,7 @@ def send_to_followers(server, session, session_onion, session_i2p,
|
|||
shared_items_token, group_account,
|
||||
signing_priv_key_pem, 639342,
|
||||
domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
extra_headers, sites_unavailable,
|
||||
system_language, mitm_servers)
|
||||
else:
|
||||
|
|
@ -4321,6 +4367,7 @@ def send_to_followers(server, session, session_onion, session_i2p,
|
|||
shared_items_token, group_account,
|
||||
signing_priv_key_pem, 634219,
|
||||
domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
extra_headers, sites_unavailable,
|
||||
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,
|
||||
session_yggdrasil,
|
||||
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: [],
|
||||
send_threads: [], post_log: [],
|
||||
cached_webfingers: {}, person_cache: {},
|
||||
|
|
@ -4355,8 +4404,10 @@ def send_to_followers_thread(server, session, session_onion, session_i2p,
|
|||
send_thread = \
|
||||
thread_with_trace(target=send_to_followers,
|
||||
args=(server, session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
base_dir, nickname, domain,
|
||||
onion_domain, i2p_domain, port,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain, port,
|
||||
http_prefix, federation_list,
|
||||
send_threads, post_log,
|
||||
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,
|
||||
person_cache: {},
|
||||
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?
|
||||
Check for bad html
|
||||
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,
|
||||
onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
content_str):
|
||||
if message_json['object'].get('id'):
|
||||
print('REJECT: post contains invalid local links ' +
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ def _reactionpost(recent_posts_cache: {},
|
|||
signing_priv_key_pem: str,
|
||||
curr_domain: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
sites_unavailable: [],
|
||||
system_language: str,
|
||||
mitm_servers: []) -> {}:
|
||||
|
|
@ -155,6 +156,7 @@ def _reactionpost(recent_posts_cache: {},
|
|||
debug, project_version, None, group_account,
|
||||
signing_priv_key_pem, 7165392,
|
||||
curr_domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
extra_headers, sites_unavailable,
|
||||
system_language, mitm_servers)
|
||||
|
||||
|
|
@ -173,6 +175,7 @@ def reaction_post(recent_posts_cache: {},
|
|||
debug: bool, project_version: str,
|
||||
signing_priv_key_pem: str,
|
||||
curr_domain: str, onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
sites_unavailable: [], system_language: str,
|
||||
mitm_servers: []) -> {}:
|
||||
"""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,
|
||||
debug, project_version, signing_priv_key_pem,
|
||||
curr_domain, onion_domain, i2p_domain,
|
||||
yggdrasil_domain,
|
||||
sites_unavailable, system_language,
|
||||
mitm_servers)
|
||||
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@ def _update_post_schedule(base_dir: str, handle: str, httpd,
|
|||
httpd.domain_full,
|
||||
httpd.onion_domain,
|
||||
httpd.i2p_domain,
|
||||
httpd.yggdrasil_domain,
|
||||
httpd.port,
|
||||
httpd.recent_posts_cache,
|
||||
httpd.followers_threads,
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ from session import establish_session
|
|||
from flags import url_permitted
|
||||
from httpsig import signed_get_key_id
|
||||
from cache import get_person_pub_key
|
||||
from utils import is_yggdrasil_url
|
||||
|
||||
|
||||
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:
|
||||
curr_session = server.session_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 = \
|
||||
establish_session("secure mode",
|
||||
|
|
@ -61,6 +67,7 @@ def secure_mode(curr_session, proxy_type: str,
|
|||
server.domain,
|
||||
server.onion_domain,
|
||||
server.i2p_domain,
|
||||
server.yggdrasil_domain,
|
||||
server.signing_priv_key_pem,
|
||||
server.mitm_servers)
|
||||
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 binary_is_image
|
||||
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 mitm import detect_mitm
|
||||
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 server.i2p_domain and server.session_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
|
||||
|
||||
|
||||
|
|
@ -1055,6 +1064,11 @@ def set_session_for_sender(server, proxy_type: str, new_session) -> None:
|
|||
if server.i2p_domain and server.session_i2p:
|
||||
server.session_i2p = new_session
|
||||
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
|
||||
|
||||
|
||||
|
|
|
|||
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 get_actor_status
|
||||
from unicodetext import uninvert_text
|
||||
from utils import is_yggdrasil_url
|
||||
from utils import replace_strings
|
||||
from utils import valid_content_warning
|
||||
from utils import data_dir
|
||||
|
|
@ -890,6 +891,7 @@ def create_server_alice(path: str, domain: str, port: int,
|
|||
max_emoji = 10
|
||||
onion_domain = None
|
||||
i2p_domain = None
|
||||
yggdrasil_domain = None
|
||||
allow_local_network_access = True
|
||||
max_newswire_posts = 20
|
||||
dormant_months = 3
|
||||
|
|
@ -947,7 +949,8 @@ def create_server_alice(path: str, domain: str, port: int,
|
|||
0, False, 1, False, False, False,
|
||||
5, True, True, 'en', __version__,
|
||||
"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,
|
||||
proxy_type, max_replies,
|
||||
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
|
||||
onion_domain = None
|
||||
i2p_domain = None
|
||||
yggdrasil_domain = None
|
||||
allow_local_network_access = True
|
||||
max_newswire_posts = 20
|
||||
dormant_months = 3
|
||||
|
|
@ -1148,7 +1152,8 @@ def create_server_bob(path: str, domain: str, port: int,
|
|||
False, 1, False, False, False,
|
||||
5, True, True, 'en', __version__,
|
||||
"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,
|
||||
proxy_type, max_replies,
|
||||
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
|
||||
onion_domain = None
|
||||
i2p_domain = None
|
||||
yggdrasil_domain = None
|
||||
allow_local_network_access = True
|
||||
max_newswire_posts = 20
|
||||
dormant_months = 3
|
||||
|
|
@ -1259,6 +1265,7 @@ def create_server_eve(path: str, domain: str, port: int, federation_list: [],
|
|||
path, domain,
|
||||
onion_domain,
|
||||
i2p_domain,
|
||||
yggdrasil_domain,
|
||||
None, None,
|
||||
port, port,
|
||||
http_prefix,
|
||||
|
|
@ -1312,6 +1319,7 @@ def create_server_group(path: str, domain: str, port: int,
|
|||
max_emoji = 10
|
||||
onion_domain = None
|
||||
i2p_domain = None
|
||||
yggdrasil_domain = None
|
||||
allow_local_network_access = True
|
||||
max_newswire_posts = 20
|
||||
dormant_months = 3
|
||||
|
|
@ -1370,7 +1378,8 @@ def create_server_group(path: str, domain: str, port: int,
|
|||
0, False, 1, False, False, False,
|
||||
5, True, True, 'en', __version__,
|
||||
"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,
|
||||
proxy_type, max_replies,
|
||||
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,
|
||||
bob_person_cache, bob_cached_webfingers,
|
||||
True, __version__, signing_priv_key_pem,
|
||||
bob_domain, None, None, sites_unavailable,
|
||||
bob_domain, None, None, None, sites_unavailable,
|
||||
system_language, mitm_servers)
|
||||
|
||||
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,
|
||||
bob_person_cache, bob_cached_webfingers,
|
||||
True, __version__, signing_priv_key_pem,
|
||||
bob_domain, None, None, sites_unavailable,
|
||||
bob_domain, None, None, None, sites_unavailable,
|
||||
system_language, mitm_servers)
|
||||
|
||||
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,
|
||||
bob_person_cache, bob_cached_webfingers,
|
||||
True, __version__, signing_priv_key_pem,
|
||||
bob_domain, None, None, sites_unavailable,
|
||||
bob_domain, None, None, None, sites_unavailable,
|
||||
system_language, mitm_servers)
|
||||
announce_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_cached_webfingers, alice_person_cache,
|
||||
True, __version__, signing_priv_key_pem,
|
||||
alice_domain, None, None, sites_unavailable,
|
||||
alice_domain, None, None, None,
|
||||
sites_unavailable,
|
||||
system_language, mitm_servers)
|
||||
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_cached_webfingers, alice_person_cache,
|
||||
True, __version__, signing_priv_key_pem,
|
||||
alice_domain, None, None, sites_unavailable,
|
||||
alice_domain, None, None, None,
|
||||
sites_unavailable,
|
||||
system_language, mitm_servers)
|
||||
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_cached_webfingers, alice_person_cache,
|
||||
True, __version__, signing_priv_key_pem,
|
||||
alice_domain, None, None, sites_unavailable,
|
||||
alice_domain, None, None, None,
|
||||
sites_unavailable,
|
||||
system_language, mitm_servers)
|
||||
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_cached_webfingers, bob_person_cache,
|
||||
True, __version__, signing_priv_key_pem,
|
||||
bob_domain, None, None, sites_unavailable,
|
||||
bob_domain, None, None, None,
|
||||
sites_unavailable,
|
||||
system_language, mitm_servers)
|
||||
print('send_result: ' + str(send_result))
|
||||
|
||||
|
|
@ -4577,6 +4590,7 @@ def _test_danger_svg(base_dir: str) -> None:
|
|||
domain_full = domain
|
||||
onion_domain = None
|
||||
i2p_domain = None
|
||||
yggdrasil_domain = None
|
||||
federation_list: list[str] = []
|
||||
debug = True
|
||||
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,
|
||||
domain, domain_full,
|
||||
onion_domain, i2p_domain,
|
||||
onion_domain, i2p_domain, yggdrasil_domain,
|
||||
post_json_object,
|
||||
federation_list, debug,
|
||||
svg_image_filename)
|
||||
|
|
@ -9631,6 +9645,18 @@ def _test_replace_gemini_links() -> None:
|
|||
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():
|
||||
base_dir = os.getcwd()
|
||||
data_dir_testing(base_dir)
|
||||
|
|
@ -9649,6 +9675,7 @@ def run_all_tests():
|
|||
_test_checkbox_names()
|
||||
_test_thread_functions()
|
||||
_test_functions()
|
||||
_test_yggdrasil_addresses()
|
||||
_test_replace_gemini_links()
|
||||
_test_markdown_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
|
||||
|
||||
|
||||
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:
|
||||
"""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,
|
||||
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
|
||||
"""
|
||||
curr_http_prefix = http_prefix + '://'
|
||||
|
|
@ -3962,6 +4013,13 @@ def convert_domains(calling_domain: str, referer_domain: str,
|
|||
domain,
|
||||
'http://' +
|
||||
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
|
||||
|
||||
|
||||
|
|
@ -3969,7 +4027,8 @@ def get_instance_url(calling_domain: str,
|
|||
http_prefix: str,
|
||||
domain_full: str,
|
||||
onion_domain: str,
|
||||
i2p_domain: str) -> str:
|
||||
i2p_domain: str,
|
||||
yggdrasil_domain: str) -> str:
|
||||
"""Returns the URL for this instance
|
||||
"""
|
||||
if calling_domain.endswith('.onion') and \
|
||||
|
|
@ -3978,6 +4037,9 @@ def get_instance_url(calling_domain: str,
|
|||
elif (calling_domain.endswith('.i2p') and
|
||||
i2p_domain):
|
||||
instance_url = 'http://' + i2p_domain
|
||||
elif (is_yggdrasil_address(calling_domain) and
|
||||
yggdrasil_domain):
|
||||
instance_url = 'http://' + yggdrasil_domain
|
||||
else:
|
||||
instance_url = \
|
||||
http_prefix + '://' + domain_full
|
||||
|
|
|
|||
|
|
@ -122,6 +122,7 @@ def _html_calendar_day(person_cache: {}, translate: {},
|
|||
theme: str, access_keys: {},
|
||||
system_language: str,
|
||||
session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
ua_str: str) -> str:
|
||||
"""Show a day within the calendar
|
||||
"""
|
||||
|
|
@ -247,6 +248,7 @@ def _html_calendar_day(person_cache: {}, translate: {},
|
|||
translate, session,
|
||||
session_onion,
|
||||
session_i2p,
|
||||
session_yggdrasil,
|
||||
'320', '320')
|
||||
if event_map:
|
||||
event_place = event_map
|
||||
|
|
@ -384,6 +386,7 @@ def html_calendar(person_cache: {}, translate: {},
|
|||
icalendar: bool, system_language: str,
|
||||
default_timeline: str, theme: str,
|
||||
session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
ua_str: str) -> str:
|
||||
"""Show the calendar for a person
|
||||
"""
|
||||
|
|
@ -473,6 +476,7 @@ def html_calendar(person_cache: {}, translate: {},
|
|||
theme, access_keys,
|
||||
system_language, session,
|
||||
session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
ua_str)
|
||||
|
||||
if icalendar:
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ from utils import data_dir
|
|||
from utils import get_url_from_post
|
||||
from utils import get_config_param
|
||||
from utils import remove_html
|
||||
from utils import is_yggdrasil_url
|
||||
from media import path_is_audio
|
||||
from content import safe_web_text
|
||||
from webapp_utils import get_broken_link_substitute
|
||||
|
|
@ -33,6 +34,7 @@ MAX_LINK_LENGTH = 40
|
|||
|
||||
def _html_podcast_chapters(link_url: str,
|
||||
session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
http_prefix: str, domain: str,
|
||||
podcast_properties: {},
|
||||
debug: bool,
|
||||
|
|
@ -62,6 +64,8 @@ def _html_podcast_chapters(link_url: str,
|
|||
curr_session = session_onion
|
||||
elif chapters_url.endswith('.i2p'):
|
||||
curr_session = session_i2p
|
||||
elif is_yggdrasil_url(chapters_url):
|
||||
curr_session = session_yggdrasil
|
||||
|
||||
as_header = {
|
||||
'Accept': url_type
|
||||
|
|
@ -310,6 +314,7 @@ def html_podcast_episode(translate: {},
|
|||
newswire_item: [],
|
||||
text_mode_banner: str,
|
||||
session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
http_prefix: str, debug: bool,
|
||||
mitm_servers: []) -> str:
|
||||
"""Returns html for a podcast episode, an item from the newswire
|
||||
|
|
@ -516,6 +521,7 @@ def html_podcast_episode(translate: {},
|
|||
podcast_str += \
|
||||
_html_podcast_chapters(link_url,
|
||||
session, session_onion, session_i2p,
|
||||
session_yggdrasil,
|
||||
http_prefix, domain,
|
||||
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,
|
||||
bounding_box_degrees,
|
||||
translate, session,
|
||||
session, session)
|
||||
session, session, session)
|
||||
if map_str:
|
||||
event_category = ''
|
||||
if category_str:
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ from textmode import text_mode_removals
|
|||
from unicodetext import uninvert_text
|
||||
from unicodetext import standardize_text
|
||||
from occupation import get_occupation_name
|
||||
from utils import is_yggdrasil_address
|
||||
from utils import chatbot_nicknames
|
||||
from utils import get_actor_type
|
||||
from utils import get_mutuals_of_person
|
||||
|
|
@ -254,6 +255,7 @@ def html_profile_after_search(authorized: bool,
|
|||
cw_lists: {}, lists_enabled: str,
|
||||
timezone: str,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
bold_reading: bool, dogwhistles: {},
|
||||
min_images_for_accounts: [],
|
||||
buy_sites: {},
|
||||
|
|
@ -290,6 +292,18 @@ def html_profile_after_search(authorized: bool,
|
|||
if '.i2p/' in profile_handle or profile_handle.endswith('.i2p'):
|
||||
from_domain = i2p_domain
|
||||
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 = \
|
||||
get_actor_json(from_domain, profile_handle, http,
|
||||
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,
|
||||
domain: str, onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
port: int, debug: bool) -> {}:
|
||||
"""Lookup the webfinger endpoint for an account
|
||||
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:
|
||||
handle = handle.replace(i2p_domain, domain)
|
||||
i2pify = True
|
||||
yggdrasilify = False
|
||||
if yggdrasil_domain:
|
||||
if yggdrasil_domain in handle:
|
||||
handle = handle.replace(yggdrasil_domain, domain)
|
||||
yggdrasilify = True
|
||||
# instance actor
|
||||
if handle.startswith('actor@'):
|
||||
handle = handle.replace('actor@', 'inbox@', 1)
|
||||
|
|
@ -420,14 +426,17 @@ def webfinger_lookup(path: str, base_dir: str,
|
|||
if debug:
|
||||
print('DEBUG: WEBFINGER filename not found ' + filename)
|
||||
return None
|
||||
if not onionify and not i2pify:
|
||||
if not onionify and not i2pify and not yggdrasilify:
|
||||
wf_json = load_json(filename)
|
||||
elif onionify:
|
||||
print('Webfinger request for onionified ' + handle)
|
||||
wf_json = load_json_onionify(filename, domain, onion_domain)
|
||||
else:
|
||||
elif i2pify:
|
||||
print('Webfinger request for i2pified ' + handle)
|
||||
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:
|
||||
wf_json = {"nickname": "unknown"}
|
||||
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,
|
||||
onion_domain: str, i2p_domain: str,
|
||||
yggdrasil_domain: str,
|
||||
cached_webfingers: {}) -> None:
|
||||
"""Regenerates stored webfinger
|
||||
"""
|
||||
|
|
@ -617,6 +627,7 @@ def webfinger_update(base_dir: str, nickname: str, domain: str,
|
|||
filename = base_dir + wf_subdir + '/' + handle + '.json'
|
||||
onionify = False
|
||||
i2pify = False
|
||||
yggdrasilify = False
|
||||
if onion_domain:
|
||||
if onion_domain in handle:
|
||||
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:
|
||||
handle = handle.replace(i2p_domain, domain)
|
||||
i2pify = True
|
||||
elif yggdrasil_domain:
|
||||
if yggdrasil_domain in handle:
|
||||
handle = handle.replace(yggdrasil_domain, domain)
|
||||
yggdrasilify = True
|
||||
if not onionify:
|
||||
if not i2pify:
|
||||
if not i2pify and not yggdrasilify:
|
||||
wf_json = load_json(filename)
|
||||
else:
|
||||
elif i2pify:
|
||||
wf_json = load_json_onionify(filename, domain, i2p_domain)
|
||||
else:
|
||||
wf_json = load_json_onionify(filename, domain, yggdrasil_domain)
|
||||
else:
|
||||
wf_json = load_json_onionify(filename, domain, onion_domain)
|
||||
if not wf_json:
|
||||
|
|
|
|||
Loading…
Reference in New Issue