From 3f9daea7bb0fa25eb894bbc068b8ccbc1397c8a5 Mon Sep 17 00:00:00 2001 From: Arjun Roychowdhury Date: Sat, 5 Dec 2015 13:05:33 -0500 Subject: #110 - experimental support for cgi-bin validation Former-commit-id: 93cefe461a6feb7fa9fbe683adc5fedf30b13ce9 --- www/js/LoginCtrl.js | 305 ++++++++++++++++++++++++++++------------------------ 1 file changed, 167 insertions(+), 138 deletions(-) (limited to 'www/js') diff --git a/www/js/LoginCtrl.js b/www/js/LoginCtrl.js index 67f644a6..5616615d 100644 --- a/www/js/LoginCtrl.js +++ b/www/js/LoginCtrl.js @@ -6,22 +6,26 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r $scope.openMenu = function () { $ionicSideMenuDelegate.toggleLeft(); }; - - + + var serverbuttons = []; var availableServers; - + //---------------------------------------------------------------- // Alarm notification handling //---------------------------------------------------------------- - $scope.handleAlarms = function() - { - $rootScope.isAlarm=!$rootScope.isAlarm; - if (!$rootScope.isAlarm) - { - $rootScope.alarmCount="0"; - $ionicHistory.nextViewOptions({disableBack: true}); - $state.go("events", {"id": 0}, { reload: true }); + $scope.handleAlarms = function () { + $rootScope.isAlarm = !$rootScope.isAlarm; + if (!$rootScope.isAlarm) { + $rootScope.alarmCount = "0"; + $ionicHistory.nextViewOptions({ + disableBack: true + }); + $state.go("events", { + "id": 0 + }, { + reload: true + }); } }; @@ -31,19 +35,20 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r isUseAuth: "", isUseEventServer: "" }; - + $scope.check.isUseAuth = ($scope.loginData.isUseAuth == '1') ? true : false; $scope.check.isUseEventServer = ($scope.loginData.isUseEventServer == '1') ? true : false; - - console.log ("*************************************************"); - - + + console.log("*************************************************"); + + availableServers = Object.keys(ZMDataModel.getServerGroups()); serverbuttons = []; - for (var servIter=0; servIter 1) - { - ZMDataModel.zmLog ("Deleting " + $scope.loginData.serverName); + if (Object.keys(zmServers).length > 1) { + ZMDataModel.zmLog("Deleting " + $scope.loginData.serverName); delete zmServers[$scope.loginData.serverName]; ZMDataModel.setServerGroups(zmServers); // point to first element @@ -89,50 +92,48 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r // note this is actually unordered $scope.loginData = zmServers[Object.keys(zmServers)[0]]; ZMDataModel.setLogin($scope.loginData); - + availableServers = Object.keys(ZMDataModel.getServerGroups()); serverbuttons = []; - for (var servIter=0; servIter zm.safeMontageLimit) { $ionicPopup.alert({ @@ -270,11 +275,11 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r $scope.loginData.username = $scope.loginData.username.trim(); $scope.loginData.streamingurl = $scope.loginData.streamingurl.trim(); $scope.loginData.eventServer = $scope.loginData.eventServer.trim(); - - + + $scope.loginData.isUseAuth = ($scope.check.isUseAuth) ? "1" : "0"; - $scope.loginData.isUseEventServer = ($scope.check.isUseEventServer) ? "1" : "0"; + $scope.loginData.isUseEventServer = ($scope.check.isUseEventServer) ? "1" : "0"; if ($scope.loginData.url.slice(-1) == '/') { $scope.loginData.url = $scope.loginData.url.slice(0, -1); @@ -315,8 +320,8 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r $scope.loginData.url = $scope.loginData.url.replace("http:", "https:"); $scope.loginData.apiurl = $scope.loginData.apiurl.replace("http:", "https:"); $scope.loginData.streamingurl = $scope.loginData.streamingurl.replace("http:", "https:"); - $scope.loginData.eventServer = $scope.loginData.eventServer.replace("ws:", "wss:"); - + $scope.loginData.eventServer = $scope.loginData.eventServer.replace("ws:", "wss:"); + } else { // replace all https with http @@ -337,39 +342,34 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r if (!$scope.loginData.password) $scope.loginData.password = "x"; ZMDataModel.zmLog("Authentication is disabled, setting dummy user & pass"); } - - if (parseInt($scope.loginData.maxMontage) <=0) - { - $scope.loginData.maxMontage ="10"; + + if (parseInt($scope.loginData.maxMontage) <= 0) { + $scope.loginData.maxMontage = "10"; } - + // do this before setLogin so message is sent - - if (!$scope.check.isUseEventServer) - { - $rootScope.isAlarm = 0; - if ($rootScope.apnsToken) - { - ZMDataModel.zmLog ("Making sure we don't get push notifications"); - EventServer.sendMessage('push', { - type: 'token', - platform: $rootScope.platformOS, - token: $rootScope.apnsToken, - state: "disabled" - }); - } + + if (!$scope.check.isUseEventServer) { + $rootScope.isAlarm = 0; + if ($rootScope.apnsToken) { + ZMDataModel.zmLog("Making sure we don't get push notifications"); + EventServer.sendMessage('push', { + type: 'token', + platform: $rootScope.platformOS, + token: $rootScope.apnsToken, + state: "disabled" + }); + } } - + ZMDataModel.setLogin($scope.loginData); - - if ($scope.check.isUseEventServer) - { + + if ($scope.check.isUseEventServer) { EventServer.init(); - if ($rootScope.apnsToken && $scope.loginData.disablePush != '1') - { - ZMDataModel.zmLog ("Making sure we get push notifications"); - EventServer.sendMessage('push', { + if ($rootScope.apnsToken && $scope.loginData.disablePush != '1') { + ZMDataModel.zmLog("Making sure we get push notifications"); + EventServer.sendMessage('push', { type: 'token', platform: $rootScope.platformOS, token: $rootScope.apnsToken, @@ -383,18 +383,9 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r }); } - - - // now grab and report PATH_ZMS - ZMDataModel.getPathZms() - .then(function (data) { - var ld = ZMDataModel.getLogin(); - ZMDataModel.zmLog("PATH_ZMS:" + data + ", Path ZmNinja will use:" + ld.streamingurl + "/nph-zms"); - ZMDataModel.zmLog("If live streams are not working, make sure you check these values"); - }); zmAutoLogin.doLogin("authenticating...") @@ -410,17 +401,56 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r ZMDataModel.zmLog("Validating APIs at " + apiurl); $http.get(apiurl) .success(function (data) { - + + var loginStatus = "Please explore the menu and enjoy zmNinja!"; EventServer.refresh(); - $ionicPopup.alert({ - title: 'Login validated', - template: 'Please explore the menu and enjoy zmNinja!' - }).then(function (res) { - $ionicSideMenuDelegate.toggleLeft(); - ZMDataModel.zmDebug ("Force reloading monitors..."); - var refresh = ZMDataModel.getMonitors(1); - }); + + + // now grab and report PATH_ZMS + ZMDataModel.getPathZms() + .then(function (data) { + var ld = ZMDataModel.getLogin(); + var zm_cgi = data.toLowerCase(); + + var user_cgi = (ld.streamingurl).toLowerCase(); + ZMDataModel.zmLog("ZM relative cgi-path: " + zm_cgi + ", you entered: " + user_cgi); + + $http.get(ld.streamingurl + "/zms") + .success(function (data) { + ZMDataModel.zmDebug("Urk! cgi-path returned success, but it should not have come here"); + loginStatus = "Login validated, but could not validate cgi-path. If live streams don't work please check your cgi-bin path"; + $ionicPopup.alert({ + title: 'Login validated', + template: loginStatus + }).then(function (res) { + $ionicSideMenuDelegate.toggleLeft(); + ZMDataModel.zmDebug("Force reloading monitors..."); + var refresh = ZMDataModel.getMonitors(1); + }); + }) + .error(function (error, status) { + // If its 5xx, then the cgi-bin path is valid + // if its 4xx then the cgi-bin path is not valid + + if (status < 500) { + loginStatus = "The cgi-bin path you entered may be wrong. I can't make sure, but if your live views don't work, please review your cgi path."; + } + + $ionicPopup.alert({ + title: 'Login validated', + template: loginStatus + }).then(function (res) { + $ionicSideMenuDelegate.toggleLeft(); + ZMDataModel.zmDebug("Force reloading monitors..."); + var refresh = ZMDataModel.getMonitors(1); + }); + + + }); + }); + + }) .error(function (error) { @@ -436,31 +466,30 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r }); } - + $scope.saveItems = function () { - - if (!$scope.loginData.serverName) - { + + if (!$scope.loginData.serverName) { $ionicPopup.alert({ - title:'Error', - template: 'Server Name cannot be empty', - }) - .then(function(res) - {return;}); - } - else - { + title: 'Error', + template: 'Server Name cannot be empty', + }) + .then(function (res) { + return; + }); + } else { saveItems(); availableServers = Object.keys(ZMDataModel.getServerGroups()); serverbuttons = []; - for (var servIter=0; servIter