WIP create new zone
This commit is contained in:
		
							parent
							
								
									ae1720bed3
								
							
						
					
					
						commit
						d5d1cf5782
					
				
							
								
								
									
										11
									
								
								lib/httpd.js
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								lib/httpd.js
									
									
									
									
									
								
							@ -19,16 +19,7 @@ module.exports.create = function (cli, engine/*, dnsd*/) {
 | 
				
			|||||||
  if (!subparts[1]) {
 | 
					  if (!subparts[1]) {
 | 
				
			||||||
    subparts = [ 'root', 'localhost' ];
 | 
					    subparts = [ 'root', 'localhost' ];
 | 
				
			||||||
    // TODO generate new random key and store it
 | 
					    // TODO generate new random key and store it
 | 
				
			||||||
    jwk = {
 | 
					    jwk = cli.privkey || require('../samples/privkey.js');
 | 
				
			||||||
      //"kid": "thumbnail(pubkey)",
 | 
					 | 
				
			||||||
      "kty": "EC",
 | 
					 | 
				
			||||||
      "d": "GRIT-yJVlhAsgIChbNanxv41iCxbZszbHHgK8kbZovs",
 | 
					 | 
				
			||||||
      "use": "sig",
 | 
					 | 
				
			||||||
      "crv": "P-256",
 | 
					 | 
				
			||||||
      "x": "ogbK2nP6SiEIIp4w8oXBn3dcs6kljFfTbgZYG591tUU",
 | 
					 | 
				
			||||||
      "y": "sB0AekMYwpvbQfAoW-2LlEWdapNhxynfj1zBtWpE9lo",
 | 
					 | 
				
			||||||
      "alg": "ES256"
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    jwt = require('jsonwebtoken');
 | 
					    jwt = require('jsonwebtoken');
 | 
				
			||||||
    privpem = require('jwk-to-pem')(jwk, { private: true });
 | 
					    privpem = require('jwk-to-pem')(jwk, { private: true });
 | 
				
			||||||
    pubpem = require('jwk-to-pem')(jwk, { private: false });
 | 
					    pubpem = require('jwk-to-pem')(jwk, { private: false });
 | 
				
			||||||
 | 
				
			|||||||
@ -27,11 +27,49 @@
 | 
				
			|||||||
      <li class="js-peer-name">peer-name</li>
 | 
					      <li class="js-peer-name">peer-name</li>
 | 
				
			||||||
    </ul>
 | 
					    </ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <div>
 | 
				
			||||||
    <h3>Zones:</h3>
 | 
					    <h3>Zones:</h3>
 | 
				
			||||||
    <button type="button" class="js-zone-new">new</button>
 | 
					    <form class="js-zone-form-create">
 | 
				
			||||||
 | 
					      <input type="text" class="js-zone-form-name" placeholder="ex: example.com" />
 | 
				
			||||||
 | 
					      <button type="button" class="js-zone-new">Create Zone</button>
 | 
				
			||||||
 | 
					    </form>
 | 
				
			||||||
    <ul class="js-zone-tpl">
 | 
					    <ul class="js-zone-tpl">
 | 
				
			||||||
      <li><button type="button" class="js-zone-name">zone-name</button></li>
 | 
					      <li class="js-zone">
 | 
				
			||||||
 | 
					        <span class="js-zone-name">example.com</span>
 | 
				
			||||||
 | 
					        <button type="button" class="js-zone-view">view</button>
 | 
				
			||||||
 | 
					        <button type="button" class="js-zone-edit">edit</button>
 | 
				
			||||||
 | 
					        <button type="button" class="js-zone-destroy">X</button>
 | 
				
			||||||
 | 
					      </li>
 | 
				
			||||||
    </ul>
 | 
					    </ul>
 | 
				
			||||||
 | 
					    <div class="js-zone-form-tpl">
 | 
				
			||||||
 | 
					      <form class="js-zone-form-soa">
 | 
				
			||||||
 | 
					        <input type="hidden" class="js-record-id" />
 | 
				
			||||||
 | 
					        <span class="js-record-type">SOA</span>
 | 
				
			||||||
 | 
					        <input type="text" class="js-record-name" placeholder="[zone name] example.com" disabled>
 | 
				
			||||||
 | 
					        <input type="text" class="js-recordx-primary" placeholder="[primary] ns{{x}}.example.com" disabled>
 | 
				
			||||||
 | 
					        <input type="text" class="js-record-admin" placeholder="[admin] admin.example.com">
 | 
				
			||||||
 | 
					        <input type="text" class="js-record-expiration" placeholder="[expire] 2419200 (how long to rely on non-primary)">
 | 
				
			||||||
 | 
					        <input type="text" class="js-record-minimum" placeholder="[minimum nxdomain] 5">
 | 
				
			||||||
 | 
					        <input type="text" class="js-recordx-serial" placeholder="[serial] YYYYMMDDxx" disabled>
 | 
				
			||||||
 | 
					        <input type="text" class="js-record-retry" placeholder="[retry] 1800 (how quickly to retry on failed update)">
 | 
				
			||||||
 | 
					        <input type="text" class="js-record-refresh" placeholder="[retry] 7200 (how often to check for updates)">
 | 
				
			||||||
 | 
					        <input type="text" class="js-record-ttl" placeholder="[default record ttl] 86400">
 | 
				
			||||||
 | 
					      </form>
 | 
				
			||||||
 | 
					      <div class="js-zone-form-vns-tpl">
 | 
				
			||||||
 | 
					        <form class="js-zone-form-vns">
 | 
				
			||||||
 | 
					          <input type="hidden" class="js-record-id" />
 | 
				
			||||||
 | 
					          <span class="js-record-type">Vanity Nameservers</span>
 | 
				
			||||||
 | 
					          <input type="text" class="js-record-host" placeholder="nsx">.<span class="js-record-zone">example.com</span>
 | 
				
			||||||
 | 
					          <input type="text" class="js-record-address" placeholder="aname, ipv4, or ipv6 address">
 | 
				
			||||||
 | 
					          <input type="text" class="js-record-ttl" placeholder="86400">
 | 
				
			||||||
 | 
					          <!--
 | 
				
			||||||
 | 
					          <button type="button" class="js-record-remove">-</button>
 | 
				
			||||||
 | 
					          <button type="button" class="js-record-add">+</button>
 | 
				
			||||||
 | 
					          -->
 | 
				
			||||||
 | 
					        </form>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <button type="button" class="js-zone-save">Save Zone</button>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <h3>Records:</h3>
 | 
					    <h3>Records:</h3>
 | 
				
			||||||
    <ul class="js-record-tpl">
 | 
					    <ul class="js-record-tpl">
 | 
				
			||||||
@ -130,7 +168,7 @@
 | 
				
			|||||||
    <select class="js-record-form-type">
 | 
					    <select class="js-record-form-type">
 | 
				
			||||||
      <option value="" selected disabled>Record Type</option>
 | 
					      <option value="" selected disabled>Record Type</option>
 | 
				
			||||||
      <option value="SOA" disabled>SOA</option>
 | 
					      <option value="SOA" disabled>SOA</option>
 | 
				
			||||||
      <option value="NS">NS</option>
 | 
					      <option value="NS">NS (delegation)</option>
 | 
				
			||||||
      <option value="A">A</option>
 | 
					      <option value="A">A</option>
 | 
				
			||||||
      <option value="AAAA">AAAA</option>
 | 
					      <option value="AAAA">AAAA</option>
 | 
				
			||||||
      <option value="ANAME">ANAME</option>
 | 
					      <option value="ANAME">ANAME</option>
 | 
				
			||||||
@ -142,14 +180,14 @@
 | 
				
			|||||||
      <option value="TXT">TXT</option>
 | 
					      <option value="TXT">TXT</option>
 | 
				
			||||||
      <option value="typeX">typeX</option>
 | 
					      <option value="typeX">typeX</option>
 | 
				
			||||||
    </select>
 | 
					    </select>
 | 
				
			||||||
    <button type="button" class="js-record-form-new">new</button>
 | 
					    <button type="button" class="js-record-form-new">Create Record</button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <div class="js-record-form-tpl">
 | 
					    <div class="js-record-form-tpl">
 | 
				
			||||||
      <form class="js-record-form-soa">
 | 
					      <form class="js-record-form-soa">
 | 
				
			||||||
        <input type="hidden" class="js-record-id" />
 | 
					        <input type="hidden" class="js-record-id" />
 | 
				
			||||||
        <span class="js-record-type">SOA</span>
 | 
					        <span class="js-record-type">SOA</span>
 | 
				
			||||||
        <input type="text" class="js-record-name">
 | 
					        <input type="text" class="js-record-name">
 | 
				
			||||||
        <input type="text" class="js-record-primary">
 | 
					        <input type="text" class="js-recordx-primary" placeholder="ns{{rnd}}.example.com" disabled>
 | 
				
			||||||
        <input type="text" class="js-record-admin">
 | 
					        <input type="text" class="js-record-admin">
 | 
				
			||||||
        <input type="text" class="js-record-expiration">
 | 
					        <input type="text" class="js-record-expiration">
 | 
				
			||||||
        <input type="text" class="js-record-minimum">
 | 
					        <input type="text" class="js-record-minimum">
 | 
				
			||||||
 | 
				
			|||||||
@ -86,7 +86,8 @@
 | 
				
			|||||||
        if (!tpls.peer) {
 | 
					        if (!tpls.peer) {
 | 
				
			||||||
          tpls.peer = $qs('.js-peer-tpl').innerHTML;
 | 
					          tpls.peer = $qs('.js-peer-tpl').innerHTML;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        data.peers.forEach(function (peer) {
 | 
					        cache.peers = data.peers;
 | 
				
			||||||
 | 
					        cache.peers.forEach(function (peer) {
 | 
				
			||||||
          el = document.createElement('div');
 | 
					          el = document.createElement('div');
 | 
				
			||||||
          el.innerHTML = tpls.peer;
 | 
					          el.innerHTML = tpls.peer;
 | 
				
			||||||
          console.log(el);
 | 
					          console.log(el);
 | 
				
			||||||
@ -117,10 +118,10 @@
 | 
				
			|||||||
          el = document.createElement('div');
 | 
					          el = document.createElement('div');
 | 
				
			||||||
          el.innerHTML = tpls.zone;
 | 
					          el.innerHTML = tpls.zone;
 | 
				
			||||||
          console.log(el);
 | 
					          console.log(el);
 | 
				
			||||||
          console.log($qs('.js-zone-name', el));
 | 
					          console.log($qs('.js-zone', el));
 | 
				
			||||||
          $qs('.js-zone-name', el).innerText = zone.name;
 | 
					          $qs('.js-zone-name', el).innerText = zone.name;
 | 
				
			||||||
          $qs('.js-zone-name', el).dataset.id = zone.id;
 | 
					          $qs('.js-zone', el).dataset.id = zone.id;
 | 
				
			||||||
          $qs('.js-zone-name', el).dataset.name = zone.name;
 | 
					          $qs('.js-zone', el).dataset.name = zone.name;
 | 
				
			||||||
          console.log(el.innerHTML);
 | 
					          console.log(el.innerHTML);
 | 
				
			||||||
          tpl += el.innerHTML;
 | 
					          tpl += el.innerHTML;
 | 
				
			||||||
          console.log(tpl);
 | 
					          console.log(tpl);
 | 
				
			||||||
@ -219,15 +220,80 @@
 | 
				
			|||||||
      $qs('a.js-name').dataset.href.replace(/:name/, ev.target.value || ':name');
 | 
					      $qs('a.js-name').dataset.href.replace(/:name/, ev.target.value || ':name');
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  $on('button.js-zone-name', 'click', function (ev) {
 | 
					  $on('button.js-zone-view', 'click', function (ev) {
 | 
				
			||||||
    var zone = ev.target.dataset.name;
 | 
					    var zone = ev.target.parentElement.dataset.name;
 | 
				
			||||||
    myZone = zone;
 | 
					    myZone = zone;
 | 
				
			||||||
    return fetchRecords(zone);/*.then(function () {
 | 
					    return fetchRecords(zone);/*.then(function () {
 | 
				
			||||||
    });*/
 | 
					    });*/
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					  function openZoneForm() {
 | 
				
			||||||
 | 
					    var d = new Date();
 | 
				
			||||||
 | 
					    myZone = $qs('.js-zone-form-name').value;
 | 
				
			||||||
 | 
					    $qs('.js-zone-form-tpl').innerHTML = tpls.newZone;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    cache.peers.forEach(function () {
 | 
				
			||||||
 | 
					      $qs('.js-zone-form-vns-tpl').innerHTML += tpls.newNs;
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    cache.peers.forEach(function (p, i) {
 | 
				
			||||||
 | 
					      var $vns = $qsa('.js-zone-form-tpl .js-zone-form-vns')[i];
 | 
				
			||||||
 | 
					      $qs('.js-record-host', $vns).value = 'ns' + (i + 1);
 | 
				
			||||||
 | 
					      //$qs('.js-record-name', $vns).value = 'ns' + (i + 1) + '.' + myZone;
 | 
				
			||||||
 | 
					      $qs('.js-record-zone', $vns).value = myZone;
 | 
				
			||||||
 | 
					      $qs('.js-record-ttl', $vns).value = 7200;
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $qs('.js-zone-form-tpl .js-record-name').value = myZone;
 | 
				
			||||||
 | 
					    $qs('.js-zone-form-tpl .js-recordx-primary').value = 'nsx.' + myZone;
 | 
				
			||||||
 | 
					    $qs('.js-zone-form-tpl .js-record-admin').value = 'admin.' + myZone;
 | 
				
			||||||
 | 
					    $qs('.js-zone-form-tpl .js-record-expiration').value = 2419200; // 4 weeks
 | 
				
			||||||
 | 
					    $qs('.js-zone-form-tpl .js-record-minimum').value = 5;
 | 
				
			||||||
 | 
					    $qs('.js-zone-form-tpl .js-recordx-serial').value = d.getFullYear()
 | 
				
			||||||
 | 
					      + '' + (d.getMonth() + 1)
 | 
				
			||||||
 | 
					      + '' + d.getDate()
 | 
				
			||||||
 | 
					      + '' + (Math.round(Math.random() * 99))
 | 
				
			||||||
 | 
					      ;
 | 
				
			||||||
 | 
					    $qs('.js-zone-form-tpl .js-record-retry').value = 1800;
 | 
				
			||||||
 | 
					    $qs('.js-zone-form-tpl .js-record-refresh').value = 7200;
 | 
				
			||||||
 | 
					    $qs('.js-zone-form-tpl .js-record-ttl').value = 300;
 | 
				
			||||||
 | 
					    console.log('val:', $qs('.js-zone-form-tpl .js-record-ttl').value);
 | 
				
			||||||
 | 
					    console.log('x', $qs('.js-zone-form-tpl'));
 | 
				
			||||||
 | 
					    console.log('val:', $qs('.js-zone-form-tpl .js-record-ttl').value);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  $on('form.js-zone-form-create', 'submit', function (ev) {
 | 
				
			||||||
 | 
					    ev.preventDefault();
 | 
				
			||||||
 | 
					    ev.stopPropagation();
 | 
				
			||||||
 | 
					    console.log('form submit enter');
 | 
				
			||||||
 | 
					    openZoneForm();
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
  $on('button.js-zone-new', 'click', function (/*ev*/) {
 | 
					  $on('button.js-zone-new', 'click', function (/*ev*/) {
 | 
				
			||||||
    $qs('select.js-record-form-type').value = 'SOA';
 | 
					    //$qs('select.js-record-form-type').value = 'SOA';
 | 
				
			||||||
    $qs('select.js-record-form-type').dispatchEvent(new Event('change', { bubbles: true }));
 | 
					    //$qs('select.js-record-form-type').dispatchEvent(new Event('change', { bubbles: true }));
 | 
				
			||||||
 | 
					    console.log('form submit click');
 | 
				
			||||||
 | 
					    openZoneForm();
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  $on('button.js-zone-edit', 'click', function (/*ev*/) {
 | 
				
			||||||
 | 
					    openZoneForm();
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  $on('button.js-zone-save', 'click', function (/*ev*/) {
 | 
				
			||||||
 | 
					    var zone = {};
 | 
				
			||||||
 | 
					    var nss = [];
 | 
				
			||||||
 | 
					    [ 'id', 'name', 'admin', 'expiration', 'minimum', 'retry', 'refresh', 'ttl' ].forEach(function (key) {
 | 
				
			||||||
 | 
					      zone[key] = $qs('.js-zone-form-tpl .js-record-' + key).value;
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    $qsa('.js-zone-form-tpl .js-zone-form-vns').forEach(function ($el) {
 | 
				
			||||||
 | 
					      console.log('$el:');
 | 
				
			||||||
 | 
					      console.log($el);
 | 
				
			||||||
 | 
					      var ns = {};
 | 
				
			||||||
 | 
					      [ 'id', 'host'/*, 'name'*/, 'ttl', 'address' ].forEach(function (key) {
 | 
				
			||||||
 | 
					        ns[key] = $qs('.js-record-' + key, $el).value;
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      nss.push(ns);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    console.log('zone:');
 | 
				
			||||||
 | 
					    console.log(zone);
 | 
				
			||||||
 | 
					    console.log('nss:');
 | 
				
			||||||
 | 
					    console.log(nss);
 | 
				
			||||||
 | 
					    $qs('.js-zone-form-tpl').innerHTML = '';
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  $on('select.js-record-form-type', 'change', function (ev) {
 | 
					  $on('select.js-record-form-type', 'change', function (ev) {
 | 
				
			||||||
@ -251,6 +317,10 @@
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    $tpl = $qs('.js-record-form-tpl');
 | 
					    $tpl = $qs('.js-record-form-tpl');
 | 
				
			||||||
    $tpl.innerHTML = tpls.formsMap[type] || '';
 | 
					    $tpl.innerHTML = tpls.formsMap[type] || '';
 | 
				
			||||||
 | 
					    if (!tpls.formsMap[type]) {
 | 
				
			||||||
 | 
					      console.warn("no tpl for type '" + type + "'");
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    $qs('.js-record-type', $tpl).innerText = type;
 | 
					    $qs('.js-record-type', $tpl).innerText = type;
 | 
				
			||||||
    $qs('.js-record-zone', $tpl).innerText = myZone;
 | 
					    $qs('.js-record-zone', $tpl).innerText = myZone;
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
@ -429,5 +499,9 @@
 | 
				
			|||||||
  $qs('select.js-record-form-type').value = '';
 | 
					  $qs('select.js-record-form-type').value = '';
 | 
				
			||||||
  // Create a new 'change' event and dispatch it.
 | 
					  // Create a new 'change' event and dispatch it.
 | 
				
			||||||
  $qs('select.js-record-form-type').dispatchEvent(new Event('change', { bubbles: true }));
 | 
					  $qs('select.js-record-form-type').dispatchEvent(new Event('change', { bubbles: true }));
 | 
				
			||||||
 | 
					  tpls.newNs = $qs('.js-zone-form-tpl .js-zone-form-vns-tpl').innerHTML;
 | 
				
			||||||
 | 
					  $qs('.js-zone-form-tpl .js-zone-form-vns-tpl').innerHTML = '';
 | 
				
			||||||
 | 
					  tpls.newZone = $qs('.js-zone-form-tpl').innerHTML;
 | 
				
			||||||
 | 
					  $qs('.js-zone-form-tpl').innerHTML = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}());
 | 
					}());
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user