97 lines
2.6 KiB
JavaScript
97 lines
2.6 KiB
JavaScript
(function () {
|
|
'use strict';
|
|
|
|
function create(myOpts) {
|
|
return {
|
|
requestScope: function (opts) {
|
|
// TODO pre-generate URL
|
|
|
|
// deliver existing session if it exists
|
|
var scope = opts && opts.scope || [];
|
|
if (myOpts.session) {
|
|
if (!scope.length || scope.every(function (scp) {
|
|
return -1 !== opts.myOpts.session.scope.indexOf(scp);
|
|
})) {
|
|
return OAUTH3.PromiseA.resolve(myOpts.session);
|
|
}
|
|
}
|
|
|
|
// request a new session otherwise
|
|
return OAUTH3.implicitGrant(myOpts.directives, {
|
|
client_id: myOpts.conf.client_uri
|
|
, client_uri: myOpts.conf.client_uri
|
|
// maybe use inline instead?
|
|
, windowType: 'popup'
|
|
, scope: scope
|
|
}).then(function (session) {
|
|
return session;
|
|
});
|
|
}
|
|
, session: function () {
|
|
return myOpts.session;
|
|
}
|
|
, refresh: function (session) {
|
|
return OAUTH3.implicitGrant(myOpts.directives, {
|
|
client_id: myOpts.conf.client_uri
|
|
, client_uri: myOpts.conf.client_uri
|
|
, windowType: 'background'
|
|
}).then(function (_session) {
|
|
session = _session;
|
|
return session;
|
|
});
|
|
}
|
|
, deauthorize: function () {
|
|
return OAUTH3.logout(myOpts.conf.provider_uri, {
|
|
client_id: myOpts.conf.client_uri
|
|
, client_uri: myOpts.conf.client_uri
|
|
});
|
|
}
|
|
, switchUser: function () {
|
|
// should open dialog with user selection dialog
|
|
}
|
|
}
|
|
}
|
|
|
|
window.navigator.auth = {
|
|
getUserAuthenticator: function (opts) {
|
|
var conf = {};
|
|
var directives;
|
|
var session;
|
|
|
|
opts = opts || {};
|
|
conf.client_uri = opts.client_uri || OAUTH3.clientUri(opts.location || window.location);
|
|
|
|
return OAUTH3.issuer({ broker: opts.issuer_uri || 'https://new.oauth3.org' }).then(function (issuer) {
|
|
conf.issuer_uri = issuer;
|
|
conf.provider_uri = issuer;
|
|
|
|
return OAUTH3.directives(conf.provider_uri, {
|
|
client_id: conf.client_uri
|
|
, client_uri: conf.client_uri
|
|
}).then(function (_directives) {
|
|
directives = _directives;
|
|
var myOpts = {
|
|
directives: directives
|
|
, conf: conf
|
|
};
|
|
|
|
return OAUTH3.implicitGrant(directives, {
|
|
client_id: conf.client_uri
|
|
, client_uri: conf.client_uri
|
|
, windowType: 'background'
|
|
}).then(function (_session) {
|
|
session = _session;
|
|
myOpts.session = session;
|
|
return create(myOpts);
|
|
}, function (err) {
|
|
console.error('[DEBUG] implicitGrant err:');
|
|
console.error(err);
|
|
return create(myOpts);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
};
|
|
|
|
}());
|