From b2ced1a4927e097ee592e67aaa33164017f8315d Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Wed, 10 Jan 2018 14:54:08 -0700 Subject: [PATCH] WIP show ADNS data --- lib/httpd.js | 54 +++++++++++++++++++++++++++++++++++++++---- lib/public/index.html | 23 +++++++++++++++--- lib/public/js/app.js | 28 ++++++++++++++++++++++ lib/store.json.js | 9 ++++++++ 4 files changed, 107 insertions(+), 7 deletions(-) create mode 100644 lib/public/js/app.js diff --git a/lib/httpd.js b/lib/httpd.js index 43d3d30..3b53ee4 100644 --- a/lib/httpd.js +++ b/lib/httpd.js @@ -1,6 +1,6 @@ 'use strict'; -module.exports.create = function (cli, engine, dnsd) { +module.exports.create = function (cli, engine/*, dnsd*/) { function runHttp() { var path = require('path'); @@ -10,16 +10,62 @@ module.exports.create = function (cli, engine, dnsd) { app.use('/', express.static(path.join(__dirname, 'public'))); app.get('/api/peers', function (req, res) { - res.send({ nameservers: [] }); + engine.peers.all(function (err, peers) { + res.send({ peers: peers }); + }); }); app.get('/api/zones', function (req, res) { engine.zones.all(function (err, zones) { res.send({ zones: zones }); }); }); - app.get('/api/records/:zone', function (req, res) { + function mapRecord(r) { + return { + id: r.id + , zone: r.zone + , name: r.name + , tld: r.tld + , type: r.type + , class: r.class + , ttl: r.ttl + , data: r.data + , address: r.address + , exchange: r.exchange + , priority: r.priority + , value: r.value + , aname: r.aname + , flag: r.flag + , tag: r.tag + , weight: r.weight + , port: r.port + , target: r.target + }; + } + app.get('/api/zones/:zone/records', function (req, res) { engine.records.all(function (err, records) { - res.send({ records: records }); + res.send({ records: records.filter(function (r) { + return r.zone === req.params.zone; + }).map(mapRecord) }); + }); + }); + app.get('/api/records', function (req, res) { + engine.records.all(function (err, records) { + res.send({ records: records.map(mapRecord) }); + }); + }); + app.get('/api/records/:name', function (req, res) { + engine.records.all(function (err, records) { + res.send({ records: records.filter(function (r) { + if (r.name === req.params.name) { + return true; + } + + var parts = req.params.name.split('.'); + parts.shift(); + if ('*.' + parts.join('.') === r.name) { + return true; + } + }).map(mapRecord) }); }); }); diff --git a/lib/public/index.html b/lib/public/index.html index b2f74f5..12b7a3e 100644 --- a/lib/public/index.html +++ b/lib/public/index.html @@ -1,3 +1,20 @@ -

/api/peers

-

/api/zones

-

/api/records/:zone

+ + + + ADNS + + +

/api/peers

+

/api/zones

+

/api/zones/:zone/records +

+

/api/records

+

/api/records/:name +

+ + + + diff --git a/lib/public/js/app.js b/lib/public/js/app.js new file mode 100644 index 0000000..16e76d1 --- /dev/null +++ b/lib/public/js/app.js @@ -0,0 +1,28 @@ +(function () { +'use strict'; + + function $qs(qs) { + return document.querySelector(qs); + } + + document.body.addEventListener('keyup', function (ev) { + console.log('ev.target.tagName:'); + console.log(ev.target.tagName); + console.log('/\\bjs-zone\\b/.test(ev.target.className):'); + console.log(/\bjs-zone\b/.test(ev.target.className)); + if ('INPUT' === ev.target.tagName && /\bjs-zone\b/.test(ev.target.className)) { + $qs('code.js-zone').innerHTML = ev.target.value || ':zone'; + // $qs('a.js-zone').setAttribute('data-href', ...) + $qs('a.js-zone').href = + $qs('a.js-zone').dataset.href.replace(/:zone/, ev.target.value || ':zone'); + return; + } + if ('INPUT' === ev.target.tagName && /\bjs-name\b/.test(ev.target.className)) { + $qs('code.js-name').innerHTML = ev.target.value || ':name'; + $qs('a.js-name').href = + $qs('a.js-name').dataset.href.replace(/:name/, ev.target.value || ':name'); + return; + } + }); + +}()); diff --git a/lib/store.json.js b/lib/store.json.js index 21adb23..cb859d6 100644 --- a/lib/store.json.js +++ b/lib/store.json.js @@ -7,6 +7,15 @@ module.exports.create = function (opts) { var db = require(opts.filepath); engine.primaryNameservers = db.primaryNameservers; + engine.peers = { + all: function (cb) { + process.nextTick(function () { + cb(null, db.primaryNameservers.map(function (ns) { + return { name: ns }; + })); + }); + } + }; engine.zones = { all: function (cb) { process.nextTick(function () {