diff --git a/backend/routes/member.js b/backend/routes/member.js index d638462..4c084c3 100644 --- a/backend/routes/member.js +++ b/backend/routes/member.js @@ -12,12 +12,12 @@ router.get("/", auth.isAuthorized, async function (req, res) { api .get("controller/network/" + nwid + "/member") .then(async function (controllerRes) { - const mids = Object.keys(controllerRes.data); + const mids = controllerRes.data.map((i) => Object.keys(i)[0]); const data = await member.getMembersData(nwid, mids); res.send(data); }) - .catch(function () { - res.status(404).send({ error: "Network not found" }); + .catch(function (err) { + res.status(404).send({ error: `Network not found ${err}` }); }); }); diff --git a/backend/services/member.js b/backend/services/member.js index ac95f94..fc91990 100644 --- a/backend/services/member.js +++ b/backend/services/member.js @@ -31,20 +31,29 @@ async function getMemberAdditionalData(data) { .get("members") .find({ id: data.id }); - const additionalData = member.get("additionalConfig").value(); + const additionalData = member.get("additionalConfig").value() || {}; const lastOnline = member.get("lastOnline").value() || 0; const peer = await getPeer(data.id); let peerData = {}; - if (peer) { + if (peer && !_.isEmpty(peer)) { peerData.latency = peer.latency; if (peer.latency !== -1) peerData.online = 1; if (peer.latency == -1) peerData.online = 2; peerData.clientVersion = peer.version; - if (peer.paths[0]) { - peerData.lastOnline = peer.paths[0].lastReceive; - peerData.physicalAddress = peer.paths[0].address.split("/")[0]; - peerData.physicalPort = peer.paths[0].address.split("/")[1]; + if (peer.paths.length > 0) { + let path = peer.paths.filter((p) => { + let ret = p.active && !p.expired; + if (typeof p.preferred !== "undefined") { + ret = ret && p.preferred; + } + return ret; + }); + if (path.length > 0) { + peerData.lastOnline = path[0].lastReceive; + peerData.physicalAddress = path[0].address.split("/")[0]; + peerData.physicalPort = path[0].address.split("/")[1]; + } } } else { peerData.online = 0; @@ -76,7 +85,8 @@ async function filterDeleted(nwid, mid) { .get("members") .find({ id: mid }); - if (!member.get("deleted").value()) return mid; + let deleted = member.get("deleted").value() || false; + if (!deleted) return mid; else return; } @@ -95,7 +105,7 @@ async function getMembersData(nwid, mids) { return res; }) ) - .catch(function () { + .catch(function (err) { return []; });