From 6d98dfa2ae3af9571c765b16739ba7aa3ba75d6a Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 26 Feb 2022 10:01:40 +0000 Subject: [PATCH 1/7] Convert to string --- daemon.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon.py b/daemon.py index 72a0da08a..e8fd31edb 100644 --- a/daemon.py +++ b/daemon.py @@ -1129,7 +1129,7 @@ class PubServer(BaseHTTPRequestHandler): return True if self.server.masto_api_is_active: print('mastodon api is busy during request from ' + - referer_domain) + str(referer_domain)) self._503() return True self.server.masto_api_is_active = True From 5f20e96f2545aab531070fdb1f4d23c5ea5bae1b Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 26 Feb 2022 10:05:47 +0000 Subject: [PATCH 2/7] Fix referrer in debug mode --- daemon.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daemon.py b/daemon.py index e8fd31edb..4ec5de574 100644 --- a/daemon.py +++ b/daemon.py @@ -1118,7 +1118,7 @@ class PubServer(BaseHTTPRequestHandler): return False if not referer_domain: - if not debug and not self.server.unit_test: + if not (debug and self.server.unit_test): print('mastodon api request has no referer domain ' + str(ua_str)) self._400() @@ -1129,7 +1129,7 @@ class PubServer(BaseHTTPRequestHandler): return True if self.server.masto_api_is_active: print('mastodon api is busy during request from ' + - str(referer_domain)) + referer_domain) self._503() return True self.server.masto_api_is_active = True From d559d59abed6d68968db73132a88d866e9f5181d Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 26 Feb 2022 10:25:27 +0000 Subject: [PATCH 3/7] More webfinger debug --- webfinger.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/webfinger.py b/webfinger.py index 0393c1140..40ca24d3e 100644 --- a/webfinger.py +++ b/webfinger.py @@ -78,6 +78,8 @@ def webfinger_handle(session, handle: str, http_prefix: str, wf_domain = remove_domain_port(domain) wf_handle = nickname + '@' + wf_domain + if debug: + print('Parsed webfinger handle: ' + handle + ' -> ' + wf_handle) wfg = get_webfinger_from_cache(wf_handle, cached_webfingers) if wfg: if debug: @@ -95,7 +97,7 @@ def webfinger_handle(session, handle: str, http_prefix: str, get_json(signing_priv_key_pem, session, url, hdr, par, debug, project_version, http_prefix, from_domain) except Exception as ex: - print('ERROR: webfinger_handle ' + str(ex)) + print('ERROR: webfinger_handle ' + wf_handle + ' ' + str(ex)) return None if result: @@ -104,6 +106,8 @@ def webfinger_handle(session, handle: str, http_prefix: str, if debug: print("WARN: Unable to webfinger " + url + ' ' + 'nickname: ' + str(nickname) + ' ' + + 'handle: ' + str(handle) + ' ' + + 'wf_handle: ' + str(wf_handle) + ' ' + 'domain: ' + str(wf_domain) + ' ' + 'headers: ' + str(hdr) + ' ' + 'params: ' + str(par)) From d6864e9ee3bd8ee1a879b2b7c9444401981f1089 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 26 Feb 2022 11:01:50 +0000 Subject: [PATCH 4/7] Try alternative webfinger resource --- webfinger.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/webfinger.py b/webfinger.py index 40ca24d3e..fa0497513 100644 --- a/webfinger.py +++ b/webfinger.py @@ -100,6 +100,26 @@ def webfinger_handle(session, handle: str, http_prefix: str, print('ERROR: webfinger_handle ' + wf_handle + ' ' + str(ex)) return None + # if the first attempt fails then try specifying the webfinger + # resource in a different way + if not result: + resource = handle + if handle == wf_handle: + # reconstruct the actor + resource = http_prefix + '://' + wf_domain + '/users/' + nickname + # try again using the actor as the resource + # See https://datatracker.ietf.org/doc/html/rfc7033 section 4.5 + par = { + 'resource': '{}'.format(resource) + } + try: + result = \ + get_json(signing_priv_key_pem, session, url, hdr, par, + debug, project_version, http_prefix, from_domain) + except Exception as ex: + print('ERROR: webfinger_handle ' + wf_handle + ' ' + str(ex)) + return None + if result: store_webfinger_in_cache(wf_handle, result, cached_webfingers) else: From 738cece2e917d92038e2b5f17a7b02cb30889f71 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 26 Feb 2022 13:41:48 +0000 Subject: [PATCH 5/7] Don't require understood languages to be in the translations list --- languages.py | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/languages.py b/languages.py index 1dc2fcb82..88a33c58a 100644 --- a/languages.py +++ b/languages.py @@ -7,7 +7,6 @@ __email__ = "bob@libreserver.org" __status__ = "Production" __module_group__ = "Core" -import os import json from urllib import request, parse from utils import get_actor_languages_list @@ -49,7 +48,7 @@ def get_understood_languages(base_dir: str, http_prefix: str, def set_actor_languages(base_dir: str, actor_json: {}, languages_str: str) -> None: - """Sets the languages used by the given actor + """Sets the languages understood by the given actor """ languages_str = languages_str.strip() separator = None @@ -72,18 +71,11 @@ def set_actor_languages(base_dir: str, actor_json: {}, lang_list2 = '' for lang in lang_list: lang = lang.strip() - if base_dir: - language_filename = base_dir + '/translations/' + lang + '.json' - if os.path.isfile(language_filename): - if lang_list2: - lang_list2 += ', ' + lang.strip() - else: - lang_list2 += lang.strip() - else: - if lang_list2: + if lang_list2: + if ' ' + lang not in lang_list2: lang_list2 += ', ' + lang.strip() - else: - lang_list2 += lang.strip() + else: + lang_list2 += lang.strip() # remove any existing value property_found = None From 3d1ca6cf90562be315558f3c96b061cc1b77980d Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 26 Feb 2022 13:43:27 +0000 Subject: [PATCH 6/7] Excessive strip --- languages.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/languages.py b/languages.py index 88a33c58a..26fea497b 100644 --- a/languages.py +++ b/languages.py @@ -73,9 +73,9 @@ def set_actor_languages(base_dir: str, actor_json: {}, lang = lang.strip() if lang_list2: if ' ' + lang not in lang_list2: - lang_list2 += ', ' + lang.strip() + lang_list2 += ', ' + lang else: - lang_list2 += lang.strip() + lang_list2 += lang # remove any existing value property_found = None From 154578c00e0e5d2d033328f29571313f6107f222 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 26 Feb 2022 13:47:33 +0000 Subject: [PATCH 7/7] Tidying --- languages.py | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/languages.py b/languages.py index 26fea497b..621c94c72 100644 --- a/languages.py +++ b/languages.py @@ -52,18 +52,11 @@ def set_actor_languages(base_dir: str, actor_json: {}, """ languages_str = languages_str.strip() separator = None - if ',' in languages_str: - separator = ',' - elif '/' in languages_str: - separator = '/' - elif ',' in languages_str: - separator = ',' - elif ';' in languages_str: - separator = ';' - elif '+' in languages_str: - separator = '+' - elif ' ' in languages_str: - separator = ' ' + possible_separators = (',', '/', ';', '+', ' ') + for poss in possible_separators: + if poss in languages_str: + separator = poss + break if separator: lang_list = languages_str.lower().split(separator) else: