def settings_page(): context = {'flash': None} if request.method == "POST": for field, default in CONFIGURABLE_SETTINGS.items(): value = request.form.get(field, default) if isinstance(default, bool): value = value == 'on' settings[field] = value try: settings.save() system('pkill -SIGHUP -f viewer.py') context['flash'] = { 'class': "success", 'message': "Settings were successfully saved." } except IOError as e: context['flash'] = {'class': "error", 'message': e} except OSError as e: context['flash'] = {'class': "error", 'message': e} else: settings.load() for field, default in DEFAULTS['viewer'].items(): context[field] = settings[field] return template('settings.html', **context)
def settings_page(): context = {'flash': None} if request.method == "POST": for field, default in CONFIGURABLE_SETTINGS.items(): value = request.POST.get(field, default) if isinstance(default, bool): value = value == 'on' settings[field] = value try: settings.save() sh.sudo('systemctl', 'kill', '--signal=SIGUSR2', 'screenly-viewer.service') context['flash'] = { 'class': "success", 'message': "Settings were successfully saved." } except IOError as e: context['flash'] = {'class': "error", 'message': e} except sh.ErrorReturnCode_1 as e: context['flash'] = {'class': "error", 'message': e} else: settings.load() for field, default in DEFAULTS['viewer'].items(): context[field] = settings[field] return template('settings', **context)
def settings_page(): context = {'flash': None} if request.method == "POST": for field, default in CONFIGURABLE_SETTINGS.items(): value = request.POST.get(field, default) if isinstance(default, bool): value = value == 'on' settings[field] = value try: settings.save() context['flash'] = {'class': "success", 'message': "Settings were successfully saved."} except IOError as e: context['flash'] = {'class': "error", 'message': e} else: settings.load() for field, default in DEFAULTS['viewer'].items(): context[field] = settings[field] return template('settings', **context)
def settings_page(): context = {'flash': None} if request.method == "POST": for field, default in CONFIGURABLE_SETTINGS.items(): value = request.POST.get(field, default) if isinstance(default, bool): value = value == 'on' settings[field] = value try: settings.save() sh.sudo('systemctl', 'kill', '--signal=SIGUSR2', 'screenly-viewer.service') context['flash'] = {'class': "success", 'message': "Settings were successfully saved."} except IOError as e: context['flash'] = {'class': "error", 'message': e} except sh.ErrorReturnCode_1 as e: context['flash'] = {'class': "error", 'message': e} else: settings.load() for field, default in DEFAULTS['viewer'].items(): context[field] = settings[field] return template('settings', **context)
def settings_page(): context = {'flash': None} if request.method == "POST": try: # put some request variables in local variables to make easier to read current_pass = request.form.get('curpassword', '') new_pass = request.form.get('password', '') new_pass2 = request.form.get('password2', '') current_pass = '' if current_pass == '' else hashlib.sha256( current_pass).hexdigest() new_pass = '' if new_pass == '' else hashlib.sha256( new_pass).hexdigest() new_pass2 = '' if new_pass2 == '' else hashlib.sha256( new_pass2).hexdigest() new_user = request.form.get('user', '') use_auth = request.form.get('use_auth', '') == 'on' # Handle auth components if settings['password'] != '': # if password currently set, if new_user != settings['user']: # trying to change user # should have current password set. Optionally may change password. if current_pass == '': if not use_auth: raise ValueError( "Must supply current password to disable authentication" ) raise ValueError( "Must supply current password to change username") if current_pass != settings['password']: raise ValueError("Incorrect current password.") settings['user'] = new_user if new_pass != '' and use_auth: if current_pass == '': raise ValueError( "Must supply current password to change password") if current_pass != settings['password']: raise ValueError("Incorrect current password.") if new_pass2 != new_pass: # changing password raise ValueError("New passwords do not match!") settings['password'] = new_pass if new_pass == '' and not use_auth and new_pass2 == '': # trying to disable authentication if current_pass == '': raise ValueError( "Must supply current password to disable authentication" ) settings['password'] = '' else: # no current password if new_user != '': # setting username and password if new_pass != '' and new_pass != new_pass2: raise ValueError("New passwords do not match!") if new_pass == '': raise ValueError("Must provide password") settings['user'] = new_user settings['password'] = new_pass for field, default in CONFIGURABLE_SETTINGS.items(): value = request.form.get(field, default) # skip user and password as they should be handled already. if field == "user" or field == "password": continue if isinstance(default, bool): value = value == 'on' settings[field] = value settings.save() publisher = ZmqPublisher.get_instance() publisher.send_to_viewer('reload') context['flash'] = { 'class': "success", 'message': "Settings were successfully saved." } except ValueError as e: context['flash'] = {'class': "danger", 'message': e} except IOError as e: context['flash'] = {'class': "danger", 'message': e} except OSError as e: context['flash'] = {'class': "danger", 'message': e} else: settings.load() for field, default in DEFAULTS['viewer'].items(): context[field] = settings[field] context['user'] = settings['user'] context['password'] = "******" if settings['password'] != "" else "" context['reset_button_state'] = "disabled" if path.isfile( path.join(HOME, DISABLE_MANAGE_NETWORK)) else "" if not settings['user'] or not settings['password']: context['use_auth'] = False else: context['use_auth'] = True return template('settings.html', **context)
def settings_page(): context = {'flash': None} if request.method == "POST": try: # put some request variables in local variables to make easier to read current_pass = request.form.get('current-password', '') auth_backend = request.form.get('auth_backend', '') if auth_backend != settings['auth_backend'] and settings[ 'auth_backend']: if not current_pass: raise ValueError( "Must supply current password to change authentication method" ) if not settings.auth.check_password(current_pass): raise ValueError("Incorrect current password.") prev_auth_backend = settings['auth_backend'] if not current_pass and prev_auth_backend: current_pass_correct = None else: current_pass_correct = settings.auth_backends[ prev_auth_backend].check_password(current_pass) next_auth_backend = settings.auth_backends[auth_backend] next_auth_backend.update_settings(current_pass_correct) settings['auth_backend'] = auth_backend for field, default in CONFIGURABLE_SETTINGS.items(): value = request.form.get(field, default) if not value and field in [ 'default_duration', 'default_streaming_duration' ]: value = str(0) if isinstance(default, bool): value = value == 'on' settings[field] = value settings.save() publisher = ZmqPublisher.get_instance() publisher.send_to_viewer('reload') context['flash'] = { 'class': "success", 'message': "Settings were successfully saved." } except ValueError as e: context['flash'] = {'class': "danger", 'message': e} except IOError as e: context['flash'] = {'class': "danger", 'message': e} except OSError as e: context['flash'] = {'class': "danger", 'message': e} else: settings.load() for field, default in DEFAULTS['viewer'].items(): context[field] = settings[field] auth_backends = [] for backend in settings.auth_backends_list: if backend.template: html, ctx = backend.template context.update(ctx) else: html = None auth_backends.append({ 'name': backend.name, 'text': backend.display_name, 'template': html, 'selected': 'selected' if settings['auth_backend'] == backend.name else '' }) context.update({ 'user': settings['user'], 'need_current_password': bool(settings['auth_backend']), 'is_balena': is_balena_app(), 'auth_backend': settings['auth_backend'], 'auth_backends': auth_backends }) return template('settings.html', **context)
def settings_page(): context = {'flash': None} if request.method == "POST": try: # put some request variables in local variables to make easier to read current_pass = request.form.get('curpassword', '') new_pass = request.form.get('password', '') new_pass2 = request.form.get('password2', '') current_pass = '' if current_pass == '' else hashlib.sha256(current_pass).hexdigest() new_pass = '' if new_pass == '' else hashlib.sha256(new_pass).hexdigest() new_pass2 = '' if new_pass2 == '' else hashlib.sha256(new_pass2).hexdigest() new_user = request.form.get('user', '') use_auth = request.form.get('use_auth', '') == 'on' # Handle auth components if settings['password'] != '': # if password currently set, if new_user != settings['user']: # trying to change user # should have current password set. Optionally may change password. if current_pass == '': if not use_auth: raise ValueError("Must supply current password to disable authentication") raise ValueError("Must supply current password to change username") if current_pass != settings['password']: raise ValueError("Incorrect current password.") settings['user'] = new_user if new_pass != '' and use_auth: if current_pass == '': raise ValueError("Must supply current password to change password") if current_pass != settings['password']: raise ValueError("Incorrect current password.") if new_pass2 != new_pass: # changing password raise ValueError("New passwords do not match!") settings['password'] = new_pass if new_pass == '' and not use_auth and new_pass2 == '': # trying to disable authentication if current_pass == '': raise ValueError("Must supply current password to disable authentication") settings['password'] = '' else: # no current password if new_user != '': # setting username and password if new_pass != '' and new_pass != new_pass2: raise ValueError("New passwords do not match!") if new_pass == '': raise ValueError("Must provide password") settings['user'] = new_user settings['password'] = new_pass for field, default in CONFIGURABLE_SETTINGS.items(): value = request.form.get(field, default) # skip user and password as they should be handled already. if field == "user" or field == "password": continue if not value and field in ['default_duration', 'default_streaming_duration']: value = str(0) if isinstance(default, bool): value = value == 'on' settings[field] = value settings.save() publisher = ZmqPublisher.get_instance() publisher.send_to_viewer('reload') context['flash'] = {'class': "success", 'message': "Settings were successfully saved."} except ValueError as e: context['flash'] = {'class': "danger", 'message': e} except IOError as e: context['flash'] = {'class': "danger", 'message': e} except OSError as e: context['flash'] = {'class': "danger", 'message': e} else: settings.load() for field, default in DEFAULTS['viewer'].items(): context[field] = settings[field] context['user'] = settings['user'] context['password'] = "******" if settings['password'] != "" else "" context['is_balena_app'] = is_balena_app() if not settings['user'] or not settings['password']: context['use_auth'] = False else: context['use_auth'] = True return template('settings.html', **context)