zero-ui/backend/routes/member.js

90 lines
2.5 KiB
JavaScript

const express = require("express");
const router = express.Router({ mergeParams: true });
const auth = require("../services/auth");
const member = require("../services/member");
const api = require("../utils/controller-api");
// get all members
router.get("/", auth.isAuthorized, async function (req, res) {
// @ts-ignore
const nwid = req.params.nwid;
api
.get("controller/network/" + nwid + "/member")
.then(async function (controllerRes) {
const mids = Object.keys(controllerRes.data);
const data = await member.getMembersData(nwid, mids);
res.send(data);
})
.catch(function (err) {
res.status(404).send({ error: `Network not found ${err}` });
});
});
// get member
router.get("/:mid", auth.isAuthorized, async function (req, res) {
// @ts-ignore
const nwid = req.params.nwid;
const mid = req.params.mid;
const data = await member.getMembersData(nwid, [mid]);
if (data[0]) {
res.send(data[0]);
} else {
res.status(404).send({ error: "Member not found" });
}
});
// update member
router.post("/:mid", auth.isAuthorized, async function (req, res) {
// @ts-ignore
const nwid = req.params.nwid;
const mid = req.params.mid;
member.updateMemberAdditionalData(nwid, mid, req.body);
if (req.body.config) {
api
.post("controller/network/" + nwid + "/member/" + mid, req.body.config)
.then(async function () {
const data = await member.getMembersData(nwid, [mid]);
res.send(data[0]);
})
.catch(function (err) {
res.status(500).send({ error: err.message });
});
} else {
const data = await member.getMembersData(nwid, [mid]);
res.send(data[0]);
}
});
// delete member
router.delete("/:mid", auth.isAuthorized, async function (req, res) {
// @ts-ignore
const nwid = req.params.nwid;
const mid = req.params.mid;
member.deleteMemberAdditionalData(nwid, mid);
api
.delete("controller/network/" + nwid + "/member/" + mid)
.then(function () {})
.catch(function (err) {
res.status(500).send({ error: err.message });
});
// Need this to fix ZT controller bug https://github.com/zerotier/ZeroTierOne/issues/859
const defaultConfig = {
authorized: false,
ipAssignments: [],
capabilities: [],
tags: [],
};
api
.post("controller/network/" + nwid + "/member/" + mid, defaultConfig)
.then(function (controllerRes) {
res.status(controllerRes.status).send("");
})
.catch(function (err) {
res.status(500).send({ error: err.message });
});
});
module.exports = router;