From cd6f8502ca342285a613bfc8b94fd4b32c9fb69e Mon Sep 17 00:00:00 2001 From: Ylian Saint-Hilaire Date: Tue, 19 Mar 2019 09:54:52 -0700 Subject: [PATCH] improved proxy support in ClickOnce application. --- agents/meshcore.js | 16 +++---- agents/meshcore.min.js | 2 +- certoperations.js | 10 ++--- package.json | 2 +- .../MeshMiniRouter.application | 38 ++++++++--------- .../MeshMiniRouter.exe.config.deploy | 0 .../MeshMiniRouter.exe.deploy | Bin 193344 -> 195392 bytes .../MeshMiniRouter.exe.manifest | 40 +++++++++--------- .../MeshMiniRouter.ico.deploy | Bin .../minirouter/MeshMiniRouter.application | 38 ++++++++--------- public/clickonce/minirouter/publish.htm | 2 +- 11 files changed, 71 insertions(+), 77 deletions(-) rename public/clickonce/minirouter/Application Files/{MeshMiniRouter_2_0_0_25 => MeshMiniRouter_2_0_0_26}/MeshMiniRouter.application (81%) rename public/clickonce/minirouter/Application Files/{MeshMiniRouter_2_0_0_25 => MeshMiniRouter_2_0_0_26}/MeshMiniRouter.exe.config.deploy (100%) rename public/clickonce/minirouter/Application Files/{MeshMiniRouter_2_0_0_25 => MeshMiniRouter_2_0_0_26}/MeshMiniRouter.exe.deploy (81%) rename public/clickonce/minirouter/Application Files/{MeshMiniRouter_2_0_0_25 => MeshMiniRouter_2_0_0_26}/MeshMiniRouter.exe.manifest (83%) rename public/clickonce/minirouter/Application Files/{MeshMiniRouter_2_0_0_25 => MeshMiniRouter_2_0_0_26}/MeshMiniRouter.ico.deploy (100%) diff --git a/agents/meshcore.js b/agents/meshcore.js index c0bc3d94..75c8f226 100644 --- a/agents/meshcore.js +++ b/agents/meshcore.js @@ -461,7 +461,7 @@ function createMeshCore(agent) { } case 'getclip': { // Send the load clipboard back to the user - sendConsoleText('getClip: ' + JSON.stringify(data)); + //sendConsoleText('getClip: ' + JSON.stringify(data)); if (require('MeshAgent').isService) { require('clipboard').dispatchRead().then(function (str) { mesh.SendCommand({ "action": "msg", "type": "getclip", "sessionid": data.sessionid, "data": str }); }); @@ -474,7 +474,7 @@ function createMeshCore(agent) { } case 'setclip': { // Set the load clipboard to a user value - sendConsoleText('setClip: ' + JSON.stringify(data)); + //sendConsoleText('setClip: ' + JSON.stringify(data)); if (typeof data.data == 'string') { if (require('MeshAgent').isService) @@ -1177,22 +1177,20 @@ function createMeshCore(agent) { case 'getclip': if (require('MeshAgent').isService) { require('clipboard').dispatchRead().then(function (str) { sendConsoleText(str, sessionid); }); - } - else { + } else { require("clipboard").read().then(function (str) { sendConsoleText(str, sessionid); }); } break; case 'setclip': { if (args['_'].length != 1) { - response = 'Proper usage: setclip (text)'; - } - else { + response = 'Proper usage: setclip "sample text"'; + } else { if (require('MeshAgent').isService) { require('clipboard').dispatchWrite(args['_'][0]); - response = 'Setting clipboard to: ' + args['_'][0]; + response = 'Setting clipboard to: "' + args['_'][0] + '"'; } else { - require("clipboard")(args['_'][0]); response = 'Setting clipboard to: ' + args['_'][0]; + require("clipboard")(args['_'][0]); response = 'Setting clipboard to: "' + args['_'][0] + '"'; } } break; diff --git a/agents/meshcore.min.js b/agents/meshcore.min.js index 685b4089..5ceee0c2 100644 --- a/agents/meshcore.min.js +++ b/agents/meshcore.min.js @@ -1 +1 @@ -process.on("uncaughtException",function(a){require("MeshAgent").SendCommand({action:"msg",type:"console",value:"uncaughtException1: "+a})});var MESHRIGHT_EDITMESH=1;var MESHRIGHT_MANAGEUSERS=2;var MESHRIGHT_MANAGECOMPUTERS=4;var MESHRIGHT_REMOTECONTROL=8;var MESHRIGHT_AGENTCONSOLE=16;var MESHRIGHT_SERVERFILES=32;var MESHRIGHT_WAKEDEVICE=64;var MESHRIGHT_SETNOTES=128;var MESHRIGHT_REMOTEVIEW=256;var MESHRIGHT_NOTERMINAL=512;var MESHRIGHT_NOFILES=1024;var MESHRIGHT_NOAMT=2048;var MESHRIGHT_LIMITEDINPUT=4096;function createMeshCore(agent){var obj={};var meshCoreObj={action:"coreinfo",value:"MeshCore v6",caps:14};try{require("os").name().then(function(v){meshCoreObj.osdesc=v})}catch(ex){}var meshServerConnectionState=0;var tunnels={};var lastMeInfo=null;var lastNetworkInfo=null;var lastPublicLocationInfo=null;var selfInfoUpdateTimer=null;var http=require("http");var net=require("net");var fs=require("fs");var rtc=require("ILibWebRTC");var amt=null;var processManager=require("process-manager");var wifiScannerLib=null;var wifiScanner=null;var networkMonitor=null;var amtscanner=null;var nextTunnelIndex=1;var amtPolicy=null;if(agent==null){db=require("SimpleDataStore").Shared();sha=require("SHA256Stream");mesh=require("MeshAgent");childProcess=require("child_process");if(mesh.hasKVM==1){try{if((process.platform=="win32")||(process.platform=="darwin")||(require("monitor-info").kvm_x11_support)){meshCoreObj.caps|=1}}catch(ex){}}}else{meshCoreObj.value+="-NodeJS";meshCoreObj.caps=8;mesh=agent.getMeshApi()}try{var AMTScannerModule=require("amt-scanner");amtscanner=new AMTScannerModule()}catch(ex){amtscanner=null}var SMBiosTables=null;var SMBiosTablesRaw=null;try{var SMBiosModule=null;try{SMBiosModule=require("smbios")}catch(ex){}if(SMBiosModule!=null){SMBiosModule.get(function(data){if(data!=null){SMBiosTablesRaw=data;SMBiosTables=require("smbios").parse(data);if(mesh.isControlChannelConnected){mesh.SendCommand({action:"smbios",value:SMBiosTablesRaw})}if(SMBiosTables.amtInfo&&(SMBiosTables.amtInfo.AMT==true)){var amtmodule=require("amt-manage");amt=new amtmodule(mesh,db,true);amt.onStateChange=function(state){if(state==2){sendPeriodicServerUpdate(1)}};if(amtPolicy!=null){amt.setPolicy(amtPolicy)}amt.start()}}})}}catch(ex){sendConsoleText("ex1: "+ex)}try{var wifiScannerLib=require("wifi-scanner");wifiScanner=new wifiScannerLib();wifiScanner.on("accessPoint",function(data){sendConsoleText("wifiScanner: "+data)})}catch(ex){wifiScannerLib=null;wifiScanner=null}var getIpLocationDataExInProgress=false;var getIpLocationDataExCounts=[0,0];function getIpLocationDataEx(func){if(getIpLocationDataExInProgress==true){return false}try{getIpLocationDataExInProgress=true;getIpLocationDataExCounts[0]++;var options=http.parseUri("http://ipinfo.io/json");options.method="GET";http.request(options,function(resp){if(resp.statusCode==200){var geoData="";resp.data=function(geoipdata){geoData+=geoipdata};resp.end=function(){var location=null;try{if(typeof geoData=="string"){var result=JSON.parse(geoData);if(result.ip&&result.loc){location=result}}}catch(e){}if(func){getIpLocationDataExCounts[1]++;func(location)}}}else{func(null)}getIpLocationDataExInProgress=false}).end();return true}catch(e){return false}}function clearGatewayMac(str){if(str==null){return null}var x=JSON.parse(str);for(var i in x.netif){if(x.netif[i].gatewaymac){delete x.netif[i].gatewaymac}}return JSON.stringify(x)}function getIpLocationData(func){var publicLocationInfo=db.Get("publicLocationInfo");if(publicLocationInfo!=null){publicLocationInfo=JSON.parse(publicLocationInfo)}if(publicLocationInfo==null){getIpLocationDataEx(function(locationData){if(locationData!=null){publicLocationInfo={};publicLocationInfo.netInfoStr=lastNetworkInfo;publicLocationInfo.locationData=locationData;var x=db.Put("publicLocationInfo",JSON.stringify(publicLocationInfo));if(func){func(locationData)}}else{if(func){func(null)}}})}else{if(clearGatewayMac(publicLocationInfo.netInfoStr)==clearGatewayMac(lastNetworkInfo)){if(func){func(publicLocationInfo.locationData)}}else{getIpLocationDataEx(function(locationData){if(locationData!=null){publicLocationInfo={};publicLocationInfo.netInfoStr=lastNetworkInfo;publicLocationInfo.locationData=locationData;var x=db.Put("publicLocationInfo",JSON.stringify(publicLocationInfo));if(func){func(locationData)}}else{if(func){func(publicLocationInfo.locationData)}}})}}}if(!String.prototype.endsWith){String.prototype.endsWith=function(searchString,position){var subjectString=this.toString();if(typeof position!=="number"||!isFinite(position)||Math.floor(position)!==position||position>subjectString.length){position=subjectString.length}position-=searchString.length;var lastIndex=subjectString.lastIndexOf(searchString,position);return lastIndex!==-1&&lastIndex===position}}obj.path={join:function(){var x=[];for(var i in arguments){var w=arguments[i];if(w!=null){while(w.endsWith("/")||w.endsWith("\\")){w=w.substring(0,w.length-1)}if(i!=0){while(w.startsWith("/")||w.startsWith("\\")){w=w.substring(1)}}x.push(w)}}if(x.length==0){return"/"}return x.join("/")}};function toNumberIfNumber(x){if((typeof x=="string")&&(+parseInt(x)===x)){x=parseInt(x)}return x}function char2hex(i){return(i+256).toString(16).substr(-2).toUpperCase()}function rstr2hex(input){var r="",i;for(i=0;i8){return"[...]"}if(x==undefined){return"[undefined]"}if(typeof x=="string"){if(p==0){return x}return'"'+x+'"'}if(typeof x=="buffer"){return"[buffer]"}if(typeof x!="object"){return x}var r="{"+(ret?"\r\n":" ");for(var i in x){if(i!="_ObjectID"){r+=(addPad(p+2,pad)+i+": "+objToString(x[i],p+2,pad,ret)+(ret?"\r\n":" "))}}return r+addPad(p,pad)+"}"}function addPad(p,ret){var r="";for(var i=0;i2&&x[0]=="-"&&x[1]=="-"){if(current!=null){results[current]=true}current=x.substring(2)}else{if(current!=null){results[current]=toNumberIfNumber(x);current=null}else{results._.push(toNumberIfNumber(x))}}}if(current!=null){results[current]=true}return results}function getServerTargetUrl(path){var x=mesh.ServerUrl;if(x==null){return null}if(path==null){path=""}x=http.parseUri(x);if(x==null){return null}return x.protocol+"//"+x.host+":"+x.port+"/"+path}function getServerTargetUrlEx(url){if(url.substring(0,2)=="*/"){return getServerTargetUrl(url.substring(2))}return url}function sendWakeOnLan(hexMac){var count=0;try{var interfaces=require("os").networkInterfaces();var magic="FFFFFFFFFFFF";for(var x=1;x<=16;++x){magic+=hexMac}var magicbin=Buffer.from(magic,"hex");for(var adapter in interfaces){if(interfaces.hasOwnProperty(adapter)){for(var i=0;i0){sendNextBlock--;var buf=new Buffer(4096);var len=fs.readSync(this.filedownload.f,buf,4,4092,null);this.filedownload.ptr+=len;if(len<4092){buf.writeInt32BE(16777217,0);fs.closeSync(this.filedownload.f);delete this.filedownload;sendNextBlock=0}else{buf.writeInt32BE(16777216,0)}this.write(buf.slice(0,len+4))}break;case"upload":if(this.httprequest.uploadFile!=undefined){fs.closeSync(this.httprequest.uploadFile);this.httprequest.uploadFile=undefined}if(cmd.path==undefined){break}var filepath=cmd.name?obj.path.join(cmd.path,cmd.name):cmd.path;try{this.httprequest.uploadFile=fs.openSync(filepath,"wbN")}catch(e){this.write(new Buffer(JSON.stringify({action:"uploaderror",reqid:cmd.reqid})));break}this.httprequest.uploadFileid=cmd.reqid;if(this.httprequest.uploadFile){this.write(new Buffer(JSON.stringify({action:"uploadstart",reqid:this.httprequest.uploadFileid})))}break;case"copy":for(var i in cmd.names){var sc=obj.path.join(cmd.scpath,cmd.names[i]),ds=obj.path.join(cmd.dspath,cmd.names[i]);if(sc!=ds){try{fs.copyFileSync(sc,ds)}catch(e){}}}break;case"move":for(var i in cmd.names){var sc=obj.path.join(cmd.scpath,cmd.names[i]),ds=obj.path.join(cmd.dspath,cmd.names[i]);if(sc!=ds){try{fs.copyFileSync(sc,ds);fs.unlinkSync(sc)}catch(e){}}}break;default:break}}}}}}}function deleteFolderRecursive(path,rec){if(fs.existsSync(path)){if(rec==true){fs.readdirSync(obj.path.join(path,"*")).forEach(function(file,index){var curPath=obj.path.join(path,file);if(fs.statSync(curPath).isDirectory()){deleteFolderRecursive(curPath,true)}else{fs.unlinkSync(curPath)}})}fs.unlinkSync(path)}}function onTunnelWebRTCControlData(data){if(typeof data!="string"){return}var obj;try{obj=JSON.parse(data)}catch(e){sendConsoleText("Invalid control JSON on WebRTC: "+data);return}if(obj.type=="close"){try{this.close()}catch(e){}try{this.xrtc.close()}catch(e){}}}function onTunnelControlData(data,ws){var obj;if(ws==null){ws=this}if(typeof data=="string"){try{obj=JSON.parse(data)}catch(e){sendConsoleText("Invalid control JSON: "+data);return}}else{if(typeof data=="object"){obj=data}else{return}}if(obj.action){switch(obj.action){case"lock":try{if(process.platform=="win32"){var child=require("child_process");child.execFile(process.env.windir+"\\system32\\cmd.exe",["/c","RunDll32.exe user32.dll,LockWorkStation"],{type:1})}}catch(e){}break;default:break}return}if(obj.type=="close"){try{ws.close()}catch(e){}}else{if(obj.type=="webrtc0"){if(ws.httprequest.protocol==1){if(process.platform=="win32"){ws.httprequest._term.unpipe(ws)}else{ws.httprequest.process.stdout.unpipe(ws);ws.httprequest.process.stderr.unpipe(ws)}}else{if(ws.httprequest.protocol==2){ws.httprequest.desktop.kvm.unpipe(ws)}else{ws.rtcchannel.httprequest=ws.httprequest;ws.rtcchannel.removeAllListeners("data");ws.rtcchannel.on("data",onTunnelData)}}ws.write('{"ctrlChannel":"102938","type":"webrtc1"}')}else{if(obj.type=="webrtc1"){if(ws.httprequest.protocol==1){if(process.platform=="win32"){ws.unpipe(ws.httprequest._term);ws.rtcchannel.pipe(ws.httprequest._term,{dataTypeSkip:1})}else{ws.unpipe(ws.httprequest.process.stdin);ws.rtcchannel.pipe(ws.httprequest.process.stdin,{dataTypeSkip:1})}ws.resume()}else{if(ws.httprequest.protocol==2){ws.unpipe(ws.httprequest.desktop.kvm);try{ws.webrtc.rtcchannel.pipe(ws.httprequest.desktop.kvm,{dataTypeSkip:1,end:false})}catch(e){sendConsoleText("EX2")}ws.resume()}}ws.write('{"ctrlChannel":"102938","type":"webrtc2"}')}else{if(obj.type=="webrtc2"){if(ws.httprequest.protocol==1){if(process.platform=="win32"){ws.httprequest._term.pipe(ws.webrtc.rtcchannel,{dataTypeSkip:1,end:false})}else{ws.httprequest.process.stdout.pipe(ws.webrtc.rtcchannel,{dataTypeSkip:1,end:false});ws.httprequest.process.stderr.pipe(ws.webrtc.rtcchannel,{dataTypeSkip:1,end:false})}}else{if(ws.httprequest.protocol==2){ws.httprequest.desktop.kvm.pipe(ws.webrtc.rtcchannel,{dataTypeSkip:1})}}}else{if(obj.type=="offer"){if(ws.httprequest.protocol==1){return}ws.webrtc=rtc.createConnection();ws.webrtc.websocket=ws;ws.webrtc.on("connected",function(){});ws.webrtc.on("disconnected",function(){});ws.webrtc.on("dataChannel",function(rtcchannel){rtcchannel.xrtc=this;rtcchannel.websocket=this.websocket;this.rtcchannel=rtcchannel;this.websocket.rtcchannel=rtcchannel;this.websocket.rtcchannel.on("data",onTunnelWebRTCControlData);this.websocket.rtcchannel.on("end",function(){if(this.websocket.desktop&&this.websocket.desktop.kvm){this.unpipe(this.websocket.desktop.kvm);this.websocket.httprequest.desktop.kvm.unpipe(this)}});this.websocket.write('{"ctrlChannel":"102938","type":"webrtc0"}')});var sdp=null;try{sdp=ws.webrtc.setOffer(obj.sdp)}catch(ex){}if(sdp!=null){ws.write({type:"answer",ctrlChannel:"102938",sdp:sdp})}}}}}}}var consoleWebSockets={};var consoleHttpRequest=null;function consoleHttpResponse(response){response.data=function(data){sendConsoleText(rstr2hex(buf2rstr(data)),this.sessionid);consoleHttpRequest=null};response.close=function(){sendConsoleText("httprequest.response.close",this.sessionid);consoleHttpRequest=null}}function openUserDesktopUrl(url){var child=null;try{switch(process.platform){case"win32":child=require("child_process").execFile(process.env.windir+"\\system32\\cmd.exe",["/c","start",url],{type:childProcess.SpawnTypes.USER});break;case"linux":child=require("child_process").execFile("/usr/bin/xdg-open",["xdg-open",url],{uid:require("user-sessions").consoleUid()});break;case"darwin":child=require("child_process").execFile("/usr/bin/open",["open",url],{uid:require("user-sessions").consoleUid()});break;default:break}}catch(ex){}return child}function processConsoleCommand(cmd,args,rights,sessionid){try{var response=null;switch(cmd){case"help":response="Available commands: help, info, osinfo,args, print, type, dbget, dbset, dbcompact, eval, parseuri, httpget,\r\nwslist, wsconnect, wssend, wsclose, notify, ls, ps, kill, amt, netinfo, location, power, wakeonlan, scanwifi,\r\nscanamt, setdebug, smbios, rawsmbios, toast, lock, users, sendcaps, openurl, amtreset, amtccm, amtdeactivate,\r\namtpolicy, getscript, getclip, setclip.";break;case"getclip":if(require("MeshAgent").isService){require("clipboard").dispatchRead().then(function(str){sendConsoleText(str,sessionid)})}else{require("clipboard").read().then(function(str){sendConsoleText(str,sessionid)})}break;case"setclip":if(args._.length!=1){response="Proper usage: setclip (text)"}else{if(require("MeshAgent").isService){require("clipboard").dispatchWrite(args._[0]);response="Setting clipboard to: "+args._[0]}else{require("clipboard")(args._[0]);response="Setting clipboard to: "+args._[0]}}break;case"amtreset":if(amt!=null){amt.reset();response="Done."}break;case"amtlmsreset":if(amt!=null){amt.lmsreset();response="Done."}break;case"amtccm":if(amt==null){response="Intel AMT not supported."}else{if(args._.length!=1){response="Proper usage: amtccm (adminPassword)"}else{amt.setPolicy({type:0});amt.activeToCCM(args._[0])}}break;case"amtdeactivate":if(amt==null){response="Intel AMT not supported."}else{amt.setPolicy({type:0});amt.deactivateCCM()}break;case"amtpolicy":if(amtPolicy==null){response="No Intel(R) AMT policy."}else{response=JSON.stringify(amtPolicy)}break;case"openurl":if(args._.length!=1){response="Proper usage: openurl (url)"}else{if(openUserDesktopUrl(args._[0])==null){response="Failed."}else{response="Success."}}break;case"users":if(meshCoreObj.users==null){response="Active users are unknown."}else{response="Active Users: "+meshCoreObj.users.join(", ")+"."}require("user-sessions").enumerateUsers().then(function(u){for(var i in u){sendConsoleText(u[i])}});break;case"toast":if(process.platform=="win32"){if(args._.length<1){response='Proper usage: toast "message"'}else{require("toaster").Toast("MeshCentral",args._[0]);response="ok"}}else{response="Only supported on Windows."}break;case"setdebug":if(args._.length<1){response="Proper usage: setdebug (target), 0 = Disabled, 1 = StdOut, 2 = This Console, * = All Consoles, 4 = WebLog, 8 = Logfile"}else{if(args._[0]=="*"){console.setDestination(2)}else{console.setDestination(parseInt(args._[0]),sessionid)}}break;case"ps":processManager.getProcesses(function(plist){var x="";for(var i in plist){x+=i+", "+plist[i].cmd+((plist[i].user)?(", "+plist[i].user):"")+"\r\n"}sendConsoleText(x,sessionid)});break;case"kill":if((args._.length<1)){response="Proper usage: kill [pid]"}else{process.kill(parseInt(args._[0]));response="Killed process "+args._[0]+"."}break;case"smbios":if(SMBiosTables==null){response="SMBios tables not available."}else{response=objToString(SMBiosTables,0," ",true)}break;case"rawsmbios":if(SMBiosTablesRaw==null){response="SMBios tables not available."}else{response="";for(var i in SMBiosTablesRaw){var header=false;for(var j in SMBiosTablesRaw[i]){if(SMBiosTablesRaw[i][j].length>0){if(header==false){response+=("Table type #"+i+((require("smbios").smTableTypes[i]==null)?"":(", "+require("smbios").smTableTypes[i])))+"\r\n";header=true}response+=(" "+SMBiosTablesRaw[i][j].toString("hex"))+"\r\n"}}}}break;case"eval":if(args._.length<1){response='Proper usage: eval "JavaScript code"'}else{response=JSON.stringify(mesh.eval(args._[0]))}break;case"notify":if(args._.length!=1){response='Proper usage: notify "message" [--session]'}else{var notification={action:"msg",type:"notify",value:args._[0],tag:"console"};if(args.session){notification.sessionid=sessionid}mesh.SendCommand(notification);response="ok"}break;case"info":response="Current Core: "+meshCoreObj.value+".\r\nAgent Time: "+Date()+".\r\nUser Rights: 0x"+rights.toString(16)+".\r\nPlatform: "+process.platform+".\r\nCapabilities: "+meshCoreObj.caps+".\r\nServer URL: "+mesh.ServerUrl+".";if(amt!=null){response+="\r\nBuilt-in LMS: "+["Disabled","Connecting..","Connected"][amt.lmsstate]+"."}if(meshCoreObj.osdesc){response+="\r\nOS: "+meshCoreObj.osdesc+"."}response+="\r\nModules: "+addedModules.join(", ")+".";response+="\r\nServer Connection: "+mesh.isControlChannelConnected+", State: "+meshServerConnectionState+".";response+="\rlastMeInfo: "+lastMeInfo+".";var oldNodeId=db.Get("OldNodeId");if(oldNodeId!=null){response+="\r\nOldNodeID: "+oldNodeId+"."}if(process.platform!="win32"){response+="\r\nX11 support: "+require("monitor-info").kvm_x11_support+"."}break;case"osinfo":var i=1;if(args._.length>0){i=parseInt(args._[0]);if(i>8){i=8}response="Calling "+i+" times."}for(var j=0;j0){meshCoreObj.osdesc=args._[0];mesh.SendCommand(meshCoreObj);response=JSON.stringify(meshCoreObj)}else{response="Proper usage: sendosdesc [os description]"}break;case"args":response="args "+objToString(args,0," ",true);break;case"print":var r=[];for(var i in args._){r.push(args._[i])}console.log(r.join(" "));response="Message printed on agent console.";break;case"type":if(args._.length==0){response="Proper usage: type (filepath) [maxlength]"}else{var max=4096;if((args._.length>1)&&(typeof args._[1]=="number")){max=args._[1]}if(max>4096){max=4096}var buf=Buffer.alloc(max),fd=fs.openSync(args._[0],"r"),r=fs.readSync(fd,buf,0,max);response=buf.toString();var i=response.indexOf("\n");if((i>0)&&(response[i-1]!="\r")){response=response.split("\n").join("\r\n")}if(r==max){response+="..."}fs.closeSync(fd)}break;case"dbkeys":response=JSON.stringify(db.Keys);break;case"dbget":if(db==null){response="Database not accessible.";break}if(args._.length!=1){response="Proper usage: dbget (key)"}else{response=db.Get(args._[0])}break;case"dbset":if(db==null){response="Database not accessible.";break}if(args._.length!=2){response="Proper usage: dbset (key) (value)"}else{var r=db.Put(args._[0],args._[1]);response="Key set: "+r}break;case"dbcompact":if(db==null){response="Database not accessible.";break}var r=db.Compact();response="Database compacted: "+r;break;case"httpget":if(consoleHttpRequest!=null){response="HTTP operation already in progress."}else{if(args._.length!=1){response="Proper usage: httpget (url)"}else{var options=http.parseUri(args._[0]);options.method="GET";if(options==null){response="Invalid url."}else{try{consoleHttpRequest=http.request(options,consoleHttpResponse)}catch(e){response="Invalid HTTP GET request"}consoleHttpRequest.sessionid=sessionid;if(consoleHttpRequest!=null){consoleHttpRequest.end();response="HTTPGET "+options.protocol+"//"+options.host+":"+options.port+options.path}}}}break;case"wslist":response="";for(var i in consoleWebSockets){var httprequest=consoleWebSockets[i];response+="Websocket #"+i+", "+httprequest.url+"\r\n"}if(response==""){response="no websocket sessions."}break;case"wsconnect":if(args._.length==0){response="Proper usage: wsconnect (url)\r\nFor example: wsconnect wss://localhost:443/meshrelay.ashx?id=abc"}else{var httprequest=null;try{var options=http.parseUri(args._[0]);options.rejectUnauthorized=0;httprequest=http.request(options)}catch(e){response="Invalid HTTP websocket request"}if(httprequest!=null){httprequest.upgrade=onWebSocketUpgrade;httprequest.on("error",function(e){sendConsoleText("ERROR: "+JSON.stringify(e))});var index=1;while(consoleWebSockets[index]){index++}httprequest.sessionid=sessionid;httprequest.index=index;httprequest.url=args._[0];consoleWebSockets[index]=httprequest;response="New websocket session #"+index}}break;case"wssend":if(args._.length==0){response="Proper usage: wssend (socketnumber)\r\n";for(var i in consoleWebSockets){var httprequest=consoleWebSockets[i];response+="Websocket #"+i+", "+httprequest.url+"\r\n"}}else{var i=parseInt(args._[0]);var httprequest=consoleWebSockets[i];if(httprequest!=undefined){httprequest.s.write(args._[1]);response="ok"}else{response="Invalid web socket number"}}break;case"wsclose":if(args._.length==0){response="Proper usage: wsclose (socketnumber)"}else{var i=parseInt(args._[0]);var httprequest=consoleWebSockets[i];if(httprequest!=undefined){if(httprequest.s!=null){httprequest.s.end()}else{httprequest.end()}response="ok"}else{response="Invalid web socket number"}}break;case"tunnels":response="";for(var i in tunnels){response+="Tunnel #"+i+", "+tunnels[i].url+"\r\n"}if(response==""){response="No websocket sessions."}break;case"ls":response="";var xpath="*";if(args._.length>0){xpath=obj.path.join(args._[0],"*")}response="List of "+xpath+"\r\n";var results=fs.readdirSync(xpath);for(var i=0;i0){var r="",pstates=["NotActivated","InActivation","Activated"];for(var i in data){var x=data[i];if(r!=""){r+="\r\n"}r+=x.address+" - Intel AMT v"+x.majorVersion+"."+x.minorVersion;if(x.provisioningState<3){r+=(", "+pstates[x.provisioningState])}if(x.provisioningState==2){r+=(", "+x.openPorts.join(", "))}r+="."}}else{r="No Intel AMT found."}sendConsoleText(r)})}}else{response="Intel AMT scanner module not present."}break;case"modules":response=JSON.stringify(addedModules);break;case"getscript":if(args._.length!=1){response="Proper usage: getscript [scriptNumber]."}else{mesh.SendCommand({action:"getScript",type:args._[0]})}break;default:response='Unknown command "'+cmd+'", type "help" for list of avaialble commands.';break}}catch(e){response="Command returned an exception error: "+e;console.log(e)}if(response!=null){sendConsoleText(response,sessionid)}}function sendConsoleText(text,sessionid){if(typeof text=="object"){text=JSON.stringify(text)}mesh.SendCommand({action:"msg",type:"console",value:text,sessionid:sessionid})}function handleServerConnection(state){meshServerConnectionState=state;if(meshServerConnectionState==0){if(selfInfoUpdateTimer!=null){clearInterval(selfInfoUpdateTimer);selfInfoUpdateTimer=null}lastSelfInfo=null}else{var oldNodeId=db.Get("OldNodeId");if(oldNodeId!=null){mesh.SendCommand({action:"mc1migration",oldnodeid:oldNodeId})}mesh.SendCommand(meshCoreObj);if(SMBiosTablesRaw!=null){mesh.SendCommand({action:"smbios",value:SMBiosTablesRaw})}meInfoStr=null;sendPeriodicServerUpdate()}}var sendNetworkUpdateNagleTimer=null;function sendNetworkUpdateNagle(){if(sendNetworkUpdateNagleTimer!=null){clearTimeout(sendNetworkUpdateNagleTimer);sendNetworkUpdateNagleTimer=null}sendNetworkUpdateNagleTimer=setTimeout(sendNetworkUpdate,5000)}function sendNetworkUpdate(force){sendNetworkUpdateNagleTimer=null;var netInfo=mesh.NetInfo;netInfo.action="netinfo";var netInfoStr=JSON.stringify(netInfo);if((force==true)||(clearGatewayMac(netInfoStr)!=clearGatewayMac(lastNetworkInfo))){mesh.SendCommand(netInfo);lastNetworkInfo=netInfoStr}}function sendPeriodicServerUpdate(flags){if(meshServerConnectionState==0){return}if(!flags){flags=4294967295}if((flags&1)&&(amt!=null)){amt.getAmtInfo(function(meinfo){try{if(meinfo==null){return}var intelamt={},p=false;if(meinfo.Versions&&meinfo.Versions.AMT){intelamt.ver=meinfo.Versions.AMT;p=true}if(meinfo.ProvisioningState){intelamt.state=meinfo.ProvisioningState;p=true}if(meinfo.Flags){intelamt.flags=meinfo.Flags;p=true}if(meinfo.OsHostname){intelamt.host=meinfo.OsHostname;p=true}if(meinfo.UUID){intelamt.uuid=meinfo.UUID;p=true}if(p==true){var meInfoStr=JSON.stringify(intelamt);if(meInfoStr!=lastMeInfo){meshCoreObj.intelamt=intelamt;mesh.SendCommand(meshCoreObj);lastMeInfo=meInfoStr}}}catch(ex){}})}if(flags&2){sendNetworkUpdateNagle(false)}}obj.start=function(){mesh.AddCommandHandler(handleServerCommand);mesh.AddConnectHandler(handleServerConnection);try{var userSession=require("user-sessions");userSession.on("changed",function onUserSessionChanged(){userSession.enumerateUsers().then(function(users){var u=[],a=users.Active;for(var i=0;isubjectString.length){position=subjectString.length}position-=searchString.length;var lastIndex=subjectString.lastIndexOf(searchString,position);return lastIndex!==-1&&lastIndex===position}}obj.path={join:function(){var x=[];for(var i in arguments){var w=arguments[i];if(w!=null){while(w.endsWith("/")||w.endsWith("\\")){w=w.substring(0,w.length-1)}if(i!=0){while(w.startsWith("/")||w.startsWith("\\")){w=w.substring(1)}}x.push(w)}}if(x.length==0){return"/"}return x.join("/")}};function toNumberIfNumber(x){if((typeof x=="string")&&(+parseInt(x)===x)){x=parseInt(x)}return x}function char2hex(i){return(i+256).toString(16).substr(-2).toUpperCase()}function rstr2hex(input){var r="",i;for(i=0;i8){return"[...]"}if(x==undefined){return"[undefined]"}if(typeof x=="string"){if(p==0){return x}return'"'+x+'"'}if(typeof x=="buffer"){return"[buffer]"}if(typeof x!="object"){return x}var r="{"+(ret?"\r\n":" ");for(var i in x){if(i!="_ObjectID"){r+=(addPad(p+2,pad)+i+": "+objToString(x[i],p+2,pad,ret)+(ret?"\r\n":" "))}}return r+addPad(p,pad)+"}"}function addPad(p,ret){var r="";for(var i=0;i2&&x[0]=="-"&&x[1]=="-"){if(current!=null){results[current]=true}current=x.substring(2)}else{if(current!=null){results[current]=toNumberIfNumber(x);current=null}else{results._.push(toNumberIfNumber(x))}}}if(current!=null){results[current]=true}return results}function getServerTargetUrl(path){var x=mesh.ServerUrl;if(x==null){return null}if(path==null){path=""}x=http.parseUri(x);if(x==null){return null}return x.protocol+"//"+x.host+":"+x.port+"/"+path}function getServerTargetUrlEx(url){if(url.substring(0,2)=="*/"){return getServerTargetUrl(url.substring(2))}return url}function sendWakeOnLan(hexMac){var count=0;try{var interfaces=require("os").networkInterfaces();var magic="FFFFFFFFFFFF";for(var x=1;x<=16;++x){magic+=hexMac}var magicbin=Buffer.from(magic,"hex");for(var adapter in interfaces){if(interfaces.hasOwnProperty(adapter)){for(var i=0;i0){sendNextBlock--;var buf=new Buffer(4096);var len=fs.readSync(this.filedownload.f,buf,4,4092,null);this.filedownload.ptr+=len;if(len<4092){buf.writeInt32BE(16777217,0);fs.closeSync(this.filedownload.f);delete this.filedownload;sendNextBlock=0}else{buf.writeInt32BE(16777216,0)}this.write(buf.slice(0,len+4))}break;case"upload":if(this.httprequest.uploadFile!=undefined){fs.closeSync(this.httprequest.uploadFile);this.httprequest.uploadFile=undefined}if(cmd.path==undefined){break}var filepath=cmd.name?obj.path.join(cmd.path,cmd.name):cmd.path;try{this.httprequest.uploadFile=fs.openSync(filepath,"wbN")}catch(e){this.write(new Buffer(JSON.stringify({action:"uploaderror",reqid:cmd.reqid})));break}this.httprequest.uploadFileid=cmd.reqid;if(this.httprequest.uploadFile){this.write(new Buffer(JSON.stringify({action:"uploadstart",reqid:this.httprequest.uploadFileid})))}break;case"copy":for(var i in cmd.names){var sc=obj.path.join(cmd.scpath,cmd.names[i]),ds=obj.path.join(cmd.dspath,cmd.names[i]);if(sc!=ds){try{fs.copyFileSync(sc,ds)}catch(e){}}}break;case"move":for(var i in cmd.names){var sc=obj.path.join(cmd.scpath,cmd.names[i]),ds=obj.path.join(cmd.dspath,cmd.names[i]);if(sc!=ds){try{fs.copyFileSync(sc,ds);fs.unlinkSync(sc)}catch(e){}}}break;default:break}}}}}}}function deleteFolderRecursive(path,rec){if(fs.existsSync(path)){if(rec==true){fs.readdirSync(obj.path.join(path,"*")).forEach(function(file,index){var curPath=obj.path.join(path,file);if(fs.statSync(curPath).isDirectory()){deleteFolderRecursive(curPath,true)}else{fs.unlinkSync(curPath)}})}fs.unlinkSync(path)}}function onTunnelWebRTCControlData(data){if(typeof data!="string"){return}var obj;try{obj=JSON.parse(data)}catch(e){sendConsoleText("Invalid control JSON on WebRTC: "+data);return}if(obj.type=="close"){try{this.close()}catch(e){}try{this.xrtc.close()}catch(e){}}}function onTunnelControlData(data,ws){var obj;if(ws==null){ws=this}if(typeof data=="string"){try{obj=JSON.parse(data)}catch(e){sendConsoleText("Invalid control JSON: "+data);return}}else{if(typeof data=="object"){obj=data}else{return}}if(obj.action){switch(obj.action){case"lock":try{if(process.platform=="win32"){var child=require("child_process");child.execFile(process.env.windir+"\\system32\\cmd.exe",["/c","RunDll32.exe user32.dll,LockWorkStation"],{type:1})}}catch(e){}break;default:break}return}if(obj.type=="close"){try{ws.close()}catch(e){}}else{if(obj.type=="webrtc0"){if(ws.httprequest.protocol==1){if(process.platform=="win32"){ws.httprequest._term.unpipe(ws)}else{ws.httprequest.process.stdout.unpipe(ws);ws.httprequest.process.stderr.unpipe(ws)}}else{if(ws.httprequest.protocol==2){ws.httprequest.desktop.kvm.unpipe(ws)}else{ws.rtcchannel.httprequest=ws.httprequest;ws.rtcchannel.removeAllListeners("data");ws.rtcchannel.on("data",onTunnelData)}}ws.write('{"ctrlChannel":"102938","type":"webrtc1"}')}else{if(obj.type=="webrtc1"){if(ws.httprequest.protocol==1){if(process.platform=="win32"){ws.unpipe(ws.httprequest._term);ws.rtcchannel.pipe(ws.httprequest._term,{dataTypeSkip:1})}else{ws.unpipe(ws.httprequest.process.stdin);ws.rtcchannel.pipe(ws.httprequest.process.stdin,{dataTypeSkip:1})}ws.resume()}else{if(ws.httprequest.protocol==2){ws.unpipe(ws.httprequest.desktop.kvm);try{ws.webrtc.rtcchannel.pipe(ws.httprequest.desktop.kvm,{dataTypeSkip:1,end:false})}catch(e){sendConsoleText("EX2")}ws.resume()}}ws.write('{"ctrlChannel":"102938","type":"webrtc2"}')}else{if(obj.type=="webrtc2"){if(ws.httprequest.protocol==1){if(process.platform=="win32"){ws.httprequest._term.pipe(ws.webrtc.rtcchannel,{dataTypeSkip:1,end:false})}else{ws.httprequest.process.stdout.pipe(ws.webrtc.rtcchannel,{dataTypeSkip:1,end:false});ws.httprequest.process.stderr.pipe(ws.webrtc.rtcchannel,{dataTypeSkip:1,end:false})}}else{if(ws.httprequest.protocol==2){ws.httprequest.desktop.kvm.pipe(ws.webrtc.rtcchannel,{dataTypeSkip:1})}}}else{if(obj.type=="offer"){if(ws.httprequest.protocol==1){return}ws.webrtc=rtc.createConnection();ws.webrtc.websocket=ws;ws.webrtc.on("connected",function(){});ws.webrtc.on("disconnected",function(){});ws.webrtc.on("dataChannel",function(rtcchannel){rtcchannel.xrtc=this;rtcchannel.websocket=this.websocket;this.rtcchannel=rtcchannel;this.websocket.rtcchannel=rtcchannel;this.websocket.rtcchannel.on("data",onTunnelWebRTCControlData);this.websocket.rtcchannel.on("end",function(){if(this.websocket.desktop&&this.websocket.desktop.kvm){this.unpipe(this.websocket.desktop.kvm);this.websocket.httprequest.desktop.kvm.unpipe(this)}});this.websocket.write('{"ctrlChannel":"102938","type":"webrtc0"}')});var sdp=null;try{sdp=ws.webrtc.setOffer(obj.sdp)}catch(ex){}if(sdp!=null){ws.write({type:"answer",ctrlChannel:"102938",sdp:sdp})}}}}}}}var consoleWebSockets={};var consoleHttpRequest=null;function consoleHttpResponse(response){response.data=function(data){sendConsoleText(rstr2hex(buf2rstr(data)),this.sessionid);consoleHttpRequest=null};response.close=function(){sendConsoleText("httprequest.response.close",this.sessionid);consoleHttpRequest=null}}function openUserDesktopUrl(url){var child=null;try{switch(process.platform){case"win32":child=require("child_process").execFile(process.env.windir+"\\system32\\cmd.exe",["/c","start",url],{type:childProcess.SpawnTypes.USER});break;case"linux":child=require("child_process").execFile("/usr/bin/xdg-open",["xdg-open",url],{uid:require("user-sessions").consoleUid()});break;case"darwin":child=require("child_process").execFile("/usr/bin/open",["open",url],{uid:require("user-sessions").consoleUid()});break;default:break}}catch(ex){}return child}function processConsoleCommand(cmd,args,rights,sessionid){try{var response=null;switch(cmd){case"help":response="Available commands: help, info, osinfo,args, print, type, dbget, dbset, dbcompact, eval, parseuri, httpget,\r\nwslist, wsconnect, wssend, wsclose, notify, ls, ps, kill, amt, netinfo, location, power, wakeonlan, scanwifi,\r\nscanamt, setdebug, smbios, rawsmbios, toast, lock, users, sendcaps, openurl, amtreset, amtccm, amtdeactivate,\r\namtpolicy, getscript, getclip, setclip.";break;case"getclip":if(require("MeshAgent").isService){require("clipboard").dispatchRead().then(function(str){sendConsoleText(str,sessionid)})}else{require("clipboard").read().then(function(str){sendConsoleText(str,sessionid)})}break;case"setclip":if(args._.length!=1){response='Proper usage: setclip "sample text"'}else{if(require("MeshAgent").isService){require("clipboard").dispatchWrite(args._[0]);response='Setting clipboard to: "'+args._[0]+'"'}else{require("clipboard")(args._[0]);response='Setting clipboard to: "'+args._[0]+'"'}}break;case"amtreset":if(amt!=null){amt.reset();response="Done."}break;case"amtlmsreset":if(amt!=null){amt.lmsreset();response="Done."}break;case"amtccm":if(amt==null){response="Intel AMT not supported."}else{if(args._.length!=1){response="Proper usage: amtccm (adminPassword)"}else{amt.setPolicy({type:0});amt.activeToCCM(args._[0])}}break;case"amtdeactivate":if(amt==null){response="Intel AMT not supported."}else{amt.setPolicy({type:0});amt.deactivateCCM()}break;case"amtpolicy":if(amtPolicy==null){response="No Intel(R) AMT policy."}else{response=JSON.stringify(amtPolicy)}break;case"openurl":if(args._.length!=1){response="Proper usage: openurl (url)"}else{if(openUserDesktopUrl(args._[0])==null){response="Failed."}else{response="Success."}}break;case"users":if(meshCoreObj.users==null){response="Active users are unknown."}else{response="Active Users: "+meshCoreObj.users.join(", ")+"."}require("user-sessions").enumerateUsers().then(function(u){for(var i in u){sendConsoleText(u[i])}});break;case"toast":if(process.platform=="win32"){if(args._.length<1){response='Proper usage: toast "message"'}else{require("toaster").Toast("MeshCentral",args._[0]);response="ok"}}else{response="Only supported on Windows."}break;case"setdebug":if(args._.length<1){response="Proper usage: setdebug (target), 0 = Disabled, 1 = StdOut, 2 = This Console, * = All Consoles, 4 = WebLog, 8 = Logfile"}else{if(args._[0]=="*"){console.setDestination(2)}else{console.setDestination(parseInt(args._[0]),sessionid)}}break;case"ps":processManager.getProcesses(function(plist){var x="";for(var i in plist){x+=i+", "+plist[i].cmd+((plist[i].user)?(", "+plist[i].user):"")+"\r\n"}sendConsoleText(x,sessionid)});break;case"kill":if((args._.length<1)){response="Proper usage: kill [pid]"}else{process.kill(parseInt(args._[0]));response="Killed process "+args._[0]+"."}break;case"smbios":if(SMBiosTables==null){response="SMBios tables not available."}else{response=objToString(SMBiosTables,0," ",true)}break;case"rawsmbios":if(SMBiosTablesRaw==null){response="SMBios tables not available."}else{response="";for(var i in SMBiosTablesRaw){var header=false;for(var j in SMBiosTablesRaw[i]){if(SMBiosTablesRaw[i][j].length>0){if(header==false){response+=("Table type #"+i+((require("smbios").smTableTypes[i]==null)?"":(", "+require("smbios").smTableTypes[i])))+"\r\n";header=true}response+=(" "+SMBiosTablesRaw[i][j].toString("hex"))+"\r\n"}}}}break;case"eval":if(args._.length<1){response='Proper usage: eval "JavaScript code"'}else{response=JSON.stringify(mesh.eval(args._[0]))}break;case"notify":if(args._.length!=1){response='Proper usage: notify "message" [--session]'}else{var notification={action:"msg",type:"notify",value:args._[0],tag:"console"};if(args.session){notification.sessionid=sessionid}mesh.SendCommand(notification);response="ok"}break;case"info":response="Current Core: "+meshCoreObj.value+".\r\nAgent Time: "+Date()+".\r\nUser Rights: 0x"+rights.toString(16)+".\r\nPlatform: "+process.platform+".\r\nCapabilities: "+meshCoreObj.caps+".\r\nServer URL: "+mesh.ServerUrl+".";if(amt!=null){response+="\r\nBuilt-in LMS: "+["Disabled","Connecting..","Connected"][amt.lmsstate]+"."}if(meshCoreObj.osdesc){response+="\r\nOS: "+meshCoreObj.osdesc+"."}response+="\r\nModules: "+addedModules.join(", ")+".";response+="\r\nServer Connection: "+mesh.isControlChannelConnected+", State: "+meshServerConnectionState+".";response+="\rlastMeInfo: "+lastMeInfo+".";var oldNodeId=db.Get("OldNodeId");if(oldNodeId!=null){response+="\r\nOldNodeID: "+oldNodeId+"."}if(process.platform!="win32"){response+="\r\nX11 support: "+require("monitor-info").kvm_x11_support+"."}break;case"osinfo":var i=1;if(args._.length>0){i=parseInt(args._[0]);if(i>8){i=8}response="Calling "+i+" times."}for(var j=0;j0){meshCoreObj.osdesc=args._[0];mesh.SendCommand(meshCoreObj);response=JSON.stringify(meshCoreObj)}else{response="Proper usage: sendosdesc [os description]"}break;case"args":response="args "+objToString(args,0," ",true);break;case"print":var r=[];for(var i in args._){r.push(args._[i])}console.log(r.join(" "));response="Message printed on agent console.";break;case"type":if(args._.length==0){response="Proper usage: type (filepath) [maxlength]"}else{var max=4096;if((args._.length>1)&&(typeof args._[1]=="number")){max=args._[1]}if(max>4096){max=4096}var buf=Buffer.alloc(max),fd=fs.openSync(args._[0],"r"),r=fs.readSync(fd,buf,0,max);response=buf.toString();var i=response.indexOf("\n");if((i>0)&&(response[i-1]!="\r")){response=response.split("\n").join("\r\n")}if(r==max){response+="..."}fs.closeSync(fd)}break;case"dbkeys":response=JSON.stringify(db.Keys);break;case"dbget":if(db==null){response="Database not accessible.";break}if(args._.length!=1){response="Proper usage: dbget (key)"}else{response=db.Get(args._[0])}break;case"dbset":if(db==null){response="Database not accessible.";break}if(args._.length!=2){response="Proper usage: dbset (key) (value)"}else{var r=db.Put(args._[0],args._[1]);response="Key set: "+r}break;case"dbcompact":if(db==null){response="Database not accessible.";break}var r=db.Compact();response="Database compacted: "+r;break;case"httpget":if(consoleHttpRequest!=null){response="HTTP operation already in progress."}else{if(args._.length!=1){response="Proper usage: httpget (url)"}else{var options=http.parseUri(args._[0]);options.method="GET";if(options==null){response="Invalid url."}else{try{consoleHttpRequest=http.request(options,consoleHttpResponse)}catch(e){response="Invalid HTTP GET request"}consoleHttpRequest.sessionid=sessionid;if(consoleHttpRequest!=null){consoleHttpRequest.end();response="HTTPGET "+options.protocol+"//"+options.host+":"+options.port+options.path}}}}break;case"wslist":response="";for(var i in consoleWebSockets){var httprequest=consoleWebSockets[i];response+="Websocket #"+i+", "+httprequest.url+"\r\n"}if(response==""){response="no websocket sessions."}break;case"wsconnect":if(args._.length==0){response="Proper usage: wsconnect (url)\r\nFor example: wsconnect wss://localhost:443/meshrelay.ashx?id=abc"}else{var httprequest=null;try{var options=http.parseUri(args._[0]);options.rejectUnauthorized=0;httprequest=http.request(options)}catch(e){response="Invalid HTTP websocket request"}if(httprequest!=null){httprequest.upgrade=onWebSocketUpgrade;httprequest.on("error",function(e){sendConsoleText("ERROR: "+JSON.stringify(e))});var index=1;while(consoleWebSockets[index]){index++}httprequest.sessionid=sessionid;httprequest.index=index;httprequest.url=args._[0];consoleWebSockets[index]=httprequest;response="New websocket session #"+index}}break;case"wssend":if(args._.length==0){response="Proper usage: wssend (socketnumber)\r\n";for(var i in consoleWebSockets){var httprequest=consoleWebSockets[i];response+="Websocket #"+i+", "+httprequest.url+"\r\n"}}else{var i=parseInt(args._[0]);var httprequest=consoleWebSockets[i];if(httprequest!=undefined){httprequest.s.write(args._[1]);response="ok"}else{response="Invalid web socket number"}}break;case"wsclose":if(args._.length==0){response="Proper usage: wsclose (socketnumber)"}else{var i=parseInt(args._[0]);var httprequest=consoleWebSockets[i];if(httprequest!=undefined){if(httprequest.s!=null){httprequest.s.end()}else{httprequest.end()}response="ok"}else{response="Invalid web socket number"}}break;case"tunnels":response="";for(var i in tunnels){response+="Tunnel #"+i+", "+tunnels[i].url+"\r\n"}if(response==""){response="No websocket sessions."}break;case"ls":response="";var xpath="*";if(args._.length>0){xpath=obj.path.join(args._[0],"*")}response="List of "+xpath+"\r\n";var results=fs.readdirSync(xpath);for(var i=0;i0){var r="",pstates=["NotActivated","InActivation","Activated"];for(var i in data){var x=data[i];if(r!=""){r+="\r\n"}r+=x.address+" - Intel AMT v"+x.majorVersion+"."+x.minorVersion;if(x.provisioningState<3){r+=(", "+pstates[x.provisioningState])}if(x.provisioningState==2){r+=(", "+x.openPorts.join(", "))}r+="."}}else{r="No Intel AMT found."}sendConsoleText(r)})}}else{response="Intel AMT scanner module not present."}break;case"modules":response=JSON.stringify(addedModules);break;case"getscript":if(args._.length!=1){response="Proper usage: getscript [scriptNumber]."}else{mesh.SendCommand({action:"getScript",type:args._[0]})}break;default:response='Unknown command "'+cmd+'", type "help" for list of avaialble commands.';break}}catch(e){response="Command returned an exception error: "+e;console.log(e)}if(response!=null){sendConsoleText(response,sessionid)}}function sendConsoleText(text,sessionid){if(typeof text=="object"){text=JSON.stringify(text)}mesh.SendCommand({action:"msg",type:"console",value:text,sessionid:sessionid})}function handleServerConnection(state){meshServerConnectionState=state;if(meshServerConnectionState==0){if(selfInfoUpdateTimer!=null){clearInterval(selfInfoUpdateTimer);selfInfoUpdateTimer=null}lastSelfInfo=null}else{var oldNodeId=db.Get("OldNodeId");if(oldNodeId!=null){mesh.SendCommand({action:"mc1migration",oldnodeid:oldNodeId})}mesh.SendCommand(meshCoreObj);if(SMBiosTablesRaw!=null){mesh.SendCommand({action:"smbios",value:SMBiosTablesRaw})}meInfoStr=null;sendPeriodicServerUpdate()}}var sendNetworkUpdateNagleTimer=null;function sendNetworkUpdateNagle(){if(sendNetworkUpdateNagleTimer!=null){clearTimeout(sendNetworkUpdateNagleTimer);sendNetworkUpdateNagleTimer=null}sendNetworkUpdateNagleTimer=setTimeout(sendNetworkUpdate,5000)}function sendNetworkUpdate(force){sendNetworkUpdateNagleTimer=null;var netInfo=mesh.NetInfo;netInfo.action="netinfo";var netInfoStr=JSON.stringify(netInfo);if((force==true)||(clearGatewayMac(netInfoStr)!=clearGatewayMac(lastNetworkInfo))){mesh.SendCommand(netInfo);lastNetworkInfo=netInfoStr}}function sendPeriodicServerUpdate(flags){if(meshServerConnectionState==0){return}if(!flags){flags=4294967295}if((flags&1)&&(amt!=null)){amt.getAmtInfo(function(meinfo){try{if(meinfo==null){return}var intelamt={},p=false;if(meinfo.Versions&&meinfo.Versions.AMT){intelamt.ver=meinfo.Versions.AMT;p=true}if(meinfo.ProvisioningState){intelamt.state=meinfo.ProvisioningState;p=true}if(meinfo.Flags){intelamt.flags=meinfo.Flags;p=true}if(meinfo.OsHostname){intelamt.host=meinfo.OsHostname;p=true}if(meinfo.UUID){intelamt.uuid=meinfo.UUID;p=true}if(p==true){var meInfoStr=JSON.stringify(intelamt);if(meInfoStr!=lastMeInfo){meshCoreObj.intelamt=intelamt;mesh.SendCommand(meshCoreObj);lastMeInfo=meInfoStr}}}catch(ex){}})}if(flags&2){sendNetworkUpdateNagle(false)}}obj.start=function(){mesh.AddCommandHandler(handleServerCommand);mesh.AddConnectHandler(handleServerConnection);try{var userSession=require("user-sessions");userSession.on("changed",function onUserSessionChanged(){userSession.enumerateUsers().then(function(users){var u=[],a=users.Active;for(var i=0;i DNS - // 6 -> URI - // 7 -> IP + // such as type 2, 6 and 7. (2 -> DNS, 6 -> URI, 7 -> IP) var altNames = []; // According to commonName parsing (IP or DNS), add URI and DNS and/or IP altNames @@ -176,7 +172,7 @@ module.exports.CertificateOperations = function (parent) { } altNames.push({ type: 6, value: "http://" + commonName + "/" }) - // add localhost stuff for easy testing on localhost ;) + // Add localhost stuff for easy testing on localhost ;) altNames.push({ type: 2, value: "localhost" }); altNames.push({ type: 6, value: "http://localhost/" }); altNames.push({ type: 7, ip: "127.0.0.1" }); diff --git a/package.json b/package.json index 1dfe1d72..77f98f00 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "meshcentral", - "version": "0.3.0-n", + "version": "0.3.0-p", "keywords": [ "Remote Management", "Intel AMT", diff --git a/public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_25/MeshMiniRouter.application b/public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_26/MeshMiniRouter.application similarity index 81% rename from public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_25/MeshMiniRouter.application rename to public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_26/MeshMiniRouter.application index c7cb7de1..f87f5e51 100644 --- a/public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_25/MeshMiniRouter.application +++ b/public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_26/MeshMiniRouter.application @@ -1,30 +1,30 @@  - + - - + + - CKdIZTY+zacc9zaEUGL/QVNR9UVhMgCupCL19vNPmxA= + kyG2U9fWMq5IcgDZPDbO47tJ7nqKdDWzttJGE7CJeSo= -JJ26OWrp+sgoU/eac0hoqHXp+i9Tv9y6BZLcg1X4XPw=Vqo7kyRpoyTdshuBZp8jO6ItlZD9DUrHX15E5ccQKufS7YYxZ68tdJXKsg88/Gq4urge5pupz0UfEOf8lSqY3ER/1fLgfptImkL1azTCReOH061+Fc69U03j4YJxMrBEScq7gxlUFijU3C8zplw1uMWcGIC22q+ZTXD5jLSLorT9lUs6EKaub5h9gufm9/h6IEbXlEcoGxqhrD6vVrHDoJ7OHZ9XqETvZEXAMXzYWjbPYh5mljPWNxw8JUenTqgEUU+KxnKFJk1VwA1JANzOmHslqKmizYdpqbyTAoGYTLQy0BDhj4nkWtHpATlGA9Fn5+XbHUoILbTqj4KigTDfrA==y4Gj+dSbVyfeUCgvmvxt+1aLfwGaoEm5N5HuXHc9snxJImo/EyJ64vrQH0lsKD0lWlIwdQpD69/5RjyMoHfspKNQj1MWu9xJzaq57l7TWb/L0GZn+TbEaiD732WVKi0ogJ8iSlzzN1vnUZUbTN/yQpbLb+hyYYntCDhzW3ONGul0OE/0l/DtCUEgRAW3vLVV4z4JkTkOUJ6fpH55/zYw2OtlAWRpN+kEArdpjbJzanv410vJt+djfS2rhHB5asiWkscMkub8rlrBUtKPQWjjSZ5yLE3Vx++1CvTiAIH3HyXQisbUR2ZbnLiZ133wPkrEHFrxC6hPjIWeDZz/hZWlmQ==AQABCN=Ylian Saint-Hilaire, OU=Open Source, O=Ylian Saint-Hilaire, POBox=97124, STREET=1370 NE Orenco Station Pkwy Unit 24, L=Hillsboro, S=Oregon, PostalCode=97124, C=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AQABCN=Ylian Saint-Hilaire, OU=Open Source, O=Ylian Saint-Hilaire, POBox=97124, STREET=1370 NE Orenco Station Pkwy Unit 24, L=Hillsboro, S=Oregon, PostalCode=97124, C=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 @@ -54,12 +54,12 @@ CQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRo ZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1 c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdAIPFojwOSVeY45p FDkH5jMLMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwG -CSqGSIb3DQEJBTEPFw0xOTAyMjgyMzQyMDVaMCMGCSqGSIb3DQEJBDEWBBTqcfSI -ZIH2cGBZ5NbKLS8CFQuGkTANBgkqhkiG9w0BAQEFAASCAQAqA8H6wU7X8d+LDUk/ -//8sPvj/VT2AeBOCOWtKtwK4i7iH0BtSuhm5FTSTvad9sSYVEAC/eHvPCiZz58l0 -S7Ql4Z/msh9WTlmtR+XFWeSfgvg6zZTY3yJTpv15ee70DyLmOOxbMxGIJyZxrlzH -Ayp4uuzYfUYy4KaEPX/KxnbCJmoNEPdYYgsBCbpvuHi5z25T4F1H204Ou9ylYvjA -xBui3zrud2jm5wshgWfc3rG00RbtvEgQxFKpvXIykny8wL9w7ncMwEbRzcPydess -nmwwCbhRkScEHrtynw04ufMC5PVaF0aNtS7a9SKdkfRbddsxcAXZNxtRAYBbuVE8 -TsPW +CSqGSIb3DQEJBTEPFw0xOTAzMTkxNjQ1NDlaMCMGCSqGSIb3DQEJBDEWBBS/kdAN +AixXmnTm+I8aGaAxZgirrDANBgkqhkiG9w0BAQEFAASCAQAyfQEaj4qHaD0A4nxu +2IRwIinYT2PYNzOkA1E9ZDW0aQPOg+QvaILTLshKZxz1YTlng7J+X5gqtiy6x/Su +ffpNUxyrd1j4x6RG2kzVagUMk2Z+hIFvJBM52VcWFQhq9x6gQ7AUOGG3cg7kCeOf +DO21jJGHre2IY19krGsZz1P4+ebfm/BZZaUWqxe3DXsQQzWvRPigorTO/K6Xeciu +qYjG3wyu4WNJOsoGiafecdcsLPF14QBPFXn4OuQG+6rfHuO7aEtVzJcTZ7WGzYh3 +IB1/rLld3dtPwH7JrcCIBnX2YjF2Gu9WIFQY0pOaMw4nlqyC3gBiU9dPadHQ1BUp +SIT0 \ No newline at end of file diff --git a/public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_25/MeshMiniRouter.exe.config.deploy b/public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_26/MeshMiniRouter.exe.config.deploy similarity index 100% rename from public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_25/MeshMiniRouter.exe.config.deploy rename to public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_26/MeshMiniRouter.exe.config.deploy diff --git a/public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_25/MeshMiniRouter.exe.deploy b/public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_26/MeshMiniRouter.exe.deploy similarity index 81% rename from public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_25/MeshMiniRouter.exe.deploy rename to public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_26/MeshMiniRouter.exe.deploy index 690117590aa40ad6455819e2e14fc1daf603fd0e..190116defc392d097b3c50c45b63ba38159932cb 100644 GIT binary patch delta 19527 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 s>390U3tl+mqW(?UU!V1qk@k-Ni delta 17720 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 AbpQYW diff --git a/public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_25/MeshMiniRouter.exe.manifest b/public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_26/MeshMiniRouter.exe.manifest similarity index 83% rename from public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_25/MeshMiniRouter.exe.manifest rename to public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_26/MeshMiniRouter.exe.manifest index 43dfd130..ef679ba5 100644 --- a/public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_25/MeshMiniRouter.exe.manifest +++ b/public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_26/MeshMiniRouter.exe.manifest @@ -1,10 +1,10 @@  - + - + @@ -43,14 +43,14 @@ - - + + - znGsSXBIfZbzmb1bWcIxU3m5B9HSsTBQn8eRWF6c4O0= + b0EusUP2Qu5+8YABV5b9XFDBK5ZXQITmlCGAl25j1SA= @@ -79,13 +79,13 @@ -wesQvZCP4PR6hYljVN0LtZ3FDpHxGfBNo40AActQsW0=mDMMZby09uFPmDv9KjRXINo2glda8GdtXVQUTeBGGEw25yM3n+BfED9WDDTDDhRZpXa1JrRRKqr+dQAlqfy85Wn5E4UcmExUuQjXDg7SrKrx56biHCXiX7IDbh/VLHE+8P/xQAji2Dd6Z1kiSZd4YtUS7RJLozcM6CeVjchFFojGHk+1RcajQpxzJYUnh8ZdNRS+N/YHQI7WYQ6jQ3MzE078bc4Me4Te3VpzHgKt8WyhxaQHh7MCY7AAHTN5SILtKZ3JO/127AO6ae+RZSmYUVbwcEUKgfh3wTs5Ox2YzIIeyi6eAhkO9no0aOgrQWu2ho1IdbhMqqEFYhq+WGDwiw==y4Gj+dSbVyfeUCgvmvxt+1aLfwGaoEm5N5HuXHc9snxJImo/EyJ64vrQH0lsKD0lWlIwdQpD69/5RjyMoHfspKNQj1MWu9xJzaq57l7TWb/L0GZn+TbEaiD732WVKi0ogJ8iSlzzN1vnUZUbTN/yQpbLb+hyYYntCDhzW3ONGul0OE/0l/DtCUEgRAW3vLVV4z4JkTkOUJ6fpH55/zYw2OtlAWRpN+kEArdpjbJzanv410vJt+djfS2rhHB5asiWkscMkub8rlrBUtKPQWjjSZ5yLE3Vx++1CvTiAIH3HyXQisbUR2ZbnLiZ133wPkrEHFrxC6hPjIWeDZz/hZWlmQ==AQABCN=Ylian Saint-Hilaire, OU=Open Source, O=Ylian Saint-Hilaire, POBox=97124, STREET=1370 NE Orenco Station Pkwy Unit 24, L=Hillsboro, S=Oregon, PostalCode=97124, C=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AQABCN=Ylian Saint-Hilaire, OU=Open Source, O=Ylian Saint-Hilaire, POBox=97124, STREET=1370 NE Orenco Station Pkwy Unit 24, L=Hillsboro, S=Oregon, PostalCode=97124, C=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 @@ -115,12 +115,12 @@ CQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRo ZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1 c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdAIPFojwOSVeY45p FDkH5jMLMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwG -CSqGSIb3DQEJBTEPFw0xOTAyMjgyMzQyMDJaMCMGCSqGSIb3DQEJBDEWBBRMJ+/D -pucWQI26RB3CEZo9giVyTjANBgkqhkiG9w0BAQEFAASCAQB4JZpMFrUsxSvp4jKN -0HI8c68qKvv37Ed7eF87X74Nto1vI/cT4Qi2ZJj8bzToSBqKbj3UQOhPlmxRWHUg -oArn+tPJLnzwjgor/wA4YAMXCNGZ59n7hOzMfH7aseX6oRXaBXzzEsiggDDjmyf/ -9AFp6NqBeNpTr+V5ENGYqyjppiIGGfGTgkroX7Goxfi5KBUAS/jo7TYCv9Nr+y2d -Cd7Zeeo6INNXawHzcTm2YMQRJymj5zFM22y/jko3xKBcyA0KKATthYBhFUsZIAiA -yKVgVtXmZzJcyq3anKKIXqYNz2p3ZICzDiM5gzKdPGbVTo2hgew1UtEOGdz5tLmS -n2jI +CSqGSIb3DQEJBTEPFw0xOTAzMTkxNjQ1NDZaMCMGCSqGSIb3DQEJBDEWBBSez2an +VEYycZr/2kA8EaEr7R9+gzANBgkqhkiG9w0BAQEFAASCAQCIM/0smLHnXLD8kd6+ +v7/donrtPuv84Og8Xs0WubVs6WG7HY/JyyMpK2jOKmISAnE/swg5Dfw7IgbP8MJd +tVONxt8yWCC2UJKmNmrZ2nWVj5sCAaDoplUZ2QgOrAbsZe/DtMtfO4L2eKEQuxW7 +C4TM6luZwmvK2kUZ7NftpJn+SbhEt8qO/zrj30a0C2VRm+9FCG1KtLHmYbBm7amy +6hkkrFOOwAquw9tWV80DABQ8xu+JgG2bhNkImTbd5EUJXVYO9Y0mBCN/8JOvL4Eg +pjKsJi5qUrBwDZydQJDCNmSC9ycQSCx3cmSciYxM0BU1qxhJieONJMEBciIoC7E1 +6zFk \ No newline at end of file diff --git a/public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_25/MeshMiniRouter.ico.deploy b/public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_26/MeshMiniRouter.ico.deploy similarity index 100% rename from public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_25/MeshMiniRouter.ico.deploy rename to public/clickonce/minirouter/Application Files/MeshMiniRouter_2_0_0_26/MeshMiniRouter.ico.deploy diff --git a/public/clickonce/minirouter/MeshMiniRouter.application b/public/clickonce/minirouter/MeshMiniRouter.application index c7cb7de1..f87f5e51 100644 --- a/public/clickonce/minirouter/MeshMiniRouter.application +++ b/public/clickonce/minirouter/MeshMiniRouter.application @@ -1,30 +1,30 @@  - + - - + + - CKdIZTY+zacc9zaEUGL/QVNR9UVhMgCupCL19vNPmxA= + kyG2U9fWMq5IcgDZPDbO47tJ7nqKdDWzttJGE7CJeSo= -JJ26OWrp+sgoU/eac0hoqHXp+i9Tv9y6BZLcg1X4XPw=Vqo7kyRpoyTdshuBZp8jO6ItlZD9DUrHX15E5ccQKufS7YYxZ68tdJXKsg88/Gq4urge5pupz0UfEOf8lSqY3ER/1fLgfptImkL1azTCReOH061+Fc69U03j4YJxMrBEScq7gxlUFijU3C8zplw1uMWcGIC22q+ZTXD5jLSLorT9lUs6EKaub5h9gufm9/h6IEbXlEcoGxqhrD6vVrHDoJ7OHZ9XqETvZEXAMXzYWjbPYh5mljPWNxw8JUenTqgEUU+KxnKFJk1VwA1JANzOmHslqKmizYdpqbyTAoGYTLQy0BDhj4nkWtHpATlGA9Fn5+XbHUoILbTqj4KigTDfrA==y4Gj+dSbVyfeUCgvmvxt+1aLfwGaoEm5N5HuXHc9snxJImo/EyJ64vrQH0lsKD0lWlIwdQpD69/5RjyMoHfspKNQj1MWu9xJzaq57l7TWb/L0GZn+TbEaiD732WVKi0ogJ8iSlzzN1vnUZUbTN/yQpbLb+hyYYntCDhzW3ONGul0OE/0l/DtCUEgRAW3vLVV4z4JkTkOUJ6fpH55/zYw2OtlAWRpN+kEArdpjbJzanv410vJt+djfS2rhHB5asiWkscMkub8rlrBUtKPQWjjSZ5yLE3Vx++1CvTiAIH3HyXQisbUR2ZbnLiZ133wPkrEHFrxC6hPjIWeDZz/hZWlmQ==AQABCN=Ylian Saint-Hilaire, OU=Open Source, O=Ylian Saint-Hilaire, POBox=97124, STREET=1370 NE Orenco Station Pkwy Unit 24, L=Hillsboro, S=Oregon, PostalCode=97124, C=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AQABCN=Ylian Saint-Hilaire, OU=Open Source, O=Ylian Saint-Hilaire, POBox=97124, STREET=1370 NE Orenco Station Pkwy Unit 24, L=Hillsboro, S=Oregon, PostalCode=97124, C=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 @@ -54,12 +54,12 @@ CQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRo ZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1 c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdAIPFojwOSVeY45p FDkH5jMLMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwG -CSqGSIb3DQEJBTEPFw0xOTAyMjgyMzQyMDVaMCMGCSqGSIb3DQEJBDEWBBTqcfSI -ZIH2cGBZ5NbKLS8CFQuGkTANBgkqhkiG9w0BAQEFAASCAQAqA8H6wU7X8d+LDUk/ -//8sPvj/VT2AeBOCOWtKtwK4i7iH0BtSuhm5FTSTvad9sSYVEAC/eHvPCiZz58l0 -S7Ql4Z/msh9WTlmtR+XFWeSfgvg6zZTY3yJTpv15ee70DyLmOOxbMxGIJyZxrlzH -Ayp4uuzYfUYy4KaEPX/KxnbCJmoNEPdYYgsBCbpvuHi5z25T4F1H204Ou9ylYvjA -xBui3zrud2jm5wshgWfc3rG00RbtvEgQxFKpvXIykny8wL9w7ncMwEbRzcPydess -nmwwCbhRkScEHrtynw04ufMC5PVaF0aNtS7a9SKdkfRbddsxcAXZNxtRAYBbuVE8 -TsPW +CSqGSIb3DQEJBTEPFw0xOTAzMTkxNjQ1NDlaMCMGCSqGSIb3DQEJBDEWBBS/kdAN +AixXmnTm+I8aGaAxZgirrDANBgkqhkiG9w0BAQEFAASCAQAyfQEaj4qHaD0A4nxu +2IRwIinYT2PYNzOkA1E9ZDW0aQPOg+QvaILTLshKZxz1YTlng7J+X5gqtiy6x/Su +ffpNUxyrd1j4x6RG2kzVagUMk2Z+hIFvJBM52VcWFQhq9x6gQ7AUOGG3cg7kCeOf +DO21jJGHre2IY19krGsZz1P4+ebfm/BZZaUWqxe3DXsQQzWvRPigorTO/K6Xeciu +qYjG3wyu4WNJOsoGiafecdcsLPF14QBPFXn4OuQG+6rfHuO7aEtVzJcTZ7WGzYh3 +IB1/rLld3dtPwH7JrcCIBnX2YjF2Gu9WIFQY0pOaMw4nlqyC3gBiU9dPadHQ1BUp +SIT0 \ No newline at end of file diff --git a/public/clickonce/minirouter/publish.htm b/public/clickonce/minirouter/publish.htm index 9f4480e1..60add932 100644 --- a/public/clickonce/minirouter/publish.htm +++ b/public/clickonce/minirouter/publish.htm @@ -59,7 +59,7 @@ FONT.key {font-weight: bold; color: darkgreen}
-
 
Name:MeshCentral Mini-Router
 
Version:2.0.0.25
 
Publisher:Meshcentral.com
 
+
 
Name:MeshCentral Mini-Router
 
Version:2.0.0.26
 
Publisher:Meshcentral.com