diff --git a/src/acceptreject.py b/src/acceptreject.py index 264c2359f..e951da5f0 100644 --- a/src/acceptreject.py +++ b/src/acceptreject.py @@ -31,8 +31,11 @@ from src.utils import has_object_string_type from src.utils import get_actor_from_post from src.utils import is_yggdrasil_address from src.utils import url_text_to_number +from src.utils import save_json from src.timeFunctions import get_current_time_int from src.data import is_a_file +from src.data import is_a_dir +from src.data import makedir def _create_quote_accept_reject(receiving_actor: str, @@ -271,9 +274,8 @@ def _reject_quote_request(message_json: {}, domain_full: str, def _accept_feature_authorization(base_dir: str, message_json: {}, debug: bool, - curr_domain: str, - onion_domain: str, i2p_domain: str, - yggdrasil_domain: str) -> None: + curr_nickname: str, + curr_domain: str) -> None: """ Receiving an ActivityPub FeatureAuthorization Accept/Reject activity https://codeberg.org/fediverse/fep/src/branch/main/fep/7aa9/fep-7aa9.md Your request to feature an actor or hashtag was accepted @@ -294,11 +296,34 @@ def _accept_feature_authorization(base_dir: str, message_json: {}, return if not isinstance(message_json['actor'], str): return + if isinstance(message_json['to'], str): + to_actor = message_json['to'] + elif isinstance(message_json['to'], list): + to_actor = message_json['to'][0] + else: + return + if '/users/' + curr_nickname + '/' not in to_actor: + return actor = message_json['actor'] + account_dir = acct_dir(base_dir, curr_nickname, curr_domain) + if not is_a_dir(account_dir): + return + if not is_a_dir(account_dir + '/stamps'): + makedir(account_dir + '/stamps') if message_json['type'] == 'Reject': - account_dir = acct_dir(base_dir, nickname, curr_domain) - stamp_filename = account_dir + '/stamps/' + stamp_number - + if not is_a_dir(account_dir + '/stamps/rejected'): + makedir(account_dir + '/stamps/rejected') + rejected_filename = \ + account_dir + '/stamps/rejected' + actor.replace('/', '#') + if not is_a_file(rejected_filename): + save_json(message_json, rejected_filename) + else: + if not is_a_dir(account_dir + '/stamps/accepted'): + makedir(account_dir + '/stamps/accepted') + accepted_filename = \ + account_dir + '/stamps/accepted' + actor.replace('/', '#') + if not is_a_file(accepted_filename): + save_json(message_json, accepted_filename) def _accept_follow(base_dir: str, message_json: {}, @@ -437,7 +462,8 @@ def _accept_follow(base_dir: str, message_json: {}, def receive_accept_reject(base_dir: str, domain: str, message_json: {}, - federation_list: [], debug: bool, curr_domain: str, + federation_list: [], debug: bool, + curr_nickname: str, curr_domain: str, onion_domain: str, i2p_domain: str, yggdrasil_domain: str) -> bool: """Receives an Accept or Reject within the POST section of HTTPServer @@ -468,8 +494,7 @@ def receive_accept_reject(base_dir: str, domain: str, message_json: {}, # is this a FeatureAccept? if message_json.get('result'): _accept_feature_authorization(base_dir, message_json, debug, - curr_domain, onion_domain, - i2p_domain, yggdrasil_domain) + curr_nickname, curr_domain) if debug: print('DEBUG: FeatureRequest ' + message_json['type'] + ' received') diff --git a/src/inbox.py b/src/inbox.py index 1dfc3be97..05dddcded 100644 --- a/src/inbox.py +++ b/src/inbox.py @@ -3983,7 +3983,7 @@ def run_inbox_queue(server, print('DEBUG: No follow requests') if receive_accept_reject(base_dir, domain, curr_post_json, - federation_list, debug, + federation_list, debug, curr_nickname, domain, onion_domain, i2p_domain, yggdrasil_domain): print('Queue: Accept/Reject received from ' + key_id)