fixed cache bug, enabled logout

This commit is contained in:
AJ ONeal 2017-02-15 14:28:33 -07:00
parent 5c9e36d569
commit 995d70e3b1
1 changed files with 19 additions and 16 deletions

View File

@ -363,13 +363,16 @@
_get: function (providerUri) { _get: function (providerUri) {
providerUri = OAUTH3.utils.uri.normalize(providerUri); providerUri = OAUTH3.utils.uri.normalize(providerUri);
if (!OAUTH3.hooks.directives._cache) { OAUTH3.hooks.directives._cache = {}; } if (!OAUTH3.hooks.directives._cache) { OAUTH3.hooks.directives._cache = {}; }
return OAUTH3.PromiseA.resolve(OAUTH3.hooks.directives._cache[providerUri] || this.get(providerUri)) return OAUTH3.PromiseA.resolve(OAUTH3.hooks.directives._cache[providerUri]
|| OAUTH3.hooks.directives.get(providerUri))
.then(function (directives) { .then(function (directives) {
// or do .then(this._set) to keep DRY? // or do .then(this._set) to keep DRY?
OAUTH3.hooks.directives._cache[providerUri] = directives; OAUTH3.hooks.directives._cache[providerUri] = directives;
return directives;
}); });
} }
, _getCached: function (providerUri) { , _getCached: function (providerUri) {
providerUri = OAUTH3.utils.uri.normalize(providerUri);
return OAUTH3.hooks.directives._cache[providerUri]; return OAUTH3.hooks.directives._cache[providerUri];
} }
, get: function (providerUri) { , get: function (providerUri) {
@ -497,14 +500,14 @@
throw new Error('oauth3.discover(providerUri, opts) received providerUri as ' + providerUri); throw new Error('oauth3.discover(providerUri, opts) received providerUri as ' + providerUri);
} }
return OAUTH3.PromiseA.resolve(OAUTH3.hooks.directives.get(providerUri)).then(function (directives) { return OAUTH3.hooks.directives._get(providerUri).then(function (directives) {
if (directives && directives.issuer) { if (directives && directives.issuer) {
return directives; return directives;
} }
return OAUTH3._discoverHelper(providerUri, opts).then(function (directives) { return OAUTH3._discoverHelper(providerUri, opts).then(function (directives) {
directives.issuer = directives.issuer || OAUTH3.utils.url.normalize(providerUri); directives.issuer = directives.issuer || OAUTH3.utils.url.normalize(providerUri);
// OAUTH3.PromiseA.resolve() is taken care of because this is wrapped // OAUTH3.PromiseA.resolve() is taken care of because this is wrapped
return OAUTH3.hooks.directives.set(providerUri, directives); return OAUTH3.hooks.directives._set(providerUri, directives);
}); });
}); });
} }
@ -619,21 +622,21 @@
}); });
} }
, logout: function(providerUri, opts) { , logout: function(providerUri, opts) {
return OAUTH3._logoutHelper(providerUri, opts); return OAUTH3._logoutHelper(OAUTH3.hooks.directives._getCached(providerUri), opts);
} }
, _logoutHelper: function(providerUri, opts) { , _logoutHelper: function(directives, opts) {
var logoutReq = OAUTH3.urls.logout( var logoutReq = OAUTH3.urls.logout(
providerUri directives
, { client_id: (opts.client_id || opts.client_uri || OAUTH3.clientUri(OAUTH3._browser.window.location)) , { client_id: (opts.client_id || opts.client_uri || OAUTH3.clientUri(OAUTH3._browser.window.location))
, windowType: 'popup' // we'll figure out background later , windowType: 'popup' // we'll figure out background later
, broker: opts.broker , broker: opts.broker
//, state: opts._state //, state: opts._state
, debug: opts.debug , debug: opts.debug
} }
); );
return OAUTH3._browser.frameRequest( return OAUTH3._browser.frameRequest(
OAUTH3.utils.url.resolve(directives.issuer, authReq.url) OAUTH3.utils.url.resolve(directives.issuer, logoutReq.url)
, logoutReq.state // state should recycle params , logoutReq.state // state should recycle params
, { windowType: 'popup' , { windowType: 'popup'
, reuseWindow: opts.broker && '-broker' , reuseWindow: opts.broker && '-broker'
@ -715,7 +718,7 @@
// TODO params should have response_type indicating json, binary, etc // TODO params should have response_type indicating json, binary, etc
var directives = JSON.parse(OAUTH3.utils.atob(OAUTH3.utils._urlSafeBase64ToBase64(params.result || params.directives))); var directives = JSON.parse(OAUTH3.utils.atob(OAUTH3.utils._urlSafeBase64ToBase64(params.result || params.directives)));
// caller will call OAUTH3.hooks.directives.set(providerUri, directives); // caller will call OAUTH3.hooks.directives._set(providerUri, directives);
return directives; return directives;
}); });
} }