mirror of
https://github.com/bitwarden/desktop.git
synced 2024-11-09 09:40:07 +01:00
combine token refresh methods. added api logging
This commit is contained in:
parent
e09e15f72f
commit
01e48377e9
@ -116,8 +116,10 @@ function initApiService() {
|
|||||||
// Account APIs
|
// Account APIs
|
||||||
|
|
||||||
ApiService.prototype.getAccountRevisionDate = function (success, error) {
|
ApiService.prototype.getAccountRevisionDate = function (success, error) {
|
||||||
|
log('getAccountRevisionDate invoked');
|
||||||
var self = this;
|
var self = this;
|
||||||
handleTokenState(self).then(function (token) {
|
handleTokenState(self).then(function (token) {
|
||||||
|
log('Revision Date API Call');
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: 'GET',
|
type: 'GET',
|
||||||
url: self.baseUrl + '/accounts/revision-date?' + token,
|
url: self.baseUrl + '/accounts/revision-date?' + token,
|
||||||
@ -130,6 +132,7 @@ function initApiService() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}, function (jqXHR) {
|
}, function (jqXHR) {
|
||||||
|
log('Error handling token state for Revision Date API Call');
|
||||||
handleError(error, jqXHR, true, self);
|
handleError(error, jqXHR, true, self);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@ -505,7 +508,7 @@ function initApiService() {
|
|||||||
|
|
||||||
function handleError(errorCallback, jqXHR, tokenError, self) {
|
function handleError(errorCallback, jqXHR, tokenError, self) {
|
||||||
if (jqXHR && (tokenError && jqXHR.status === 400) || jqXHR.status === 401 || jqXHR.status === 403) {
|
if (jqXHR && (tokenError && jqXHR.status === 400) || jqXHR.status === 401 || jqXHR.status === 403) {
|
||||||
console.log('Logging out from apiService at ' + new Date() + '. Reason: Status ' + jqXHR.status + '.');
|
log('Logging out. Reason: Status ' + jqXHR.status + '.');
|
||||||
console.log(jqXHR);
|
console.log(jqXHR);
|
||||||
if (self && self.logoutCallback) {
|
if (self && self.logoutCallback) {
|
||||||
self.logoutCallback(true, function () { });
|
self.logoutCallback(true, function () { });
|
||||||
@ -523,59 +526,61 @@ function initApiService() {
|
|||||||
function handleTokenState(self) {
|
function handleTokenState(self) {
|
||||||
var deferred = Q.defer();
|
var deferred = Q.defer();
|
||||||
self.tokenService.getToken(function (accessToken) {
|
self.tokenService.getToken(function (accessToken) {
|
||||||
if (self.tokenService.tokenNeedsRefresh()) {
|
log('Got access token');
|
||||||
refreshToken(self, function (accessToken) {
|
|
||||||
|
if (!self.tokenService.tokenNeedsRefresh()) {
|
||||||
|
log('Token doesn\'t need refreshing');
|
||||||
resolveTokenQs(accessToken, self, deferred);
|
resolveTokenQs(accessToken, self, deferred);
|
||||||
}, function (err) {
|
return;
|
||||||
deferred.reject(err);
|
}
|
||||||
|
|
||||||
|
log('Token needs refresh');
|
||||||
|
|
||||||
|
self.tokenService.getRefreshToken(function (refreshToken) {
|
||||||
|
if (!refreshToken || refreshToken === '') {
|
||||||
|
log('No existing refresh token.');
|
||||||
|
error();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
log('Got existing refresh token. Do refresh call.');
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: 'POST',
|
||||||
|
url: self.identityBaseUrl + '/connect/token',
|
||||||
|
data: {
|
||||||
|
grant_type: 'refresh_token',
|
||||||
|
client_id: 'browser',
|
||||||
|
refresh_token: refreshToken
|
||||||
|
},
|
||||||
|
contentType: 'application/x-www-form-urlencoded; charset=utf-8',
|
||||||
|
dataType: 'json',
|
||||||
|
success: function (response) {
|
||||||
|
log('Successfully refreshed.');
|
||||||
|
|
||||||
|
var tokenResponse = new IdentityTokenResponse(response);
|
||||||
|
self.tokenService.setTokens(tokenResponse.accessToken, tokenResponse.refreshToken, function () {
|
||||||
|
log('New token set.');
|
||||||
|
resolveTokenQs(tokenResponse.accessToken, self, deferred);
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
|
log('Error refreshing.');
|
||||||
|
deferred.reject(jqXHR);
|
||||||
}
|
}
|
||||||
else {
|
});
|
||||||
resolveTokenQs(accessToken, self, deferred);
|
});
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
function refreshToken(self, success, error) {
|
|
||||||
self.tokenService.getRefreshToken(function (refreshToken) {
|
|
||||||
if (!refreshToken || refreshToken === '') {
|
|
||||||
error();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
postConnectToken(self, {
|
|
||||||
grant_type: 'refresh_token',
|
|
||||||
client_id: 'browser',
|
|
||||||
refresh_token: refreshToken
|
|
||||||
}, function (token) {
|
|
||||||
self.tokenService.setTokens(token.accessToken, token.refreshToken, function () {
|
|
||||||
success(token.accessToken);
|
|
||||||
});
|
|
||||||
}, function (jqXHR) {
|
|
||||||
error(jqXHR);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function resolveTokenQs(token, self, deferred) {
|
function resolveTokenQs(token, self, deferred) {
|
||||||
|
log('Resolving token.');
|
||||||
deferred.resolve('access_token3=' + token);
|
deferred.resolve('access_token3=' + token);
|
||||||
}
|
}
|
||||||
|
|
||||||
function postConnectToken(self, data, success, error) {
|
function log(msg) {
|
||||||
$.ajax({
|
console.log(new Date() + ' - API Service: ' + msg);
|
||||||
type: 'POST',
|
|
||||||
url: self.identityBaseUrl + '/connect/token',
|
|
||||||
data: data,
|
|
||||||
contentType: 'application/x-www-form-urlencoded; charset=utf-8',
|
|
||||||
dataType: 'json',
|
|
||||||
success: function (response) {
|
|
||||||
success(new IdentityTokenResponse(response));
|
|
||||||
},
|
|
||||||
error: function (jqXHR, textStatus, errorThrown) {
|
|
||||||
error(jqXHR);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user