From c91e58aae9ac5865a179e28bf0f84a1d15fc0446 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 31 Jan 2022 10:15:13 +0000 Subject: [PATCH 1/4] Debug --- daemon.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/daemon.py b/daemon.py index b4008f3e6..19d801917 100644 --- a/daemon.py +++ b/daemon.py @@ -1144,9 +1144,11 @@ class PubServer(BaseHTTPRequestHandler): return False if not referer_domain: if not debug and not self.server.unit_test: + print('nodeinfo request has no referer domain ' + ua_str) self._400() return True if referer_domain == self.server.domain_full: + print('nodeinfo request from self') self._400() return True if self.server.nodeinfo_is_active: From 53805c78e191069517a221a244481cc587bfe20c Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 31 Jan 2022 10:16:05 +0000 Subject: [PATCH 2/4] String cast --- daemon.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon.py b/daemon.py index 19d801917..f7b94624c 100644 --- a/daemon.py +++ b/daemon.py @@ -1144,7 +1144,7 @@ class PubServer(BaseHTTPRequestHandler): return False if not referer_domain: if not debug and not self.server.unit_test: - print('nodeinfo request has no referer domain ' + ua_str) + print('nodeinfo request has no referer domain ' + str(ua_str)) self._400() return True if referer_domain == self.server.domain_full: From a36897b106c620dfc56c7ee875a105e99eb10064 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 31 Jan 2022 11:15:51 +0000 Subject: [PATCH 3/4] No plus in user agent url --- daemon.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/daemon.py b/daemon.py index f7b94624c..edc88ef85 100644 --- a/daemon.py +++ b/daemon.py @@ -13478,14 +13478,14 @@ class PubServer(BaseHTTPRequestHandler): elif '"' in referer_domain: referer_domain = referer_domain.split('"')[0] elif ua_str: - if '+https://' in ua_str: - referer_domain = ua_str.split('+https://')[1] + if 'https://' in ua_str: + referer_domain = ua_str.split('https://')[1] if '/' in referer_domain: referer_domain = referer_domain.split('/')[0] elif ')' in referer_domain: referer_domain = referer_domain.split(')')[0] - elif '+http://' in ua_str: - referer_domain = ua_str.split('+http://')[1] + elif 'http://' in ua_str: + referer_domain = ua_str.split('http://')[1] if '/' in referer_domain: referer_domain = referer_domain.split('/')[0] elif ')' in referer_domain: From 09f6cf8e9f07d16895a4dbf271f21ed1b965b38c Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 31 Jan 2022 11:50:01 +0000 Subject: [PATCH 4/4] Extracting domain from user agent --- daemon.py | 24 ++++++------------------ utils.py | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/daemon.py b/daemon.py index edc88ef85..5f150d154 100644 --- a/daemon.py +++ b/daemon.py @@ -245,6 +245,7 @@ from languages import set_actor_languages from languages import get_understood_languages from like import update_likes_collection from reaction import update_reaction_collection +from utils import get_domain_from_url_in_string from utils import local_network_host from utils import undo_reaction_collection_entry from utils import get_new_post_endpoints @@ -13461,13 +13462,11 @@ class PubServer(BaseHTTPRequestHandler): """ referer_domain = None if self.headers.get('referer'): - referer_domain, referer_port = \ - get_domain_from_actor(self.headers['referer']) - referer_domain = get_full_domain(referer_domain, referer_port) + referer_domain = \ + get_domain_from_url_in_string(self.headers['referer']) elif self.headers.get('Referer'): - referer_domain, referer_port = \ - get_domain_from_actor(self.headers['Referer']) - referer_domain = get_full_domain(referer_domain, referer_port) + referer_domain = \ + get_domain_from_url_in_string(self.headers['Referer']) elif self.headers.get('Signature'): if 'keyId="' in self.headers['Signature']: referer_domain = self.headers['Signature'].split('keyId="')[1] @@ -13478,18 +13477,7 @@ class PubServer(BaseHTTPRequestHandler): elif '"' in referer_domain: referer_domain = referer_domain.split('"')[0] elif ua_str: - if 'https://' in ua_str: - referer_domain = ua_str.split('https://')[1] - if '/' in referer_domain: - referer_domain = referer_domain.split('/')[0] - elif ')' in referer_domain: - referer_domain = referer_domain.split(')')[0] - elif 'http://' in ua_str: - referer_domain = ua_str.split('http://')[1] - if '/' in referer_domain: - referer_domain = referer_domain.split('/')[0] - elif ')' in referer_domain: - referer_domain = referer_domain.split(')')[0] + referer_domain = get_domain_from_url_in_string(ua_str) return referer_domain def _get_user_agent(self) -> str: diff --git a/utils.py b/utils.py index 5f89e315c..58638e408 100644 --- a/utils.py +++ b/utils.py @@ -3323,3 +3323,22 @@ def valid_hash_tag(hashtag: str) -> bool: if _is_valid_language(hashtag): return True return False + + +def get_domain_from_url_in_string(text: str) -> str: + """Returns the domain from within a string if it exists + """ + domain_str = '' + if 'https://' in text: + domain_str = text.split('https://')[1] + if '/' in domain_str: + domain_str = domain_str.split('/')[0] + elif ')' in domain_str: + domain_str = domain_str.split(')')[0] + elif 'http://' in text: + domain_str = text.split('http://')[1] + if '/' in domain_str: + domain_str = domain_str.split('/')[0] + elif ')' in domain_str: + domain_str = domain_str.split(')')[0] + return domain_str