mirror of https://gitlab.com/bashrc2/epicyon
Merge branch 'main' of gitlab.com:bashrc2/epicyon
commit
e9625ebb95
2
blog.py
2
blog.py
|
@ -895,7 +895,7 @@ def html_edit_blog(media_instance: bool, translate: {},
|
||||||
content_str = content_str.replace('<p>', '').replace('</p>', '\n')
|
content_str = content_str.replace('<p>', '').replace('</p>', '\n')
|
||||||
|
|
||||||
edit_blog_form += \
|
edit_blog_form += \
|
||||||
edit_text_area(placeholder_message, 'message', content_str,
|
edit_text_area(placeholder_message, None, 'message', content_str,
|
||||||
message_box_height, '', True)
|
message_box_height, '', True)
|
||||||
edit_blog_form += date_and_location
|
edit_blog_form += date_and_location
|
||||||
if not media_instance:
|
if not media_instance:
|
||||||
|
|
343
daemon.py
343
daemon.py
|
@ -152,13 +152,8 @@ from blocking import remove_global_block
|
||||||
from blocking import is_blocked_hashtag
|
from blocking import is_blocked_hashtag
|
||||||
from blocking import is_blocked_domain
|
from blocking import is_blocked_domain
|
||||||
from blocking import get_domain_blocklist
|
from blocking import get_domain_blocklist
|
||||||
|
from roles import set_roles_from_list
|
||||||
from roles import get_actor_roles_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 path_contains_blog_link
|
||||||
from blog import html_blog_page_rss2
|
from blog import html_blog_page_rss2
|
||||||
from blog import html_blog_page_rss3
|
from blog import html_blog_page_rss3
|
||||||
|
@ -6547,335 +6542,29 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
si_tokens)
|
si_tokens)
|
||||||
|
|
||||||
# change moderators list
|
# change moderators list
|
||||||
if fields.get('moderators'):
|
set_roles_from_list(base_dir, domain, admin_nickname,
|
||||||
if path.startswith('/users/' +
|
'moderators', 'moderator', fields,
|
||||||
admin_nickname + '/'):
|
path, 'moderators.txt')
|
||||||
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')
|
|
||||||
|
|
||||||
# change site editors list
|
# change site editors list
|
||||||
if fields.get('editors'):
|
set_roles_from_list(base_dir, domain, admin_nickname,
|
||||||
if path.startswith('/users/' +
|
'editors', 'editor', fields,
|
||||||
admin_nickname + '/'):
|
path, 'editors.txt')
|
||||||
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')
|
|
||||||
|
|
||||||
# change site devops list
|
# change site devops list
|
||||||
if fields.get('devopslist'):
|
set_roles_from_list(base_dir, domain, admin_nickname,
|
||||||
if path.startswith('/users/' +
|
'devopslist', 'devops', fields,
|
||||||
admin_nickname + '/'):
|
path, 'devops.txt')
|
||||||
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')
|
|
||||||
|
|
||||||
# change site counselors list
|
# change site counselors list
|
||||||
if fields.get('counselors'):
|
set_roles_from_list(base_dir, domain, admin_nickname,
|
||||||
if path.startswith('/users/' +
|
'counselors', 'counselor', fields,
|
||||||
admin_nickname + '/'):
|
path, 'counselors.txt')
|
||||||
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')
|
|
||||||
|
|
||||||
# change site artists list
|
# change site artists list
|
||||||
if fields.get('artists'):
|
set_roles_from_list(base_dir, domain, admin_nickname,
|
||||||
if path.startswith('/users/' +
|
'artists', 'artist', fields,
|
||||||
admin_nickname + '/'):
|
path, 'artists.txt')
|
||||||
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')
|
|
||||||
|
|
||||||
# remove scheduled posts
|
# remove scheduled posts
|
||||||
if fields.get('removeScheduledPosts'):
|
if fields.get('removeScheduledPosts'):
|
||||||
|
|
|
@ -35,7 +35,7 @@ from posts import create_moderation
|
||||||
from auth import store_basic_credentials
|
from auth import store_basic_credentials
|
||||||
from auth import remove_password
|
from auth import remove_password
|
||||||
from roles import set_role
|
from roles import set_role
|
||||||
from roles import set_rolesFromList
|
from roles import actor_roles_from_list
|
||||||
from roles import get_actor_roles_list
|
from roles import get_actor_roles_list
|
||||||
from media import process_meta_data
|
from media import process_meta_data
|
||||||
from utils import safe_system_string
|
from utils import safe_system_string
|
||||||
|
@ -860,7 +860,7 @@ def person_upgrade_actor(base_dir: str, person_json: {},
|
||||||
admin_name = get_config_param(base_dir, 'admin')
|
admin_name = get_config_param(base_dir, 'admin')
|
||||||
if person_json['id'].endswith('/users/' + admin_name):
|
if person_json['id'].endswith('/users/' + admin_name):
|
||||||
roles_list = ["admin", "moderator", "editor"]
|
roles_list = ["admin", "moderator", "editor"]
|
||||||
set_rolesFromList(person_json, roles_list)
|
actor_roles_from_list(person_json, roles_list)
|
||||||
update_actor = True
|
update_actor = True
|
||||||
|
|
||||||
# remove the old roles format
|
# remove the old roles format
|
||||||
|
|
109
roles.py
109
roles.py
|
@ -38,50 +38,10 @@ def _clear_role_status(base_dir: str, role: str) -> None:
|
||||||
roles_list = get_actor_roles_list(actor_json)
|
roles_list = get_actor_roles_list(actor_json)
|
||||||
if role in roles_list:
|
if role in roles_list:
|
||||||
roles_list.remove(role)
|
roles_list.remove(role)
|
||||||
set_rolesFromList(actor_json, roles_list)
|
actor_roles_from_list(actor_json, roles_list)
|
||||||
save_json(actor_json, filename)
|
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,
|
def _add_role(base_dir: str, nickname: str, domain: str,
|
||||||
role_filename: str) -> None:
|
role_filename: str) -> None:
|
||||||
"""Adds a role nickname to the file.
|
"""Adds a role nickname to the file.
|
||||||
|
@ -212,7 +172,7 @@ def _set_actor_role(actor_json: {}, role_name: str) -> bool:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def set_rolesFromList(actor_json: {}, roles_list: []) -> None:
|
def actor_roles_from_list(actor_json: {}, roles_list: []) -> None:
|
||||||
"""Sets roles from a list
|
"""Sets roles from a list
|
||||||
"""
|
"""
|
||||||
# clear Roles from the occupation list
|
# clear Roles from the occupation list
|
||||||
|
@ -285,7 +245,7 @@ def set_role(base_dir: str, nickname: str, domain: str,
|
||||||
if role not in roles_list:
|
if role not in roles_list:
|
||||||
roles_list.append(role)
|
roles_list.append(role)
|
||||||
roles_list.sort()
|
roles_list.sort()
|
||||||
set_rolesFromList(actor_json, roles_list)
|
actor_roles_from_list(actor_json, roles_list)
|
||||||
actor_changed = True
|
actor_changed = True
|
||||||
else:
|
else:
|
||||||
# remove the role
|
# remove the role
|
||||||
|
@ -293,7 +253,7 @@ def set_role(base_dir: str, nickname: str, domain: str,
|
||||||
_remove_role(base_dir, nickname, role_files[role])
|
_remove_role(base_dir, nickname, role_files[role])
|
||||||
if role in roles_list:
|
if role in roles_list:
|
||||||
roles_list.remove(role)
|
roles_list.remove(role)
|
||||||
set_rolesFromList(actor_json, roles_list)
|
actor_roles_from_list(actor_json, roles_list)
|
||||||
actor_changed = True
|
actor_changed = True
|
||||||
if actor_changed:
|
if actor_changed:
|
||||||
save_json(actor_json, actor_filename)
|
save_json(actor_json, actor_filename)
|
||||||
|
@ -334,3 +294,64 @@ def is_devops(base_dir: str, nickname: str) -> bool:
|
||||||
if devops == nickname:
|
if devops == nickname:
|
||||||
return True
|
return True
|
||||||
return False
|
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
|
||||||
|
"""
|
||||||
|
# check for admin user
|
||||||
|
if not path.startswith('/users/' + admin_nickname + '/'):
|
||||||
|
return
|
||||||
|
roles_filename = base_dir + '/accounts/' + list_filename
|
||||||
|
if not fields.get(list_name):
|
||||||
|
if os.path.isfile(roles_filename):
|
||||||
|
_clear_role_status(base_dir, role_name)
|
||||||
|
try:
|
||||||
|
os.remove(roles_filename)
|
||||||
|
except OSError:
|
||||||
|
print('EX: failed to remove roles file ' + roles_filename)
|
||||||
|
return
|
||||||
|
_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)
|
||||||
|
|
4
tests.py
4
tests.py
|
@ -107,7 +107,7 @@ from skills import set_skill_level
|
||||||
from skills import actor_skill_value
|
from skills import actor_skill_value
|
||||||
from skills import set_skills_from_dict
|
from skills import set_skills_from_dict
|
||||||
from skills import actor_has_skill
|
from skills import actor_has_skill
|
||||||
from roles import set_rolesFromList
|
from roles import actor_roles_from_list
|
||||||
from roles import set_role
|
from roles import set_role
|
||||||
from roles import actor_has_role
|
from roles import actor_has_role
|
||||||
from auth import constant_time_string_check
|
from auth import constant_time_string_check
|
||||||
|
@ -6420,7 +6420,7 @@ def _test_roles() -> None:
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
test_roles_list = ["admin", "moderator"]
|
test_roles_list = ["admin", "moderator"]
|
||||||
set_rolesFromList(actor_json, test_roles_list)
|
actor_roles_from_list(actor_json, test_roles_list)
|
||||||
assert actor_has_role(actor_json, "admin")
|
assert actor_has_role(actor_json, "admin")
|
||||||
assert actor_has_role(actor_json, "moderator")
|
assert actor_has_role(actor_json, "moderator")
|
||||||
assert not actor_has_role(actor_json, "editor")
|
assert not actor_has_role(actor_json, "editor")
|
||||||
|
|
|
@ -1423,7 +1423,7 @@ def _html_edit_profile_instance(base_dir: str, translate: {},
|
||||||
'instanceDescriptionShort', instance_description_short)
|
'instanceDescriptionShort', instance_description_short)
|
||||||
instance_str += '<br>\n'
|
instance_str += '<br>\n'
|
||||||
instance_str += \
|
instance_str += \
|
||||||
edit_text_area(translate['Instance Description'],
|
edit_text_area(translate['Instance Description'], None,
|
||||||
'instanceDescription', instance_description, 200,
|
'instanceDescription', instance_description, 200,
|
||||||
'', True)
|
'', True)
|
||||||
instance_str += \
|
instance_str += \
|
||||||
|
@ -1493,37 +1493,30 @@ def _html_edit_profile_instance(base_dir: str, translate: {},
|
||||||
instance_str += end_edit_section()
|
instance_str += end_edit_section()
|
||||||
|
|
||||||
# Role assignments section
|
# Role assignments section
|
||||||
|
role_assign_str = \
|
||||||
|
begin_edit_section(translate['Role Assignment']) + \
|
||||||
|
' <b><label class="labels">'
|
||||||
|
|
||||||
|
# site moderators
|
||||||
moderators = ''
|
moderators = ''
|
||||||
moderators_file = base_dir + '/accounts/moderators.txt'
|
moderators_file = base_dir + '/accounts/moderators.txt'
|
||||||
if os.path.isfile(moderators_file):
|
if os.path.isfile(moderators_file):
|
||||||
with open(moderators_file, 'r', encoding='utf-8') as mod_file:
|
with open(moderators_file, 'r', encoding='utf-8') as mod_file:
|
||||||
moderators = mod_file.read()
|
moderators = mod_file.read()
|
||||||
# site moderators
|
subtitle = translate['A list of moderator nicknames. One per line.']
|
||||||
role_assign_str = \
|
role_assign_str += \
|
||||||
begin_edit_section(translate['Role Assignment']) + \
|
edit_text_area('<b>' + translate['Moderators'] + '</b>', subtitle,
|
||||||
' <b><label class="labels">' + \
|
'moderators', moderators, 200, '', False)
|
||||||
translate['Moderators'] + '</label></b><br>\n' + \
|
|
||||||
' ' + \
|
|
||||||
translate['A list of moderator nicknames. One per line.'] + \
|
|
||||||
' <textarea id="message" name="moderators" placeholder="' + \
|
|
||||||
translate['List of moderator nicknames'] + \
|
|
||||||
'..." style="height:200px" spellcheck="false">' + \
|
|
||||||
moderators + '</textarea>'
|
|
||||||
|
|
||||||
# site editors
|
# site editors
|
||||||
editors = ''
|
editors = ''
|
||||||
editors_file = base_dir + '/accounts/editors.txt'
|
editors_file = base_dir + '/accounts/editors.txt'
|
||||||
if os.path.isfile(editors_file):
|
if os.path.isfile(editors_file):
|
||||||
with open(editors_file, 'r', encoding='utf-8') as edit_file:
|
with open(editors_file, 'r', encoding='utf-8') as edit_file:
|
||||||
editors = edit_file.read()
|
editors = edit_file.read()
|
||||||
|
subtitle = translate['A list of editor nicknames. One per line.']
|
||||||
role_assign_str += \
|
role_assign_str += \
|
||||||
' <b><label class="labels">' + \
|
edit_text_area('<b>' + translate['Site Editors'] + '</b>',
|
||||||
translate['Site Editors'] + '</label></b><br>\n' + \
|
subtitle, 'editors', editors, 200, '', False)
|
||||||
' ' + \
|
|
||||||
translate['A list of editor nicknames. One per line.'] + \
|
|
||||||
' <textarea id="message" name="editors" placeholder="" ' + \
|
|
||||||
'style="height:200px" spellcheck="false">' + \
|
|
||||||
editors + '</textarea>'
|
|
||||||
|
|
||||||
# counselors
|
# counselors
|
||||||
counselors = ''
|
counselors = ''
|
||||||
|
@ -1532,7 +1525,7 @@ def _html_edit_profile_instance(base_dir: str, translate: {},
|
||||||
with open(counselors_file, 'r', encoding='utf-8') as co_file:
|
with open(counselors_file, 'r', encoding='utf-8') as co_file:
|
||||||
counselors = co_file.read()
|
counselors = co_file.read()
|
||||||
role_assign_str += \
|
role_assign_str += \
|
||||||
edit_text_area('<b>' + translate['Counselors'] + '</b>',
|
edit_text_area('<b>' + translate['Counselors'] + '</b>', None,
|
||||||
'counselors', counselors, 200, '', False)
|
'counselors', counselors, 200, '', False)
|
||||||
|
|
||||||
# artists
|
# artists
|
||||||
|
@ -1542,7 +1535,7 @@ def _html_edit_profile_instance(base_dir: str, translate: {},
|
||||||
with open(artists_file, 'r', encoding='utf-8') as art_file:
|
with open(artists_file, 'r', encoding='utf-8') as art_file:
|
||||||
artists = art_file.read()
|
artists = art_file.read()
|
||||||
role_assign_str += \
|
role_assign_str += \
|
||||||
edit_text_area('<b>' + translate['Artists'] + '</b>',
|
edit_text_area('<b>' + translate['Artists'] + '</b>', None,
|
||||||
'artists', artists, 200, '', False)
|
'artists', artists, 200, '', False)
|
||||||
|
|
||||||
# site devops
|
# site devops
|
||||||
|
@ -1551,14 +1544,10 @@ def _html_edit_profile_instance(base_dir: str, translate: {},
|
||||||
if os.path.isfile(devops_file):
|
if os.path.isfile(devops_file):
|
||||||
with open(devops_file, 'r', encoding='utf-8') as edit_file:
|
with open(devops_file, 'r', encoding='utf-8') as edit_file:
|
||||||
devops = edit_file.read()
|
devops = edit_file.read()
|
||||||
|
subtitle = translate['A list of devops nicknames. One per line.']
|
||||||
role_assign_str += \
|
role_assign_str += \
|
||||||
' <b><label class="labels">' + \
|
edit_text_area('<b>' + translate['Site DevOps'] + '</b>',
|
||||||
translate['Site DevOps'] + '</label></b><br>\n' + \
|
subtitle, 'devopslist', devops, 200, '', False)
|
||||||
' ' + \
|
|
||||||
translate['A list of devops nicknames. One per line.'] + \
|
|
||||||
' <textarea id="message" name="devopslist" placeholder="" ' + \
|
|
||||||
'style="height:200px" spellcheck="false">' + \
|
|
||||||
devops + '</textarea>'
|
|
||||||
|
|
||||||
role_assign_str += end_edit_section()
|
role_assign_str += end_edit_section()
|
||||||
|
|
||||||
|
@ -1568,8 +1557,8 @@ def _html_edit_profile_instance(base_dir: str, translate: {},
|
||||||
for url in peertube_instances:
|
for url in peertube_instances:
|
||||||
peertube_instances_str += url + '\n'
|
peertube_instances_str += url + '\n'
|
||||||
peertube_str += \
|
peertube_str += \
|
||||||
edit_text_area(translate['Peertube Instances'], 'ptInstances',
|
edit_text_area(translate['Peertube Instances'], None,
|
||||||
peertube_instances_str, 200, '', False)
|
'ptInstances', peertube_instances_str, 200, '', False)
|
||||||
peertube_str += \
|
peertube_str += \
|
||||||
' <br>\n'
|
' <br>\n'
|
||||||
yt_replace_domain = get_config_param(base_dir, "youtubedomain")
|
yt_replace_domain = get_config_param(base_dir, "youtubedomain")
|
||||||
|
@ -1675,7 +1664,7 @@ def _html_edit_profile_git_projects(base_dir: str, nickname: str, domain: str,
|
||||||
edit_profile_form = begin_edit_section(translate['Git Projects'])
|
edit_profile_form = begin_edit_section(translate['Git Projects'])
|
||||||
idx = 'List of project names that you wish to receive git patches for'
|
idx = 'List of project names that you wish to receive git patches for'
|
||||||
edit_profile_form += \
|
edit_profile_form += \
|
||||||
edit_text_area(translate[idx], 'gitProjects', git_projects_str,
|
edit_text_area(translate[idx], None, 'gitProjects', git_projects_str,
|
||||||
100, '', False)
|
100, '', False)
|
||||||
edit_profile_form += end_edit_section()
|
edit_profile_form += end_edit_section()
|
||||||
return edit_profile_form
|
return edit_profile_form
|
||||||
|
@ -1696,7 +1685,7 @@ def _html_edit_profile_shared_items(base_dir: str, translate: {}) -> str:
|
||||||
edit_profile_form = begin_edit_section(translate['Shares'])
|
edit_profile_form = begin_edit_section(translate['Shares'])
|
||||||
idx = 'List of domains which can access the shared items catalog'
|
idx = 'List of domains which can access the shared items catalog'
|
||||||
edit_profile_form += \
|
edit_profile_form += \
|
||||||
edit_text_area(translate[idx], 'shareDomainList',
|
edit_text_area(translate[idx], None, 'shareDomainList',
|
||||||
shared_items_str, 200, '', False)
|
shared_items_str, 200, '', False)
|
||||||
edit_profile_form += end_edit_section()
|
edit_profile_form += end_edit_section()
|
||||||
return edit_profile_form
|
return edit_profile_form
|
||||||
|
@ -1849,12 +1838,12 @@ def _html_edit_profile_filtering(base_dir: str, nickname: str, domain: str,
|
||||||
idx = 'Blocked accounts, one per line, in the form ' + \
|
idx = 'Blocked accounts, one per line, in the form ' + \
|
||||||
'nickname@domain or *@blockeddomain'
|
'nickname@domain or *@blockeddomain'
|
||||||
edit_profile_form += \
|
edit_profile_form += \
|
||||||
edit_text_area(translate['Blocked accounts'], 'blocked', blocked_str,
|
edit_text_area(translate['Blocked accounts'], None, 'blocked',
|
||||||
200, '', False)
|
blocked_str, 200, '', False)
|
||||||
|
|
||||||
idx = 'Direct messages are always allowed from these instances.'
|
idx = 'Direct messages are always allowed from these instances.'
|
||||||
edit_profile_form += \
|
edit_profile_form += \
|
||||||
edit_text_area(translate['Direct Message permitted instances'],
|
edit_text_area(translate['Direct Message permitted instances'], None,
|
||||||
'dmAllowedInstances', dm_allowed_instances_str,
|
'dmAllowedInstances', dm_allowed_instances_str,
|
||||||
200, '', False)
|
200, '', False)
|
||||||
|
|
||||||
|
@ -1880,7 +1869,7 @@ def _html_edit_profile_filtering(base_dir: str, nickname: str, domain: str,
|
||||||
user_agents_blocked_str += '\n'
|
user_agents_blocked_str += '\n'
|
||||||
user_agents_blocked_str += uagent
|
user_agents_blocked_str += uagent
|
||||||
edit_profile_form += \
|
edit_profile_form += \
|
||||||
edit_text_area(translate['Blocked User Agents'],
|
edit_text_area(translate['Blocked User Agents'], None,
|
||||||
'userAgentsBlockedStr', user_agents_blocked_str,
|
'userAgentsBlockedStr', user_agents_blocked_str,
|
||||||
200, '', False)
|
200, '', False)
|
||||||
|
|
||||||
|
@ -1894,7 +1883,7 @@ def _html_edit_profile_filtering(base_dir: str, nickname: str, domain: str,
|
||||||
crawlers_allowed_str += '\n'
|
crawlers_allowed_str += '\n'
|
||||||
crawlers_allowed_str += uagent
|
crawlers_allowed_str += uagent
|
||||||
edit_profile_form += \
|
edit_profile_form += \
|
||||||
edit_text_area(translate['Web Bots Allowed'],
|
edit_text_area(translate['Web Bots Allowed'], None,
|
||||||
'crawlersAllowedStr', crawlers_allowed_str,
|
'crawlersAllowedStr', crawlers_allowed_str,
|
||||||
200, '', False)
|
200, '', False)
|
||||||
|
|
||||||
|
@ -2097,7 +2086,7 @@ def _html_edit_profile_encryption_keys(pgp_fingerprint: str,
|
||||||
edit_profile_form += edit_text_field(translate['PGP Fingerprint'],
|
edit_profile_form += edit_text_field(translate['PGP Fingerprint'],
|
||||||
'openpgp', pgp_fingerprint)
|
'openpgp', pgp_fingerprint)
|
||||||
edit_profile_form += \
|
edit_profile_form += \
|
||||||
edit_text_area(translate['PGP'], 'pgp', pgp_pub_key, 600,
|
edit_text_area(translate['PGP'], None, 'pgp', pgp_pub_key, 600,
|
||||||
'-----BEGIN PGP PUBLIC KEY BLOCK-----', False)
|
'-----BEGIN PGP PUBLIC KEY BLOCK-----', False)
|
||||||
|
|
||||||
edit_profile_form += end_edit_section()
|
edit_profile_form += end_edit_section()
|
||||||
|
@ -2182,7 +2171,8 @@ def _html_edit_profile_main(base_dir: str, display_nickname: str, bio_str: str,
|
||||||
display_nickname)
|
display_nickname)
|
||||||
|
|
||||||
edit_profile_form += \
|
edit_profile_form += \
|
||||||
edit_text_area(translate['Your bio'], 'bio', bio_str, 200, '', True)
|
edit_text_area(translate['Your bio'], None, 'bio', bio_str,
|
||||||
|
200, '', True)
|
||||||
|
|
||||||
edit_profile_form += \
|
edit_profile_form += \
|
||||||
' <label class="labels">' + translate['Avatar image'] + \
|
' <label class="labels">' + translate['Avatar image'] + \
|
||||||
|
|
|
@ -1622,7 +1622,7 @@ def edit_check_box(label: str, name: str, checked: bool) -> str:
|
||||||
'name="' + name + '"' + checked_str + '> ' + label + '<br>\n'
|
'name="' + name + '"' + checked_str + '> ' + label + '<br>\n'
|
||||||
|
|
||||||
|
|
||||||
def edit_text_area(label: str, name: str, value: str,
|
def edit_text_area(label: str, subtitle: str, name: str, value: str,
|
||||||
height: int, placeholder: str, spellcheck: bool) -> str:
|
height: int, placeholder: str, spellcheck: bool) -> str:
|
||||||
"""Returns html for editing a textarea field
|
"""Returns html for editing a textarea field
|
||||||
"""
|
"""
|
||||||
|
@ -1631,6 +1631,8 @@ def edit_text_area(label: str, name: str, value: str,
|
||||||
text = ''
|
text = ''
|
||||||
if label:
|
if label:
|
||||||
text = '<label class="labels">' + label + '</label><br>\n'
|
text = '<label class="labels">' + label + '</label><br>\n'
|
||||||
|
if subtitle:
|
||||||
|
text += subtitle + '<br>\n'
|
||||||
text += \
|
text += \
|
||||||
' <textarea id="message" placeholder=' + \
|
' <textarea id="message" placeholder=' + \
|
||||||
'"' + placeholder + '" '
|
'"' + placeholder + '" '
|
||||||
|
|
Loading…
Reference in New Issue