From e25c1de005e74cd2f4f24017cf9d581a44bf5a23 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Fri, 2 Sep 2022 18:52:09 +0100 Subject: [PATCH] Tidying --- daemon.py | 343 +++--------------------------------------------------- roles.py | 95 ++++++++------- 2 files changed, 71 insertions(+), 367 deletions(-) diff --git a/daemon.py b/daemon.py index 4ab1e3aad..ae1188933 100644 --- a/daemon.py +++ b/daemon.py @@ -152,13 +152,8 @@ from blocking import remove_global_block from blocking import is_blocked_hashtag from blocking import is_blocked_domain from blocking import get_domain_blocklist +from roles import set_roles_from_list from roles import get_actor_roles_list -from roles import set_role -from roles import clear_moderator_status -from roles import clear_editor_status -from roles import clear_devops_status -from roles import clear_counselor_status -from roles import clear_artist_status from blog import path_contains_blog_link from blog import html_blog_page_rss2 from blog import html_blog_page_rss3 @@ -6547,335 +6542,29 @@ class PubServer(BaseHTTPRequestHandler): si_tokens) # change moderators list - if fields.get('moderators'): - if path.startswith('/users/' + - admin_nickname + '/'): - moderators_file = \ - base_dir + \ - '/accounts/moderators.txt' - clear_moderator_status(base_dir) - if ',' in fields['moderators']: - # if the list was given as comma separated - mods = fields['moderators'].split(',') - try: - with open(moderators_file, 'w+', - encoding='utf-8') as modfile: - for mod_nick in mods: - mod_nick = mod_nick.strip() - mod_dir = base_dir + \ - '/accounts/' + mod_nick + \ - '@' + domain - if os.path.isdir(mod_dir): - modfile.write(mod_nick + - '\n') - except OSError: - print('EX: ' + - 'unable to write moderators ' + - moderators_file) - - for mod_nick in mods: - mod_nick = mod_nick.strip() - mod_dir = base_dir + \ - '/accounts/' + mod_nick + \ - '@' + domain - if os.path.isdir(mod_dir): - set_role(base_dir, - mod_nick, domain, - 'moderator') - else: - # nicknames on separate lines - mods = fields['moderators'].split('\n') - try: - with open(moderators_file, 'w+', - encoding='utf-8') as modfile: - for mod_nick in mods: - mod_nick = mod_nick.strip() - mod_dir = \ - base_dir + \ - '/accounts/' + mod_nick + \ - '@' + domain - if os.path.isdir(mod_dir): - modfile.write(mod_nick + - '\n') - except OSError: - print('EX: ' + - 'unable to write moderators 2 ' + - moderators_file) - - for mod_nick in mods: - mod_nick = mod_nick.strip() - mod_dir = \ - base_dir + \ - '/accounts/' + \ - mod_nick + '@' + \ - domain - if os.path.isdir(mod_dir): - set_role(base_dir, - mod_nick, domain, - 'moderator') + set_roles_from_list(base_dir, domain, admin_nickname, + 'moderators', 'moderator', fields, + path, 'moderators.txt') # change site editors list - if fields.get('editors'): - if path.startswith('/users/' + - admin_nickname + '/'): - editors_file = \ - base_dir + \ - '/accounts/editors.txt' - clear_editor_status(base_dir) - if ',' in fields['editors']: - # if the list was given as comma separated - eds = fields['editors'].split(',') - try: - with open(editors_file, 'w+', - encoding='utf-8') as edfil: - for ed_nick in eds: - ed_nick = ed_nick.strip() - ed_dir = base_dir + \ - '/accounts/' + ed_nick + \ - '@' + domain - if os.path.isdir(ed_dir): - edfil.write(ed_nick + '\n') - except OSError as ex: - print('EX: unable to write editors ' + - editors_file + ' ' + str(ex)) - - for ed_nick in eds: - ed_nick = ed_nick.strip() - ed_dir = base_dir + \ - '/accounts/' + ed_nick + \ - '@' + domain - if os.path.isdir(ed_dir): - set_role(base_dir, - ed_nick, domain, - 'editor') - else: - # nicknames on separate lines - eds = fields['editors'].split('\n') - try: - with open(editors_file, 'w+', - encoding='utf-8') as edfile: - for ed_nick in eds: - ed_nick = ed_nick.strip() - ed_dir = \ - base_dir + \ - '/accounts/' + ed_nick + \ - '@' + domain - if os.path.isdir(ed_dir): - edfile.write(ed_nick + - '\n') - except OSError as ex: - print('EX: unable to write editors ' + - editors_file + ' ' + str(ex)) - - for ed_nick in eds: - ed_nick = ed_nick.strip() - ed_dir = \ - base_dir + \ - '/accounts/' + \ - ed_nick + '@' + \ - domain - if os.path.isdir(ed_dir): - set_role(base_dir, - ed_nick, domain, - 'editor') + set_roles_from_list(base_dir, domain, admin_nickname, + 'editors', 'editor', fields, + path, 'editors.txt') # change site devops list - if fields.get('devopslist'): - if path.startswith('/users/' + - admin_nickname + '/'): - devops_file = \ - base_dir + \ - '/accounts/devops.txt' - clear_devops_status(base_dir) - if ',' in fields['devopslist']: - # if the list was given as comma separated - dos = fields['devopslist'].split(',') - try: - with open(devops_file, 'w+', - encoding='utf-8') as dofil: - for do_nick in dos: - do_nick = do_nick.strip() - do_dir = base_dir + \ - '/accounts/' + do_nick + \ - '@' + domain - if os.path.isdir(do_dir): - dofil.write(do_nick + '\n') - except OSError as ex: - print('EX: unable to write devops ' + - devops_file + ' ' + str(ex)) - - for do_nick in dos: - do_nick = do_nick.strip() - do_dir = base_dir + \ - '/accounts/' + do_nick + \ - '@' + domain - if os.path.isdir(do_dir): - set_role(base_dir, - do_nick, domain, - 'devops') - else: - # nicknames on separate lines - dos = fields['devopslist'].split('\n') - try: - with open(devops_file, 'w+', - encoding='utf-8') as dofile: - for do_nick in dos: - do_nick = do_nick.strip() - do_dir = \ - base_dir + \ - '/accounts/' + do_nick + \ - '@' + domain - if os.path.isdir(do_dir): - dofile.write(do_nick + - '\n') - except OSError as ex: - print('EX: unable to write devops ' + - devops_file + ' ' + str(ex)) - - for do_nick in dos: - do_nick = do_nick.strip() - do_dir = \ - base_dir + \ - '/accounts/' + \ - do_nick + '@' + \ - domain - if os.path.isdir(do_dir): - set_role(base_dir, - do_nick, domain, - 'devops') + set_roles_from_list(base_dir, domain, admin_nickname, + 'devopslist', 'devops', fields, + path, 'devops.txt') # change site counselors list - if fields.get('counselors'): - if path.startswith('/users/' + - admin_nickname + '/'): - counselors_file = \ - base_dir + \ - '/accounts/counselors.txt' - clear_counselor_status(base_dir) - if ',' in fields['counselors']: - # if the list was given as comma separated - eds = fields['counselors'].split(',') - try: - with open(counselors_file, 'w+', - encoding='utf-8') as edfile: - for ed_nick in eds: - ed_nick = ed_nick.strip() - ed_dir = base_dir + \ - '/accounts/' + ed_nick + \ - '@' + domain - if os.path.isdir(ed_dir): - edfile.write(ed_nick + - '\n') - except OSError as ex: - print('EX: ' + - 'unable to write counselors ' + - counselors_file + ' ' + str(ex)) - - for ed_nick in eds: - ed_nick = ed_nick.strip() - ed_dir = base_dir + \ - '/accounts/' + ed_nick + \ - '@' + domain - if os.path.isdir(ed_dir): - set_role(base_dir, - ed_nick, domain, - 'counselor') - else: - # nicknames on separate lines - eds = fields['counselors'].split('\n') - try: - with open(counselors_file, 'w+', - encoding='utf-8') as edfile: - for ed_nick in eds: - ed_nick = ed_nick.strip() - ed_dir = \ - base_dir + \ - '/accounts/' + ed_nick + \ - '@' + domain - if os.path.isdir(ed_dir): - edfile.write(ed_nick + - '\n') - except OSError as ex: - print('EX: ' + - 'unable to write counselors ' + - counselors_file + ' ' + str(ex)) - - for ed_nick in eds: - ed_nick = ed_nick.strip() - ed_dir = \ - base_dir + \ - '/accounts/' + \ - ed_nick + '@' + \ - domain - if os.path.isdir(ed_dir): - set_role(base_dir, - ed_nick, domain, - 'counselor') + set_roles_from_list(base_dir, domain, admin_nickname, + 'counselors', 'counselor', fields, + path, 'counselors.txt') # change site artists list - if fields.get('artists'): - if path.startswith('/users/' + - admin_nickname + '/'): - artists_file = \ - base_dir + \ - '/accounts/artists.txt' - clear_artist_status(base_dir) - if ',' in fields['artists']: - # if the list was given as comma separated - eds = fields['artists'].split(',') - try: - with open(artists_file, 'w+', - encoding='utf-8') as edfil: - for ed_nick in eds: - ed_nick = ed_nick.strip() - ed_dir = base_dir + \ - '/accounts/' + ed_nick + \ - '@' + domain - if os.path.isdir(ed_dir): - edfil.write(ed_nick + '\n') - except OSError as ex: - print('EX: unable to write artists ' + - artists_file + ' ' + str(ex)) - - for ed_nick in eds: - ed_nick = ed_nick.strip() - ed_dir = base_dir + \ - '/accounts/' + ed_nick + \ - '@' + domain - if os.path.isdir(ed_dir): - set_role(base_dir, - ed_nick, domain, - 'artist') - else: - # nicknames on separate lines - eds = fields['artists'].split('\n') - try: - with open(artists_file, 'w+', - encoding='utf-8') as edfil: - for ed_nick in eds: - ed_nick = ed_nick.strip() - ed_dir = \ - base_dir + \ - '/accounts/' + ed_nick + \ - '@' + domain - if os.path.isdir(ed_dir): - edfil.write(ed_nick + - '\n') - except OSError as ex: - print('EX: unable to write artists ' + - artists_file + ' ' + str(ex)) - - for ed_nick in eds: - ed_nick = ed_nick.strip() - ed_dir = \ - base_dir + \ - '/accounts/' + \ - ed_nick + '@' + \ - domain - if os.path.isdir(ed_dir): - set_role(base_dir, - ed_nick, domain, - 'artist') + set_roles_from_list(base_dir, domain, admin_nickname, + 'artists', 'artist', fields, + path, 'artists.txt') # remove scheduled posts if fields.get('removeScheduledPosts'): diff --git a/roles.py b/roles.py index 58ff40647..b5b331347 100644 --- a/roles.py +++ b/roles.py @@ -42,46 +42,6 @@ def _clear_role_status(base_dir: str, role: str) -> None: save_json(actor_json, filename) -def clear_editor_status(base_dir: str) -> None: - """Removes editor status from all accounts - This could be slow if there are many users, but only happens - rarely when editors are appointed or removed - """ - _clear_role_status(base_dir, 'editor') - - -def clear_devops_status(base_dir: str) -> None: - """Removes devops status from all accounts - This could be slow if there are many users, but only happens - rarely when devops are appointed or removed - """ - _clear_role_status(base_dir, 'devops') - - -def clear_counselor_status(base_dir: str) -> None: - """Removes counselor status from all accounts - This could be slow if there are many users, but only happens - rarely when counselors are appointed or removed - """ - _clear_role_status(base_dir, 'editor') - - -def clear_artist_status(base_dir: str) -> None: - """Removes artist status from all accounts - This could be slow if there are many users, but only happens - rarely when artists are appointed or removed - """ - _clear_role_status(base_dir, 'artist') - - -def clear_moderator_status(base_dir: str) -> None: - """Removes moderator status from all accounts - This could be slow if there are many users, but only happens - rarely when moderators are appointed or removed - """ - _clear_role_status(base_dir, 'moderator') - - def _add_role(base_dir: str, nickname: str, domain: str, role_filename: str) -> None: """Adds a role nickname to the file. @@ -334,3 +294,58 @@ def is_devops(base_dir: str, nickname: str) -> bool: if devops == nickname: return True return False + + +def set_roles_from_list(base_dir: str, domain: str, admin_nickname: str, + list_name: str, role_name: str, fields: [], path: str, + list_filename: str) -> None: + """Sets the roles from a list returned from the edit profile screen under + role assignments + """ + if not fields.get(list_name): + return + # check for admin user + if not path.startswith('/users/' + admin_nickname + '/'): + return + roles_filename = base_dir + '/accounts/' + list_filename + _clear_role_status(base_dir, role_name) + if ',' in fields[list_name]: + # if the list was given as comma separated + roles_list = fields[list_name].split(',') + try: + with open(roles_filename, 'w+', + encoding='utf-8') as rolesfile: + for roles_nick in roles_list: + roles_nick = roles_nick.strip() + roles_dir = acct_dir(base_dir, roles_nick, domain) + if os.path.isdir(roles_dir): + rolesfile.write(roles_nick + '\n') + except OSError as ex: + print('EX: unable to write ' + list_name + ' ' + + roles_filename + ' ' + str(ex)) + + for roles_nick in roles_list: + roles_nick = roles_nick.strip() + roles_dir = acct_dir(base_dir, roles_nick, domain) + if os.path.isdir(roles_dir): + set_role(base_dir, roles_nick, domain, role_name) + else: + # nicknames on separate lines + roles_list = fields[list_name].split('\n') + try: + with open(roles_filename, 'w+', + encoding='utf-8') as rolesfile: + for roles_nick in roles_list: + roles_nick = roles_nick.strip() + roles_dir = acct_dir(base_dir, roles_nick, domain) + if os.path.isdir(roles_dir): + rolesfile.write(roles_nick + '\n') + except OSError as ex: + print('EX: unable to write ' + list_name + ' ' + + roles_filename + ' ' + str(ex)) + + for roles_nick in roles_list: + roles_nick = roles_nick.strip() + roles_dir = acct_dir(base_dir, roles_nick, domain) + if os.path.isdir(roles_dir): + set_role(base_dir, roles_nick, domain, role_name)