From 6f6d07e670b74b82f1579866294f9a3222471c7b Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Wed, 29 Nov 2017 05:13:49 +0000 Subject: [PATCH] add navigator.auth api --- navigator.auth.js | 96 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 navigator.auth.js diff --git a/navigator.auth.js b/navigator.auth.js new file mode 100644 index 0000000..dd808ba --- /dev/null +++ b/navigator.auth.js @@ -0,0 +1,96 @@ +(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); + }); + }); + }); + } +}; + +}());