let express = require("express"); let ipaddr = require("ipaddr.js"); let db = require("../libs/Database").instance(); let router = express.Router(); const IP_TYPES = ["ipv4", "ipv6"]; function combineToList(a, b) { return a + "\n" + b; } function toList(array) { return array.reduce(combineToList, "").trim(); } function testIP(req, res, next) { let addr = ipaddr.parse(req.ip); if (!IP_TYPES.includes(addr.kind())) return res.status(400).send("Invalid ip address"); req.params.addr = addr; next(); } router.use((req, res, next) => { res.type('text/plain'); next(); }); router.get("/", (req, res) => { db.q.select("fqdn").from("addresses").list((e, d) => { res.send(toList(d)) }); }); router.get("/:fqdn", (req, res) => { db.q.select(IP_TYPES).from("addresses").filter("fqdn", req.params.fqdn).first((e, d) => { if (e) return res.status(400).send("Error"); if (!d) return res.status(404).send("Unknown FQDN"); res.send(d.ipv4 ? (d.ipv6 ? d.ipv4 + "\n" + d.ipv6 : d.ipv4) : (d.ipv6 ? d.ipv6 : "")); }); }); router.get("/:fqdn/:code", testIP, (req, res) => { let addr = req.params.addr; db.query("UPDATE addresses SET " + addr.kind() + " = ? WHERE fqdn = ? AND code = ?", [addr.toString(), req.params.fqdn, req.params.code], (e, d) => { if (e) return res.status(400).send("Error"); res.send(addr.toString()); }); }); module.exports = router;