Handle none return valued from nickname

merge-requests/30/head
Bob Mottram 2022-03-23 23:59:29 +00:00
parent aab90e75da
commit f55f7a258f
19 changed files with 266 additions and 81 deletions

View File

@ -187,13 +187,14 @@ def create_announce(session, base_dir: str, federation_list: [],
group_account = False group_account = False
if has_users_path(object_url): if has_users_path(object_url):
announce_nickname = get_nickname_from_actor(object_url) announce_nickname = get_nickname_from_actor(object_url)
announce_domain, announce_port = get_domain_from_actor(object_url) if announce_nickname:
if '/' + str(announce_nickname) + '/' in object_url: announce_domain, announce_port = get_domain_from_actor(object_url)
announce_actor = \ if '/' + str(announce_nickname) + '/' in object_url:
object_url.split('/' + announce_nickname + '/')[0] + \ announce_actor = \
'/' + announce_nickname object_url.split('/' + announce_nickname + '/')[0] + \
if has_group_type(base_dir, announce_actor, person_cache): '/' + announce_nickname
group_account = True if has_group_type(base_dir, announce_actor, person_cache):
group_account = True
if announce_nickname and announce_domain: if announce_nickname and announce_domain:
send_signed_json(new_announce, session, base_dir, send_signed_json(new_announce, session, base_dir,

View File

@ -68,6 +68,8 @@ def outbox_availability(base_dir: str, nickname: str, message_json: {},
return False return False
actor_nickname = get_nickname_from_actor(message_json['actor']) actor_nickname = get_nickname_from_actor(message_json['actor'])
if not actor_nickname:
return False
if actor_nickname != nickname: if actor_nickname != nickname:
return False return False
domain, _ = get_domain_from_actor(message_json['actor']) domain, _ = get_domain_from_actor(message_json['actor'])

View File

@ -46,6 +46,8 @@ def undo_bookmarks_collection_entry(recent_posts_cache: {},
# remove any cached version of this post so that the # remove any cached version of this post so that the
# bookmark icon is changed # bookmark icon is changed
nickname = get_nickname_from_actor(actor) nickname = get_nickname_from_actor(actor)
if not nickname:
return
cached_post_filename = \ cached_post_filename = \
get_cached_post_filename(base_dir, nickname, get_cached_post_filename(base_dir, nickname,
domain, post_json_object) domain, post_json_object)
@ -166,6 +168,8 @@ def update_bookmarks_collection(recent_posts_cache: {},
# remove any cached version of this post so that the # remove any cached version of this post so that the
# bookmark icon is changed # bookmark icon is changed
nickname = get_nickname_from_actor(actor) nickname = get_nickname_from_actor(actor)
if not nickname:
return
cached_post_filename = \ cached_post_filename = \
get_cached_post_filename(base_dir, nickname, get_cached_post_filename(base_dir, nickname,
domain, post_json_object) domain, post_json_object)

215
daemon.py
View File

@ -2195,18 +2195,24 @@ class PubServer(BaseHTTPRequestHandler):
if '/@' in search_handle: if '/@' in search_handle:
search_nickname = \ search_nickname = \
get_nickname_from_actor(search_handle) get_nickname_from_actor(search_handle)
search_domain, _ = \ if search_nickname:
get_domain_from_actor(search_handle)
search_handle = \
search_nickname + '@' + search_domain
if '@' not in search_handle:
if search_handle.startswith('http'):
search_nickname = \
get_nickname_from_actor(search_handle)
search_domain, _ = \ search_domain, _ = \
get_domain_from_actor(search_handle) get_domain_from_actor(search_handle)
search_handle = \ search_handle = \
search_nickname + '@' + search_domain search_nickname + '@' + search_domain
else:
search_handle = None
if '@' not in search_handle:
if search_handle.startswith('http'):
search_nickname = \
get_nickname_from_actor(search_handle)
if search_nickname:
search_domain, _ = \
get_domain_from_actor(search_handle)
search_handle = \
search_nickname + '@' + search_domain
else:
search_handle = None
if '@' not in search_handle: if '@' not in search_handle:
# is this a local nickname on this instance? # is this a local nickname on this instance?
local_handle = \ local_handle = \
@ -2234,11 +2240,12 @@ class PubServer(BaseHTTPRequestHandler):
self.server.translate, self.server.translate,
base_dir, http_prefix, base_dir, http_prefix,
nickname) nickname)
msg = msg.encode('utf-8') if msg:
msglen = len(msg) msg = msg.encode('utf-8')
self._login_headers('text/html', msglen = len(msg)
msglen, calling_domain) self._login_headers('text/html',
self._write(msg) msglen, calling_domain)
self._write(msg)
self.server.postreq_busy = False self.server.postreq_busy = False
return return
elif moderation_str.startswith('submitBlock'): elif moderation_str.startswith('submitBlock'):
@ -3088,11 +3095,13 @@ class PubServer(BaseHTTPRequestHandler):
options_actor, options_actor,
self.server.debug, self.server.debug,
self.server.system_language, self.server.system_language,
signing_priv_key_pem).encode('utf-8') signing_priv_key_pem)
msglen = len(msg) if msg:
self._set_headers('text/html', msglen, msg = msg.encode('utf-8')
cookie, calling_domain, False) msglen = len(msg)
self._write(msg) self._set_headers('text/html', msglen,
cookie, calling_domain, False)
self._write(msg)
self.server.postreq_busy = False self.server.postreq_busy = False
return return
else: else:
@ -3227,6 +3236,11 @@ class PubServer(BaseHTTPRequestHandler):
users_path = path.split('/unfollowconfirm')[0] users_path = path.split('/unfollowconfirm')[0]
origin_path_str = http_prefix + '://' + domain_full + users_path origin_path_str = http_prefix + '://' + domain_full + users_path
follower_nickname = get_nickname_from_actor(origin_path_str) follower_nickname = get_nickname_from_actor(origin_path_str)
if not follower_nickname:
self.send_response(400)
self.end_headers()
self.server.postreq_busy = False
return
length = int(self.headers['Content-length']) length = int(self.headers['Content-length'])
@ -3257,6 +3271,11 @@ class PubServer(BaseHTTPRequestHandler):
if '&' in following_actor: if '&' in following_actor:
following_actor = following_actor.split('&')[0] following_actor = following_actor.split('&')[0]
following_nickname = get_nickname_from_actor(following_actor) following_nickname = get_nickname_from_actor(following_actor)
if not following_nickname:
self.send_response(400)
self.end_headers()
self.server.postreq_busy = False
return
following_domain, following_port = \ following_domain, following_port = \
get_domain_from_actor(following_actor) get_domain_from_actor(following_actor)
following_domain_full = \ following_domain_full = \
@ -3318,6 +3337,11 @@ class PubServer(BaseHTTPRequestHandler):
users_path = path.split('/followconfirm')[0] users_path = path.split('/followconfirm')[0]
origin_path_str = http_prefix + '://' + domain_full + users_path origin_path_str = http_prefix + '://' + domain_full + users_path
follower_nickname = get_nickname_from_actor(origin_path_str) follower_nickname = get_nickname_from_actor(origin_path_str)
if not follower_nickname:
self.send_response(400)
self.end_headers()
self.server.postreq_busy = False
return
length = int(self.headers['Content-length']) length = int(self.headers['Content-length'])
@ -3358,6 +3382,11 @@ class PubServer(BaseHTTPRequestHandler):
if '&' in following_actor: if '&' in following_actor:
following_actor = following_actor.split('&')[0] following_actor = following_actor.split('&')[0]
following_nickname = get_nickname_from_actor(following_actor) following_nickname = get_nickname_from_actor(following_actor)
if not following_nickname:
self.send_response(400)
self.end_headers()
self.server.postreq_busy = False
return
following_domain, following_port = \ following_domain, following_port = \
get_domain_from_actor(following_actor) get_domain_from_actor(following_actor)
if follower_nickname == following_nickname and \ if follower_nickname == following_nickname and \
@ -3664,6 +3693,12 @@ class PubServer(BaseHTTPRequestHandler):
search_str = ':' + search_str + ':' search_str = ':' + search_str + ':'
if search_str.startswith('#'): if search_str.startswith('#'):
nickname = get_nickname_from_actor(actor_str) nickname = get_nickname_from_actor(actor_str)
if not nickname:
self.send_response(400)
self.end_headers()
self.server.postreq_busy = False
return
# hashtag search # hashtag search
timezone = None timezone = None
if self.server.account_timezone.get(nickname): if self.server.account_timezone.get(nickname):
@ -3761,6 +3796,11 @@ class PubServer(BaseHTTPRequestHandler):
break break
# your post history search # your post history search
nickname = get_nickname_from_actor(actor_str) nickname = get_nickname_from_actor(actor_str)
if not nickname:
self.send_response(400)
self.end_headers()
self.server.postreq_busy = False
return
search_str = search_str.replace("'", '', 1).strip() search_str = search_str.replace("'", '', 1).strip()
timezone = None timezone = None
if self.server.account_timezone.get(nickname): if self.server.account_timezone.get(nickname):
@ -3834,6 +3874,11 @@ class PubServer(BaseHTTPRequestHandler):
break break
# bookmark search # bookmark search
nickname = get_nickname_from_actor(actor_str) nickname = get_nickname_from_actor(actor_str)
if not nickname:
self.send_response(400)
self.end_headers()
self.server.postreq_busy = False
return
search_str = search_str.replace('-', '', 1).strip() search_str = search_str.replace('-', '', 1).strip()
timezone = None timezone = None
if self.server.account_timezone.get(nickname): if self.server.account_timezone.get(nickname):
@ -3890,6 +3935,11 @@ class PubServer(BaseHTTPRequestHandler):
return return
# profile search # profile search
nickname = get_nickname_from_actor(actor_str) nickname = get_nickname_from_actor(actor_str)
if not nickname:
self.send_response(400)
self.end_headers()
self.server.postreq_busy = False
return
profile_path_str = path.replace('/searchhandle', '') profile_path_str = path.replace('/searchhandle', '')
# are we already following the searched for handle? # are we already following the searched for handle?
@ -3897,6 +3947,11 @@ class PubServer(BaseHTTPRequestHandler):
# get the actor # get the actor
if not has_users_path(search_str): if not has_users_path(search_str):
search_nickname = get_nickname_from_actor(search_str) search_nickname = get_nickname_from_actor(search_str)
if not search_nickname:
self.send_response(400)
self.end_headers()
self.server.postreq_busy = False
return
search_domain, search_port = \ search_domain, search_port = \
get_domain_from_actor(search_str) get_domain_from_actor(search_str)
search_domain_full = \ search_domain_full = \
@ -4310,6 +4365,11 @@ class PubServer(BaseHTTPRequestHandler):
local_actor_url(http_prefix, admin_nickname, domain_full) local_actor_url(http_prefix, admin_nickname, domain_full)
actor = origin_path_str actor = origin_path_str
actor_nickname = get_nickname_from_actor(actor) actor_nickname = get_nickname_from_actor(actor)
if not actor_nickname:
self.send_response(400)
self.end_headers()
self.server.postreq_busy = False
return
if actor == share_actor or actor == admin_actor or \ if actor == share_actor or actor == admin_actor or \
is_moderator(base_dir, actor_nickname): is_moderator(base_dir, actor_nickname):
item_id = remove_share_confirm_params.split('itemID=')[1] item_id = remove_share_confirm_params.split('itemID=')[1]
@ -4378,6 +4438,11 @@ class PubServer(BaseHTTPRequestHandler):
local_actor_url(http_prefix, admin_nickname, domain_full) local_actor_url(http_prefix, admin_nickname, domain_full)
actor = origin_path_str actor = origin_path_str
actor_nickname = get_nickname_from_actor(actor) actor_nickname = get_nickname_from_actor(actor)
if not actor_nickname:
self.send_response(400)
self.end_headers()
self.server.postreq_busy = False
return
if actor == share_actor or actor == admin_actor or \ if actor == share_actor or actor == admin_actor or \
is_moderator(base_dir, actor_nickname): is_moderator(base_dir, actor_nickname):
item_id = remove_share_confirm_params.split('itemID=')[1] item_id = remove_share_confirm_params.split('itemID=')[1]
@ -4921,6 +4986,9 @@ class PubServer(BaseHTTPRequestHandler):
users_path = path.replace('/citationsdata', '') users_path = path.replace('/citationsdata', '')
actor_str = self._get_instance_url(calling_domain) + users_path actor_str = self._get_instance_url(calling_domain) + users_path
nickname = get_nickname_from_actor(actor_str) nickname = get_nickname_from_actor(actor_str)
if not nickname:
self.server.postreq_busy = False
return
citations_filename = \ citations_filename = \
acct_dir(base_dir, nickname, domain) + '/.citations.txt' acct_dir(base_dir, nickname, domain) + '/.citations.txt'
@ -7764,8 +7832,9 @@ class PubServer(BaseHTTPRequestHandler):
self.server.text_mode_banner, self.server.text_mode_banner,
self.server.news_instance, self.server.news_instance,
authorized, authorized,
access_keys, is_group).encode('utf-8') access_keys, is_group)
if msg: if msg:
msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
cookie, calling_domain, False) cookie, calling_domain, False)
@ -8547,6 +8616,9 @@ class PubServer(BaseHTTPRequestHandler):
following_handle = path.split('/followapprove=')[1] following_handle = path.split('/followapprove=')[1]
if '://' in following_handle: if '://' in following_handle:
handle_nickname = get_nickname_from_actor(following_handle) handle_nickname = get_nickname_from_actor(following_handle)
if not handle_nickname:
self._404()
return
handle_domain, handle_port = \ handle_domain, handle_port = \
get_domain_from_actor(following_handle) get_domain_from_actor(following_handle)
following_handle = \ following_handle = \
@ -8733,6 +8805,9 @@ class PubServer(BaseHTTPRequestHandler):
following_handle = path.split('/followdeny=')[1] following_handle = path.split('/followdeny=')[1]
if '://' in following_handle: if '://' in following_handle:
handle_nickname = get_nickname_from_actor(following_handle) handle_nickname = get_nickname_from_actor(following_handle)
if not handle_nickname:
self._404()
return
handle_domain, handle_port = \ handle_domain, handle_port = \
get_domain_from_actor(following_handle) get_domain_from_actor(following_handle)
following_handle = \ following_handle = \
@ -10105,6 +10180,9 @@ class PubServer(BaseHTTPRequestHandler):
actor = \ actor = \
http_prefix + '://' + domain_full + path.split('?mute=')[0] http_prefix + '://' + domain_full + path.split('?mute=')[0]
nickname = get_nickname_from_actor(actor) nickname = get_nickname_from_actor(actor)
if not nickname:
self._404()
return
mute_post(base_dir, nickname, domain, port, mute_post(base_dir, nickname, domain, port,
http_prefix, mute_url, http_prefix, mute_url,
self.server.recent_posts_cache, debug) self.server.recent_posts_cache, debug)
@ -10226,6 +10304,9 @@ class PubServer(BaseHTTPRequestHandler):
actor = \ actor = \
http_prefix + '://' + domain_full + path.split('?unmute=')[0] http_prefix + '://' + domain_full + path.split('?unmute=')[0]
nickname = get_nickname_from_actor(actor) nickname = get_nickname_from_actor(actor)
if not nickname:
self._404()
return
unmute_post(base_dir, nickname, domain, port, unmute_post(base_dir, nickname, domain, port,
http_prefix, mute_url, http_prefix, mute_url,
self.server.recent_posts_cache, debug) self.server.recent_posts_cache, debug)
@ -13817,6 +13898,9 @@ class PubServer(BaseHTTPRequestHandler):
"""Shows a QR code for an account """Shows a QR code for an account
""" """
nickname = get_nickname_from_actor(path) nickname = get_nickname_from_actor(path)
if not nickname:
self._404()
return True
if onion_domain: if onion_domain:
qrcode_domain = onion_domain qrcode_domain = onion_domain
port = 80 port = 80
@ -13866,6 +13950,9 @@ class PubServer(BaseHTTPRequestHandler):
"""Shows a banner image on the search screen """Shows a banner image on the search screen
""" """
nickname = get_nickname_from_actor(path) nickname = get_nickname_from_actor(path)
if not nickname:
self._404()
return True
banner_filename = \ banner_filename = \
acct_dir(base_dir, nickname, domain) + '/search_banner.png' acct_dir(base_dir, nickname, domain) + '/search_banner.png'
if not os.path.isfile(banner_filename): if not os.path.isfile(banner_filename):
@ -14256,7 +14343,9 @@ class PubServer(BaseHTTPRequestHandler):
break break
if is_new_post_endpoint: if is_new_post_endpoint:
nickname = get_nickname_from_actor(path) nickname = get_nickname_from_actor(path)
if not nickname:
self._404()
return True
if in_reply_to_url: if in_reply_to_url:
reply_interval_hours = self.server.default_reply_interval_hrs reply_interval_hours = self.server.default_reply_interval_hrs
if not can_reply_to(base_dir, nickname, domain, if not can_reply_to(base_dir, nickname, domain,
@ -14403,8 +14492,9 @@ class PubServer(BaseHTTPRequestHandler):
access_keys, access_keys,
default_reply_interval_hrs, default_reply_interval_hrs,
self.server.cw_lists, self.server.cw_lists,
self.server.lists_enabled).encode('utf-8') self.server.lists_enabled)
if msg: if msg:
msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
cookie, calling_domain, False) cookie, calling_domain, False)
@ -14436,8 +14526,9 @@ class PubServer(BaseHTTPRequestHandler):
port, port,
http_prefix, http_prefix,
self.server.default_timeline, self.server.default_timeline,
theme, access_keys).encode('utf-8') theme, access_keys)
if msg: if msg:
msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
cookie, calling_domain, False) cookie, calling_domain, False)
@ -14470,8 +14561,9 @@ class PubServer(BaseHTTPRequestHandler):
http_prefix, http_prefix,
self.server.default_timeline, self.server.default_timeline,
self.server.theme_name, self.server.theme_name,
access_keys).encode('utf-8') access_keys)
if msg: if msg:
msg = msg.encode('utf-8')
msglen = len(msg) msglen = len(msg)
self._set_headers('text/html', msglen, self._set_headers('text/html', msglen,
cookie, calling_domain, False) cookie, calling_domain, False)
@ -15810,6 +15902,9 @@ class PubServer(BaseHTTPRequestHandler):
if html_getreq and authorized and users_in_path and \ if html_getreq and authorized and users_in_path and \
self.path.endswith('/followingaccounts'): self.path.endswith('/followingaccounts'):
nickname = get_nickname_from_actor(self.path) nickname = get_nickname_from_actor(self.path)
if not nickname:
self._404()
return
following_filename = \ following_filename = \
acct_dir(self.server.base_dir, acct_dir(self.server.base_dir,
nickname, self.server.domain) + '/following.txt' nickname, self.server.domain) + '/following.txt'
@ -16574,14 +16669,16 @@ class PubServer(BaseHTTPRequestHandler):
self.server.default_timeline, self.server.default_timeline,
self.server.theme_name, self.server.theme_name,
self.server.text_mode_banner, self.server.text_mode_banner,
access_keys).encode('utf-8') access_keys)
msglen = len(msg) if msg:
self._set_headers('text/html', msglen, cookie, calling_domain, msg = msg.encode('utf-8')
False) msglen = len(msg)
self._write(msg) self._set_headers('text/html', msglen, cookie,
fitness_performance(getreq_start_time, self.server.fitness, calling_domain, False)
'_GET', 'search screen shown', self._write(msg)
self.server.debug) fitness_performance(getreq_start_time, self.server.fitness,
'_GET', 'search screen shown',
self.server.debug)
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -16628,20 +16725,24 @@ class PubServer(BaseHTTPRequestHandler):
self.server.domain_full, self.server.domain_full,
self.server.text_mode_banner, self.server.text_mode_banner,
access_keys, access_keys,
False).encode('utf-8') False)
msglen = len(msg) if msg:
if 'ical=true' in self.path: msg = msg.encode('utf-8')
self._set_headers('text/calendar', msglen = len(msg)
msglen, cookie, calling_domain, if 'ical=true' in self.path:
False) self._set_headers('text/calendar',
msglen, cookie, calling_domain,
False)
else:
self._set_headers('text/html',
msglen, cookie, calling_domain,
False)
self._write(msg)
fitness_performance(getreq_start_time, self.server.fitness,
'_GET', 'calendar shown',
self.server.debug)
else: else:
self._set_headers('text/html', self._404()
msglen, cookie, calling_domain,
False)
self._write(msg)
fitness_performance(getreq_start_time, self.server.fitness,
'_GET', 'calendar shown',
self.server.debug)
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -17213,6 +17314,10 @@ class PubServer(BaseHTTPRequestHandler):
if ';' in actor: if ';' in actor:
actor = actor.split(';')[0] actor = actor.split(';')[0]
nickname = get_nickname_from_actor(self.path.split('?')[0]) nickname = get_nickname_from_actor(self.path.split('?')[0])
if not nickname:
self._404()
self.server.getreq_busy = False
return
if nickname == actor: if nickname == actor:
post_url = \ post_url = \
local_actor_url(self.server.http_prefix, nickname, local_actor_url(self.server.http_prefix, nickname,
@ -17715,11 +17820,12 @@ class PubServer(BaseHTTPRequestHandler):
self.server.debug, self.server.debug,
self.server.system_language, self.server.system_language,
self.server.signing_priv_key_pem) self.server.signing_priv_key_pem)
msg = msg.encode('utf-8') if msg:
msglen = len(msg) msg = msg.encode('utf-8')
self._login_headers('text/html', msglen = len(msg)
msglen, calling_domain) self._login_headers('text/html',
self._write(msg) msglen, calling_domain)
self._write(msg)
self.server.getreq_busy = False self.server.getreq_busy = False
return return
@ -17752,11 +17858,12 @@ class PubServer(BaseHTTPRequestHandler):
self.server.debug, self.server.debug,
self.server.system_language, self.server.system_language,
self.server.signing_priv_key_pem) self.server.signing_priv_key_pem)
msg = msg.encode('utf-8') if msg:
msglen = len(msg) msg = msg.encode('utf-8')
self._login_headers('text/html', msglen = len(msg)
msglen, calling_domain) self._login_headers('text/html',
self._write(msg) msglen, calling_domain)
self._write(msg)
self.server.getreq_busy = False self.server.getreq_busy = False
return return

