mirror of
				https://github.com/Ylianst/MeshCentral.git
				synced 2025-03-09 15:40:18 +00:00 
			
		
		
		
	Fixed MeshRelay access control
This commit is contained in:
		
							parent
							
								
									da45d4f80f
								
							
						
					
					
						commit
						3c33512053
					
				
					 6 changed files with 103 additions and 56 deletions
				
			
		
							
								
								
									
										36
									
								
								meshuser.js
									
										
									
									
									
								
							
							
						
						
									
										36
									
								
								meshuser.js
									
										
									
									
									
								
							|  | @ -14,11 +14,12 @@ | |||
| "use strict"; | ||||
| 
 | ||||
| // Construct a MeshAgent object, called upon connection
 | ||||
| module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain) { | ||||
| module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, user) { | ||||
|     var obj = {}; | ||||
|     obj.db = db; | ||||
|     obj.ws = ws; | ||||
|     obj.args = args; | ||||
|     obj.user = user; | ||||
|     obj.parent = parent; | ||||
|     obj.domain = domain; | ||||
|     obj.common = parent.common; | ||||
|  | @ -77,27 +78,13 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain) { | |||
| 
 | ||||
|     try { | ||||
|         // Check if the user is logged in
 | ||||
|         if ((!req.session) || (!req.session.userid) || (req.session.domainid != domain.id)) { | ||||
|             // If a default user is active, setup the session here.
 | ||||
|             if (obj.args.user && obj.parent.users['user/' + domain.id + '/' + obj.args.user.toLowerCase()]) { | ||||
|                 if (req.session && req.session.loginmode) { delete req.session.loginmode; } | ||||
|                 req.session.userid = 'user/' + domain.id + '/' + obj.args.user.toLowerCase(); | ||||
|                 req.session.domainid = domain.id; | ||||
|                 req.session.currentNode = ''; | ||||
|             } else { | ||||
|                 // Close the websocket connection
 | ||||
|                 console.log('NOAUTH1'); | ||||
|                 ws.send(JSON.stringify({ action: 'close', cause: 'noauth' })); | ||||
|                 try { obj.ws.close(); } catch (e) { } | ||||
|                 return; | ||||
|             } | ||||
|         } | ||||
|         req.session.ws = obj.ws; // Associate this websocket session with the web session
 | ||||
|         req.session.ws.userid = req.session.userid; | ||||
|         req.session.ws.domainid = domain.id; | ||||
|         var user = obj.parent.users[req.session.userid]; | ||||
|         if (user == null) { try { obj.ws.close(); } catch (e) { } return; } | ||||
| 
 | ||||
|         // Associate this websocket session with the web session
 | ||||
|         //req.session.ws = obj.ws;
 | ||||
|         //req.session.ws.userid = req.session.userid;
 | ||||
|         //req.session.ws.domainid = domain.id;
 | ||||
| 
 | ||||
|         // Add this web socket session to session list
 | ||||
|         obj.ws.sessionId = user._id + '/' + ('' + Math.random()).substring(2); | ||||
|         obj.parent.wssessions2[ws.sessionId] = obj.ws; | ||||
|  | @ -141,9 +128,9 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain) { | |||
| 
 | ||||
|         // When data is received from the web socket
 | ||||
|         ws.on('message', function (msg) { | ||||
|             var command, user = obj.parent.users[req.session.userid], i = 0, mesh = null, meshid = null, nodeid = null, meshlinks = null, change = 0; | ||||
|             var command, i = 0, mesh = null, meshid = null, nodeid = null, meshlinks = null, change = 0; | ||||
|             try { command = JSON.parse(msg.toString('utf8')); } catch (e) { return; } | ||||
|             if ((user == null) || (obj.common.validateString(command.action, 3, 32) == false)) return; // User must be set and action must be a string between 3 and 32 chars
 | ||||
|             if (obj.common.validateString(command.action, 3, 32) == false) return; // Action must be a string between 3 and 32 chars
 | ||||
| 
 | ||||
|             switch (command.action) { | ||||
|                 case 'ping': { try { ws.send(JSON.stringify({ action: 'pong' })); } catch (ex) { } break; } | ||||
|  | @ -1344,10 +1331,13 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain) { | |||
|         try { ws.send(JSON.stringify({ action: 'serverinfo', serverinfo: serverinfo })); } catch (ex) { } | ||||
| 
 | ||||
|         // Send user information to web socket, this is the first thing we send
 | ||||
|         var userinfo = obj.common.Clone(obj.parent.users[req.session.userid]); | ||||
|         var userinfo = obj.common.Clone(obj.parent.users[user._id]); | ||||
|         delete userinfo.salt; | ||||
|         delete userinfo.hash; | ||||
|         try { ws.send(JSON.stringify({ action: 'userinfo', userinfo: userinfo })); } catch (ex) { } | ||||
| 
 | ||||
|         // We are all set, start receiving data
 | ||||
|         ws.resume(); | ||||
|     } catch (e) { console.log(e); } | ||||
| 
 | ||||
|     // Read entire file and return it in callback function
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue