const user = ":user([^@/]+)"; const host = ":host([^@/]+)"; const type = ":type((dsa|rsa|ecdsa|ed25519))"; let express = require("express"); let db = require("../libs/Database").instance(); let router = express.Router(); let userRouter = express.Router(); let deployRouter = express.Router(); function combineToList(a, b) { return a + "\n" + b; } function toList(array) { return array.reduce(combineToList, "").trim(); } router.use(["/u", "/user", "/users", "/userKeys"], userRouter); router.use(["/d", "/deploy", "/deployKeys"], deployRouter); function keyReq(table, req, res) { let p = req.params; let q = db.q.from(table).select("publicKeyComment"); if (p.user) q.filter("user", p.user); if (p.host) q.filter("host", p.host); if (p.type) q.filter("type", p.type); q.list((e, d) => { if (e) return res.status(500).render('error', {message: e.message, error: e}); res.type("text/plain"); res.send(toList(d)); }); } [ "/", "/" + type, "/@" + host, "/" + user, "/" + user + "@" + host, "/@" + host + "/" + type, "/" + user + "/" + type, "/" + user + "@" + host + "/" + type, ].forEach(e => { userRouter.get(e, (req, res) => keyReq("sshUserKeys", req, res)); deployRouter.get(e, (req, res) => keyReg("sshDeployKeys", req, res)); }); module.exports = router;