mirror of
				https://github.com/Ylianst/MeshCentral.git
				synced 2025-03-09 15:40:18 +00:00 
			
		
		
		
	Added mesh and user notes
This commit is contained in:
		
							parent
							
								
									ff1478c48a
								
							
						
					
					
						commit
						e90878364f
					
				
					 4 changed files with 89 additions and 35 deletions
				
			
		
							
								
								
									
										100
									
								
								meshuser.js
									
										
									
									
									
								
							
							
						
						
									
										100
									
								
								meshuser.js
									
										
									
									
									
								
							|  | @ -1021,49 +1021,101 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain) { | |||
|                 case 'setNotes': | ||||
|                     { | ||||
|                         // Argument validation
 | ||||
|                         if (obj.common.validateString(command.nodeid, 1, 1024) == false) break; // Check nodeid
 | ||||
|                         if ((command.nodeid.split('/').length != 3) || (command.nodeid.split('/')[1] != domain.id)) return; // Invalid domain, operation only valid for current domain
 | ||||
|                         if (obj.common.validateString(command.id, 1, 1024) == false) break; // Check id
 | ||||
|                         var splitid = command.id.split('/'); | ||||
|                         if ((splitid.length != 3) || (splitid[1] != domain.id)) return; // Invalid domain, operation only valid for current domain
 | ||||
|                         var idtype = splitid[0]; | ||||
|                         if ((idtype != 'user') && (idtype != 'mesh') && (idtype != 'node')) return; | ||||
| 
 | ||||
|                         // Check if this user has rights on this nodeid to set notes
 | ||||
|                         obj.db.Get(command.nodeid, function (err, nodes) { // TODO: Make a NodeRights(user) method that also does not do a db call if agent is connected (???)
 | ||||
|                             if (nodes.length == 1) { | ||||
|                                 var meshlinks = user.links[nodes[0].meshid]; | ||||
|                                 if ((meshlinks) && (meshlinks.rights) && (meshlinks.rights & obj.parent.MESHRIGHT_SETNOTES != 0)) { | ||||
|                                     // Set the node's notes
 | ||||
|                                     if (obj.common.validateString(command.notes, 1) == false) { | ||||
|                                         obj.db.Remove('nt' + command.nodeid); // Delete the note for this node
 | ||||
|                                     } else { | ||||
|                                         obj.db.Set({ _id: 'nt' + command.nodeid, value: command.notes }); // Set the note for this node
 | ||||
|                         if (idtype == 'node') { | ||||
|                             // Check if this user has rights on this id to set notes
 | ||||
|                             obj.db.Get(command.id, function (err, nodes) { // TODO: Make a NodeRights(user) method that also does not do a db call if agent is connected (???)
 | ||||
|                                 if (nodes.length == 1) { | ||||
|                                     var meshlinks = user.links[nodes[0].meshid]; | ||||
|                                     if ((meshlinks) && (meshlinks.rights) && (meshlinks.rights & obj.parent.MESHRIGHT_SETNOTES != 0)) { | ||||
|                                         // Set the id's notes
 | ||||
|                                         if (obj.common.validateString(command.notes, 1) == false) { | ||||
|                                             obj.db.Remove('nt' + command.id); // Delete the note for this node
 | ||||
|                                         } else { | ||||
|                                             obj.db.Set({ _id: 'nt' + command.id, value: command.notes }); // Set the note for this node
 | ||||
|                                         } | ||||
|                                     } | ||||
|                                 } | ||||
|                             }); | ||||
|                         } else if (idtype == 'mesh') { | ||||
|                             // Get the mesh for this device
 | ||||
|                             var mesh = obj.parent.meshes[command.id]; | ||||
|                             if (mesh) { | ||||
|                                 // Check if this user has rights to do this
 | ||||
|                                 if (mesh.links[user._id] == null || (mesh.links[user._id].rights == 0)) { return; } | ||||
| 
 | ||||
|                                 // Set the id's notes
 | ||||
|                                 if (obj.common.validateString(command.notes, 1) == false) { | ||||
|                                     obj.db.Remove('nt' + command.id); // Delete the note for this node
 | ||||
|                                 } else { | ||||
|                                     obj.db.Set({ _id: 'nt' + command.id, value: command.notes }); // Set the note for this node
 | ||||
|                                 } | ||||
|                             } | ||||
|                         }); | ||||
|                         } else if ((idtype == 'user') && ((user.siteadmin & 2) != 0)) { | ||||
|                             // Set the id's notes
 | ||||
|                             if (obj.common.validateString(command.notes, 1) == false) { | ||||
|                                 obj.db.Remove('nt' + command.id); // Delete the note for this node
 | ||||
|                             } else { | ||||
|                                 obj.db.Set({ _id: 'nt' + command.id, value: command.notes }); // Set the note for this node
 | ||||
|                             } | ||||
|                         } | ||||
| 
 | ||||
|                         break; | ||||
|                     } | ||||
|                 case 'getNotes': | ||||
|                     { | ||||
|                         // Argument validation
 | ||||
|                         if (obj.common.validateString(command.nodeid, 1, 1024) == false) break; // Check nodeid
 | ||||
|                         if ((command.nodeid.split('/').length != 3) || (command.nodeid.split('/')[1] != domain.id)) return; // Invalid domain, operation only valid for current domain
 | ||||
|                         if (obj.common.validateString(command.id, 1, 1024) == false) break; // Check id
 | ||||
|                         var splitid = command.id.split('/'); | ||||
|                         if ((splitid.length != 3) || (splitid[1] != domain.id)) return; // Invalid domain, operation only valid for current domain
 | ||||
|                         var idtype = splitid[0]; | ||||
|                         if ((idtype != 'user') && (idtype != 'mesh') && (idtype != 'node')) return; | ||||
| 
 | ||||
|                         // Get the device
 | ||||
|                         obj.db.Get(command.nodeid, function (err, nodes) { | ||||
|                             if (nodes.length != 1) { ws.send(JSON.stringify({ action: 'getnetworkinfo', nodeid: command.nodeid, netif: null })); return; } | ||||
|                             var node = nodes[0]; | ||||
|                         if (idtype == 'node') { | ||||
|                             // Get the device
 | ||||
|                             obj.db.Get(command.id, function (err, nodes) { | ||||
|                                 if (nodes.length != 1) return; | ||||
|                                 var node = nodes[0]; | ||||
| 
 | ||||
|                                 // Get the mesh for this device
 | ||||
|                                 var mesh = obj.parent.meshes[node.meshid]; | ||||
|                                 if (mesh) { | ||||
|                                     // Check if this user has rights to do this
 | ||||
|                                     if (mesh.links[user._id] == null || (mesh.links[user._id].rights == 0)) { return; } | ||||
| 
 | ||||
|                                     // Get the notes about this node
 | ||||
|                                     obj.db.Get('nt' + command.id, function (err, notes) { | ||||
|                                         if (notes.length != 1) { ws.send(JSON.stringify({ action: 'getNotes', id: command.id, notes: null })); return; } | ||||
|                                         ws.send(JSON.stringify({ action: 'getNotes', id: command.id, notes: notes[0].value })); | ||||
|                                     }); | ||||
|                                 } | ||||
|                             }); | ||||
|                         } else if (idtype == 'mesh') { | ||||
|                             // Get the mesh for this device
 | ||||
|                             var mesh = obj.parent.meshes[node.meshid]; | ||||
|                             var mesh = obj.parent.meshes[command.id]; | ||||
|                             if (mesh) { | ||||
|                                 // Check if this user has rights to do this
 | ||||
|                                 if (mesh.links[user._id] == null || (mesh.links[user._id].rights == 0)) { return; } | ||||
| 
 | ||||
|                                 // Get the notes about this node
 | ||||
|                                 obj.db.Get('nt' + command.nodeid, function (err, notes) { | ||||
|                                     if (notes.length != 1) { ws.send(JSON.stringify({ action: 'getNotes', nodeid: command.nodeid, notes: null })); return; } | ||||
|                                     ws.send(JSON.stringify({ action: 'getNotes', nodeid: command.nodeid, notes: notes[0].value })); | ||||
|                                 obj.db.Get('nt' + command.id, function (err, notes) { | ||||
|                                     if (notes.length != 1) { ws.send(JSON.stringify({ action: 'getNotes', id: command.id, notes: null })); return; } | ||||
|                                     ws.send(JSON.stringify({ action: 'getNotes', id: command.id, notes: notes[0].value })); | ||||
|                                 }); | ||||
|                             } | ||||
|                         }); | ||||
|                         } else if ((idtype == 'user') && ((user.siteadmin & 2) != 0)) { | ||||
|                             // Get the notes about this node
 | ||||
|                             obj.db.Get('nt' + command.id, function (err, notes) { | ||||
|                                 if (notes.length != 1) { ws.send(JSON.stringify({ action: 'getNotes', id: command.id, notes: null })); return; } | ||||
|                                 ws.send(JSON.stringify({ action: 'getNotes', id: command.id, notes: notes[0].value })); | ||||
|                             }); | ||||
|                         } | ||||
| 
 | ||||
|                         break; | ||||
|                     } | ||||
|             } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue