From c6b9e67c448c0b5619857af8e1431703fe15502e Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Sat, 24 Dec 2016 08:00:47 -0500 Subject: [PATCH] If API access errors, notify the user with a link to the FAQ #415 --- config.xml | 197 +++++++++++++++++----------------- www/index.html | 1 + www/js/DataModel.js | 5 +- www/js/InvalidApiCtrl.js | 37 +++++++ www/js/PortalLoginCtrl.js | 32 ++++-- www/js/app.js | 24 +++++ www/lang/locale-en.json | 3 + www/templates/invalidapi.html | 30 ++++++ 8 files changed, 221 insertions(+), 108 deletions(-) create mode 100644 www/js/InvalidApiCtrl.js create mode 100644 www/templates/invalidapi.html diff --git a/config.xml b/config.xml index 4e71f473f..55fdf1bb2 100644 --- a/config.xml +++ b/config.xml @@ -1,102 +1,103 @@ - - - zmNinja - + + + zmNinja + High performance ZoneMinder client - + Pliable Pixels - - - - - - - - - - - - - - - - - - - - - - - - - - - - Store photos of events and live feeds - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Store photos of events and live feeds + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/index.html b/www/index.html index 06b90ab7b..fbc4d5a82 100644 --- a/www/index.html +++ b/www/index.html @@ -99,6 +99,7 @@ + diff --git a/www/js/DataModel.js b/www/js/DataModel.js index d1afce9e2..02c719ed5 100644 --- a/www/js/DataModel.js +++ b/www/js/DataModel.js @@ -1193,11 +1193,13 @@ angular.module('zmApp.controllers') { if (success.data.version) { + $rootScope.apiValid = true; d.resolve(success.data.version); } else { - d.resolve("0.0.0"); + $rootScope.apiValid = false; + d.reject("-1.-1.-1"); } return (d.promise); @@ -1206,6 +1208,7 @@ angular.module('zmApp.controllers') { debug("getAPIversion error handler " + JSON.stringify(error)); d.reject("-1.-1.-1"); + $rootScope.apiValid = false; return (d.promise); }); return (d.promise); diff --git a/www/js/InvalidApiCtrl.js b/www/js/InvalidApiCtrl.js new file mode 100644 index 000000000..1c65b9fdf --- /dev/null +++ b/www/js/InvalidApiCtrl.js @@ -0,0 +1,37 @@ +/* jshint -W041 */ +/* jslint browser: true*/ +/* global cordova,StatusBar,angular,console */ + +angular.module('zmApp.controllers').controller('zmApp.InvalidApiCtrl', ['$scope', '$ionicSideMenuDelegate', 'zm', '$stateParams', '$timeout', '$rootScope', function($scope, $ionicSideMenuDelegate, zm, $stateParams, $timeout, $rootScope) +{ + $scope.openMenu = function() + { + $ionicSideMenuDelegate.toggleLeft(); + }; + + //------------------------------------------------------------------------- + // Controller Main + //------------------------------------------------------------------------ + $scope.$on('$ionicView.enter', function() + { + console.log("**VIEW ** InvalidAPI Ctrl Entered"); + $ionicSideMenuDelegate.canDragContent(true); + }); + + $scope.openMenu = function() + { + $timeout(function() + { + $rootScope.stateofSlide = $ionicSideMenuDelegate.isOpen(); + }, 500); + + $ionicSideMenuDelegate.toggleLeft(); + }; + + $scope.readFAQ = function() + { + window.open('https://github.com/pliablepixels/zmNinja/wiki/Validating-if-APIs-work-on-ZM', '_blank', 'location=yes'); + return false; + }; + +}]); diff --git a/www/js/PortalLoginCtrl.js b/www/js/PortalLoginCtrl.js index 95eb72d4b..6a9a9f2d0 100644 --- a/www/js/PortalLoginCtrl.js +++ b/www/js/PortalLoginCtrl.js @@ -173,7 +173,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic return; } - if (data == "0.0.0") + /*if (data == "0.0.0") { NVRDataModel.log("2nd Auth:API getVersion succeeded but returned 0.0.0 " + JSON.stringify(data)); @@ -183,7 +183,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic "wizard": false }); return; - } + }*/ // coming here means continue EventServer.refresh(); @@ -287,8 +287,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic { NVRDataModel.debug("PortalLogin: auth success"); - NVRDataModel.getKeyConfigParams(1); - NVRDataModel.getTimeZone(); + // $state.go("login" ,{"wizard": false}); //login was ok, so get API details NVRDataModel.getAPIversion() @@ -319,7 +318,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic return; } - if (data == "0.0.0") + /*if (data == "0.0.0") { NVRDataModel.log("API getVersion succeeded but returned 0.0.0 " + JSON.stringify(data)); @@ -330,9 +329,12 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic }); return; - } + }*/ // coming here means continue // console.log (">>>>>>>>>>>>>>>>>>>>>>>>>NEVER"); + + NVRDataModel.getKeyConfigParams(1); + NVRDataModel.getTimeZone(); EventServer.refresh(); if ($rootScope.tappedNotification != 1) { @@ -367,11 +369,23 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic }, function error(e) { - $state.go("login", + + if ($rootScope.apiValid == true) + { + $state.go("login", + { + "wizard": false + }); + return; + } + else { - "wizard": false - }); + $state.go("invalidapi"); + return; + } + }); + return; }, 1000); diff --git a/www/js/app.js b/www/js/app.js index 7027ff427..0e7f13eec 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -1321,6 +1321,14 @@ angular.module('zmApp', [ { var requireLogin = toState.data.requireLogin; + if ($rootScope.apiValid == false && toState.name != 'invalidapi' && toState.data.requireLogin == true) + { + event.preventDefault(); + $state.transitionTo('invalidapi'); + return; + + } + if (NVRDataModel.isLoggedIn() || toState.data.requireLogin == false) { //console.log("State transition is authorized"); @@ -1349,6 +1357,7 @@ angular.module('zmApp', [ // if you don't prevent, states will stack event.preventDefault(); $state.transitionTo('login'); + return; } return; @@ -1403,6 +1412,7 @@ angular.module('zmApp', [ }; $rootScope.textScaleFactor = 1.0; + $rootScope.apiValid = false; $rootScope.db = null; $rootScope.runMode = NVRDataModel.getBandwidth(); @@ -2025,6 +2035,20 @@ angular.module('zmApp', [ }) + .state('invalidapi', + { + data: + { + requireLogin: false + }, + + cache: false, + url: "/invalidapi", + templateUrl: "templates/invalidapi.html", + controller: 'zmApp.InvalidApiCtrl', + + }) + .state('events-graphs', { data: diff --git a/www/lang/locale-en.json b/www/lang/locale-en.json index 769631ba6..77a33f8f7 100644 --- a/www/lang/locale-en.json +++ b/www/lang/locale-en.json @@ -149,6 +149,9 @@ "kImpMsg5" :"Reported Version", "kImpMsg6" :"Recommended Version", "kImpMsg7" :"Ok, got it", + "kInvalidAPIHeader" : "Invalid API", + "kInvalidAPIBody" : "API access failed. Please make sure your APIs are configured correctly. Tap on the button below to read the instructions", + "kInvalidAPIRead" : "Read FAQ", "kIncreaseSize" :"increase size", "kLanguage" :"Language", "kLatestEvents" :"latest events", diff --git a/www/templates/invalidapi.html b/www/templates/invalidapi.html new file mode 100644 index 000000000..af3a6977e --- /dev/null +++ b/www/templates/invalidapi.html @@ -0,0 +1,30 @@ + + + + + +
+
+
+
+
+ +
+
+ +

{{'kInvalidAPIHeader' | translate}}

+
+

{{'kInvalidAPIBody' | translate}}

+ +

+ + + + +
+
+
+
+
+