118 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<html>
 | 
						|
  <head>
 | 
						|
    <title>Telebit Account</title>
 | 
						|
  </head>
 | 
						|
  <body>
 | 
						|
    <h1>Login</h1>
 | 
						|
    <form class="js-auth-form">
 | 
						|
      <input class="js-auth-subject" placeholder="email" type="email"/>
 | 
						|
      <button class="js-auth-submit" type="submit">Login</button>
 | 
						|
    </form>
 | 
						|
 | 
						|
    <script src="assets/oauth3.org/oauth3.core.js"></script>
 | 
						|
    <script>
 | 
						|
      (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() {
 | 
						|
              window.alert("TODO: show authorized devices, domains, and connectivity information");
 | 
						|
            }
 | 
						|
 | 
						|
            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 (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');
 | 
						|
      }());
 | 
						|
    </script>
 | 
						|
  </body>
 | 
						|
</html>
 |