Request #2410
Ylian Saint-Hilaire committed
Mar 27, 2021 at 01:33 UTC
2ca49d49d8c7a009f3dbb998948abd5428f0350b
2 files changed
+13
-3
meshcentral-config-schema.json
+1
-1
@@ -303,7 +303,7 @@
303
"type": "string"
304
},
305
"filter": {
306
- "description": "Array of node/domain/id or mesh/domain/id strings. When set, the link will only show up for the specified devices or device groups.",
306
+ "description": "Array of node/<domain>/<id> or mesh/<domain>/<id> or tag:<tag> strings. When set, the link will only show up for the specified devices, device groups or device tag.",
307
"type": "array",
308
"items": { "type": "string" }
309
}
views/default.handlebars
+12
-2
@@ -4118,7 +4118,7 @@
4118
if ((serverinfo.devicemeshrouterlinks != null) && (Array.isArray(serverinfo.devicemeshrouterlinks.extralinks))) {
4119
for (var i in serverinfo.devicemeshrouterlinks.extralinks) {
4120
var r = serverinfo.devicemeshrouterlinks.extralinks[i], p = 0;
4121
- if ((r.filter == null) || (Array.isArray(r.filter) && ((r.filter.indexOf(node.meshid) >= 0) || (r.filter.indexOf(node._id) >= 0)))) {
4121
+ if (doesDeviceMatchFilterTags(node, r.filter)) {
4122
if (typeof r.protocol == 'number') { p = r.protocol; } else if (r.protocol == 'http') { p = 1; } else if (r.protocol == 'https') { p = 2; } else if (r.protocol == 'rdp') { p = 3; } else if (r.protocol == 'ssh') { p = 4; } else if (r.protocol == 'scp') { p = 5; }
4123
x += '<a href=# onclick=p10MCRouter("' + node._id + '",' + p + ',' + r.port + (r.ip?(',\"' + r.ip + '\"'):'') + ')>' + r.name + '</a> ';
4124
}
@@ -4130,6 +4130,16 @@
4130
return x;
4131
}
4132
4133
+ // Check if this device matches any of the given filters
4134
+ function doesDeviceMatchFilterTags(node, filter) {
4135
+ if (filter == null) return true; // No filters, every device matches.
4136
+ if (!Array.isArray(filter)) return false; // Bad filter
4137
+ if (filter.indexOf(node.meshid) >= 0) return true; // Device group match
4138
+ if (filter.indexOf(node._id) >= 0) return true; // Nodeid match
4139
+ if (Array.isArray(node.tags)) { for (var i in node.tags) { if (filter.indexOf('tag:' + node.tags[i]) >= 0) return true; } } // Tag match
4140
+ return false;
4141
+ }
4142
+
4143
// Show device help requests
4144
function showDeviceHelpRequests(nodeid, force, e) {
4145
if (e) haltEvent(e);
@@ -6316,7 +6326,7 @@
6326
if ((serverinfo.devicemeshrouterlinks != null) && (Array.isArray(serverinfo.devicemeshrouterlinks.extralinks))) {
6327
for (var i in serverinfo.devicemeshrouterlinks.extralinks) {
6328
var r = serverinfo.devicemeshrouterlinks.extralinks[i], p = 0;
6319
- if ((r.filter == null) || (Array.isArray(r.filter) && ((r.filter.indexOf(mesh._id) >= 0) || (r.filter.indexOf(node._id) >= 0)))) {
6329
+ if (doesDeviceMatchFilterTags(node, r.filter)) {
6330
if (typeof r.protocol == 'number') { p = r.protocol; } else if (r.protocol == 'http') { p = 1; } else if (r.protocol == 'https') { p = 2; } else if (r.protocol == 'rdp') { p = 3; } else if (r.protocol == 'ssh') { p = 4; } else if (r.protocol == 'scp') { p = 5; }
6331
x += '<a href=# onclick=p10MCRouter("' + node._id + '",' + p + ',' + r.port + (r.ip?(',\"' + r.ip + '\"'):'') + ') title="' + "Requires installation of MeshCentral Router." + '">' + r.name + '</a> ';
6332
}