From 151b26e60a18ccdc4231b2ce52abf864848eaa90 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Tue, 14 May 2019 14:40:12 -0400 Subject: #817 initial interceptor code for expiry (Mobile tbd) --- www/js/app.js | 95 +++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 59 insertions(+), 36 deletions(-) (limited to 'www/js/app.js') diff --git a/www/js/app.js b/www/js/app.js index f64ea1da..3cdf49da 100755 --- a/www/js/app.js +++ b/www/js/app.js @@ -648,7 +648,7 @@ angular.module('zmApp', [ //console.log ("HERE TIMEOUT"); return { - 'request': function (config) { + request: function (config) { if (!config) return config; if (!config.url) return config; @@ -682,7 +682,25 @@ angular.module('zmApp', [ return config; }, - 'response': function (response) { + responseError: function (rejection) { + if (rejection.status == 401) { + nvr = $injector.get('NVR'); + nvr.log ("******** INTERCEPTOR CAUGHT ERROR, RE-LOGIN NEEDED"); + + return nvr.recreateTokens() + .then (function() { + return $injector.get('$http')(rejection.config); + }) + } + else { + nvr.log ("NOT 401"); + return response; + } + + }, + + response: function (response) { + var cookies = response.headers("Set-Cookie"); if (cookies != null) { @@ -699,6 +717,7 @@ angular.module('zmApp', [ //console.log ("HTTP response"); + if (response.data && typeof(response.data) == 'string' && (response.data.indexOf("
")==0)) {
             console.log ("cake error detected, attempting fix...");
@@ -1037,7 +1056,7 @@ angular.module('zmApp', [
 
       return d.promise;
 
-
+      
 
       function proceedWithLogin() {
 
@@ -1065,7 +1084,7 @@ angular.module('zmApp', [
           var diff_refresh = moment.utc(ld.refreshTokenExpires).diff(now, 'minutes');
 
           // first see if we can work with access token
-          if (moment.utc(ld.accessTokenExpires).isAfter(now) &&  diff_access  >=30) {
+          if (moment.utc(ld.accessTokenExpires).isAfter(now) &&  diff_access  >=5) {
             NVR.log ("Access token still has "+diff_access+" minutes left, using it");
             $rootScope.authSession = '&token='+ld.accessToken;
             d.resolve("Login success via access token");
@@ -1075,8 +1094,8 @@ angular.module('zmApp', [
           // then see if we have at least 30 mins left for refresh token
           else if (moment.utc(ld.refreshTokenExpires).isAfter(now) &&  diff_refresh  >=30) {
             NVR.log ("Refresh token still has "+diff_refresh+" minutes left, using it");
-            var loginAPI = loginData.apiurl + '/host/login.json?token='+ld.refreshToken;
-            $http.get($loginAPI)
+            var loginAPI = ld.apiurl + '/host/login.json?token='+ld.refreshToken;
+            $http.get(loginAPI)
             .then (function (succ) {
               succ = succ.data;
               if (succ.access_token) {
@@ -1116,17 +1135,17 @@ angular.module('zmApp', [
         // your stream should not get frozen
         $rootScope.rand = Math.floor((Math.random() * 100000) + 1);
         $rootScope.modalRand = Math.floor((Math.random() * 100000) + 1);
-
+  
         // console.log ("***** STATENAME IS " + statename);
-
+  
         var d = $q.defer();
         var ld = NVR.getLogin();
         NVR.log("Doing fresh login to ZM");
         var httpDelay = NVR.getLogin().enableSlowLoading ? zm.largeHttpTimeout : zm.httpTimeout;
-
+  
        
         if (!str) str = $translate.instant('kAuthenticating');
-
+  
         if (str) {
           $ionicLoading.show({
             template: str,
@@ -1134,19 +1153,19 @@ angular.module('zmApp', [
             duration: httpDelay
           });
         }
-
+  
         //console.log(">>>>>>>>>>>>>> ISRECAPTCHA");
-
+  
         var loginData = NVR.getLogin();
         var currentServerVersion = NVR.getCurrentServerVersion();
-
-
+  
+  
         //first login using new API
         $rootScope.authSession = '';
         var loginAPI = loginData.apiurl + '/host/login.json';
-
-
-
+  
+  
+  
         $http({
             method: 'post',
             url: loginAPI,
@@ -1169,19 +1188,19 @@ angular.module('zmApp', [
           })
           //$http.get(loginAPI)
           .then(function (textsucc) {
-
+  
               $ionicLoading.hide();
               var succ;
               try {
-
+  
                 succ = JSON.parse(textsucc.data);
-
+  
                 if (!succ.version) {
                   NVR.debug("API login returned fake success, going back to webscrape");
                   ld = NVR.getLogin();
                   ld.loginAPISupported = false;
                   NVR.setLogin(ld);
-
+  
                   loginWebScrape()
                     .then(function (succ) {
                         d.resolve("Login Success");
@@ -1200,7 +1219,7 @@ angular.module('zmApp', [
                 $ionicLoading.hide();
                 //$rootScope.loggedIntoZm = 1;
                 $rootScope.authSession = '';
-
+  
                 if (succ.refresh_token) {
                   $rootScope.authSession = '&token='+succ.access_token;
                   NVR.log ("New refresh token retrieved:"+succ.refresh_token);
@@ -1216,7 +1235,7 @@ angular.module('zmApp', [
                   NVR.log ("New refresh token expires on: UTC "+ld.refreshTokenExpires.format("YYYY-MM-DD hh:mm:ss"));
                   NVR.log ("New access token expires on: UTC "+ld.accessTokenExpires.format("YYYY-MM-DD hh:mm:ss"));
                   NVR.setLogin(ld);
-
+  
                 }
                 else {
                   if (succ.credentials) {
@@ -1234,22 +1253,22 @@ angular.module('zmApp', [
                   }
                 }
                 
-
+  
                 var ldg = NVR.getLogin();
                 ldg.loginAPISupported = true;
                 NVR.setLogin(ldg);
-
+  
                 NVR.log("Stream authentication construction: " +
                   $rootScope.authSession);
-
+  
                 NVR.log("zmAutologin successfully logged into Zoneminder via API");
-
-
-
+  
+  
+  
                 d.resolve("Login Success");
                 $rootScope.$broadcast('auth-success', succ);
                 return d.promise;
-
+  
               } catch (e) {
                 NVR.debug("Login API approach did not work...");
                
@@ -1268,11 +1287,11 @@ angular.module('zmApp', [
                       return (d.promise);
                     });
                 return d.promise;
-
+  
               }
-
-
-
+  
+  
+  
             },
             function (err) {
               console.log("******************* API login error " + JSON.stringify(err));
@@ -1292,17 +1311,21 @@ angular.module('zmApp', [
                     d.reject("Login Error");
                     return (d.promise);
                   });
-
+  
             }
           ); // post .then
-
+  
         return d.promise;
       }
 
+
       return d.promise;
 
     }
 
+
+ 
+
     function loginWebScrape() {
       var loginData = NVR.getLogin();
       var d = $q.defer();
-- 
cgit v1.2.3