import datetime
import errno
import glob
+import hashlib
import logging
import math
import os.path
main_config = _conf_to_dict(lines,
list_names=['thread'],
no_convert=['@admin_username', '@admin_password', '@normal_username', '@normal_password'])
-
+
_get_additional_config(main_config)
_set_default_motion(main_config, old_config_format=motionctl.has_old_config_format())
-
+
+ main_config.setdefault('@admin_password_hash', hashlib.sha1(main_config['@admin_password']).hexdigest())
+ main_config.setdefault('@normal_password_hash', hashlib.sha1(main_config['@normal_password']).hexdigest())
+
_main_config_cache = main_config
return main_config
signature = self.get_argument('_signature', None)
login = self.get_argument('_login', None) == 'true'
if (username == main_config.get('@admin_username') and
- signature == utils.compute_signature(self.request.method, self.request.uri, self.request.body, main_config.get('@admin_password'))):
-
+ (signature == utils.compute_signature(self.request.method, self.request.uri, # backwards compatibility
+ self.request.body, main_config.get('@admin_password')) or
+ signature == utils.compute_signature(self.request.method, self.request.uri,
+ self.request.body, main_config.get('@admin_password_hash')))):
+
return 'admin'
elif not username and not main_config.get('@normal_password'): # no authentication required for normal user
return 'normal'
elif (username == main_config.get('@normal_username') and
- signature == utils.compute_signature(self.request.method, self.request.uri, self.request.body, main_config.get('@normal_password'))):
-
+ (signature == utils.compute_signature(self.request.method, self.request.uri, # backwards compatibility
+ self.request.body, main_config.get('@normal_password')) or
+ signature == utils.compute_signature(self.request.method, self.request.uri,
+ self.request.body, main_config.get('@normal_password_hash')))):
+
return 'normal'
elif username and username != '_' and login:
var framerateFactor = 1;
var resolutionFactor = 1;
var username = '';
-var password = '';
+var passwordHash = '';
var basePath = null;
var signatureRegExp = new RegExp('[^a-zA-Z0-9/?_.=&{}\\[\\]":, _-]', 'g');
var initialConfigFetched = false; /* used to workaround browser extensions that trigger stupid change events */
path = path + '?' + query;
path = path.replace(signatureRegExp, '-');
body = body && body.replace(signatureRegExp, '-');
- var password = window.password.replace(signatureRegExp, '-');
- return sha1(method + ':' + path + ':' + (body || '') + ':' + password).toLowerCase();
+ return sha1(method + ':' + path + ':' + (body || '') + ':' + passwordHash).toLowerCase();
}
function addAuthParams(method, url, body) {
'<td class="dialog-item-value"><input type="password" name="password" class="styled" id="passwordEntry"></td>' +
'<input type="submit" style="display: none;" name="login" value="login">' +
'</tr>' +
+ '<tr>' +
+ '<td class="dialog-item-label"><span class="dialog-item-label">Remember Me</span></td>' +
+ '<td class="dialog-item-value"><input type="checkbox" name="remember" class="styled" id="rememberCheck"></td>' +
+ '</tr>' +
'</table></form>');
var usernameEntry = form.find('#usernameEntry');
var passwordEntry = form.find('#passwordEntry');
+ var rememberCheck = form.find('#rememberCheck');
var errorTd = form.find('td.login-dialog-error');
+ makeCheckBox(rememberCheck);
+
if (window._loginRetry) {
errorTd.css('display', 'table-cell');
errorTd.html('Invalid credentials.');
}},
{caption: 'Login', isDefault: true, click: function () {
window.username = usernameEntry.val();
- window.password = passwordEntry.val();
+ window.passwordHash = sha1(passwordEntry.val()).toLowerCase();
window._loginDialogSubmitted = true;
- setCookie('username', window.username);
+ if (rememberCheck[0].checked) {
+ setCookie('username', window.username);
+ setCookie('passwordHash', window.passwordHash);
+ }
form.submit();
setTimeout(function () {
/* restore the username from cookie */
window.username = getCookie('username');
+ window.passwordHash = getCookie('passwordHash');
}
/* open/close settings */