mirror of
				https://github.com/Ylianst/MeshCentral.git
				synced 2025-03-09 15:40:18 +00:00 
			
		
		
		
	Improved run command dialog box, users can now select a local file.
This commit is contained in:
		
							parent
							
								
									44af3a2408
								
							
						
					
					
						commit
						bb8b5fed82
					
				
					 1 changed files with 37 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -5717,26 +5717,55 @@
 | 
			
		|||
                if (n.agent) { if ((GetNodeRights(n) & 24) == 24) { agenttype = true; } if ((n.agent.id > 0) && (n.agent.id < 5)) { wintype = true; } else { linuxtype = true; } }
 | 
			
		||||
            }
 | 
			
		||||
            if ((wintype == true) || (linuxtype == true) || (agenttype == true)) {
 | 
			
		||||
                var x = options.title + '<br />';
 | 
			
		||||
                var x = '';
 | 
			
		||||
                if (options.title) { x += options.title + '<br />'; }
 | 
			
		||||
                x += '<select id=d2cmdtype onclick=d2runCommandValidate() style=width:100%;margin-bottom:4px;margin-top:4px>';
 | 
			
		||||
                if (wintype == true) { x += '<option value=1>' + "Windows Command Prompt" + '</option><option value=2>' + "Windows PowerShell" + '</option>'; }
 | 
			
		||||
                if (linuxtype == true) { x += '<option value=3>' + "Linux/BSD/macOS Command Shell" + '</option>'; }
 | 
			
		||||
                if (agenttype == true) { x += '<option value=4>' + "Agent Console" + '</option>'; } // MESHRIGHT_REMOTECONTROL & MESHRIGHT_AGENTCONSOLE are needed
 | 
			
		||||
                x += '</select>';
 | 
			
		||||
                x += '<select id=d2cmduser style=width:100%;margin-bottom:4px><option value=0>' + "Run as agent" + '</option><option value=1>' + "Run as user, agent if no user" + '</option><option value=2>' + "Must run as user" + '</option></select>';
 | 
			
		||||
                x += '<textarea id=d2runcmd style=background-color:#fcf3cf;width:100%;height:200px;resize:none;overflow-y:scroll></textarea>';
 | 
			
		||||
                x += '<select id=d2cmdsource onclick=d2runCommandValidate() style=width:100%;margin-bottom:4px><option value=0>' + "Commands from text box" + '</option><option value=1>' + "Commands from file" + '</option>';
 | 
			
		||||
                //if (userinfo.siteadmin & 8) { x += '<option value=2>' + "Commands from file on server" + '</option>'; }
 | 
			
		||||
                x += '</select><textarea id=d2runcmd onkeyup=d2runCommandValidate() style=background-color:#fcf3cf;width:100%;height:200px;resize:none;overflow-y:scroll></textarea>';
 | 
			
		||||
                x += '<div id=d2runfile style=display:none><input id=d2runfileex type=file onchange=d2runCommandValidate() id=d2localFile name=files onchange=d2runCommandValidate() /></div>';
 | 
			
		||||
                x += '<div id=d2runsfile style=display:none>bb</div>';
 | 
			
		||||
                setDialogMode(2, "Run Commands", 3, d2groupActionFunctionRunCommands, x, options);
 | 
			
		||||
                Q('d2runcmd').focus();
 | 
			
		||||
                //QE('idx_dlgOkButton', true);
 | 
			
		||||
                d2runCommandValidate();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        function d2runCommandValidate() { QV('d2cmduser', Q('d2cmdtype').value < 4); }
 | 
			
		||||
        function d2runCommandValidate() {
 | 
			
		||||
            QV('d2cmduser', Q('d2cmdtype').value < 4);
 | 
			
		||||
            QV('d2runcmd', Q('d2cmdsource').value == 0);
 | 
			
		||||
            QV('d2runfile', Q('d2cmdsource').value == 1);
 | 
			
		||||
            QV('d2runsfile', Q('d2cmdsource').value == 2);
 | 
			
		||||
            var ok = false;
 | 
			
		||||
            if (Q('d2cmdsource').value == 0) { if (Q('d2runcmd').value.length > 0) { ok = true; } } // From text box
 | 
			
		||||
            if (Q('d2cmdsource').value == 1) { if (Q('d2runfileex').files.length == 1) { ok = true; } } // From file
 | 
			
		||||
            if (Q('d2cmdsource').value == 2) { ok = false; } // From server file
 | 
			
		||||
            QE('idx_dlgOkButton', ok);
 | 
			
		||||
        }
 | 
			
		||||
        function d2groupActionFunctionRunCommands(b, options) {
 | 
			
		||||
            var type = 3;
 | 
			
		||||
            try { type = parseInt(Q('d2cmdtype').value); } catch (ex) { }
 | 
			
		||||
            meshserver.send({ action: 'runcommands', nodeids: options.nodeids, type: type, cmds: Q('d2runcmd').value, runAsUser: parseInt(Q('d2cmduser').value) });
 | 
			
		||||
            if (options.func) { options.func(); }
 | 
			
		||||
            var cmd = { action: 'runcommands', nodeids: options.nodeids, type: type, runAsUser: parseInt(Q('d2cmduser').value) };
 | 
			
		||||
            if (Q('d2cmdsource').value == 0) {
 | 
			
		||||
                // From text box
 | 
			
		||||
                cmd.cmds = Q('d2runcmd').value;
 | 
			
		||||
                meshserver.send(cmd);
 | 
			
		||||
                if (options.func) { options.func(); }
 | 
			
		||||
            }
 | 
			
		||||
            if (Q('d2cmdsource').value == 1) {
 | 
			
		||||
                // From file
 | 
			
		||||
                var reader = new FileReader();
 | 
			
		||||
                reader.onload = function (e) { cmd.cmds = e.target.result; meshserver.send(cmd); if (options.func) { options.func(); } }
 | 
			
		||||
                reader.readAsText(Q('d2runfileex').files[0]);
 | 
			
		||||
            }
 | 
			
		||||
            if (Q('d2cmdsource').value == 2) {
 | 
			
		||||
                // From server file
 | 
			
		||||
                cmd.cmds = '';
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function onSortSelectChange(skipsave) {
 | 
			
		||||
| 
						 | 
				
			
			@ -7179,7 +7208,7 @@
 | 
			
		|||
                if (((meshrights & (4 + 8 + 64 + 262144)) != 0) && (node.mtype < 3) && ((node.agent == null) || (node.agent.id != 34))) { x += '<input type=button value="' + "Actions" + '" title="' + "Perform power actions on the device" + '" onclick=deviceActionFunction() />'; }
 | 
			
		||||
                x += '<input type=button value="' + "Notes" + '" title="' + "View notes about this device" + '" onclick=showNotes(' + ((meshrights & 128) == 0) + ',"' + encodeURIComponentEx(node._id) + '") />';
 | 
			
		||||
                x += '<input type=button value="' + "Log Event" + '" title="' + "Write an event for this device" + '" onclick=writeDeviceEvent("' + encodeURIComponentEx(node._id) + '") />';
 | 
			
		||||
                if ((node.mtype == 2) && (connectivity & 1) && (meshrights == 0xFFFFFFFF)) { x += '<input type=button value="' + "Run" + '" title="' + "Run commands on this device" + '" onclick=runDeviceCmd("' + encodeURIComponentEx(node._id) + '") />'; }
 | 
			
		||||
                if ((node.mtype == 2) && (connectivity & 1) && ((meshrights & 131072) != 0)) { x += '<input type=button value="' + "Run" + '" title="' + "Run commands on this device" + '" onclick=runDeviceCmd("' + encodeURIComponentEx(node._id) + '") />'; }
 | 
			
		||||
                if (node.mtype != 4) {
 | 
			
		||||
                    if ((meshrights & 8) && ((connectivity & 1) || ((node.pmt == 1) && ((features2 & 2) != 0)))) { x += '<input type=button value="' + "Message" + '" title="' + "Display a text message on the remote device" + '" onclick=deviceMessageFunction() />';  }
 | 
			
		||||
                    //if ((connectivity & 1) && (meshrights & 8) && (node.agent.id < 5)) { x += '<input type=button value=Toast title="' + "Display a text message of the remote device" + '" onclick=deviceToastFunction() />';  }
 | 
			
		||||
| 
						 | 
				
			
			@ -7639,10 +7668,7 @@
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        // Run commands on current device
 | 
			
		||||
        function runDeviceCmd(nodeid) {
 | 
			
		||||
            if (xxdialogMode) return;
 | 
			
		||||
            d2runCommandDialog({ nodeids: [ decodeURIComponent(nodeid) ], title: "Run commands on this device." });
 | 
			
		||||
        }
 | 
			
		||||
        function runDeviceCmd(nodeid) { if (xxdialogMode) return; d2runCommandDialog({ nodeids: [ decodeURIComponent(nodeid) ] }); }
 | 
			
		||||
 | 
			
		||||
        function writeDeviceEvent(nodeid) {
 | 
			
		||||
            if (xxdialogMode) return;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue