This commit is contained in:
AJ ONeal 2017-02-10 20:23:57 -07:00
parent 203bd24368
commit fbce24e14a
2 changed files with 24 additions and 18 deletions

View File

@ -5,7 +5,7 @@
var OAUTH3_CORE = exports.OAUTH3_CORE;
function getDefaultAppUrl() {
console.warn('[deprecated] using window.location.{protocol, host, pathname} when opts.appUrl should be used');
console.warn('[deprecated] using window.location.{protocol, host, pathname} when opts.client_id should be used');
return window.location.protocol
+ '//' + window.location.host
+ (window.location.pathname).replace(/\/?$/, '')
@ -23,8 +23,9 @@
opts = opts || {};
opts.debug = true;
providerUri = OAUTH3_CORE.normalizeUrl(providerUri);
var discObj = OAUTH3_CORE.urls.discover(providerUri, { appUrl: (opts.appUrl || getDefaultAppUrl()), debug: opts.debug });
var discObj = OAUTH3_CORE.urls.discover(providerUri, { client_id: (opts.client_id || opts.client_uri || getDefaultAppUrl()), debug: opts.debug });
// TODO ability to reuse iframe instead of closing
return browser.insertIframe(discObj.url, discObj.state, opts).then(function (params) {
if (params.error) {
return OAUTH3_CORE.formatError(providerUri, params.error);
@ -108,7 +109,6 @@
, openWindow: function (url, state, opts) {
var promise = new OAUTH3.PromiseA(function (resolve, reject) {
var winref;
var tok;
function cleanup() {
@ -117,10 +117,13 @@
tok = null;
// this is last in case the window self-closes synchronously
// (should never happen, but that's a negotiable implementation detail)
//winref.close();
if (!opts.reuseWindow) {
promise.child.close();
}
}
window['--oauth3-callback-' + state] = function (params) {
console.log('YOLO!!');
resolve(params);
cleanup();
};
@ -132,18 +135,20 @@
cleanup();
}, opts.timeout || 3 * 60 * 1000);
// TODO allow size changes (via directive even)
winref = window.open(
url
, 'oauth3-login-' + state
, 'height=' + (opts.height || 720) + ',width=' + (opts.width || 620)
);
if (!winref) {
reject("TODO: open the iframe first and discover oauth3 directives before popup");
cleanup();
}
setTimeout(function () {
if (!promise.child) {
reject("TODO: open the iframe first and discover oauth3 directives before popup");
cleanup();
}
}, 0);
});
// TODO allow size changes (via directive even)
promise.child = window.open(
url
, 'oauth3-login-' + (opts.reuseWindow || state)
, 'height=' + (opts.height || 720) + ',width=' + (opts.width || 620)
);
// TODO periodically garbage collect expired handlers from window object
return promise;
}

View File

@ -210,14 +210,14 @@
if (!providerUri) {
throw new Error("cannot discover without providerUri");
}
if (!opts.appUrl) {
throw new Error("cannot discover without opts.appUrl");
if (!opts.client_id) {
throw new Error("cannot discover without options.client_id");
}
var params = {
action: 'directives'
, state: core.utils.randomState()
, redirect_uri: opts.appUrl + (opts.appCallbackPath || '/.well-known/oauth3/callback.html')
, redirect_uri: opts.client_id + (opts.client_callback_path || '/.well-known/oauth3/callback.html')
, response_type: 'rpc'
, _method: 'GET'
, _pathname: '.well-known/oauth3/directives.json'
@ -336,7 +336,8 @@
var redirectUri = opts.redirectUri;
var scope = opts.scope || directive.authn_scope;
var clientId = opts.appId || opts.clientId || opts.clientUri;
var clientId = core.normalizeUri(opts.client_id || opts.client_uri
|| opts.appId || opts.clientId || opts.clientUri);
var args = directive[type];
var uri = args.url;
var state = core.utils.randomState();