diff --git a/docs/docs/meshcentral/config.md b/docs/docs/meshcentral/config.md index 94fcae60..5705ac10 100644 --- a/docs/docs/meshcentral/config.md +++ b/docs/docs/meshcentral/config.md @@ -1204,6 +1204,11 @@ See description for information about each item. "default": false, "description": "When set to true, the devices search box will match on both the server name and client name of a device." }, + "deviceSearchBarGroupName": { + "type": "boolean", + "default": false, + "description": "When set to true, the devices search box will match on group name too." + }, "agentSelfGuestSharing": { "type": [ "boolean", diff --git a/meshcentral-config-schema.json b/meshcentral-config-schema.json index 9327a183..6e19412e 100644 --- a/meshcentral-config-schema.json +++ b/meshcentral-config-schema.json @@ -1197,6 +1197,11 @@ "default": false, "description": "When set to true, the devices search box will match on both the server name and client name of a device." }, + "deviceSearchBarGroupName": { + "type": "boolean", + "default": false, + "description": "When set to true, the devices search box will match on group name too." + }, "agentSelfGuestSharing": { "type": [ "boolean", diff --git a/views/default-mobile.handlebars b/views/default-mobile.handlebars index 2dc8ce4e..3fef615d 100644 --- a/views/default-mobile.handlebars +++ b/views/default-mobile.handlebars @@ -2904,12 +2904,24 @@ var rs = x.split(/\s+/).join('|'), rx = new RegExp(rs); // In some cases (like +), this can throw an exception. for (var d in nodes) { if (features2 & 0x00008000) { - nodes[d].v = (rx.test(nodes[d].name.toLowerCase())) || ((nodes[d].rnamel != null) && rx.test(nodes[d].rnamel.toLowerCase())); + if(features2 & 0x10000000){ + nodes[d].v = (rx.test(nodes[d].name.toLowerCase())) || (rx.test(meshes[nodes[d].meshid].name.toLowerCase())) || ((nodes[d].rnamel != null) && rx.test(nodes[d].rnamel.toLowerCase())); + }else { + nodes[d].v = (rx.test(nodes[d].name.toLowerCase())) || ((nodes[d].rnamel != null) && rx.test(nodes[d].rnamel.toLowerCase())); + } } else { - if (showRealNames) { - nodes[d].v = (nodes[d].rnamel != null) && rx.test(nodes[d].rnamel.toLowerCase()); - } else { - nodes[d].v = rx.test(nodes[d].name.toLowerCase()); + if(features2 & 0x10000000){ + if (showRealNames) { + nodes[d].v = (nodes[d].rnamel != null) && rx.test(nodes[d].rnamel.toLowerCase()) || (rx.test(meshes[nodes[d].meshid].name.toLowerCase())); + } else { + nodes[d].v = rx.test(nodes[d].name.toLowerCase()) || (rx.test(meshes[nodes[d].meshid].name.toLowerCase())); + } + }else{ + if (showRealNames) { + nodes[d].v = (nodes[d].rnamel != null) && rx.test(nodes[d].rnamel.toLowerCase()); + } else { + nodes[d].v = rx.test(nodes[d].name.toLowerCase()); + } } } } diff --git a/views/default.handlebars b/views/default.handlebars index f7c2553b..9ed6f2be 100644 --- a/views/default.handlebars +++ b/views/default.handlebars @@ -6157,15 +6157,27 @@ // Device name search try { var rs = x.split(/\s+/).join('|'), rx = new RegExp(rs); // In some cases (like +), this can throw an exception. - for (var d in nodes) { + for (var d in nodes) { if (features2 & 0x00008000) { // Both server and client names must match - if (rx.test(nodes[d].name.toLowerCase()) || ((nodes[d].rnamel != null) && rx.test(nodes[d].rnamel.toLowerCase()))) { r.push(d); } - } else { - if (showRealNames) { - if (nodes[d].rnamel != null && rx.test(nodes[d].rnamel.toLowerCase())) { r.push(d); } - } else { - if (rx.test(nodes[d].name.toLowerCase())) { r.push(d); } + if(features2 & 0x10000000){ + if (rx.test(nodes[d].name.toLowerCase()) || rx.test(meshes[nodes[d].meshid].name.toLowerCase()) || ((nodes[d].rnamel != null) && rx.test(nodes[d].rnamel.toLowerCase()))) { r.push(d); } + }else { + if (rx.test(nodes[d].name.toLowerCase()) || ((nodes[d].rnamel != null) && rx.test(nodes[d].rnamel.toLowerCase()))) { r.push(d); } } + } else { + if(features2 & 0x10000000){ + if (showRealNames) { + if (nodes[d].rnamel != null && rx.test(nodes[d].rnamel.toLowerCase()) || rx.test(meshes[nodes[d].meshid].name.toLowerCase()) ) { r.push(d); } + } else { + if (rx.test(nodes[d].name.toLowerCase()) || rx.test(meshes[nodes[d].meshid].name.toLowerCase()) ) { r.push(d); } + } + }else { + if (showRealNames) { + if (nodes[d].rnamel != null && rx.test(nodes[d].rnamel.toLowerCase())) { r.push(d); } + } else { + if (rx.test(nodes[d].name.toLowerCase())) { r.push(d); } + } + } } } } catch (ex) { for (var d in nodes) { r.push(d); } } diff --git a/webserver.js b/webserver.js index 0314bdb1..1030fb30 100644 --- a/webserver.js +++ b/webserver.js @@ -3226,6 +3226,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF if ((parent.msgserver != null) && (parent.msgserver.providers != 0)) { features2 += 0x02000000; } // User messaging server is enabled if ((parent.msgserver != null) && (parent.msgserver.providers != 0) && ((typeof domain.passwordrequirements != 'object') || (domain.passwordrequirements.msg2factor != false))) { features2 += 0x04000000; } // User messaging 2FA is allowed if (domain.scrolltotop == true) { features2 += 0x08000000; } // Show the "Scroll to top" button + if (domain.devicesearchbargroupname === true) { features2 += 0x10000000; } // Search bar will find by group name too return { features: features, features2: features2 }; }