WIP add validation
This commit is contained in:
		
							parent
							
								
									e29085b8c2
								
							
						
					
					
						commit
						75a955d063
					
				@ -1 +1 @@
 | 
			
		||||
Subproject commit 9a7aa3261f2ad97ebd436c8b1e86d168cf93023d
 | 
			
		||||
Subproject commit 5f68ea19e22d05bebc6a289da0a89a714442e6d2
 | 
			
		||||
@ -58,11 +58,6 @@ app.controller('websiteCtrl', [
 | 
			
		||||
    });
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  Auth.api('domains.list', {}).then(function (els) {
 | 
			
		||||
    console.log('domains.list els', els);
 | 
			
		||||
    vm.domains = els;
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  vm.getDomains = function () {
 | 
			
		||||
    return Auth.oauth3.api('domains.list', {}).then(function (result) {
 | 
			
		||||
      vm.domains = result.registrations || result;
 | 
			
		||||
@ -114,9 +109,32 @@ app.controller('websiteCtrl', [
 | 
			
		||||
    vm.currentHost = record.host; // .replace(new RegExp('\\.' + vm.domain.domain.replace(/\./g, '\\.') + '$', ''));
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  vm._createWebsite = function (pkg) {
 | 
			
		||||
    return pkg.add({
 | 
			
		||||
      hostname: vm.currentHost
 | 
			
		||||
    , domain: vm.currentHost
 | 
			
		||||
    , tld: vm.domain.tld
 | 
			
		||||
    , sld: vm.domain.sld
 | 
			
		||||
    //, sub: vm.record.sub
 | 
			
		||||
    , multipart: { site: vm.currentFiles[0] }
 | 
			
		||||
    }).then(function (result) {
 | 
			
		||||
      window.alert(JSON.stringify(result));
 | 
			
		||||
    });
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  vm._isSubDomain = function (sub, domain) {
 | 
			
		||||
    return -1 === ('.' + sub).indexOf(('.' + domain));
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  vm.createWebsite = function () {
 | 
			
		||||
    var fd = new window.FormData();
 | 
			
		||||
    var pkg = Auth.oauth3.pkg('www@daplie.com');
 | 
			
		||||
    var parts;
 | 
			
		||||
    var sub;
 | 
			
		||||
    var sld;
 | 
			
		||||
    var tld;
 | 
			
		||||
 | 
			
		||||
    console.log('Auth.oauth3', Auth.oauth3);
 | 
			
		||||
 | 
			
		||||
    //vm.unlock('webpreneur');
 | 
			
		||||
    if (!vm.currentFiles || !vm.currentFiles.length) {
 | 
			
		||||
      window.alert('No files chosen.');
 | 
			
		||||
@ -131,11 +149,107 @@ app.controller('websiteCtrl', [
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    console.log('Auth.oauth3', Auth.oauth3);
 | 
			
		||||
    return pkg.add({ hostname: vm.currentHost, multipart: { site: vm.currentFiles[0] } }).then(function (result) {
 | 
			
		||||
      window.alert(JSON.stringify(result));
 | 
			
		||||
    // already validated
 | 
			
		||||
    if (vm.sites.some(function (r) {
 | 
			
		||||
      return -1 !== ('.' + vm.currentHost).indexOf(('.' + r.domain));
 | 
			
		||||
    })) {
 | 
			
		||||
      vm._createWebsite(pkg);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (vm.domain) {
 | 
			
		||||
      parts = vm.domain.domain.split('.');
 | 
			
		||||
      sld = parts.shift();
 | 
			
		||||
      tld = parts.join('.');
 | 
			
		||||
    } else {
 | 
			
		||||
      parts = vm.currentHost.split('.');
 | 
			
		||||
      // TODO get list of tlds
 | 
			
		||||
      tld = parts.pop();
 | 
			
		||||
      sld = parts.pop();
 | 
			
		||||
      sub = parts.join('.');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // We're making a request to claim a domain
 | 
			
		||||
    // (because two users could both claim a single domain)
 | 
			
		||||
    // We're claiming it at the top level (i.e. example.com)
 | 
			
		||||
    // but we could also claim it at the subdomain level (needs UI update)
 | 
			
		||||
    return pkg.request({ sld: sld, tld: tld, sub: undefined }).then(function (result) {
 | 
			
		||||
      var sess;
 | 
			
		||||
      var prom;
 | 
			
		||||
      var def;
 | 
			
		||||
      console.log('[pkg www] request domain');
 | 
			
		||||
      console.log(result);
 | 
			
		||||
 | 
			
		||||
      // can validate automatically
 | 
			
		||||
      if (vm.domain.session && vm._isSubDomain(vm.currentHost, vm.domain.domain)) {
 | 
			
		||||
        // this should always succeed
 | 
			
		||||
        Auth.sessions.some(function (session) {
 | 
			
		||||
          if (vm.domain.session === (session.token.sub + '@' + session.token.iss)) {
 | 
			
		||||
            sess = session;
 | 
			
		||||
            return session;
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        if (sess) {
 | 
			
		||||
          prom = Auth.select(sess).then(function (oauth3) {
 | 
			
		||||
            return oauth3.api('dns.set', { sld: sld, tld: tld, sub: ('' + result.data.prefix), type: 'TXT', ttl: 300, value: result.data.challenge });
 | 
			
		||||
          });
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!prom) {
 | 
			
		||||
        def = $q.defer();
 | 
			
		||||
        // must validate manually
 | 
			
		||||
        window.alert(
 | 
			
		||||
          "Please set a TXT record for '"
 | 
			
		||||
        + ('' + result.data.prefix) + '.' + sld + '.' + tld
 | 
			
		||||
        + "' with the value '" + result.data.challenge + "' and then continue."
 | 
			
		||||
        );
 | 
			
		||||
        def.resolve();
 | 
			
		||||
        prom = def.promise;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      return prom.then(function () {
 | 
			
		||||
        vm._createWebsite(pkg);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
    });
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  vm.listSites = function () {
 | 
			
		||||
    var sites = [];
 | 
			
		||||
 | 
			
		||||
    return $q.all(Auth.sessions.map(function (session) {
 | 
			
		||||
 | 
			
		||||
      console.log('[www] select');
 | 
			
		||||
      return Auth.select(session).then(function (oauth3) {
 | 
			
		||||
        console.log('[www] oauth3', oauth3._resourceProviderDirectives);
 | 
			
		||||
        var pkg = oauth3.pkg('www@daplie.com');
 | 
			
		||||
        console.log('[www] post pkg', oauth3._resourceProviderDirectives);
 | 
			
		||||
 | 
			
		||||
        return pkg.list().then(function (result) {
 | 
			
		||||
          var sites = result.data;
 | 
			
		||||
 | 
			
		||||
          if (Array.isArray(sites)) {
 | 
			
		||||
            sites = sites.concat(sites);
 | 
			
		||||
            return;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          console.error('sites is not an array');
 | 
			
		||||
          console.error(sites);
 | 
			
		||||
        }, function (err) {
 | 
			
		||||
          console.error('sites had an error');
 | 
			
		||||
          console.error(err);
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
    })).then(function () {
 | 
			
		||||
      vm.sites = sites;
 | 
			
		||||
    });
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  //vm.getDomains();
 | 
			
		||||
  Auth.api('domains.list', {}).then(function (els) {
 | 
			
		||||
    console.log('domains.list els', els);
 | 
			
		||||
    vm.domains = els;
 | 
			
		||||
  });
 | 
			
		||||
  vm.listSites();
 | 
			
		||||
}]);
 | 
			
		||||
 | 
			
		||||
@ -74,20 +74,23 @@ app.factory('Auth', [
 | 
			
		||||
 | 
			
		||||
      var name = session.token.sub + '@' + session.token.iss;
 | 
			
		||||
      var promise;
 | 
			
		||||
      var sess;
 | 
			
		||||
 | 
			
		||||
      if (!Auth._oauth3s[name]) {
 | 
			
		||||
        Auth._oauth3s[name] = Oauth3.create(window.location);
 | 
			
		||||
        promise = Auth._oauth3s[name].init({
 | 
			
		||||
        sess = Oauth3.create(window.location);
 | 
			
		||||
        promise = Auth._oauth3s[name] = sess.init({
 | 
			
		||||
          location: location
 | 
			
		||||
        , issuer: session.issuer
 | 
			
		||||
        , audience: session.audience || session.issuer
 | 
			
		||||
        , session: session
 | 
			
		||||
        }).then(function () {
 | 
			
		||||
          console.log('a Auth._oauth3s[name]', Auth._oauth3s[name]);
 | 
			
		||||
          return Auth._oauth3s[name];
 | 
			
		||||
          console.log('_resourceProviderDirectives', Auth._oauth3s[name]._resourceProviderDirectives);
 | 
			
		||||
          return sess;
 | 
			
		||||
        });
 | 
			
		||||
      } else {
 | 
			
		||||
        console.log('b Auth._oauth3s[name]', Auth._oauth3s[name]);
 | 
			
		||||
        console.log('_resourceProviderDirectives', Auth._oauth3s[name]._resourceProviderDirectives);
 | 
			
		||||
        promise = Oauth3.PromiseA.resolve(Auth._oauth3s[name]);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -11,11 +11,44 @@ OAUTH3._pkgs['www@daplie.com'] = {
 | 
			
		||||
    return OAUTH3.request({
 | 
			
		||||
      method: 'POST'
 | 
			
		||||
    , url: OAUTH3.url.normalize(providerUri)
 | 
			
		||||
        + '/api/www@daplie.com/acl/www/' + opts.hostname
 | 
			
		||||
        + '/api/www@daplie.com/acl/add/' + opts.hostname
 | 
			
		||||
    , session: session
 | 
			
		||||
    , multipart: opts.multipart // special property to be figured out by browser request code
 | 
			
		||||
    }).then(function (res) {
 | 
			
		||||
      return res;
 | 
			
		||||
    }).then(function (result) {
 | 
			
		||||
      return result;
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
, list: function (opts) {
 | 
			
		||||
    var providerUri = opts.audience;
 | 
			
		||||
    var session = opts.session;
 | 
			
		||||
 | 
			
		||||
    return OAUTH3.request({
 | 
			
		||||
      method: 'GET'
 | 
			
		||||
    , url: OAUTH3.url.normalize(providerUri)
 | 
			
		||||
        + '/api/www@daplie.com/acl/list/'
 | 
			
		||||
    , session: session
 | 
			
		||||
    }).then(function (result) {
 | 
			
		||||
      result.data = result.data && result.data.sites || result.data;
 | 
			
		||||
 | 
			
		||||
      return result;
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
, request: function (opts) {
 | 
			
		||||
    var providerUri = opts.audience;
 | 
			
		||||
    var session = opts.session;
 | 
			
		||||
 | 
			
		||||
    return OAUTH3.request({
 | 
			
		||||
      method: 'POST'
 | 
			
		||||
    , url: OAUTH3.url.normalize(providerUri)
 | 
			
		||||
        + '/api/www@daplie.com/acl/request/:tld/:sld/:sub'
 | 
			
		||||
            .replace(/(:tld)/, opts.tld)
 | 
			
		||||
            .replace(/(:sld)/, opts.sld)
 | 
			
		||||
            .replace(/(:sub)/, opts.sub || '')
 | 
			
		||||
    , session: session
 | 
			
		||||
    }).then(function (result) {
 | 
			
		||||
      // result.data
 | 
			
		||||
 | 
			
		||||
      return result;
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -65,25 +65,11 @@
 | 
			
		||||
    <h1>Your Websites</h1>
 | 
			
		||||
    <table class="table">
 | 
			
		||||
      <tbody>
 | 
			
		||||
        <tr>
 | 
			
		||||
          <td><a href="new.html" target="_blank">blog.jane.smith.net</a></td>
 | 
			
		||||
          <td>Sites > blogs > blog.jane.smith.net</td>
 | 
			
		||||
          <td>jane@smith.net, jack@smith.net, friend@gmail.com</td>
 | 
			
		||||
        <tr ng-repeat="r in vm.sites">
 | 
			
		||||
          <td><a ng-href="https://{{r.domain}}" target="_blank" ng-bind="r.domain">example.com</a></td>
 | 
			
		||||
          <td ng-bind="r.path">Sites > blogs > blog.jane.smith.net</td>
 | 
			
		||||
          <td ng-bind="r.users">jane@smith.net, jack@smith.net, friend@gmail.com</td>
 | 
			
		||||
        </tr>
 | 
			
		||||
        <tr>
 | 
			
		||||
          <td><a href="new.html" target="_blank">jane.smith.com</a></td>
 | 
			
		||||
          <td>Sites > business > jane test site</td>
 | 
			
		||||
          <td>jane@smith.net</td>
 | 
			
		||||
        </tr>
 | 
			
		||||
        <tr>
 | 
			
		||||
          <td><a href="new.html" target="_blank">jane.smith.edu</a></td>
 | 
			
		||||
          <td>Documents > 2017 semester > econ class site</td>
 | 
			
		||||
          <td>jane@smith.net, teacher@college.edu</td>
 | 
			
		||||
        </tr>
 | 
			
		||||
        <!-- <tr>
 | 
			
		||||
          <td></td>
 | 
			
		||||
          <td></td>
 | 
			
		||||
        </tr> -->
 | 
			
		||||
      </tbody>
 | 
			
		||||
    </table>
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user