Compare commits

...

6 Commits

@ -6,4 +6,5 @@ module.exports = {
password: process.env.DATABASE_PASSWORD, password: process.env.DATABASE_PASSWORD,
database: process.env.DATABASE_NAME, database: process.env.DATABASE_NAME,
}, },
registerPass: process.env.REGISTER_PASS,
}; };

32
package-lock.json generated

@ -309,7 +309,7 @@
"debug": { "debug": {
"version": "2.6.9", "version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
"requires": { "requires": {
"ms": "2.0.0" "ms": "2.0.0"
}, },
@ -442,7 +442,7 @@
"express-minify": { "express-minify": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/express-minify/-/express-minify-1.0.0.tgz", "resolved": "https://registry.npmjs.org/express-minify/-/express-minify-1.0.0.tgz",
"integrity": "sha512-04/iYxB79jGeNZBBkbAW7L7FMG4Wtu78F1SayXIKiJD6MfqYnOI3DD8no7QOntgedYCdYUpj+Skg8QWR/2WnMQ==", "integrity": "sha1-KMkOy4rdX42g1dUDc5ZG+1S+VwQ=",
"requires": { "requires": {
"clean-css": "^4.1.7", "clean-css": "^4.1.7",
"on-headers": "^1.0.1", "on-headers": "^1.0.1",
@ -678,20 +678,20 @@
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
}, },
"hbs": { "hbs": {
"version": "4.0.4", "version": "4.0.5",
"resolved": "https://registry.npmjs.org/hbs/-/hbs-4.0.4.tgz", "resolved": "https://registry.npmjs.org/hbs/-/hbs-4.0.5.tgz",
"integrity": "sha512-esVlyV/V59mKkwFai5YmPRSNIWZzhqL5YMN0++ueMxyK1cCfPa5f6JiHtapPKAIVAhQR6rpGxow0troav9WMEg==", "integrity": "sha512-lzyXY0HalmVqHyhty05cLoPqxY51gNnCI6cMlXiPbrIKvB3BTJh3waQ9de86x25jX9QhU/tkAojsOO4KB6vPfg==",
"requires": { "requires": {
"handlebars": "4.0.14", "handlebars": "4.3.3",
"walk": "2.3.9" "walk": "2.3.14"
}, },
"dependencies": { "dependencies": {
"handlebars": { "handlebars": {
"version": "4.0.14", "version": "4.3.3",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.14.tgz", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.3.3.tgz",
"integrity": "sha512-E7tDoyAA8ilZIV3xDJgl18sX3M8xB9/fMw8+mfW4msLW8jlX97bAnWgT3pmaNXuvzIEgSBMnAHfuXsB2hdzfow==", "integrity": "sha512-VupOxR91xcGojfINrzMqrvlyYbBs39sXIrWa7YdaQWeBudOlvKEGvCczMfJPgnuwHE/zyH1M6J+IUP6cgDVyxg==",
"requires": { "requires": {
"async": "^2.5.0", "neo-async": "^2.6.0",
"optimist": "^0.6.1", "optimist": "^0.6.1",
"source-map": "^0.6.1", "source-map": "^0.6.1",
"uglify-js": "^3.1.4" "uglify-js": "^3.1.4"
@ -858,7 +858,7 @@
"less-middleware": { "less-middleware": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/less-middleware/-/less-middleware-3.0.1.tgz", "resolved": "https://registry.npmjs.org/less-middleware/-/less-middleware-3.0.1.tgz",
"integrity": "sha512-FCG4zGd7c/lKMWGDzzkfU9Lcndfjc4TcSnuRwUtJ4E+NxPMuDGe7lJA1rOn+SI9x2lak+s4b6sQkcPa45eqKiw==", "integrity": "sha1-DM61JlZ1Q/Z7FQx/pXmLYpFpyo4=",
"requires": { "requires": {
"less": "~3.0.4", "less": "~3.0.4",
"mkdirp": "~0.5.1", "mkdirp": "~0.5.1",
@ -965,7 +965,7 @@
}, },
"mkdirp": { "mkdirp": {
"version": "0.5.1", "version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "0.0.8"
@ -4683,9 +4683,9 @@
} }
}, },
"walk": { "walk": {
"version": "2.3.9", "version": "2.3.14",
"resolved": "https://registry.npmjs.org/walk/-/walk-2.3.9.tgz", "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.14.tgz",
"integrity": "sha1-MbTbZnjyrgHDnqn7hyWpAx5Vins=", "integrity": "sha512-5skcWAUmySj6hkBdH6B6+3ddMjVQYH5Qy9QGbPmN8kVmLteXk+yVXg+yfk1nbX30EYakahLrr8iPcCxJQSCBeg==",
"requires": { "requires": {
"foreachasync": "^3.0.0" "foreachasync": "^3.0.0"
} }

@ -19,7 +19,7 @@
"express-session": "^1.15.6", "express-session": "^1.15.6",
"express-validator": "^5.3.0", "express-validator": "^5.3.0",
"handlebars": "^4.1.0", "handlebars": "^4.1.0",
"hbs": "^4.0.3", "hbs": "^4.0.5",
"http-errors": "~1.6.2", "http-errors": "~1.6.2",
"ical-generator": "^1.0.4", "ical-generator": "^1.0.4",
"ipaddr.js": "^1.8.1", "ipaddr.js": "^1.8.1",

@ -1,9 +1,12 @@
let express = require("express"); let express = require("express");
let ipaddr = require("ipaddr.js"); let ipaddr = require("ipaddr.js");
let moment = require("moment");
let conf = require("../libs/configuration");
let db = require("../libs/Database").instance(); let db = require("../libs/Database").instance();
let router = express.Router(); let router = express.Router();
const IP_TYPES = ["ipv4", "ipv6"]; const IP_TYPES = ["ipv4", "ipv6"];
const REGISTER_PASS = conf.registerPass;
function combineToList(a, b) { function combineToList(a, b) {
return a + "\n" + b; return a + "\n" + b;
@ -14,41 +17,54 @@ function toList(array) {
} }
function testIP(req, res, next) { function testIP(req, res, next) {
let addr = ipaddr.parse(req.ip); let addr = ipaddr.parse(req.ip);
if (!IP_TYPES.includes(addr.kind())) return res.status(400).send("Invalid ip address"); if (!IP_TYPES.includes(addr.kind())) return res.status(400).send("Invalid ip address");
req.params.addr = addr; req.params.addr = addr;
next(); next();
} }
router.use((req, res, next) => { router.use((req, res, next) => {
res.type('text/plain'); res.type('text/plain');
next(); next();
}); });
router.get("/", testIP, (req, res) => { router.get("/", testIP, (req, res) => {
res.send(req.params.addr.toString()); res.send(req.params.addr.toString());
}); });
router.get("/:fqdn", (req, res) => { router.get("/:fqdn", (req, res) => {
db.q.select(IP_TYPES).from("addresses").filter("fqdn", req.params.fqdn).first((e, d) => { db.q.select(IP_TYPES.concat(IP_TYPES.map(e => e + "LastPing"))).from("addresses").filter("fqdn", req.params.fqdn).first((e, d) => {
if (e) return res.status(400).send("Error"); if (e) return res.status(400).send("Error");
if (!d) return res.status(404).send("Unknown FQDN"); if (!d) return res.status(404).send("Unknown FQDN");
res.send([ res.send([
d.ipv4 ? d.ipv4 : "0.0.0.0", d.ipv4 ? d.ipv4 : "0.0.0.0",
d.ipv4LastPing, moment(d.ipv4LastPing).toISOString(),
d.ipv6 ? d.ipv6 : "::", d.ipv6 ? d.ipv6 : "::",
d.ipv6LastPing, moment(d.ipv6LastPing).toISOString(),
].reduce((a, b) => a + "\n" + b)); ].reduce((a, b) => a + "\n" + b));
}); });
}); });
router.get("/:fqdn/:code", testIP, (req, res) => { router.get("/:fqdn/:code", testIP, (req, res) => {
let addr = req.params.addr; let addr = req.params.addr;
db.query("UPDATE addresses SET " + addr.kind() + " = ?, " + addr.kind() + "LastPing = CURRENT_TIMESTAMP WHERE fqdn = ? AND code = ?", [addr.toString(), req.params.fqdn, req.params.code], (e, d) => { db.query("UPDATE addresses SET " + addr.kind() + " = ?, " + addr.kind() + "LastPing = CURRENT_TIMESTAMP WHERE fqdn = ? AND code = ?", [addr.toString(), req.params.fqdn, req.params.code], (e, d) => {
if (e) return res.status(400).send("Error"); if (e) return res.status(400).send("Error");
if (d.affectedRows <= 0) return res.status(400).send("Invalid token"); if (d.affectedRows <= 0) return res.status(403).send("Invalid token");
res.send(addr.toString()); res.send(addr.toString());
}); });
});
router.get("/:fqdn/:code/:pass", (req, res) => {
const pass = req.params.pass;
const fqdn = req.params.fqdn;
const code = req.params.code;
if (REGISTER_PASS === "" || pass !== REGISTER_PASS) return res.status(403).send("Invalid token");
db.query("INSERT INTO addresses SET fqdn = ?, code = ? ON DUPLICATE KEY UPDATE code = ?", [fqdn, code, code], (e, d) => {
if (e) return res.status(400).send("Error");
if (d.insertId <= 0) return res.send("Already registered");
if (d.affectedRows >= 2) return res.send("Successful changed code");
res.send("Successful registered");
})
}); });
module.exports = router; module.exports = router;

Loading…
Cancel
Save