Fix for #2663. Invitation codes are removed for deleted device groups.
Ylian Saint-Hilaire committed
May 21, 2021 at 09:01 UTC
29e30504f045a7d93c49add090b9b0aa4b73f644
3 files changed
+8
-2
db.js
+3
@@ -201,6 +201,9 @@ module.exports.CreateDB = function (parent, func) {
201
// Make sure all mesh types are number type, if not, fix it.
202
if (typeof docs[i].mtype == 'string') { docs[i].mtype = parseInt(docs[i].mtype); meshChange = true; }
203
204
+ // If the device group is deleted, remove any invite codes
205
+ if (docs[i].deleted && docs[i].invite) { delete docs[i].invite; meshChange = true; }
206
+
207
// Take a look at the links
208
if (docs[i].links != null) {
209
for (var j in docs[i].links) {
meshuser.js
+4
-1
@@ -3113,6 +3113,9 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
3113
}
3114
}
3115
3116
+ // Delete any invitation codes
3117
+ delete mesh.invite;
3118
+
3119
// Delete all files on the server for this mesh
3120
try {
3121
var meshpath = parent.getServerRootFilePath(mesh);
@@ -3187,7 +3190,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
3190
var dup = null;
3191
for (var i in command.invite.codes) {
3192
for (var j in parent.meshes) {
3190
- if ((j != command.meshid) && (parent.meshes[j].domain == domain.id) && (parent.meshes[j].invite != null) && (parent.meshes[j].invite.codes.indexOf(command.invite.codes[i]) >= 0)) { dup = command.invite.codes[i]; break; }
3193
+ if ((j != command.meshid) && (parent.meshes[j].deleted == null) && (parent.meshes[j].domain == domain.id) && (parent.meshes[j].invite != null) && (parent.meshes[j].invite.codes.indexOf(command.invite.codes[i]) >= 0)) { dup = command.invite.codes[i]; break; }
3194
}
3195
}
3196
if (dup != null) {
webserver.js
+1
-1
@@ -1824,7 +1824,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
1824
1825
// Each for a device group that has this invite code.
1826
for (var i in obj.meshes) {
1827
- if ((obj.meshes[i].domain == domain.id) && (obj.meshes[i].invite != null) && (obj.meshes[i].invite.codes.indexOf(req.body.inviteCode) >= 0)) {
1827
+ if ((obj.meshes[i].domain == domain.id) && (parent.meshes[i].deleted == null) && (obj.meshes[i].invite != null) && (obj.meshes[i].invite.codes.indexOf(req.body.inviteCode) >= 0)) {
1828
// Send invitation link, valid for 1 minute.
1829
res.redirect(domain.url + 'agentinvite?c=' + parent.encodeCookie({ a: 4, mid: i, f: obj.meshes[i].invite.flags, expire: 1 }, parent.invitationLinkEncryptionKey) + (req.query.key ? ('&key=' + req.query.key) : ''));
1830
return;