summaryrefslogtreecommitdiff
path: root/www/js
diff options
context:
space:
mode:
authorPliable Pixels <pliablepixels@gmail.com>2020-01-14 20:29:21 +0530
committerPliable Pixels <pliablepixels@gmail.com>2020-01-14 20:29:21 +0530
commiteefc5f735793fb72c3331d7c2fa026d36f29ffc8 (patch)
tree59bd01438973c17d1023dd9953fba49cefe2818b /www/js
parent6b293fe8be3b14f3638f677945e8f07fd261684c (diff)
#886 add LZS compression, make AES an option in dev settings, fix error in AES crypt store - convert to string
Diffstat (limited to 'www/js')
-rw-r--r--www/js/DevOptionsCtrl.js28
-rw-r--r--www/js/LoginCtrl.js3
-rw-r--r--www/js/MonitorCtrl.js1
-rw-r--r--www/js/NVR.js72
-rwxr-xr-xwww/js/app.js3
5 files changed, 93 insertions, 14 deletions
diff --git a/www/js/DevOptionsCtrl.js b/www/js/DevOptionsCtrl.js
index 5fa349cc..1f5a920a 100644
--- a/www/js/DevOptionsCtrl.js
+++ b/www/js/DevOptionsCtrl.js
@@ -2,7 +2,7 @@
/* jslint browser: true*/
/* global cordova,StatusBar,angular,console */
-angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope', '$rootScope', '$ionicModal', 'zm', 'NVR', '$ionicSideMenuDelegate', '$ionicPopup', '$http', '$q', '$ionicLoading', '$ionicHistory', '$state', 'SecuredPopups', '$translate', function ($scope, $rootScope, $ionicModal, zm, NVR, $ionicSideMenuDelegate, $ionicPopup, $http, $q, $ionicLoading, $ionicHistory, $state, SecuredPopups, $translate) {
+angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope', '$rootScope', '$ionicModal', 'zm', 'NVR', '$ionicSideMenuDelegate', '$ionicPopup', '$http', '$q', '$ionicLoading', '$ionicHistory', '$state', 'SecuredPopups', '$translate','$ionicActionSheet', function ($scope, $rootScope, $ionicModal, zm, NVR, $ionicSideMenuDelegate, $ionicPopup, $http, $q, $ionicLoading, $ionicHistory, $state, SecuredPopups, $translate, $ionicActionSheet) {
$scope.openMenu = function () {
$ionicSideMenuDelegate.toggleLeft();
@@ -155,6 +155,32 @@ angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope'
};
+ $scope.selectObfuscationScheme = function() {
+
+ var buttons = [
+ { text: $translate.instant('kObfuscationLZS'), value:'lzs' },
+ { text: $translate.instant('kObfuscationAES'), value:'aes' },
+
+ ]
+
+ $ionicActionSheet.show({
+ titleText: $translate.instant('kSelect'),
+ buttons: buttons,
+
+ cancelText: $translate.instant('kButtonCancel'),
+ cancel: function() {
+ NVR.debug ('obfuscation actionsheet cancelled');
+ },
+ buttonClicked: function(index) {
+
+ $scope.loginData.obfuscationScheme = buttons[index].value;
+ NVR.debug ('changed obfuscation scheme to:'+$scope.loginData.obfuscationScheme );
+ return true;
+ },
+
+ });
+ };
+
$scope.saveDevOptions = function () {
saveDevOptions();
diff --git a/www/js/LoginCtrl.js b/www/js/LoginCtrl.js
index 11474f2d..ffde6ffa 100644
--- a/www/js/LoginCtrl.js
+++ b/www/js/LoginCtrl.js
@@ -766,8 +766,7 @@ function mobilePinConfig () {
var serverGroupList = NVR.getServerGroups();
serverGroupList[$scope.loginData.serverName] = angular.copy($scope.loginData);
- var ct = CryptoJS.AES.encrypt(JSON.stringify(serverGroupList), zm.cipherKey).toString();
-
+ var ct = NVR.encrypt(serverGroupList);
window.cordova.plugin.cloudsettings.save({
'serverGroupList': ct,
'defaultServerName': $scope.loginData.serverName
diff --git a/www/js/MonitorCtrl.js b/www/js/MonitorCtrl.js
index b396f5ee..1cd695b7 100644
--- a/www/js/MonitorCtrl.js
+++ b/www/js/MonitorCtrl.js
@@ -423,6 +423,7 @@ angular.module('zmApp.controllers')
else {
NVR.debug ("reporting status of monitors from multi-server API");
processMonitorStatus();
+
}
},
diff --git a/www/js/NVR.js b/www/js/NVR.js
index 8d9681c8..5b6eb0fd 100644
--- a/www/js/NVR.js
+++ b/www/js/NVR.js
@@ -1,7 +1,7 @@
/* jshint -W041 */
/* jslint browser: true*/
-/* global cordova,StatusBar,angular,console, URI, moment, localforage, CryptoJS, Connection */
+/* global cordova,StatusBar,angular,console, URI, moment, localforage, CryptoJS, Connection, LZString */
// This is my central data respository and common functions
// that many other controllers use
@@ -211,6 +211,7 @@ angular.module('zmApp.controllers')
'pauseStreams': false,
'liveStreamBuffer': 10,
'zmNinjaCustomId':undefined, // filled in init. custom header
+ 'obfuscationScheme': 'lzs' // or 'aes'
};
@@ -404,8 +405,7 @@ angular.module('zmApp.controllers')
//data = JSON.parse(data);
if (doCrypt) {
debug ('CACHE: decryption requested');
- var bytes = CryptoJS.AES.decrypt(data.toString(), zm.cipherKey);
- data = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
+ data = decrypt(data);
}
else
data = JSON.parse(data);
@@ -424,7 +424,7 @@ angular.module('zmApp.controllers')
debug ('CACHE: storing key data in cache now, with expiry of '+expiry);
if (doCrypt) {
debug ('CACHE: encrypting request');
- var ct = CryptoJS.AES.encrypt(JSON.stringify(data), zm.cipherKey).toString();
+ var ct = encrypt(data);
cache_entry.data = ct;
}
else {
@@ -1031,6 +1031,7 @@ angular.module('zmApp.controllers')
}
+
}
function setLogin(newLogin) {
@@ -1045,8 +1046,8 @@ angular.module('zmApp.controllers')
serverGroupList[loginData.serverName] = angular.copy(loginData);
- var ct = CryptoJS.AES.encrypt(JSON.stringify(serverGroupList), zm.cipherKey).toString();
-
+ var ct = encrypt(serverGroupList);
+
//debug ("Crypto is: " + ct);
return localforage.setItem("serverGroupList", ct)
@@ -1611,6 +1612,10 @@ angular.module('zmApp.controllers')
loginData.zmNinjaCustomId = 'zmNinja_'+zmAppVersion;
}
+ if (typeof loginData.obfuscationScheme == 'undefined') {
+ loginData.obfuscationScheme = 'lzs';
+ }
+
loginData.canSwipeMonitors = true;
loginData.forceImageModePath = false;
loginData.enableBlog = true;
@@ -1676,9 +1681,57 @@ angular.module('zmApp.controllers')
debug("Setting server version to:" + val);
}
+ function encrypt(data) {
+
+ var jsdata = JSON.stringify(data);
+ var compress;
+
+ if (loginData.obfuscationScheme == 'lzs') {
+ compress = '--Z--'+LZString.compressToUTF16(jsdata);
+
+ }
+ else if (loginData.obfuscationScheme == 'aes') {
+ compress = CryptoJS.AES.encrypt(jsdata, zm.cipherKey).toString();
+ } else {
+ log ('ERROR: obfuscation scheme:'+loginData.obfuscationScheme+' not recognized');
+ return undefined;
+ }
+
+ debug ('obfuscate: original:'+jsdata.length+' obfuscated:'+compress.length+' scheme:'+loginData.obfuscationScheme);
+ return compress;
+ }
+
+ function decrypt(data) {
+ //debug ('-->deobfuscating '+data.length+' bytes using scheme:'+loginData.obfuscationScheme);
+ var decodedVal;
+ var scheme;
+ if (data.substr(0,5) == '--Z--') {
+ //debug ('unpacking');
+ scheme = 'lzs';
+ decodedVal = LZString.decompressFromUTF16(data.substr(5));
+ } else {
+ var bytes = CryptoJS.AES.decrypt(data.toString(), zm.cipherKey);
+ decodedVal = bytes.toString(CryptoJS.enc.Utf8);
+ scheme = 'aes';
+ }
+
+ //console.log ('-->decrypted ' + decodedVal);
+ debug ('deobfuscate: before:'+data.length+' after:'+decodedVal.length+' scheme:'+scheme);
+ var decodedJSON = JSON.parse(decodedVal);
+
+ return (decodedJSON);
+ }
+
return {
+ encrypt: function(data) {
+ return encrypt(data);
+ },
+
+ decrypt: function(data) {
+ return decrypt(data);
+ },
insertSpecialTokens: function () {
@@ -2009,8 +2062,8 @@ angular.module('zmApp.controllers')
if (typeof sgl == 'string') {
log("user profile encrypted, decoding...");
- var bytes = CryptoJS.AES.decrypt(sgl.toString(), zm.cipherKey);
- decodedSgl = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
+ decodedSgl = decrypt(sgl);
+
} else {
decodedSgl = sgl;
@@ -2128,8 +2181,7 @@ angular.module('zmApp.controllers')
if (typeof val == 'string') {
log("user profile encrypted, decoding...");
- var bytes = CryptoJS.AES.decrypt(val.toString(), zm.cipherKey);
- decodedVal = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
+ decodedVal = decrypt(val);
} else {
log("user profile not encrypted");
diff --git a/www/js/app.js b/www/js/app.js
index 3eb7210f..9221d456 100755
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -1698,7 +1698,8 @@ angular.module('zmApp', [
NVR.log(">>>>migrated latestBlogPostChecked...");
// lets encrypt serverGroupList
NVR.log("server group list is " + JSON.stringify(sgl));
- var ct = CryptoJS.AES.encrypt(JSON.stringify(sgl), zm.cipherKey);
+ var ct = NVR.encrypt(sgl);
+
NVR.log("encrypted server group list is " + ct);
ct = sgl;
return localforage.setItem('serverGroupList', ct);