You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
keys/routes/ssh.js

49 lines
1.3 KiB
JavaScript

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) => keyReq("sshDeployKeys", req, res));
});
module.exports = router;