]> www.vanbest.org Git - motioneye-debian/commitdiff
added UI for the upload media files feature
authorCalin Crisan <ccrisan@gmail.com>
Sun, 22 Nov 2015 10:33:25 +0000 (12:33 +0200)
committerCalin Crisan <ccrisan@gmail.com>
Sun, 22 Nov 2015 10:33:25 +0000 (12:33 +0200)
motioneye/handlers.py
motioneye/server.py
motioneye/static/js/main.js
motioneye/templates/main.html

index edfb390bc72e2061a0ef3be5d965ea5cbe81e4d9..3dc1f3363955c837334cdfd4a73ebe2adf900886 100644 (file)
@@ -211,7 +211,13 @@ class ConfigHandler(BaseHandler):
         
         elif op == 'backup':
             self.backup()
-        
+            
+        elif op == 'test':
+            self.test()
+            
+        elif op == 'authorize':
+            self.authorize()
+
         else:
             raise HTTPError(400, 'unknown operation')
     
@@ -725,6 +731,14 @@ class ConfigHandler(BaseHandler):
             
         else:
             self.finish_json({'ok': False})
+    
+    @BaseHandler.auth(admin=True)
+    def test(self):
+        pass
+
+    @BaseHandler.auth(admin=True)
+    def authorize(self):
+        pass
 
 
 class PictureHandler(BaseHandler):
