Merge branch 'main' of gitlab.com:bashrc2/epicyon

merge-requests/30/head
Bob Mottram 2022-09-14 13:37:37 +01:00
commit 5d3b105c5c
6 changed files with 409 additions and 316 deletions

198
daemon.py
View File

@ -258,6 +258,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_json_content_from_accept
from utils import remove_eol
from utils import text_in_file
from utils import is_onion_request
@ -1279,12 +1280,10 @@ class PubServer(BaseHTTPRequestHandler):
msg = msg_str.encode('utf-8')
msglen = len(msg)
if self._has_accept(calling_domain):
if 'application/ld+json' in self.headers['Accept']:
self._set_headers('application/ld+json', msglen,
None, calling_domain, True)
else:
self._set_headers('application/json', msglen,
None, calling_domain, True)
protocol_str = \
get_json_content_from_accept(self.headers.get('Accept'))
self._set_headers(protocol_str, msglen,
None, calling_domain, True)
else:
self._set_headers('application/ld+json', msglen,
None, calling_domain, True)
@ -1474,12 +1473,10 @@ class PubServer(BaseHTTPRequestHandler):
msg = msg_str.encode('utf-8')
msglen = len(msg)
if self._has_accept(calling_domain):
if 'application/ld+json' in self.headers['Accept']:
self._set_headers('application/ld+json', msglen,
None, calling_domain, True)
else:
self._set_headers('application/json', msglen,
None, calling_domain, True)
protocol_str = \
get_json_content_from_accept(self.headers.get('Accept'))
self._set_headers(protocol_str, msglen,
None, calling_domain, True)
else:
self._set_headers('application/ld+json', msglen,
None, calling_domain, True)
@ -1553,12 +1550,11 @@ class PubServer(BaseHTTPRequestHandler):
msg = msg_str.encode('utf-8')
msglen = len(msg)
if self._has_accept(calling_domain):
if 'application/ld+json' in self.headers['Accept']:
self._set_headers('application/ld+json', msglen,
None, calling_domain, True)
else:
self._set_headers('application/json', msglen,
None, calling_domain, True)
accept_str = self.headers.get('Accept')
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, True)
else:
self._set_headers('application/ld+json', msglen,
None, calling_domain, True)
@ -7465,7 +7461,9 @@ class PubServer(BaseHTTPRequestHandler):
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json', msglen,
protocol_str = \
get_json_content_from_accept(self.headers['Accept'])
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
if self.server.debug:
@ -7601,7 +7599,9 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json', msglen,
protocol_str = \
get_json_content_from_accept(self.headers['Accept'])
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
@ -10812,7 +10812,8 @@ class PubServer(BaseHTTPRequestHandler):
referer_domain,
msg_str)
msg = msg_str.encode('utf-8')
protocol_str = 'application/json'
protocol_str = \
get_json_content_from_accept(self.headers['Accept'])
msglen = len(msg)
self._set_headers(protocol_str, msglen, None,
calling_domain, False)
@ -10917,7 +10918,8 @@ class PubServer(BaseHTTPRequestHandler):
referer_domain,
msg_str)
msg = msg_str.encode('utf-8')
protocol_str = 'application/json'
protocol_str = \
get_json_content_from_accept(self.headers['Accept'])
msglen = len(msg)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
@ -11037,7 +11039,9 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json', msglen,
protocol_str = \
get_json_content_from_accept(self.headers['Accept'])
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time, self.server.fitness,
@ -11169,8 +11173,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json',
msglen, None,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen, None,
calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time,
@ -11516,8 +11522,9 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json',
msglen,
protocol_str = \
get_json_content_from_accept(self.headers['Accept'])
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time, self.server.fitness,
@ -11832,7 +11839,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json', msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time,
@ -11989,8 +11999,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json',
msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time,
@ -12149,7 +12161,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json', msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time,
@ -12304,7 +12319,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json', msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time,
@ -12459,8 +12477,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json',
msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time,
@ -12623,8 +12643,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json',
msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time,
@ -12789,8 +12811,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json',
msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time,
@ -13137,7 +13161,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json', msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time,
@ -13286,7 +13313,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json', msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time,
@ -13432,7 +13462,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json', msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time,
@ -13572,7 +13605,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json', msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time,
@ -13707,7 +13743,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json', msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time,
@ -13843,7 +13882,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json', msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time,
@ -13875,7 +13917,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json', msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
@ -13903,7 +13948,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json', msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
@ -14996,8 +15044,11 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json',
msglen, None, calling_domain, False)
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
def _send_block(self, http_prefix: str,
@ -15147,8 +15198,11 @@ class PubServer(BaseHTTPRequestHandler):
msg_str = json.dumps(acct_pub_key_json, ensure_ascii=False)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json',
msglen, None, calling_domain, False)
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
return
@ -15402,8 +15456,11 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json',
msglen, None, calling_domain, False)
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
return
elif catalog_type == 'csv':
@ -15501,8 +15558,11 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json',
msglen, None, calling_domain, False)
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
return
elif catalog_type == 'csv':
@ -15855,8 +15915,11 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json',
msglen, None, calling_domain, False)
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
return
@ -15924,7 +15987,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json', msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time, self.server.fitness,
@ -16007,8 +16073,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json',
msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time, self.server.fitness,
@ -18415,8 +18483,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json',
msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
fitness_performance(getreq_start_time, self.server.fitness,
@ -19766,8 +19836,10 @@ class PubServer(BaseHTTPRequestHandler):
msg_str)
msg = msg_str.encode('utf-8')
msglen = len(msg)
self._set_headers('application/json',
msglen,
accept_str = self.headers['Accept']
protocol_str = \
get_json_content_from_accept(accept_str)
self._set_headers(protocol_str, msglen,
None, calling_domain, False)
self._write(msg)
return True

File diff suppressed because one or more lines are too long

View File

@ -92,8 +92,7 @@ def _pre_approved_follower(base_dir: str,
approve_handle: str) -> bool:
"""Is the given handle an already manually approved follower?
"""
handle = nickname + '@' + domain
account_dir = base_dir + '/accounts/' + handle
account_dir = acct_dir(base_dir, nickname, domain)
approved_filename = account_dir + '/approved.txt'
if os.path.isfile(approved_filename):
if text_in_file(approve_handle, approved_filename):
@ -107,13 +106,12 @@ def _remove_from_follow_base(base_dir: str,
debug: bool) -> None:
"""Removes a handle/actor from follow requests or rejects file
"""
handle = nickname + '@' + domain
accounts_dir = base_dir + '/accounts/' + handle
accounts_dir = acct_dir(base_dir, nickname, domain)
approve_follows_filename = accounts_dir + '/' + follow_file + '.txt'
if not os.path.isfile(approve_follows_filename):
if debug:
print('There is no ' + follow_file +
' to remove ' + handle + ' from')
' to remove ' + nickname + '@' + domain + ' from')
return
accept_deny_actor = None
if not text_in_file(accept_or_deny_handle, approve_follows_filename):
@ -177,10 +175,10 @@ def is_following_actor(base_dir: str,
The actor can also be a handle: nickname@domain
"""
domain = remove_domain_port(domain)
handle = nickname + '@' + domain
if not os.path.isdir(base_dir + '/accounts/' + handle):
accounts_dir = acct_dir(base_dir, nickname, domain)
if not os.path.isdir(accounts_dir):
return False
following_file = base_dir + '/accounts/' + handle + '/following.txt'
following_file = accounts_dir + '/following.txt'
if not os.path.isfile(following_file):
return False
if actor.startswith('@'):
@ -309,7 +307,8 @@ def unfollow_account(base_dir: str, nickname: str, domain: str,
if not os.path.isdir(base_dir + '/accounts/' + handle):
os.mkdir(base_dir + '/accounts/' + handle)
filename = base_dir + '/accounts/' + handle + '/' + follow_file
accounts_dir = acct_dir(base_dir, nickname, domain)
filename = accounts_dir + '/' + follow_file
if not os.path.isfile(filename):
if debug:
print('DEBUG: follow file ' + filename + ' was not found')
@ -339,7 +338,7 @@ def unfollow_account(base_dir: str, nickname: str, domain: str,
# write to an unfollowed file so that if a follow accept
# later arrives then it can be ignored
unfollowed_filename = base_dir + '/accounts/' + handle + '/unfollowed.txt'
unfollowed_filename = accounts_dir + '/unfollowed.txt'
if os.path.isfile(unfollowed_filename):
if not text_in_file(handle_to_unfollow_lower,
unfollowed_filename, False):
@ -374,12 +373,12 @@ def clear_follows(base_dir: str, nickname: str, domain: str,
follow_file: str = 'following.txt') -> None:
"""Removes all follows
"""
handle = nickname + '@' + domain
if not os.path.isdir(base_dir + '/accounts'):
os.mkdir(base_dir + '/accounts')
if not os.path.isdir(base_dir + '/accounts/' + handle):
os.mkdir(base_dir + '/accounts/' + handle)
filename = base_dir + '/accounts/' + handle + '/' + follow_file
accounts_dir = acct_dir(base_dir, nickname, domain)
if not os.path.isdir(accounts_dir):
os.mkdir(accounts_dir)
filename = accounts_dir + '/' + follow_file
if os.path.isfile(filename):
try:
os.remove(filename)
@ -401,8 +400,8 @@ def _get_no_of_follows(base_dir: str, nickname: str, domain: str,
# account holders
# if not authenticated:
# return 9999
handle = nickname + '@' + domain
filename = base_dir + '/accounts/' + handle + '/' + follow_file
accounts_dir = acct_dir(base_dir, nickname, domain)
filename = accounts_dir + '/' + follow_file
if not os.path.isfile(filename):
return 0
ctr = 0
@ -518,8 +517,8 @@ def get_following_feed(base_dir: str, domain: str, port: int, path: str,
handle_domain = domain
handle_domain = remove_domain_port(handle_domain)
handle = nickname + '@' + handle_domain
filename = base_dir + '/accounts/' + handle + '/' + follow_file + '.txt'
accounts_dir = acct_dir(base_dir, nickname, handle_domain)
filename = accounts_dir + '/' + follow_file + '.txt'
if not os.path.isfile(filename):
return following
curr_page = 1
@ -608,8 +607,7 @@ def no_of_follow_requests(base_dir: str,
follow_type: str) -> int:
"""Returns the current number of follow requests
"""
accounts_dir = base_dir + '/accounts/' + \
nickname_to_follow + '@' + domain_to_follow
accounts_dir = acct_dir(base_dir, nickname_to_follow, domain_to_follow)
approve_follows_filename = accounts_dir + '/followrequests.txt'
if not os.path.isfile(approve_follows_filename):
return 0
@ -644,8 +642,7 @@ def store_follow_request(base_dir: str,
group_account: bool) -> bool:
"""Stores the follow request for later use
"""
accounts_dir = base_dir + '/accounts/' + \
nickname_to_follow + '@' + domain_to_follow
accounts_dir = acct_dir(base_dir, nickname_to_follow, domain_to_follow)
if not os.path.isdir(accounts_dir):
return False

View File

@ -622,7 +622,10 @@ def save_person_qrcode(base_dir: str,
return
handle = get_full_domain('@' + nickname + '@' + qrcode_domain, port)
url = pyqrcode.create(handle)
url.png(qrcode_filename, scale)
try:
url.png(qrcode_filename, scale)
except ModuleNotFoundError:
print('EX: pyqrcode png module not found')
def create_person(base_dir: str, nickname: str, domain: str, port: int,

View File

@ -1826,7 +1826,9 @@ def test_shared_items_federation(base_dir: str) -> None:
bob_instance_actor_json = \
get_json(signing_priv_key_pem, session_client,
'http://' + bob_address + '/@actor', test_headers, {}, True,
__version__, 'http', 'somedomain.or.other', 10, True)
__version__, 'http', 'somedomain.or.other', 10, False)
if not bob_instance_actor_json:
print('Unable to get json for ' + 'http://' + bob_address + '/@actor')
assert bob_instance_actor_json
pprint(bob_instance_actor_json)
assert bob_instance_actor_json['name'] == 'ACTOR'

View File

@ -3805,11 +3805,12 @@ def disallow_announce(content: str) -> bool:
"don't boost",
'boost_denied',
'boosts_denied',
'BoostDenied',
'BoostsDenied'
'boostdenied',
'boostsdenied'
)
content_lower = content.lower()
for diss in disallow_strings:
if diss in content:
if diss in content_lower:
return True
return False
@ -3828,10 +3829,12 @@ def disallow_reply(content: str) -> bool:
'do not reply',
"don't reply",
"don't @ me",
'DontAtMe'
'dont@me',
'dontatme'
)
content_lower = content.lower()
for diss in disallow_strings:
if diss in content:
if diss in content_lower:
return True
return False
@ -3859,3 +3862,13 @@ def safe_system_string(text: str) -> str:
"""
text = text.replace('$(', '(').replace('`', '')
return text
def get_json_content_from_accept(accept: str) -> str:
"""returns the json content type for the given accept
"""
protocol_str = 'application/json'
if accept:
if 'application/ld+json' in accept:
protocol_str = 'application/ld+json'
return protocol_str