Use appropriate session to send follow rejects

main
Bob Mottram 2022-06-01 15:26:50 +01:00
parent 63194d2f0c
commit 5eef7c72e9
9 changed files with 51 additions and 59 deletions

View File

@ -469,8 +469,7 @@ def outbox_block(base_dir: str, http_prefix: str,
return True
def outbox_undo_block(base_dir: str, http_prefix: str,
nickname: str, domain: str, port: int,
def outbox_undo_block(base_dir: str, nickname: str, domain: str,
message_json: {}, debug: bool) -> None:
""" When an undo block request is received by the outbox from c2s
"""

View File

@ -1273,8 +1273,9 @@ def save_media_in_form_post(media_bytes, debug: bool,
extension = 'mp3'
if filename_base:
filename = filename_base + '.' + extension
search_lst = search_str.decode().split('/', maxsplit=1)
attachment_media_type = \
search_str.decode().split('/')[0].replace('Content-Type: ', '')
search_lst[0].replace('Content-Type: ', '')
detected_extension = extension
break
@ -1331,15 +1332,15 @@ def save_media_in_form_post(media_bytes, debug: bool,
def extract_text_fields_in_post(post_bytes, boundary: str, debug: bool,
unit_testData: str = None) -> {}:
unit_test_data: str = None) -> {}:
"""Returns a dictionary containing the text fields of a http form POST
The boundary argument comes from the http header
"""
if not unit_testData:
if not unit_test_data:
msg_bytes = email.parser.BytesParser().parsebytes(post_bytes)
message_fields = msg_bytes.get_payload(decode=True).decode('utf-8')
else:
message_fields = unit_testData
message_fields = unit_test_data
if debug:
print('DEBUG: POST arriving ' + message_fields)
@ -1690,30 +1691,31 @@ def remove_script(content: str, log_filename: str,
for sep in separators:
prefix = sep[0] + 'script'
ending = '/script' + sep[1]
if prefix in content:
sections = content.split(prefix)
ctr = 0
for text in sections:
if ctr == 0:
ctr += 1
if prefix not in content:
continue
sections = content.split(prefix)
ctr = 0
for text in sections:
if ctr == 0:
ctr += 1
continue
if ending not in text:
if '/' + sep[1] not in text:
continue
if ending not in text:
if '/' + sep[1] not in text:
continue
if ending in text:
text = prefix + text.split(ending)[0] + ending
else:
text = prefix + text.split('/' + sep[1])[0] + '/' + sep[1]
if log_filename and actor:
# write the detected script to a log file
log_str = actor + ' ' + url + ' ' + text + '\n'
write_type = 'a+'
if os.path.isfile(log_filename):
write_type = 'w+'
try:
with open(log_filename, write_type) as fp_log:
fp_log.write(log_str)
except OSError:
print('EX: cannot append to svg script log')
content = content.replace(text, '')
if ending in text:
text = prefix + text.split(ending)[0] + ending
else:
text = prefix + text.split('/' + sep[1])[0] + '/' + sep[1]
if log_filename and actor:
# write the detected script to a log file
log_str = actor + ' ' + url + ' ' + text + '\n'
write_type = 'a+'
if os.path.isfile(log_filename):
write_type = 'w+'
try:
with open(log_filename, write_type) as fp_log:
fp_log.write(log_str)
except OSError:
print('EX: cannot append to svg script log')
content = content.replace(text, '')
return content

View File

@ -5998,12 +5998,12 @@ class PubServer(BaseHTTPRequestHandler):
current_show_languages = get_actor_languages(actor_json)
if fields.get('showLanguages'):
if fields['showLanguages'] != current_show_languages:
set_actor_languages(base_dir, actor_json,
set_actor_languages(actor_json,
fields['showLanguages'])
actor_changed = True
else:
if current_show_languages:
set_actor_languages(base_dir, actor_json, '')
set_actor_languages(actor_json, '')
actor_changed = True
# change time zone

View File

@ -386,7 +386,6 @@ def clear_followers(base_dir: str, nickname: str, domain: str) -> None:
def _get_no_of_follows(base_dir: str, nickname: str, domain: str,
authenticated: bool,
follow_file='following.txt') -> int:
"""Returns the number of follows or followers
"""
@ -422,13 +421,10 @@ def _get_no_of_follows(base_dir: str, nickname: str, domain: str,
return ctr
def get_no_of_followers(base_dir: str,
nickname: str, domain: str,
authenticated: bool) -> int:
def get_no_of_followers(base_dir: str, nickname: str, domain: str) -> int:
"""Returns the number of followers of the given person
"""
return _get_no_of_follows(base_dir, nickname, domain,
authenticated, 'followers.txt')
return _get_no_of_follows(base_dir, nickname, domain, 'followers.txt')
def get_following_feed(base_dir: str, domain: str, port: int, path: str,
@ -482,7 +478,7 @@ def get_following_feed(base_dir: str, domain: str, port: int, path: str,
id_str = \
local_actor_url(http_prefix, nickname, domain) + '/' + follow_file
total_str = \
_get_no_of_follows(base_dir, nickname, domain, authorized)
_get_no_of_follows(base_dir, nickname, domain)
following = {
'@context': 'https://www.w3.org/ns/activitystreams',
'first': first_str,
@ -599,7 +595,6 @@ def follow_approval_required(base_dir: str, nickname_to_follow: str,
def no_of_follow_requests(base_dir: str,
nickname_to_follow: str, domain_to_follow: str,
nickname: str, domain: str, from_port: int,
follow_type: str) -> int:
"""Returns the current number of follow requests
"""
@ -846,8 +841,13 @@ def followed_account_rejects(session, session_onion, session_i2p,
except OSError:
print('EX: followed_account_rejects unable to delete ' +
follow_activity_filename)
curr_session = session
if domain.endswith('.onion') and session_onion:
curr_session = session_onion
elif domain.endswith('.i2p') and session_i2p:
curr_session = session_i2p
# send the reject activity
return send_signed_json(reject_json, session, base_dir,
return send_signed_json(reject_json, curr_session, base_dir,
nickname_to_follow, domain_to_follow, port,
nickname, domain, from_port,
http_prefix, client_to_server,
@ -981,7 +981,7 @@ def send_follow_request_via_server(base_dir: str, session,
followed_id = \
http_prefix + '://' + follow_domain_full + '/@' + follow_nickname
status_number, published = get_status_number()
status_number, _ = get_status_number()
new_follow_json = {
'@context': 'https://www.w3.org/ns/activitystreams',
'id': follow_actor + '/statuses/' + str(status_number),

View File

@ -4649,9 +4649,8 @@ def _receive_follow_request(session, session_onion, session_i2p,
nickname_to_follow)
return True
if max_followers > 0:
if get_no_of_followers(base_dir,
nickname_to_follow, domain_to_follow,
True) > max_followers:
if get_no_of_followers(base_dir, nickname_to_follow,
domain_to_follow) > max_followers:
print('WARN: ' + nickname_to_follow +
' has reached their maximum number of followers')
return True
@ -4716,21 +4715,18 @@ def _receive_follow_request(session, session_onion, session_i2p,
if domain.endswith('.onion'):
if no_of_follow_requests(base_dir,
nickname_to_follow, domain_to_follow,
nickname, domain, from_port,
'onion') > 5:
print('Too many follow requests from onion addresses')
return False
elif domain.endswith('.i2p'):
if no_of_follow_requests(base_dir,
nickname_to_follow, domain_to_follow,
nickname, domain, from_port,
'i2p') > 5:
print('Too many follow requests from i2p addresses')
return False
else:
if no_of_follow_requests(base_dir,
nickname_to_follow, domain_to_follow,
nickname, domain, from_port,
'') > 10:
print('Too many follow requests')
return False

View File

@ -46,8 +46,7 @@ def get_understood_languages(base_dir: str, http_prefix: str,
return get_actor_languages_list(actor_json)
def set_actor_languages(base_dir: str, actor_json: {},
languages_str: str) -> None:
def set_actor_languages(actor_json: {}, languages_str: str) -> None:
"""Sets the languages understood by the given actor
"""
languages_str = languages_str.strip()

View File

@ -351,8 +351,7 @@ def send_undo_like_via_server(base_dir: str, session,
def outbox_like(recent_posts_cache: {},
base_dir: str, http_prefix: str,
nickname: str, domain: str, port: int,
base_dir: str, nickname: str, domain: str,
message_json: {}, debug: bool) -> None:
""" When a like request is received by the outbox from c2s
"""

View File

@ -576,8 +576,7 @@ def post_message_to_outbox(session, translate: {},
if debug:
print('DEBUG: handle any like requests')
outbox_like(recent_posts_cache,
base_dir, http_prefix,
post_to_nickname, domain, port,
base_dir, post_to_nickname, domain,
message_json, debug)
if debug:
print('DEBUG: handle any undo like requests')
@ -636,9 +635,7 @@ def post_message_to_outbox(session, translate: {},
if debug:
print('DEBUG: handle undo block requests')
outbox_undo_block(base_dir, http_prefix,
post_to_nickname, domain,
port, message_json, debug)
outbox_undo_block(base_dir, post_to_nickname, domain, message_json, debug)
if debug:
print('DEBUG: handle mute requests')

View File

@ -6389,7 +6389,7 @@ def _test_set_actor_language():
actor_json = {
"attachment": []
}
set_actor_languages(None, actor_json, 'es, fr, en')
set_actor_languages(actor_json, 'es, fr, en')
assert len(actor_json['attachment']) == 1
assert actor_json['attachment'][0]['name'] == 'Languages'
assert actor_json['attachment'][0]['type'] == 'PropertyValue'