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}}
+
+
+
+
+
+
+
+
+
+
+
+