]> www.vanbest.org Git - motioneye-debian/commitdiff
better username changing
authorCalin Crisan <ccrisan@gmail.com>
Sun, 13 Oct 2013 14:40:09 +0000 (17:40 +0300)
committerCalin Crisan <ccrisan@gmail.com>
Sun, 13 Oct 2013 14:40:09 +0000 (17:40 +0300)
doc/todo.txt
src/handlers.py
static/js/main.js

index ba8767a890fbc6aaabe7fe1334bba15e83e36628..e7d16452829504f12ab7889d2cacb93e976102e4 100644 (file)
@@ -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
index 6adc154508c9dfb98465a95bbdcd5c20078942f9..cf5a479824f7fbee00394bb462cf2739e35654c5 100644 (file)
@@ -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':
index bf6403d03b94ca6d31a2721640749d8ea93abc03..2c62872d5c3578d020549e58fce923ec8395ae4e 100644 (file)
@@ -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];