Skip to content

Commit

Permalink
ZoneMinder#830 lockdown kiosk mode initial implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
pliablepixels committed Jul 8, 2019
1 parent f683ea8 commit 18bec31
Show file tree
Hide file tree
Showing 12 changed files with 219 additions and 102 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "zmninjapro",
"description": "Home security mobile app for ZoneMinder",
"version": "1.3.066",
"version":"1.3.067",
"displayName": "zmNinja",
"author": "Pliable Pixels",
"license": "custom see LICENSE.md",
Expand Down Expand Up @@ -192,4 +192,4 @@
]
}
}
}
}
3 changes: 0 additions & 3 deletions www/js/ImportantMessageCtrl.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@ angular.module('zmApp.controllers').controller('zmApp.ImportantMessageCtrl', ['$
$scope.$on('$ionicView.enter', function () {
// console.log("**VIEW ** LowVersion Ctrl Entered");
$ionicSideMenuDelegate.canDragContent(true);
$scope.requiredVersion = zm.minAppVersion;
$scope.currentVersion = $stateParams.ver;
$scope.recommendedVersion = zm.recommendedAppVersion;

});

Expand Down
68 changes: 66 additions & 2 deletions www/js/LoginCtrl.js
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,19 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
//------------------------------------------------------------------------
$scope.$on('$ionicView.beforeEnter', function () {


var ld = NVR.getLogin();
if (ld.isKiosk) {
NVR.log ("You are in kiosk mode, cannot show login screen");
$ionicHistory.nextViewOptions({
disableAnimate:true,
disableBack: true
});
$rootScope.importantMessageHeader = $translate.instant('kKioskErrorHeader');
$rootScope.importantMessageSummary = $translate.instant('kKioskErrorMessage');
$state.go('app.importantmessage');
return;
}

$scope.$on ( "process-push", function () {
NVR.debug (">> LoginCtrl: push handler. Not processing push, because you might be here due to login failure");
/*var s = NVR.evaluateTappedNotification();
Expand All @@ -256,7 +268,7 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
//console.log("**VIEW ** LoginCtrl Entered");
NVR.setAwake(false);
//$scope.basicAuthUsed = false;
var ld = NVR.getLogin();

oldName = ld.serverName;

availableServers = Object.keys(NVR.getServerGroups());
Expand Down Expand Up @@ -388,6 +400,58 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
};


$scope.kioskPinConfig = function () {

$scope.data = {};
// An elaborate, custom popup
var myPopup = $ionicPopup.show({
template: '<small>'+$translate.instant('kKioskPassword')+'</small><input type="password" ng-model="data.p1"><br/><small>'+$translate.instant('kKioskPasswordConfirm')+'</small><input type="password" ng-model="data.p2">',
title: $translate.instant('kPassword'),
scope: $scope,
buttons: [
{ text: $translate.instant('kButtonCancel'),
type: 'button-assertive',
onTap: function (e) {
$scope.loginData.isKiosk = false;
}
},
{
text: '<b>'+$translate.instant('kButtonSave')+'</b>',
type: 'button-positive',
onTap: function(e) {
if (!$scope.data.p1) {
//don't allow the user to close unless he enters wifi password
e.preventDefault();
} else {
if ($scope.data.p1 == $scope.data.p2) {
NVR.log ("Kiosk code match");
$scope.loginData.kioskPassword = $scope.data.p1;
$scope.loginData.isKiosk = true;
NVR.setLogin($scope.loginData);
$ionicHistory.nextViewOptions({
disableBack: true
});
$state.go('app.montage');
return;
}
else {
$ionicLoading.show({
template: $translate.instant('kBannerPinMismatch') + "...",
noBackdrop: true,
duration: 1500
});
NVR.log ("Kiosk code mistmatch");
$scope.loginData.isKiosk = false;
e.preventDefault();
}

}
}
}
]
});
};

function desktopPinConfig() {

$scope.data = {};
Expand Down
49 changes: 49 additions & 0 deletions www/js/MenuController.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,55 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io
});*/

};

$scope.exitKiosk = function() {
$scope.data = {};
// An elaborate, custom popup
var myPopup = $ionicPopup.show({
template: '<small>'+$translate.instant('kKioskPassword')+'</small><input type="password" ng-model="data.p1"><br/><small>',
title: $translate.instant('kPassword'),
scope: $scope,
buttons: [
{ text: 'Cancel',
type: 'button-assertive',
onTap: function (e) {
$scope.loginData.isKiosk = false;
}
},
{
text: '<b>'+$translate.instant('kButtonSave')+'</b>',
type: 'button-positive',
onTap: function(e) {
if (!$scope.data.p1) {
//don't allow the user to close unless he enters wifi password
e.preventDefault();
} else {
var ld = NVR.getLogin();
if ($scope.data.p1 == ld.kioskPassword) {
ld.isKiosk = false;
NVR.setLogin(ld);
}
else {
$ionicLoading.show({
template: $translate.instant('kBannerPinMismatch') + "...",
noBackdrop: true,
duration: 1500
});
NVR.log ("Kiosk code mistmatch");
$scope.loginData.isKiosk = false;
e.preventDefault();
}

}
}
}
]
});




};

function switchToServer(s) {
Expand Down
24 changes: 21 additions & 3 deletions www/js/NVR.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ angular.module('zmApp.controllers')
DO NOT TOUCH zmAppVersion
It is changed by sync_version.sh
*/
var zmAppVersion = "1.3.066";
var zmAppVersion = "1.3.067";
var isBackground = false;
var justResumed = false;
var timeSinceResumed = -1;
Expand Down Expand Up @@ -201,7 +201,9 @@ angular.module('zmApp.controllers')
'accessTokenExpires': '',
'refreshTokenExpires': '',
'accessToken': '',
'refreshToken': ''
'refreshToken': '',
'isKiosk': false,
'kioskPassword': '',

};

Expand Down Expand Up @@ -916,6 +918,8 @@ angular.module('zmApp.controllers')


loginData = angular.copy(newLogin);
$rootScope.LoginData = loginData;

serverGroupList[loginData.serverName] = angular.copy(loginData);

var ct = CryptoJS.AES.encrypt(JSON.stringify(serverGroupList), zm.cipherKey).toString();
Expand Down Expand Up @@ -1449,6 +1453,11 @@ angular.module('zmApp.controllers')

}

if (typeof loginData.isKiosk == 'undefined') {
loginData.isKiosk = false;

}


loginData.canSwipeMonitors = true;
loginData.forceImageModePath = false;
Expand Down Expand Up @@ -1552,6 +1561,15 @@ angular.module('zmApp.controllers')

debug("Inside evaluateNotifications");

if ($rootScope.LoginData.isKiosk) {
NVR.log ('>>> evaluation: You are in kiosk mode, forcing transition to montage');
state = "app.montage";
$rootScope.tappedNotification = 0;
return [state, stateParams1, stateParams2];


}

if ($rootScope.tappedNotification == 2) { // url launch
debug("Came via app url launch with mid=" + $rootScope.tappedMid);
debug("Came via app url launch with eid=" + $rootScope.tappedEid);
Expand Down Expand Up @@ -1952,7 +1970,7 @@ angular.module('zmApp.controllers')
if (window.cordova) setCordovaHttpOptions();



$rootScope.LoginData = loginData;
$rootScope.$broadcast('init-complete');
});

Expand Down
86 changes: 31 additions & 55 deletions www/js/PortalLoginCtrl.js
Original file line number Diff line number Diff line change
Expand Up @@ -289,44 +289,23 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
var ld = NVR.getLogin();
if (NVR.versionCompare(data, zm.minAppVersion) == -1 && data != "0.0.0") {

$state.go('app.lowversion', {
"ver": data
});
return;
}

if (NVR.versionCompare(data, zm.recommendedAppVersion) == -1 && data != "0.0.0") {

NVR.hrsSinceChecked("zmVersion")
.then(function (val) {
NVR.debug("ZM Version nag: Checking " + val + " with " + zm.zmVersionCheckNag);
if (val >= zm.zmVersionCheckNag && 0) {
NVR.updateHrsSinceChecked("zmVersion");
$state.go('app.importantmessage', {
"ver": data
});
return;
}
$rootScope.importantMessageHeader = $translate.instant('kImportant');
$rootScope.importantMessageSummary = $translate.instant('kVersionIncompatible', {currentVersion: data, minVersion: zm.minAppVersion});

});

$state.go('app.importantmessage');
return;
}

/*if (data == "0.0.0")
{
NVR.log("2nd Auth:API getVersion succeeded but returned 0.0.0 " + JSON.stringify(data));
NVR.displayBanner('error', ['ZoneMinder authentication failed']);
$state.go("login",
{
"wizard": false
});
return;
}*/
// coming here means continue
//EventServer.init();


var statetoGo = $rootScope.lastState ? $rootScope.lastState : 'app.montage';
if ($rootScope.LoginData.isKiosk) {
NVR.log ('>>> You are in kiosk mode');
statetoGo = 'app.montage';
$rootScope.lastStateParam='';

}
//NVR.debug ("logging state transition");
NVR.debug("2nd Auth: Transitioning state to: " +
statetoGo + " with param " + JSON.stringify($rootScope.lastStateParam));
Expand Down Expand Up @@ -384,35 +363,22 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
NVR.log("Got API version: " + data);
$rootScope.apiVersion = data;
var ld = NVR.getLogin();
console.log (">>>>>>>> COMPARING "+data+" to "+zm.minAppVersion);
if (NVR.versionCompare(data, zm.minAppVersion) == -1 && data != "0.0.0") {

$state.go('app.lowversion', {
"ver": data
$rootScope.importantMessageHeader = $translate.instant('kImportant');
$rootScope.importantMessageSummary = $translate.instant('kVersionIncompatible', {currentVersion: data, minVersion: zm.minAppVersion});
$ionicHistory.nextViewOptions({
disableAnimate:true,
disableBack: true
});
return;
}

if (NVR.versionCompare(data, zm.recommendedAppVersion) == -1 && data != "0.0.0") {

NVR.hrsSinceChecked("zmVersion")
.then(function (val) {

NVR.debug("ZM Version nag: Checking " + val + " with " + zm.zmVersionCheckNag);
if (val >= zm.zmVersionCheckNag && 0) {
//https://api.github.com/repos/zoneminder/zoneminder/releases/latest
//tag_name
NVR.updateHrsSinceChecked("zmVersion");
$state.go('app.importantmessage', {
"ver": data
});
return;

}

});
$state.go('app.importantmessage');

return;
}



/*if (data == "0.0.0")
{
Expand Down Expand Up @@ -459,9 +425,19 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic

if (!processPush) {
alreadyTransitioned = true;

if ($rootScope.LoginData.isKiosk) {
NVR.log ('>>> You are in kiosk mode');
statetoGo = 'app.montage';
$rootScope.lastStateParam='';

}

NVR.debug("Transitioning state to: " +
statetoGo + " with param " + JSON.stringify($rootScope.lastStateParam));



$state.go(statetoGo, $rootScope.lastStateParam);
return;
}
Expand Down
6 changes: 4 additions & 2 deletions www/js/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ angular.module('zmApp', [

.constant('zm', {
minAppVersion: '1.28.107', // if ZM is less than this, the app won't work
recommendedAppVersion: '1.32.0',
//minAppVersion:'1.44',
minEventServerVersion: '2.4',
castAppId: 'BA30FB4C',
alarmFlashTimer: 20000, // time to flash alarm
Expand Down Expand Up @@ -1887,6 +1887,8 @@ angular.module('zmApp', [

NVR.debug("last state=" + $rootScope.lastState + " param=" + $rootScope.lastStateParam);





}
Expand Down Expand Up @@ -2409,7 +2411,7 @@ angular.module('zmApp', [
},

cache: false,
url: "/importantmessage/:ver",
url: "/importantmessage",
templateUrl: "templates/important_message.html",
controller: 'zmApp.ImportantMessageCtrl',

Expand Down
Loading

0 comments on commit 18bec31

Please sign in to comment.