diff options
| -rw-r--r-- | config.xml | 197 | ||||
| -rw-r--r-- | www/index.html | 1 | ||||
| -rw-r--r-- | www/js/DataModel.js | 5 | ||||
| -rw-r--r-- | www/js/InvalidApiCtrl.js | 37 | ||||
| -rw-r--r-- | www/js/PortalLoginCtrl.js | 32 | ||||
| -rw-r--r-- | www/js/app.js | 24 | ||||
| -rw-r--r-- | www/lang/locale-en.json | 3 | ||||
| -rw-r--r-- | www/templates/invalidapi.html | 30 |
8 files changed, 221 insertions, 108 deletions
@@ -1,102 +1,103 @@ -<?xml version='1.0' encoding='utf-8'?> -<widget android-packageName="com.pliablepixels.zmninja_pro" id="com.pliablepixels.zmninjapro" ios-CFBundleIdentifier="com.pliablepixels.zmninja-pro" version="1.2.33" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> - <name>zmNinja</name> - <description> +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<widget android-packageName="com.pliablepixels.zmninja_pro" id="com.pliablepixels.zmninjapro" ios-CFBundleIdentifier="com.pliablepixels.zmninja-pro" version="1.2.34" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> + <name>zmNinja</name> + <description> High performance ZoneMinder client </description> - <author email="pliablepixels@gmail.com" href="http://pliablepixels.us/"> + <author email="pliablepixels@gmail.com" href="http://pliablepixels.us/"> Pliable Pixels </author> - <content src="index.html" /> - <access origin="*" subdomains="true" /> - <access launch-external="yes" origin="mailto:*" /> - <allow-navigation href="*" /> - <allow-intent href="*" /> - <preference name="AndroidPersistentFileLocation" value="Compatibility" /> - <preference name="iosPersistentFileLocation" value="Library" /> - <preference name="AllowInlineMediaPlayback" value="true" /> - <preference name="CrosswalkAnimatable" value="true" /> - <preference name="webviewbounce" value="false" /> - <preference name="UIWebViewBounce" value="false" /> - <preference name="StatusBarBackgroundColor" value="#2980b9" /> - <preference name="DisallowOverscroll" value="true" /> - <preference name="BackupWebStorage" value="none" /> - <preference name="AutoHideSplashScreen" value="false" /> - <preference name="ShowSplashScreenSpinner" value="false" /> - <preference name="SplashScreen" value="screen" /> - <preference name="deployment-target" value="8.0" /> - <preference name="SplashScreenDelay" value="300" /> - <preference name="SplashMaintainAspectRatio" value="true" /> - <preference name="FadeSplashScreen" value="false" /> - <preference name="BackgroundColor" value="#444444" /> - <feature name="StatusBar"> - <param name="ios-package" onload="true" value="CDVStatusBar" /> - </feature> - <platform name="ios"> - <config-file parent="NSPhotoLibraryUsageDescription" platform="ios" target="*-Info.plist"> - <string>Store photos of events and live feeds</string> - </config-file> - <icon height="57" src="resources/ios/icon/icon.png" width="57" /> - <icon height="114" src="resources/ios/icon/icon@2x.png" width="114" /> - <icon height="40" src="resources/ios/icon/icon-40.png" width="40" /> - <icon height="80" src="resources/ios/icon/icon-40@2x.png" width="80" /> - <icon height="120" src="resources/ios/icon/icon-40@3x.png" width="120" /> - <icon height="50" src="resources/ios/icon/icon-50.png" width="50" /> - <icon height="100" src="resources/ios/icon/icon-50@2x.png" width="100" /> - <icon height="60" src="resources/ios/icon/icon-60.png" width="60" /> - <icon height="120" src="resources/ios/icon/icon-60@2x.png" width="120" /> - <icon height="180" src="resources/ios/icon/icon-60@3x.png" width="180" /> - <icon height="72" src="resources/ios/icon/icon-72.png" width="72" /> - <icon height="144" src="resources/ios/icon/icon-72@2x.png" width="144" /> - <icon height="76" src="resources/ios/icon/icon-76.png" width="76" /> - <icon height="152" src="resources/ios/icon/icon-76@2x.png" width="152" /> - <icon height="167" src="resources/ios/icon/icon-83.5@2x.png" width="167" /> - <icon height="29" src="resources/ios/icon/icon-small.png" width="29" /> - <icon height="58" src="resources/ios/icon/icon-small@2x.png" width="58" /> - <icon height="87" src="resources/ios/icon/icon-small@3x.png" width="87" /> - <splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640" /> - <splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" /> - <splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" /> - <splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" /> - <splash height="1536" src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048" /> - <splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" /> - <splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536" /> - <splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" /> - <splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640" /> - <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" /> - </platform> - <platform name="android"> - <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" /> - <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" /> - <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" /> - <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" /> - <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" /> - <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" /> - <splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" /> - <splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" /> - <splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" /> - <splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" /> - <splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" /> - <splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" /> - <splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" /> - <splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" /> - <splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" /> - <splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" /> - <splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" /> - <splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" /> - </platform> - <icon src="resources/android/icon/drawable-xhdpi-icon.png" /> - <plugin name="cordova-sqlite-storage" spec="~1.4.6-pre6a" /> - <plugin name="cordova-plugin-settings-hook" spec="~0.2.3" /> - <engine name="ios" spec="~4.1.1" /> - <engine name="android" spec="~5.1.1" /> - <plugin name="cordova-plugin-photo-library" spec="~1.2.0"> - <variable name="PHOTO_LIBRARY_USAGE_DESCRIPTION" value="images to gallery" /> - </plugin> - <plugin name="cordova-plugin-customurlscheme" spec="~4.2.0"> - <variable name="URL_SCHEME" value="zmninja" /> - <variable name="ANDROID_SCHEME" value=" " /> - <variable name="ANDROID_HOST" value=" " /> - <variable name="ANDROID_PATHPREFIX" value="/" /> - </plugin> -</widget> + <content src="index.html"/> + <access origin="*" subdomains="true"/> + <access launch-external="yes" origin="mailto:*"/> + <allow-navigation href="*"/> + <allow-navigation href="http://10.6.1.6:8100"/> + <allow-intent href="*"/> + <preference name="AndroidPersistentFileLocation" value="Compatibility"/> + <preference name="iosPersistentFileLocation" value="Library"/> + <preference name="AllowInlineMediaPlayback" value="true"/> + <preference name="CrosswalkAnimatable" value="true"/> + <preference name="webviewbounce" value="false"/> + <preference name="UIWebViewBounce" value="false"/> + <preference name="StatusBarBackgroundColor" value="#2980b9"/> + <preference name="DisallowOverscroll" value="true"/> + <preference name="BackupWebStorage" value="none"/> + <preference name="AutoHideSplashScreen" value="false"/> + <preference name="ShowSplashScreenSpinner" value="false"/> + <preference name="SplashScreen" value="screen"/> + <preference name="deployment-target" value="8.0"/> + <preference name="SplashScreenDelay" value="300"/> + <preference name="SplashMaintainAspectRatio" value="true"/> + <preference name="FadeSplashScreen" value="false"/> + <preference name="BackgroundColor" value="#444444"/> + <feature name="StatusBar"> + <param name="ios-package" onload="true" value="CDVStatusBar"/> + </feature> + <platform name="ios"> + <config-file parent="NSPhotoLibraryUsageDescription" platform="ios" target="*-Info.plist"> + <string>Store photos of events and live feeds</string> + </config-file> + <icon height="57" src="resources/ios/icon/icon.png" width="57"/> + <icon height="114" src="resources/ios/icon/icon@2x.png" width="114"/> + <icon height="40" src="resources/ios/icon/icon-40.png" width="40"/> + <icon height="80" src="resources/ios/icon/icon-40@2x.png" width="80"/> + <icon height="120" src="resources/ios/icon/icon-40@3x.png" width="120"/> + <icon height="50" src="resources/ios/icon/icon-50.png" width="50"/> + <icon height="100" src="resources/ios/icon/icon-50@2x.png" width="100"/> + <icon height="60" src="resources/ios/icon/icon-60.png" width="60"/> + <icon height="120" src="resources/ios/icon/icon-60@2x.png" width="120"/> + <icon height="180" src="resources/ios/icon/icon-60@3x.png" width="180"/> + <icon height="72" src="resources/ios/icon/icon-72.png" width="72"/> + <icon height="144" src="resources/ios/icon/icon-72@2x.png" width="144"/> + <icon height="76" src="resources/ios/icon/icon-76.png" width="76"/> + <icon height="152" src="resources/ios/icon/icon-76@2x.png" width="152"/> + <icon height="167" src="resources/ios/icon/icon-83.5@2x.png" width="167"/> + <icon height="29" src="resources/ios/icon/icon-small.png" width="29"/> + <icon height="58" src="resources/ios/icon/icon-small@2x.png" width="58"/> + <icon height="87" src="resources/ios/icon/icon-small@3x.png" width="87"/> + <splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640"/> + <splash height="1334" src="resources/ios/splash/Default-667h.png" width="750"/> + <splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242"/> + <splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208"/> + <splash height="1536" src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048"/> + <splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024"/> + <splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536"/> + <splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768"/> + <splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640"/> + <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320"/> + </platform> + <platform name="android"> + <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png"/> + <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png"/> + <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png"/> + <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png"/> + <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png"/> + <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png"/> + <splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png"/> + <splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png"/> + <splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png"/> + <splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png"/> + <splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png"/> + <splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png"/> + <splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png"/> + <splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png"/> + <splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png"/> + <splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png"/> + <splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png"/> + <splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png"/> + </platform> + <icon src="resources/android/icon/drawable-xhdpi-icon.png"/> + <plugin name="cordova-sqlite-storage" spec="~1.4.6-pre6a"/> + <plugin name="cordova-plugin-settings-hook" spec="~0.2.3"/> + <plugin name="cordova-plugin-photo-library" spec="~1.2.0"> + <variable name="PHOTO_LIBRARY_USAGE_DESCRIPTION" value="images to gallery"/> + </plugin> + <plugin name="cordova-plugin-customurlscheme" spec="~4.2.0"> + <variable name="URL_SCHEME" value="zmninja"/> + <variable name="ANDROID_SCHEME" value=" "/> + <variable name="ANDROID_HOST" value=" "/> + <variable name="ANDROID_PATHPREFIX" value="/"/> + </plugin> + <engine name="ios" spec="~4.1.1"/> + <engine name="android" spec="~5.1.1"/> +</widget>
\ No newline at end of file diff --git a/www/index.html b/www/index.html index 06b90ab7..fbc4d5a8 100644 --- a/www/index.html +++ b/www/index.html @@ -99,6 +99,7 @@ <script src="js/WizardCtrl.js"></script> <script src="js/MenuController.js"></script> <script src="js/EventsModalGraphCtrl.js"></script> + <script src="js/InvalidApiCtrl.js"></script> </head> <!-- <body ng-app="starter" > --> <!-- I want to start angular only after cordova device is ready, so I'll tag it on device ready --> diff --git a/www/js/DataModel.js b/www/js/DataModel.js index d1afce9e..02c719ed 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 00000000..1c65b9fd --- /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 95eb72d4..6a9a9f2d 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 7027ff42..0e7f13ee 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 769631ba..77a33f8f 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 00000000..af3a6977 --- /dev/null +++ b/www/templates/invalidapi.html @@ -0,0 +1,30 @@ +<ion-view view-title="{{$root.appName}}" hide-nav-bar="false" hide-back-button="false" cache-view="false"> + <ion-nav-buttons side="left"> + <button class="button button-icon button-clear ion-navicon" ng-click="openMenu()"></button> + </ion-nav-buttons> + <ion-content class="pin-background"> + <div style="margin-left:20px; margin-right:20px"> + <center> + <br/> + <br/> + <div id="responsive-image"> + <img src="img/authlogo.png"> + </div> + <br/> + <span style="color:white"> + <h2 style="color:white" class="animated bounce">{{'kInvalidAPIHeader' | translate}}</h2> + <br/> + <h4 style="color:white">{{'kInvalidAPIBody' | translate}}</h4> + + <br/><br/> + + <button class="button button-stable animated bounceInUp" ng-click="readFAQ()"> + {{'kInvalidAPIRead' | translate}}</button> + + + </span> + </center> + <br/> + </div> + </ion-content> +</ion-view> |