index 96e03501794ee7708c4c1afb9dc0ecd47c32e3ee..8a8b8d2f651ec7c410d62901e8f23712ebead8db 100644 (file)
@@ -169,7 +169,7 @@ handler_mapping = [
     (r'^/$', handlers.MainHandler),
     (r'^/config/main/(?P<op>set|get)/?$', handlers.ConfigHandler),
     (r'^/config/(?P<camera_id>\d+)/(?P<op>get|set|rem|set_preview)/?$', handlers.ConfigHandler),
-    (r'^/config/(?P<op>add|list|backup|restore)/?$', handlers.ConfigHandler),
+    (r'^/config/(?P<op>add|list|backup|restore|test|authorize)/?$', handlers.ConfigHandler),
     (r'^/picture/(?P<camera_id>\d+)/(?P<op>current|list|frame)/?$', handlers.PictureHandler),
     (r'^/picture/(?P<camera_id>\d+)/(?P<op>download|preview|delete)/(?P<filename>.+?)/?$', handlers.PictureHandler),
     (r'^/picture/(?P<camera_id>\d+)/(?P<op>zipped|timelapse|delete_all)/(?P<group>.*?)/?$', handlers.PictureHandler),
index c34b5a250f86b4394a011108bb631589e132ad7c..2a43652b68799c402854b47c09ba2f74382248d5 100644 (file)
@@ -1040,7 +1040,9 @@ function updateConfigUI() {
                 }
             }
             else { /* comparison */
-                var equal = parts[parts.length - 1] == val;
+                var reqVal = parts[parts.length - 1];
+                var reqRegex = new RegExp('^' + reqVal + '$');
+                var equal = reqRegex.test(val);
                 if (equal == neg) {
                     conditionOk = false;
                     return false;
index 47b86777dc057b78aac2b2f9990f165fc07dfff2..0c07200fd2214a82e8c3e9445d0b4bf56bd21c3c 100644 (file)
@@ -38,7 +38,7 @@
                     {% endfor %}
                 </select>
             {% elif config['type'] == 'html' %}
-                <div class="html styled {{config['section']}} {% if config.get('camera') %}camera{% else %}main{% endif %}-config" id="{{config['name']}}Html">
+                <div class="html styled {{config['section']}} {% if config.get('camera') %}camera{% else %}main{% endif %}-config" id="{{config['name']}}Html"></div>
             {% endif %}
         </td>
         <td>{% if config.get('description') %}<span class="help-mark" title="{{config['description']}}">?</span>{% endif %}</td>
                         </td>
                         <td><span class="help-mark" title="the used/total size of the disk where the root directory resides">?</span></td>
                     </tr>
+                    <tr class="settings-item advanced-setting">
+                        <td colspan="100"><div class="settings-item-separator"></div></td>
+                    </tr>
+                    <tr class="settings-item advanced-setting">
+                        <td class="settings-item-label"><span class="settings-item-label">Upload Media Files</span></td>
+                        <td class="settings-item-value"><input type="checkbox" class="styled storage camera-config" id="uploadEnabledSwitch"></td>
+                        <td><span class="help-mark" title="enable this if you want your media files to be uploaded to an external service">?</span></td>
+                    </tr>
+                    <tr class="settings-item advanced-setting" depends="uploadEnabled">
+                        <td class="settings-item-label"><span class="settings-item-label">Upload Service</span></td>
+                        <td class="settings-item-value">
+                            <select class="styled storage camera-config" id="uploadServiceSelect">
+                                <option value="ftp">FTP Server</option>
+                                <option value="sftp">SFTP Server</option>
+                                <option value="http">HTTP Server</option>
+                                <option value="https">HTTPS Server</option>
+                                <option value="gdrive">Google Drive</option>
+                                <option value="dropbox">Dropbox</option>
+                            </select>
+                        </td>
+                        <td><span class="help-mark" title="choose a service to which the media files should be uploaded">?</span></td>
+                    </tr>
+                    <tr class="settings-item advanced-setting" required="true" depends="uploadEnabled uploadService=(ftp|sftp|http|https)">
+                        <td class="settings-item-label"><span class="settings-item-label">Server Address</span></td>
+                        <td class="settings-item-value"><input type="text" class="styled storage camera-config" id="uploadServerEntry"></td>
+                        <td><span class="help-mark" title="the domain name or IP address of the server (e.g. ftp.example.com or 192.168.1.3)">?</span></td>
+                    </tr>
+                    <tr class="settings-item advanced-setting" required="true" min="1" max="65535" depends="uploadEnabled uploadService=(ftp|sftp|http|https)">
+                        <td class="settings-item-label"><span class="settings-item-label">Server Port</span></td>
+                        <td class="settings-item-value"><input type="text" class="number styled storage camera-config" id="uploadPortEntry"></td>
+                        <td><span class="help-mark" title="the port to use when connecting to the service (leave it empty to use the default value)">?</span></td>
+                    </tr>
+                    <tr class="settings-item advanced-setting" required="true" depends="uploadEnabled uploadService=(ftp|sftp|http|https)">
+                        <td class="settings-item-label"><span class="settings-item-label">Location</span></td>
+                        <td class="settings-item-value"><input type="text" class="styled storage camera-config" id="uploadLocationEntry"></td>
+                        <td><span class="help-mark" title="the location (relative path) where media files should be uploaded (e.g. /files/cam1/)">?</span></td>
+                    </tr>
+                    <tr class="settings-item advanced-setting" depends="uploadEnabled uploadService=(http|https)">
+                        <td class="settings-item-label"><span class="settings-item-label">Method</span></td>
+                        <td class="settings-item-value">
+                            <select class="styled storage camera-config" id="uploadMethod">
+                                <option value="post">POST</option>
+                                <option value="put">PUT</option>
+                            </select>
+                        </td>
+                        <td><span class="help-mark" title="the HTTP method to use when uploading files">?</span></td>
+                    </tr>
+                    <tr class="settings-item advanced-setting" depends="uploadEnabled uploadService=(ftp|sftp|http|https)">
+                        <td class="settings-item-label"><span class="settings-item-label">Username</span></td>
+                        <td class="settings-item-value"><input type="text" class="styled storage camera-config" id="uploadUsernameEntry"></td>
+                        <td><span class="help-mark" title="the username for the upload service account">?</span></td>
+                    </tr>
+                    <tr class="settings-item advanced-setting" depends="uploadEnabled uploadService=(ftp|sftp|http|https)">
+                        <td class="settings-item-label"><span class="settings-item-label">Password</span></td>
+                        <td class="settings-item-value"><input type="password" class="styled storage camera-config" id="uploadPasswordEntry"></td>
+                        <td><span class="help-mark" title="the password for the upload service account">?</span></td>
+                    </tr>
+                    <tr class="settings-item advanced-setting" required="true" depends="uploadEnabled uploadService=(gdrive|dropbox)">
+                        <td class="settings-item-label"><span class="settings-item-label">Authorization Key</span></td>
+                        <td class="settings-item-value"><input type="password" class="styled storage camera-config" id="uploadAuthKey"></td>
+                        <td><span class="help-mark" title="the key used to authenticate with the upload service">?</span></td>
+                    </tr>
+                    <tr class="settings-item advanced-setting" depends="uploadEnabled uploadService=(gdrive|dropbox)">
+                        <td class="settings-item-label"><span class="settings-item-label"></span></td>
+                        <td class="settings-item-value">
+                            <div class="html styled storage camera-config" id="authorizeLinkHtml">
+                                <a href="javascript:authorizeUpload()">Obtain Authorization Key</a>
+                            </div>
+                        </td>
+                        <td><span class="help-mark" title="click here to obtain the service authorization key">?</span></td>
+                    </tr>
                     {% for config in camera_sections.get('storage', {}).get('configs', []) %}
                         {{config_item(config)}}
                     {% endfor %}