From 829a113351b39b6ce9aad918e157317080d72489 Mon Sep 17 00:00:00 2001 From: Calin Crisan Date: Sun, 13 Oct 2013 17:40:09 +0300 Subject: [PATCH] better username changing --- doc/todo.txt | 2 -- src/handlers.py | 30 +++++++++++++++++++++++------- static/js/main.js | 5 +++++ 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/doc/todo.txt b/doc/todo.txt index ba8767a..e7d1645 100644 --- a/doc/todo.txt +++ b/doc/todo.txt @@ -1,5 +1,3 @@ --> picam2: zeroconf refreshEnabled == 1 --> change password: refresh asks for auth -> js framerate should be the minimum between the two framerates -> style scroll bars diff --git a/src/handlers.py b/src/handlers.py index 6adc154..cf5a479 100644 --- a/src/handlers.py +++ b/src/handlers.py @@ -67,7 +67,7 @@ class BaseHandler(RequestHandler): return None @staticmethod - def auth(admin=False): + def auth(admin=False, prompt=True): def decorator(func): def wrapper(self, *args, **kwargs): user = self.current_user @@ -75,8 +75,10 @@ class BaseHandler(RequestHandler): realm = 'motionEye admin authentication' if admin else 'motionEye authentication' self.set_status(401) - self.set_header('WWW-Authenticate', 'basic realm="%(realm)s"' % { - 'realm': realm}) + if prompt: + self.set_header('WWW-Authenticate', 'basic realm="%(realm)s"' % { + 'realm': realm}) + return self.finish('Authentication required.') return func(self, *args, **kwargs) @@ -181,6 +183,8 @@ class ConfigHandler(BaseHandler): logging.error('could not decode json: %(msg)s' % {'msg': unicode(e)}) raise + + reload = False if camera_id is not None: if camera_id == 0: @@ -188,12 +192,12 @@ class ConfigHandler(BaseHandler): for key, cfg in ui_config.items(): if key == 'main': - self.set_config(None, cfg, no_finish=True) + reload = self.set_config(None, cfg, no_finish=True) or reload else: - self.set_config(int(key), cfg, no_finish=True) + reload = self.set_config(int(key), cfg, no_finish=True) or reload - return self.finish_json() + return self.finish_json({'reload': reload}) logging.debug('setting config for camera %(id)s' % {'id': camera_id}) @@ -238,13 +242,25 @@ class ConfigHandler(BaseHandler): else: logging.debug('setting main config') + old_main_config = config.get_main() + old_admin_credentials = old_main_config.get('@admin_username', '') + ':' + old_main_config.get('@admin_password', '') + main_config = self._main_ui_to_dict(ui_config) + admin_credentials = main_config.get('@admin_username', '') + ':' + main_config.get('@admin_password', '') + config.set_main(main_config) + + if admin_credentials != old_admin_credentials: + logging.debug('admin credentials changed, reload needed') + + reload = True motionctl.restart() if not no_finish: self.finish_json() + + return reload @BaseHandler.auth(admin=True) def set_preview(self, camera_id): @@ -808,7 +824,7 @@ class SnapshotHandler(BaseHandler): else: raise HTTPError(400, 'unknown operation') - @BaseHandler.auth() + @BaseHandler.auth(prompt=False) def current(self, camera_id): camera_config = config.get_camera(camera_id) if camera_config['@proto'] == 'v4l2': diff --git a/static/js/main.js b/static/js/main.js index bf6403d..2c62872 100644 --- a/static/js/main.js +++ b/static/js/main.js @@ -742,6 +742,11 @@ function doApply() { return; } + if (data.reload) { + window.location.reload(); + return; + } + /* update the camera name in the device select */ Object.keys(pushConfigs).forEach(function (key) { var config = pushConfigs[key]; -- 2.39.5