summaryrefslogtreecommitdiff
path: root/www/js/app.js
diff options
context:
space:
mode:
authorPliable Pixels <pliablepixels@gmail.com>2019-05-14 14:40:12 -0400
committerPliable Pixels <pliablepixels@gmail.com>2019-05-14 14:40:12 -0400
commit151b26e60a18ccdc4231b2ce52abf864848eaa90 (patch)
tree84d0bf34682698b7c348b1ea82e687dc6353fa7d /www/js/app.js
parent576d9058a4afb2a179f8c6a338f9b6c08108822b (diff)
#817 initial interceptor code for expiry (Mobile tbd)
Diffstat (limited to 'www/js/app.js')
-rwxr-xr-xwww/js/app.js95
1 files changed, 59 insertions, 36 deletions
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("<pre class=\"cake-error\">")==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();