View File

@ -1941,6 +1941,9 @@ def _receive_announce(recent_posts_cache: {},
# is the announce actor blocked? # is the announce actor blocked?
nickname = handle.split('@')[0] nickname = handle.split('@')[0]
actor_nickname = get_nickname_from_actor(message_json['actor']) actor_nickname = get_nickname_from_actor(message_json['actor'])
if not actor_nickname:
print('WARN: _receive_announce no actor_nickname')
return False
actor_domain, _ = get_domain_from_actor(message_json['actor']) actor_domain, _ = get_domain_from_actor(message_json['actor'])
if is_blocked(base_dir, nickname, domain, actor_nickname, actor_domain): if is_blocked(base_dir, nickname, domain, actor_nickname, actor_domain):
print('Receive announce blocked for actor: ' + print('Receive announce blocked for actor: ' +
@ -1948,13 +1951,16 @@ def _receive_announce(recent_posts_cache: {},
return False return False
# also check the actor for the url being announced # also check the actor for the url being announced
announcedActorNickname = get_nickname_from_actor(message_json['object']) announced_actor_nickname = get_nickname_from_actor(message_json['object'])
if not announced_actor_nickname:
print('WARN: _receive_announce no announced_actor_nickname')
return False
announcedActorDomain, announcedActorPort = \ announcedActorDomain, announcedActorPort = \
get_domain_from_actor(message_json['object']) get_domain_from_actor(message_json['object'])
if is_blocked(base_dir, nickname, domain, if is_blocked(base_dir, nickname, domain,
announcedActorNickname, announcedActorDomain): announced_actor_nickname, announcedActorDomain):
print('Receive announce object blocked for actor: ' + print('Receive announce object blocked for actor: ' +
announcedActorNickname + '@' + announcedActorDomain) announced_actor_nickname + '@' + announcedActorDomain)
return False return False
# is this post in the outbox of the person? # is this post in the outbox of the person?
@ -2788,6 +2794,8 @@ def _inbox_update_calendar(base_dir: str, handle: str,
actor = post_json_object['actor'] actor = post_json_object['actor']
actor_nickname = get_nickname_from_actor(actor) actor_nickname = get_nickname_from_actor(actor)
if not actor_nickname:
return
actor_domain, _ = get_domain_from_actor(actor) actor_domain, _ = get_domain_from_actor(actor)
handle_nickname = handle.split('@')[0] handle_nickname = handle.split('@')[0]
handle_domain = handle.split('@')[1] handle_domain = handle.split('@')[1]
@ -3254,6 +3262,8 @@ def _low_frequency_post_notification(base_dir: str, http_prefix: str,
if not isinstance(attributed_to, str): if not isinstance(attributed_to, str):
return return
from_nickname = get_nickname_from_actor(attributed_to) from_nickname = get_nickname_from_actor(attributed_to)
if not from_nickname:
return
from_domain, from_port = get_domain_from_actor(attributed_to) from_domain, from_port = get_domain_from_actor(attributed_to)
from_domain_full = get_full_domain(from_domain, from_port) from_domain_full = get_full_domain(from_domain, from_port)
if notify_when_person_posts(base_dir, nickname, domain, if notify_when_person_posts(base_dir, nickname, domain,
@ -3282,6 +3292,8 @@ def _check_for_git_patches(base_dir: str, nickname: str, domain: str,
if not isinstance(attributed_to, str): if not isinstance(attributed_to, str):
return 0 return 0
from_nickname = get_nickname_from_actor(attributed_to) from_nickname = get_nickname_from_actor(attributed_to)
if not from_nickname:
return 0
from_domain, from_port = get_domain_from_actor(attributed_to) from_domain, from_port = get_domain_from_actor(attributed_to)
from_domain_full = get_full_domain(from_domain, from_port) from_domain_full = get_full_domain(from_domain, from_port)
if receive_git_patch(base_dir, nickname, domain, if receive_git_patch(base_dir, nickname, domain,

View File

@ -4815,6 +4815,9 @@ def download_announce(session, base_dir: str, http_prefix: str,
'Accept': accept_str 'Accept': accept_str
} }
actor_nickname = get_nickname_from_actor(post_json_object['actor']) actor_nickname = get_nickname_from_actor(post_json_object['actor'])
if not actor_nickname:
print('WARN: download_announce no actor_nickname')
return None
actor_domain, actor_port = \ actor_domain, actor_port = \
get_domain_from_actor(post_json_object['actor']) get_domain_from_actor(post_json_object['actor'])
if not actor_domain: if not actor_domain:

View File

@ -541,6 +541,8 @@ def html_emoji_reactions(post_json_object: {}, interactive: bool,
emoji_content = item['content'] emoji_content = item['content']
emoji_actor = item['actor'] emoji_actor = item['actor']
emoji_nickname = get_nickname_from_actor(emoji_actor) emoji_nickname = get_nickname_from_actor(emoji_actor)
if not emoji_nickname:
return ''
emoji_domain, _ = get_domain_from_actor(emoji_actor) emoji_domain, _ = get_domain_from_actor(emoji_actor)
emoji_handle = emoji_nickname + '@' + emoji_domain emoji_handle = emoji_nickname + '@' + emoji_domain
if emoji_actor == actor: if emoji_actor == actor:

View File

@ -158,6 +158,8 @@ def outbox_skills(base_dir: str, nickname: str, message_json: {},
return False return False
actor_nickname = get_nickname_from_actor(message_json['actor']) actor_nickname = get_nickname_from_actor(message_json['actor'])
if not actor_nickname:
return False
if actor_nickname != nickname: if actor_nickname != nickname:
return False return False
domain, _ = get_domain_from_actor(message_json['actor']) domain, _ = get_domain_from_actor(message_json['actor'])

View File

@ -2343,6 +2343,8 @@ def undo_likes_collection_entry(recent_posts_cache: {},
# remove any cached version of this post so that the # remove any cached version of this post so that the
# like icon is changed # like icon is changed
nickname = get_nickname_from_actor(actor) nickname = get_nickname_from_actor(actor)
if not nickname:
return
cached_post_filename = \ cached_post_filename = \
get_cached_post_filename(base_dir, nickname, get_cached_post_filename(base_dir, nickname,
domain, post_json_object) domain, post_json_object)
@ -2409,6 +2411,8 @@ def undo_reaction_collection_entry(recent_posts_cache: {},
# remove any cached version of this post so that the # remove any cached version of this post so that the
# like icon is changed # like icon is changed
nickname = get_nickname_from_actor(actor) nickname = get_nickname_from_actor(actor)
if not nickname:
return
cached_post_filename = \ cached_post_filename = \
get_cached_post_filename(base_dir, nickname, get_cached_post_filename(base_dir, nickname,
domain, post_json_object) domain, post_json_object)
@ -2476,6 +2480,8 @@ def undo_announce_collection_entry(recent_posts_cache: {},
# remove any cached version of this announce so that the announce # remove any cached version of this announce so that the announce
# icon is changed # icon is changed
nickname = get_nickname_from_actor(actor) nickname = get_nickname_from_actor(actor)
if not nickname:
return
cached_post_filename = \ cached_post_filename = \
get_cached_post_filename(base_dir, nickname, domain, get_cached_post_filename(base_dir, nickname, domain,
post_json_object) post_json_object)

View File

@ -42,6 +42,8 @@ def html_calendar_delete_confirm(css_cache: {}, translate: {}, base_dir: str,
"""Shows a screen asking to confirm the deletion of a calendar event """Shows a screen asking to confirm the deletion of a calendar event
""" """
nickname = get_nickname_from_actor(path) nickname = get_nickname_from_actor(path)
if not nickname:
return None
actor = local_actor_url(http_prefix, nickname, domain_full) actor = local_actor_url(http_prefix, nickname, domain_full)
domain, _ = get_domain_from_actor(actor) domain, _ = get_domain_from_actor(actor)
message_id = actor + '/statuses/' + post_id message_id = actor + '/statuses/' + post_id
@ -304,6 +306,8 @@ def html_calendar(person_cache: {}, css_cache: {}, translate: {},
month_number = curr_date.month month_number = curr_date.month
nickname = get_nickname_from_actor(actor) nickname = get_nickname_from_actor(actor)
if not nickname:
return ''
set_custom_background(base_dir, 'calendar-background', set_custom_background(base_dir, 'calendar-background',
'calendar-background') 'calendar-background')

View File

@ -45,6 +45,8 @@ def html_confirm_delete(css_cache: {},
return None return None
actor = message_id.split('/statuses/')[0] actor = message_id.split('/statuses/')[0]
nickname = get_nickname_from_actor(actor) nickname = get_nickname_from_actor(actor)
if not nickname:
return None
domain, port = get_domain_from_actor(actor) domain, port = get_domain_from_actor(actor)
domain_full = get_full_domain(domain, port) domain_full = get_full_domain(domain, port)
@ -119,6 +121,8 @@ def html_confirm_remove_shared_item(css_cache: {}, translate: {},
"""Shows a screen asking to confirm the removal of a shared item """Shows a screen asking to confirm the removal of a shared item
""" """
nickname = get_nickname_from_actor(actor) nickname = get_nickname_from_actor(actor)
if not nickname:
return None
domain, port = get_domain_from_actor(actor) domain, port = get_domain_from_actor(actor)
domain_full = get_full_domain(domain, port) domain_full = get_full_domain(domain, port)
shares_file = \ shares_file = \
@ -207,10 +211,11 @@ def html_confirm_follow(css_cache: {}, translate: {}, base_dir: str,
follow_str += ' <a href="' + follow_actor + '">\n' follow_str += ' <a href="' + follow_actor + '">\n'
follow_str += \ follow_str += \
' <img loading="lazy" src="' + follow_profile_url + '"/></a>\n' ' <img loading="lazy" src="' + follow_profile_url + '"/></a>\n'
follow_str += \ follow_actor_nick = get_nickname_from_actor(follow_actor)
' <p class="followText">' + translate['Follow'] + ' ' + \ if follow_actor_nick:
get_nickname_from_actor(follow_actor) + \ follow_str += \
'@' + follow_domain + ' ?</p>\n' ' <p class="followText">' + translate['Follow'] + ' ' + \
follow_actor_nick + '@' + follow_domain + ' ?</p>\n'
follow_str += ' <form method="POST" action="' + \ follow_str += ' <form method="POST" action="' + \
origin_path_str + '/followconfirm">\n' origin_path_str + '/followconfirm">\n'
follow_str += ' <input type="hidden" name="actor" value="' + \ follow_str += ' <input type="hidden" name="actor" value="' + \
@ -255,10 +260,11 @@ def html_confirm_unfollow(css_cache: {}, translate: {}, base_dir: str,
follow_str += ' <a href="' + follow_actor + '">\n' follow_str += ' <a href="' + follow_actor + '">\n'
follow_str += \ follow_str += \
' <img loading="lazy" src="' + follow_profile_url + '"/></a>\n' ' <img loading="lazy" src="' + follow_profile_url + '"/></a>\n'
follow_str += \ follow_actor_nick = get_nickname_from_actor(follow_actor)
' <p class="followText">' + translate['Stop following'] + \ if follow_actor_nick:
' ' + get_nickname_from_actor(follow_actor) + \ follow_str += \
'@' + follow_domain + ' ?</p>\n' ' <p class="followText">' + translate['Stop following'] + \
' ' + follow_actor_nick + '@' + follow_domain + ' ?</p>\n'
follow_str += ' <form method="POST" action="' + \ follow_str += ' <form method="POST" action="' + \
origin_path_str + '/unfollowconfirm">\n' origin_path_str + '/unfollowconfirm">\n'
follow_str += ' <input type="hidden" name="actor" value="' + \ follow_str += ' <input type="hidden" name="actor" value="' + \
@ -300,9 +306,11 @@ def html_confirm_unblock(css_cache: {}, translate: {}, base_dir: str,
block_str += ' <a href="' + block_actor + '">\n' block_str += ' <a href="' + block_actor + '">\n'
block_str += \ block_str += \
' <img loading="lazy" src="' + block_profile_url + '"/></a>\n' ' <img loading="lazy" src="' + block_profile_url + '"/></a>\n'
block_str += \ block_actor_nick = get_nickname_from_actor(block_actor)
' <p class="blockText">' + translate['Stop blocking'] + ' ' + \ if block_actor_nick:
get_nickname_from_actor(block_actor) + '@' + block_domain + ' ?</p>\n' block_str += \
' <p class="blockText">' + translate['Stop blocking'] + ' ' + \
block_actor_nick + '@' + block_domain + ' ?</p>\n'
block_str += ' <form method="POST" action="' + \ block_str += ' <form method="POST" action="' + \
origin_path_str + '/unblockconfirm">\n' origin_path_str + '/unblockconfirm">\n'
block_str += ' <input type="hidden" name="actor" value="' + \ block_str += ' <input type="hidden" name="actor" value="' + \

View File

@ -200,6 +200,8 @@ def html_search_hashtag_category(css_cache: {}, translate: {},
actor = path.split('/category/')[0] actor = path.split('/category/')[0]
category_str = path.split('/category/')[1].strip() category_str = path.split('/category/')[1].strip()
search_nickname = get_nickname_from_actor(actor) search_nickname = get_nickname_from_actor(actor)
if not search_nickname:
return ''
set_custom_background(base_dir, 'search-background', 'follow-background') set_custom_background(base_dir, 'search-background', 'follow-background')

View File

@ -142,6 +142,8 @@ def html_likers_of_post(base_dir: str, nickname: str,
liker_name, False) liker_name, False)
else: else:
liker_name = get_nickname_from_actor(liker_actor) liker_name = get_nickname_from_actor(liker_actor)
if not liker_name:
liker_name = 'unknown'
if likers_list: if likers_list:
likers_list += ' ' likers_list += ' '
liker_avatar_url = \ liker_avatar_url = \

View File

@ -107,6 +107,8 @@ def html_account_info(css_cache: {}, translate: {},
html_header_with_external_style(css_filename, instance_title, None) html_header_with_external_style(css_filename, instance_title, None)
search_nickname = get_nickname_from_actor(search_handle) search_nickname = get_nickname_from_actor(search_handle)
if not search_nickname:
return ''
search_domain, search_port = get_domain_from_actor(search_handle) search_domain, search_port = get_domain_from_actor(search_handle)
search_handle = search_nickname + '@' + search_domain search_handle = search_nickname + '@' + search_domain
@ -146,6 +148,8 @@ def html_account_info(css_cache: {}, translate: {},
blocked_followers = [] blocked_followers = []
for follower_actor in followers_list: for follower_actor in followers_list:
follower_nickname = get_nickname_from_actor(follower_actor) follower_nickname = get_nickname_from_actor(follower_actor)
if not follower_nickname:
return ''
follower_domain, follower_port = get_domain_from_actor(follower_actor) follower_domain, follower_port = get_domain_from_actor(follower_actor)
follower_domain_full = get_full_domain(follower_domain, follower_port) follower_domain_full = get_full_domain(follower_domain, follower_port)
if is_blocked(base_dir, nickname, domain, if is_blocked(base_dir, nickname, domain,
@ -160,6 +164,8 @@ def html_account_info(css_cache: {}, translate: {},
blocked_following = [] blocked_following = []
for following_actor in following_list: for following_actor in following_list:
following_nickname = get_nickname_from_actor(following_actor) following_nickname = get_nickname_from_actor(following_actor)
if not following_nickname:
return ''
following_domain, following_port = \ following_domain, following_port = \
get_domain_from_actor(following_actor) get_domain_from_actor(following_actor)
following_domain_full = \ following_domain_full = \
@ -224,6 +230,8 @@ def html_account_info(css_cache: {}, translate: {},
':</p>\n' ':</p>\n'
for actor in blocked_following: for actor in blocked_following:
following_nickname = get_nickname_from_actor(actor) following_nickname = get_nickname_from_actor(actor)
if not following_nickname:
return ''
following_domain, following_port = get_domain_from_actor(actor) following_domain, following_port = get_domain_from_actor(actor)
following_domain_full = \ following_domain_full = \
get_full_domain(following_domain, following_port) get_full_domain(following_domain, following_port)
@ -243,6 +251,8 @@ def html_account_info(css_cache: {}, translate: {},
':</p>\n' ':</p>\n'
for actor in blocked_followers: for actor in blocked_followers:
follower_nickname = get_nickname_from_actor(actor) follower_nickname = get_nickname_from_actor(actor)
if not follower_nickname:
return ''
follower_domain, follower_port = get_domain_from_actor(actor) follower_domain, follower_port = get_domain_from_actor(actor)
follower_domain_full = \ follower_domain_full = \
get_full_domain(follower_domain, follower_port) get_full_domain(follower_domain, follower_port)

View File

@ -99,6 +99,8 @@ def html_person_options(default_timeline: str,
dormant_months) dormant_months)
options_nickname = get_nickname_from_actor(options_actor) options_nickname = get_nickname_from_actor(options_actor)
if not options_nickname:
return None
options_domain_full = get_full_domain(options_domain, options_port) options_domain_full = get_full_domain(options_domain, options_port)
follows_you = \ follows_you = \
is_follower_of_person(base_dir, is_follower_of_person(base_dir,
@ -142,7 +144,10 @@ def html_person_options(default_timeline: str,
options_str += ' <a href="' + options_actor + '">\n' options_str += ' <a href="' + options_actor + '">\n'
options_str += ' <img loading="lazy" src="' + options_profile_url + \ options_str += ' <img loading="lazy" src="' + options_profile_url + \
'" alt="" ' + get_broken_link_substitute() + '/></a>\n' '" alt="" ' + get_broken_link_substitute() + '/></a>\n'
handle = get_nickname_from_actor(options_actor) + '@' + options_domain handle_nick = get_nickname_from_actor(options_actor)
if not handle_nick:
return None
handle = handle_nick + '@' + options_domain
handle_shown = handle handle_shown = handle
if locked_account: if locked_account:
handle_shown += '🔒' handle_shown += '🔒'

View File

@ -104,11 +104,12 @@ def _html_post_metadata_open_graph(domain: str, post_json_object: {}) -> str:
if isinstance(obj_json['attributedTo'], str): if isinstance(obj_json['attributedTo'], str):
attrib = obj_json['attributedTo'] attrib = obj_json['attributedTo']
actor_nick = get_nickname_from_actor(attrib) actor_nick = get_nickname_from_actor(attrib)
actor_domain, _ = get_domain_from_actor(attrib) if actor_nick:
actor_handle = actor_nick + '@' + actor_domain actor_domain, _ = get_domain_from_actor(attrib)
metadata += \ actor_handle = actor_nick + '@' + actor_domain
" <meta content=\"@" + actor_handle + \ metadata += \
"\" property=\"og:title\" />\n" " <meta content=\"@" + actor_handle + \
"\" property=\"og:title\" />\n"
if obj_json.get('url'): if obj_json.get('url'):
metadata += \ metadata += \
" <meta content=\"" + obj_json['url'] + \ " <meta content=\"" + obj_json['url'] + \
@ -410,6 +411,8 @@ def _get_reply_icon_html(base_dir: str, nickname: str, domain: str,
# check that the alternative replyTo url is not blocked # check that the alternative replyTo url is not blocked
block_nickname = \ block_nickname = \
get_nickname_from_actor(post_json_object['object']['replyTo']) get_nickname_from_actor(post_json_object['object']['replyTo'])
if not block_nickname:
return reply_str
block_domain, _ = \ block_domain, _ = \
get_domain_from_actor(post_json_object['object']['replyTo']) get_domain_from_actor(post_json_object['object']['replyTo'])
if not is_blocked(base_dir, nickname, domain, if not is_blocked(base_dir, nickname, domain,
@ -1516,6 +1519,8 @@ def individual_post_as_html(signing_priv_key_pem: str,
if domain_full not in post_actor: if domain_full not in post_actor:
# lookup the correct webfinger for the post_actor # lookup the correct webfinger for the post_actor
post_actor_nickname = get_nickname_from_actor(post_actor) post_actor_nickname = get_nickname_from_actor(post_actor)
if not post_actor_nickname:
return ''
post_actor_domain, post_actor_port = get_domain_from_actor(post_actor) post_actor_domain, post_actor_port = get_domain_from_actor(post_actor)
post_actor_domain_full = \ post_actor_domain_full = \
get_full_domain(post_actor_domain, post_actor_port) get_full_domain(post_actor_domain, post_actor_port)
@ -2132,6 +2137,8 @@ def html_individual_post(css_cache: {},
if by_str: if by_str:
by_str_nickname = get_nickname_from_actor(by_str) by_str_nickname = get_nickname_from_actor(by_str)
if not by_str_nickname:
return ''
by_str_domain, by_str_port = get_domain_from_actor(by_str) by_str_domain, by_str_port = get_domain_from_actor(by_str)
by_str_domain = get_full_domain(by_str_domain, by_str_port) by_str_domain = get_full_domain(by_str_domain, by_str_port)
by_str_handle = by_str_nickname + '@' + by_str_domain by_str_handle = by_str_nickname + '@' + by_str_domain

View File

@ -2429,6 +2429,8 @@ def _individual_follow_as_html(signing_priv_key_pem: str,
"""An individual follow entry on the profile screen """An individual follow entry on the profile screen
""" """
follow_url_nickname = get_nickname_from_actor(followUrl) follow_url_nickname = get_nickname_from_actor(followUrl)
if not follow_url_nickname:
return ''
follow_url_domain, follow_url_port = get_domain_from_actor(followUrl) follow_url_domain, follow_url_port = get_domain_from_actor(followUrl)
follow_url_domain_full = \ follow_url_domain_full = \
get_full_domain(follow_url_domain, follow_url_port) get_full_domain(follow_url_domain, follow_url_port)

View File

@ -380,6 +380,8 @@ def html_search(css_cache: {}, translate: {},
""" """
actor = path.replace('/search', '') actor = path.replace('/search', '')
search_nickname = get_nickname_from_actor(actor) search_nickname = get_nickname_from_actor(actor)
if not search_nickname:
return ''
set_custom_background(base_dir, 'search-background', 'follow-background') set_custom_background(base_dir, 'search-background', 'follow-background')

View File

@ -418,6 +418,8 @@ def shares_timeline_json(actor: str, pageNumber: int, items_per_page: int,
share_actor = share_actor.replace('___', '://') share_actor = share_actor.replace('___', '://')
share_actor = share_actor.replace('--', '/') share_actor = share_actor.replace('--', '/')
share_nickname = get_nickname_from_actor(share_actor) share_nickname = get_nickname_from_actor(share_actor)
if not share_nickname:
continue
if is_blocked(base_dir, nickname, domain, if is_blocked(base_dir, nickname, domain,
share_nickname, federated_domain, None): share_nickname, federated_domain, None):
continue continue
@ -1538,6 +1540,8 @@ def html_search_result_share(base_dir: str, shared_item: {}, translate: {},
# should the remove button be shown? # should the remove button be shown?
show_remove_button = False show_remove_button = False
nickname = get_nickname_from_actor(actor) nickname = get_nickname_from_actor(actor)
if not nickname:
return ''
if actor.endswith('/users/' + contact_nickname): if actor.endswith('/users/' + contact_nickname):
show_remove_button = True show_remove_button = True
elif is_moderator(base_dir, nickname): elif is_moderator(base_dir, nickname):