Fixed server file permissions for device groups, #3294
Ylian Saint-Hilaire committed
Nov 25, 2021 at 09:26 UTC
b0726e9a137f78e61de43e46285983eb27123d6a
2 files changed
+18
-27
meshuser.js
+13
-16
@@ -6799,22 +6799,19 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
6799
try { files.filetree.f[user._id].f = readFilesRec(parent.path.join(parent.filespath, domainx + '/user-' + usersplit[2])); } catch (e) { }
6800
}
6801
6802
- // Add files for each mesh // TODO: Get all meshes including groups!!
6803
- for (var i in user.links) {
6804
- if ((user.links[i].rights & 32) != 0) { // Check that we have file permissions
6805
- var mesh = parent.meshes[i];
6806
- if (mesh) {
6807
- var meshsplit = mesh._id.split('/');
6808
- files.filetree.f[mesh._id] = { t: 4, n: mesh.name, f: {} };
6809
- files.filetree.f[mesh._id].maxbytes = parent.getQuota(mesh._id, domain);
6810
-
6811
- // Read all files recursively
6812
- try {
6813
- files.filetree.f[mesh._id].f = readFilesRec(parent.path.join(parent.filespath, domainx + '/mesh-' + meshsplit[2]));
6814
- } catch (e) {
6815
- files.filetree.f[mesh._id].f = {}; // Got an error, return empty folder. We will create the folder only when needed.
6816
- }
6817
- }
6802
+ // Add files for each mesh
6803
+ const meshes = parent.GetAllMeshWithRights(user, MESHRIGHT_SERVERFILES);
6804
+ for (var i in meshes) {
6805
+ const mesh = meshes[i];
6806
+ var meshsplit = mesh._id.split('/');
6807
+ files.filetree.f[mesh._id] = { t: 4, n: mesh.name, f: {} };
6808
+ files.filetree.f[mesh._id].maxbytes = parent.getQuota(mesh._id, domain);
6809
+
6810
+ // Read all files recursively
6811
+ try {
6812
+ files.filetree.f[mesh._id].f = readFilesRec(parent.path.join(parent.filespath, domainx + '/mesh-' + meshsplit[2]));
6813
+ } catch (e) {
6814
+ files.filetree.f[mesh._id].f = {}; // Got an error, return empty folder. We will create the folder only when needed.
6815
}
6816
}
6817
webserver.js
+5
-11
@@ -7050,20 +7050,14 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
7050
if (i.startsWith('mesh/')) {
7051
// Grant access to a device group thru a direct link
7052
const m = obj.meshes[i];
7053
- if ((m) && (m.deleted == null) && ((rights == null) || ((user.links[i].rights & rights) != 0))) {
7054
- if (r.indexOf(m) == -1) { r.push(m); }
7055
- }
7053
+ if ((m) && (r.indexOf(m) == -1) && (m.deleted == null) && ((rights == null) || ((user.links[i].rights & rights) != 0))) { r.push(m); }
7054
} else if (i.startsWith('ugrp/')) {
7055
// Grant access to a device group thru a user group
7056
const g = obj.userGroups[i];
7059
- if (g && (g.links != null) && ((rights == null) || ((user.links[i].rights & rights) != 0))) {
7060
- for (var j in g.links) {
7061
- if (j.startsWith('mesh/')) {
7062
- const m = obj.meshes[j];
7063
- if ((m) && (m.deleted == null)) {
7064
- if (r.indexOf(m) == -1) { r.push(m); }
7065
- }
7066
- }
7057
+ for (var j in g.links) {
7058
+ if (j.startsWith('mesh/') && ((rights == null) || ((g.links[j].rights != null) && (g.links[j].rights & rights) != 0))) {
7059
+ const m = obj.meshes[j];
7060
+ if ((m) && (m.deleted == null) && (r.indexOf(m) == -1)) { r.push(m); }
7061
}
7062
}
7063
}