clean up
This commit is contained in:
parent
c356d61598
commit
ae97b30b6f
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
var OAUTH3 = exports.OAUTH3 = {
|
var OAUTH3 = exports.OAUTH3 = {
|
||||||
clientUri: function (location) {
|
clientUri: function (location) {
|
||||||
return OAUTH3.utils.uri.normalize(location.host + location.pathname);
|
return OAUTH3.uri.normalize(location.host + location.pathname);
|
||||||
}
|
}
|
||||||
, error: {
|
, error: {
|
||||||
parse: function (providerUri, params) {
|
parse: function (providerUri, params) {
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if ('scope' === key) {
|
if ('scope' === key) {
|
||||||
params[key] = OAUTH3.utils.scope.stringify(params[key]);
|
params[key] = OAUTH3.scope.stringify(params[key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
qs.push(encodeURIComponent(key) + '=' + encodeURIComponent(params[key]));
|
qs.push(encodeURIComponent(key) + '=' + encodeURIComponent(params[key]));
|
||||||
|
@ -171,8 +171,8 @@
|
||||||
if (!opts.client_id) {
|
if (!opts.client_id) {
|
||||||
throw new Error("cannot discover without options.client_id");
|
throw new Error("cannot discover without options.client_id");
|
||||||
}
|
}
|
||||||
var clientId = OAUTH3.utils.url.normalize(opts.client_id || opts.client_uri);
|
var clientId = OAUTH3.url.normalize(opts.client_id || opts.client_uri);
|
||||||
providerUri = OAUTH3.utils.url.normalize(providerUri);
|
providerUri = OAUTH3.url.normalize(providerUri);
|
||||||
|
|
||||||
var params = {
|
var params = {
|
||||||
action: 'directives'
|
action: 'directives'
|
||||||
|
@ -185,7 +185,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
var result = {
|
var result = {
|
||||||
url: providerUri + '/.well-known/oauth3/#/?' + OAUTH3.utils.query.stringify(params)
|
url: providerUri + '/.well-known/oauth3/#/?' + OAUTH3.query.stringify(params)
|
||||||
, state: params.state
|
, state: params.state
|
||||||
, method: 'GET'
|
, method: 'GET'
|
||||||
, query: params
|
, query: params
|
||||||
|
@ -226,20 +226,20 @@
|
||||||
|
|
||||||
params.response_type = responseType;
|
params.response_type = responseType;
|
||||||
if (scope) {
|
if (scope) {
|
||||||
params.scope = OAUTH3.utils.scope.stringify(scope);
|
params.scope = OAUTH3.scope.stringify(scope);
|
||||||
}
|
}
|
||||||
if (!opts.redirect_uri) {
|
if (!opts.redirect_uri) {
|
||||||
// TODO consider making this optional
|
// TODO consider making this optional
|
||||||
//console.warn("auto-generating redirect_uri from hard-coded callback.html"
|
//console.warn("auto-generating redirect_uri from hard-coded callback.html"
|
||||||
// + " (should be configurable... but then redirect_uri could just be manually-generated)");
|
// + " (should be configurable... but then redirect_uri could just be manually-generated)");
|
||||||
opts.redirect_uri = OAUTH3.utils.url.resolve(
|
opts.redirect_uri = OAUTH3.url.resolve(
|
||||||
OAUTH3.utils.url.normalize(params.client_uri)
|
OAUTH3.url.normalize(params.client_uri)
|
||||||
, '.well-known/oauth3/callback.html'
|
, '.well-known/oauth3/callback.html'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
params.redirect_uri = opts.redirect_uri;
|
params.redirect_uri = opts.redirect_uri;
|
||||||
|
|
||||||
uri += '?' + OAUTH3.utils.query.stringify(params);
|
uri += '?' + OAUTH3.query.stringify(params);
|
||||||
|
|
||||||
result = {
|
result = {
|
||||||
url: uri
|
url: uri
|
||||||
|
@ -287,11 +287,11 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scope) {
|
if (scope) {
|
||||||
params.scope = OAUTH3.utils.scope.stringify(scope);
|
params.scope = OAUTH3.scope.stringify(scope);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ('GET' === args.method.toUpperCase()) {
|
if ('GET' === args.method.toUpperCase()) {
|
||||||
uri += '?' + OAUTH3.utils.query.stringify(params);
|
uri += '?' + OAUTH3.query.stringify(params);
|
||||||
} else {
|
} else {
|
||||||
body = params;
|
body = params;
|
||||||
}
|
}
|
||||||
|
@ -326,8 +326,8 @@
|
||||||
, client_id: opts.client_id || opts.client_uri
|
, client_id: opts.client_id || opts.client_uri
|
||||||
, client_uri: opts.client_uri || opts.client_id
|
, client_uri: opts.client_uri || opts.client_id
|
||||||
, state: state
|
, state: state
|
||||||
, redirect_uri: opts.redirect_uri = OAUTH3.utils.url.resolve(
|
, redirect_uri: opts.redirect_uri = OAUTH3.url.resolve(
|
||||||
OAUTH3.utils.url.normalize(opts.client_uri || opts.client_id)
|
OAUTH3.url.normalize(opts.client_uri || opts.client_id)
|
||||||
, '.well-known/oauth3/callback.html'
|
, '.well-known/oauth3/callback.html'
|
||||||
)
|
)
|
||||||
, debug: opts.debug
|
, debug: opts.debug
|
||||||
|
@ -336,13 +336,13 @@
|
||||||
var body;
|
var body;
|
||||||
|
|
||||||
if ('GET' === args.method.toUpperCase()) {
|
if ('GET' === args.method.toUpperCase()) {
|
||||||
uri += '?' + OAUTH3.utils.query.stringify(params);
|
uri += '?' + OAUTH3.query.stringify(params);
|
||||||
} else {
|
} else {
|
||||||
body = params;
|
body = params;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
url: OAUTH3.utils.url.resolve(directive.issuer, uri)
|
url: OAUTH3.url.resolve(directive.issuer, uri)
|
||||||
, method: args.method
|
, method: args.method
|
||||||
, state: state
|
, state: state
|
||||||
, data: body
|
, data: body
|
||||||
|
@ -352,7 +352,7 @@
|
||||||
, hooks: {
|
, hooks: {
|
||||||
directives: {
|
directives: {
|
||||||
_get: function (providerUri) {
|
_get: function (providerUri) {
|
||||||
providerUri = OAUTH3.utils.uri.normalize(providerUri);
|
providerUri = OAUTH3.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]
|
return OAUTH3.PromiseA.resolve(OAUTH3.hooks.directives._cache[providerUri]
|
||||||
|| OAUTH3.hooks.directives.get(providerUri))
|
|| OAUTH3.hooks.directives.get(providerUri))
|
||||||
|
@ -363,7 +363,7 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
, _getCached: function (providerUri) {
|
, _getCached: function (providerUri) {
|
||||||
providerUri = OAUTH3.utils.uri.normalize(providerUri);
|
providerUri = OAUTH3.uri.normalize(providerUri);
|
||||||
return OAUTH3.hooks.directives._cache[providerUri];
|
return OAUTH3.hooks.directives._cache[providerUri];
|
||||||
}
|
}
|
||||||
, get: function (providerUri) {
|
, get: function (providerUri) {
|
||||||
|
@ -371,7 +371,7 @@
|
||||||
return JSON.parse(window.localStorage.getItem('directives-' + providerUri) || '{}');
|
return JSON.parse(window.localStorage.getItem('directives-' + providerUri) || '{}');
|
||||||
}
|
}
|
||||||
, _set: function (providerUri, directives) {
|
, _set: function (providerUri, directives) {
|
||||||
providerUri = OAUTH3.utils.uri.normalize(providerUri);
|
providerUri = OAUTH3.uri.normalize(providerUri);
|
||||||
if (!OAUTH3.hooks.directives._cache) { OAUTH3.hooks.directives._cache = {}; }
|
if (!OAUTH3.hooks.directives._cache) { OAUTH3.hooks.directives._cache = {}; }
|
||||||
OAUTH3.hooks.directives._cache[providerUri] = directives;
|
OAUTH3.hooks.directives._cache[providerUri] = directives;
|
||||||
return OAUTH3.PromiseA.resolve(OAUTH3.hooks.directives.set(providerUri, directives));
|
return OAUTH3.PromiseA.resolve(OAUTH3.hooks.directives.set(providerUri, directives));
|
||||||
|
@ -469,14 +469,18 @@
|
||||||
console.error(new Error('no providerUri').stack);
|
console.error(new Error('no providerUri').stack);
|
||||||
throw new Error("providerUri is not set");
|
throw new Error("providerUri is not set");
|
||||||
}
|
}
|
||||||
providerUri = OAUTH3.utils.uri.normalize(providerUri);
|
providerUri = OAUTH3.uri.normalize(providerUri);
|
||||||
console.warn('[Warn] Please implement OAUTH3.hooks.session.set = function (providerUri, newSession) { return PromiseA<newSession>; }');
|
console.warn('[Warn] Please implement OAUTH3.hooks.session.set = function (providerUri, newSession) { return PromiseA<newSession>; }');
|
||||||
if (!OAUTH3.hooks.session._sessions) { OAUTH3.hooks.session._sessions = {}; }
|
if (!OAUTH3.hooks.session._sessions) { OAUTH3.hooks.session._sessions = {}; }
|
||||||
OAUTH3.hooks.session._sessions[providerUri] = newSession;
|
OAUTH3.hooks.session._sessions[providerUri] = newSession;
|
||||||
return OAUTH3.PromiseA.resolve(newSession);
|
return OAUTH3.PromiseA.resolve(newSession);
|
||||||
}
|
}
|
||||||
|
, _getCached: function (providerUri) {
|
||||||
|
providerUri = OAUTH3.uri.normalize(providerUri);
|
||||||
|
return OAUTH3.hooks.session._sessions[providerUri];
|
||||||
|
}
|
||||||
, get: function (providerUri) {
|
, get: function (providerUri) {
|
||||||
providerUri = OAUTH3.utils.uri.normalize(providerUri);
|
providerUri = OAUTH3.uri.normalize(providerUri);
|
||||||
if (!providerUri) {
|
if (!providerUri) {
|
||||||
throw new Error("providerUri is not set");
|
throw new Error("providerUri is not set");
|
||||||
}
|
}
|
||||||
|
@ -496,7 +500,8 @@
|
||||||
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.azp = directives.azp || OAUTH3.url.normalize(providerUri);
|
||||||
|
directives.issuer = directives.issuer || OAUTH3.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);
|
||||||
});
|
});
|
||||||
|
@ -517,6 +522,8 @@
|
||||||
return OAUTH3._requestHelper(preq, opts);
|
return OAUTH3._requestHelper(preq, opts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OAUTH3.url.resolve(preq.providerUri || preq.provider_uri || preq.directives && preq.directives.issuer, preq.url);
|
||||||
|
|
||||||
if (!preq.session) {
|
if (!preq.session) {
|
||||||
return fetch();
|
return fetch();
|
||||||
}
|
}
|
||||||
|
@ -526,8 +533,9 @@
|
||||||
, _requestHelper: function (preq, opts) {
|
, _requestHelper: function (preq, opts) {
|
||||||
return OAUTH3._browser.request(preq, opts);
|
return OAUTH3._browser.request(preq, opts);
|
||||||
}
|
}
|
||||||
, implicitGrant: function(providerUri, opts) {
|
, implicitGrant: function(directives, opts) {
|
||||||
var promise;
|
var promise;
|
||||||
|
var providerUri = directives.azp || directives.issuer || directives;
|
||||||
|
|
||||||
if (opts.broker) {
|
if (opts.broker) {
|
||||||
// Discovery can happen in-flow because we know that this is
|
// Discovery can happen in-flow because we know that this is
|
||||||
|
@ -583,7 +591,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
return OAUTH3._browser.frameRequest(
|
return OAUTH3._browser.frameRequest(
|
||||||
OAUTH3.utils.url.resolve(directives.issuer, authReq.url)
|
OAUTH3.url.resolve(directives.issuer, authReq.url)
|
||||||
, authReq.state // state should recycle params
|
, authReq.state // state should recycle params
|
||||||
, { windowType: opts.windowType
|
, { windowType: opts.windowType
|
||||||
, reuseWindow: opts.broker && '-broker'
|
, reuseWindow: opts.broker && '-broker'
|
||||||
|
@ -592,7 +600,7 @@
|
||||||
).then(function (tokens) {
|
).then(function (tokens) {
|
||||||
if (tokens.error) {
|
if (tokens.error) {
|
||||||
// TODO directives.audience
|
// TODO directives.audience
|
||||||
return OAUTH3.PromiseA.reject(OAUTH3.utils._formatError(directives.issuer /*providerUri*/, tokens));
|
return OAUTH3.PromiseA.reject(OAUTH3.error.parse(directives.issuer /*providerUri*/, tokens));
|
||||||
}
|
}
|
||||||
|
|
||||||
return tokens;
|
return tokens;
|
||||||
|
@ -606,7 +614,7 @@
|
||||||
var data = req.data;
|
var data = req.data;
|
||||||
data.provider_uri = providerUri;
|
data.provider_uri = providerUri;
|
||||||
if (data.error) {
|
if (data.error) {
|
||||||
return OAUTH3.PromiseA.reject(OAUTH3.utils._formatError(providerUri, data));
|
return OAUTH3.PromiseA.reject(OAUTH3.error.parse(providerUri, data));
|
||||||
}
|
}
|
||||||
return OAUTH3.hooks.session.refresh(opts, data);
|
return OAUTH3.hooks.session.refresh(opts, data);
|
||||||
});
|
});
|
||||||
|
@ -627,7 +635,7 @@
|
||||||
);
|
);
|
||||||
|
|
||||||
return OAUTH3._browser.frameRequest(
|
return OAUTH3._browser.frameRequest(
|
||||||
OAUTH3.utils.url.resolve(directives.issuer, logoutReq.url)
|
OAUTH3.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'
|
||||||
|
@ -638,7 +646,7 @@
|
||||||
|
|
||||||
if (params.error) {
|
if (params.error) {
|
||||||
// TODO directives.audience
|
// TODO directives.audience
|
||||||
return OAUTH3.PromiseA.reject(OAUTH3.utils._formatError(directives.issuer /*providerUri*/, params));
|
return OAUTH3.PromiseA.reject(OAUTH3.error.parse(directives.issuer /*providerUri*/, params));
|
||||||
}
|
}
|
||||||
|
|
||||||
return params;
|
return params;
|
||||||
|
@ -654,7 +662,7 @@
|
||||||
// TODO we don't need to include this if we're using jQuery or angular
|
// TODO we don't need to include this if we're using jQuery or angular
|
||||||
, discover: function(providerUri, opts) {
|
, discover: function(providerUri, opts) {
|
||||||
opts = opts || {};
|
opts = opts || {};
|
||||||
providerUri = OAUTH3.utils.url.normalize(providerUri);
|
providerUri = OAUTH3.url.normalize(providerUri);
|
||||||
|
|
||||||
if (providerUri.match(OAUTH3._browser.window.location.hostname)) {
|
if (providerUri.match(OAUTH3._browser.window.location.hostname)) {
|
||||||
console.warn("It looks like you're a provider checking for your own directive,"
|
console.warn("It looks like you're a provider checking for your own directive,"
|
||||||
|
@ -662,7 +670,7 @@
|
||||||
+ " OAUTH3.request({ method: 'GET', url: '.well-known/oauth3/directive.json' })");
|
+ " OAUTH3.request({ method: 'GET', url: '.well-known/oauth3/directive.json' })");
|
||||||
return OAUTH3.request({
|
return OAUTH3.request({
|
||||||
method: 'GET'
|
method: 'GET'
|
||||||
, url: OAUTH3.utils.url.normalize(providerUri) + '/.well-known/oauth3/directives.json'
|
, url: OAUTH3.url.normalize(providerUri) + '/.well-known/oauth3/directives.json'
|
||||||
}).then(function (resp) {
|
}).then(function (resp) {
|
||||||
return resp.data;
|
return resp.data;
|
||||||
});
|
});
|
||||||
|
@ -695,7 +703,7 @@
|
||||||
opts._windowType = opts.windowType;
|
opts._windowType = opts.windowType;
|
||||||
opts.windowType = opts.windowType || 'background';
|
opts.windowType = opts.windowType || 'background';
|
||||||
return OAUTH3._browser.frameRequest(
|
return OAUTH3._browser.frameRequest(
|
||||||
OAUTH3.utils.url.resolve(providerUri, discReq.url)
|
OAUTH3.url.resolve(providerUri, discReq.url)
|
||||||
, discReq.state
|
, discReq.state
|
||||||
// why not just pass opts whole?
|
// why not just pass opts whole?
|
||||||
, { windowType: opts.windowType
|
, { windowType: opts.windowType
|
||||||
|
@ -708,7 +716,7 @@
|
||||||
// caller will call OAUTH3._browser.closeFrame(discReq.state, { debug: opts.debug || params.debug });
|
// caller will call OAUTH3._browser.closeFrame(discReq.state, { debug: opts.debug || params.debug });
|
||||||
if (params.error) {
|
if (params.error) {
|
||||||
// TODO directives.issuer || directives.audience
|
// TODO directives.issuer || directives.audience
|
||||||
return OAUTH3.PromiseA.reject(OAUTH3.utils._formatError(providerUri, params));
|
return OAUTH3.PromiseA.reject(OAUTH3.error.parse(providerUri, params));
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO params should have response_type indicating json, binary, etc
|
// TODO params should have response_type indicating json, binary, etc
|
||||||
|
@ -842,7 +850,7 @@
|
||||||
}).then(function (params) {
|
}).then(function (params) {
|
||||||
if (params.error) {
|
if (params.error) {
|
||||||
// TODO directives.issuer || directives.audience
|
// TODO directives.issuer || directives.audience
|
||||||
return OAUTH3.PromiseA.reject(OAUTH3.utils._formatError('https://oauth3.org', params));
|
return OAUTH3.PromiseA.reject(OAUTH3.error.parse('https://oauth3.org', params));
|
||||||
}
|
}
|
||||||
return params;
|
return params;
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue