From 8fe1f4d82a2885b25971425c703948049f5d0007 Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Fri, 10 Aug 2018 07:44:42 +0000 Subject: [PATCH] move js to own file --- lib/extensions/admin/account.html | 115 +---------------------------- lib/extensions/admin/js/account.js | 112 ++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+), 114 deletions(-) create mode 100644 lib/extensions/admin/js/account.js diff --git a/lib/extensions/admin/account.html b/lib/extensions/admin/account.html index 2f3ef7e..a6fc728 100644 --- a/lib/extensions/admin/account.html +++ b/lib/extensions/admin/account.html @@ -21,119 +21,6 @@ - + diff --git a/lib/extensions/admin/js/account.js b/lib/extensions/admin/js/account.js new file mode 100644 index 0000000..b86b12a --- /dev/null +++ b/lib/extensions/admin/js/account.js @@ -0,0 +1,112 @@ +(function () { + 'use strict'; + var OAUTH3 = window.OAUTH3; + var oauth3 = OAUTH3.create({ + host: window.location.host + , pathname: window.location.pathname.replace(/\/[^\/]*$/, '/') + }); + var $ = function () { return document.querySelector.apply(document, arguments); } + + function onChangeProvider(providerUri) { + // example https://oauth3.org + return oauth3.setIdentityProvider(providerUri); + } + + // This opens up the login window for the specified provider + // + function onClickLogin(ev) { + ev.preventDefault(); + ev.stopPropagation(); + + var email = $('.js-auth-subject').value; + + // TODO check subject for provider viability + return oauth3.authenticate({ + subject: email + , scope: 'email@oauth3.org' + }).then(function (session) { + + console.info('Authentication was Successful:'); + console.log(session); + + // You can use the PPID (or preferably a hash of it) as the login for your app + // (it securely functions as both username and password which is known only by your app) + // If you use a hash of it as an ID, you can also use the PPID itself as a decryption key + // + console.info('Secure PPID (aka subject):', session.token.sub); + + function listStuff(data) { + //window.alert("TODO: show authorized devices, domains, and connectivity information"); + var app6 = new Vue({ + el: '.v-app', + data: { + domains: data.domains + } + }); + } + + return oauth3.request({ + url: 'https://api.oauth3.org/api/issuer@oauth3.org/jwks/:sub/:kid.json' + .replace(/:sub/g, session.token.sub) + .replace(/:kid/g, session.token.iss) + , session: session + }).then(function (resp) { + console.info("Public Key:"); + console.log(resp.data); + + return oauth3.request({ + url: 'https://api.oauth3.org/api/issuer@oauth3.org/acl/profile' + , session: session + }).then(function (resp) { + + console.info("Inspect Token:"); + console.log(resp.data); + + return oauth3.request({ + url: 'https://api.' + location.hostname + '/api/telebit.cloud/account' + , session: session + }).then(function (resp) { + + console.info("Telebit Account:"); + console.log(resp.data); + + if (resp.data && resp.data.domains) { + listStuff(resp.data); + return; + } + + if (1 === resp.data.accounts.length) { + listStuff(resp); + } else if (0 === resp.data.accounts.length) { + return oauth3.request({ + url: 'https://api.' + location.hostname + 'api/telebit.cloud/account' + , method: 'POST' + , session: session + , body: { + email: email + } + }).then(function (resp) { + listStuff(resp); + }); + } if (resp.data.accounts.length > 2) { + window.alert("Multiple accounts."); + } else { + window.alert("Bad response."); + } + + }); + + + }); + + }); + + }, function (err) { + console.error('Authentication Failed:'); + console.log(err); + }); + } + + $('body form.js-auth-form').addEventListener('submit', onClickLogin); + onChangeProvider('oauth3.org'); +}());