mirror of
				https://github.com/Ylianst/MeshCentral.git
				synced 2025-10-29 23:35:02 -04:00 
			
		
		
		
	Removed dependency on browser cookies to make the site work.
This commit is contained in:
		
							parent
							
								
									e6b05f2b4a
								
							
						
					
					
						commit
						e6fc96f3f1
					
				
							
								
								
									
										1
									
								
								agents/meshcmd.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								agents/meshcmd.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								agents/meshcore.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								agents/meshcore.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								agents/modules_meshcmd_min/amt-lme.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								agents/modules_meshcmd_min/amt-lme.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								agents/modules_meshcmd_min/amt-mei.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								agents/modules_meshcmd_min/amt-mei.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -1 +0,0 @@ | ||||
| function AMTScanner(){var a=require("events").inherits(this);a.createEvent("found");this.dgram=require("dgram");this.buildRmcpPing=function(c){var b=Buffer.from("06000006000011BE80000000","hex");b[9]=c;return b};this.parseRmcpPacket=function(h,b,g,d){if(b==null||b.length<20){return}var f={};if(((b[12]==0)||(b[13]!=0)||(b[14]!=1)||(b[15]!=87))&&(b[21]&32)){f.servertag=b[9];f.minorVersion=b[18]&15;f.majorVersion=(b[18]>>4)&15;f.provisioningState=b[19]&3;var e=(b[16]*256)+b[17];var c=((b[19]&4)!=0)?true:false;f.openPorts=[e];f.address=g.address;if(c==true){f.openPorts=[16992,16993]}if(d!==undefined){d(h,f)}}};this.parseIPv4Range=function(f){if(f==undefined||f==null){return null}var g=f.split("-");if(g.length==2){return{min:this.parseIpv4Addr(g[0]),max:this.parseIpv4Addr(g[1])}}g=f.split("/");if(g.length==2){var c=this.parseIpv4Addr(g[0]),e=parseInt(g[1]),d=0;if(e<=16||e>32){return null}e=32-e;for(var b=0;b<e;b++){d=(d<<1);d++}return{min:c&(4294967295-d),max:(c&(4294967295-d))+d}}g=this.parseIpv4Addr(f);if(g==null){return null}return{min:g,max:g}};this.parseIpv4Addr=function(b){var c=b.split(".");if(c.length==4){return(parseInt(c[0])<<24)+(parseInt(c[1])<<16)+(parseInt(c[2])<<8)+(parseInt(c[3])<<0)}return null};this.IPv4NumToStr=function(b){return((b>>24)&255)+"."+((b>>16)&255)+"."+((b>>8)&255)+"."+(b&255)};this.scan=function(d,g){var c=this.parseIPv4Range(d);var e=this.buildRmcpPing(0);var f=this.dgram.createSocket({type:"udp4"});f.parent=this;f.scanResults=[];f.on("error",function(i){console.log("Error:"+i)});f.on("message",function(i,j){if(j.size>4){this.parent.parseRmcpPacket(this,i,j,function(l,k){l.scanResults.push(k)})}});f.on("listening",function(){for(var j=c.min;j<=c.max;j++){f.send(e,623,f.parent.IPv4NumToStr(j))}});f.bind({address:"0.0.0.0",port:0,exclusive:true});var h=setTimeout(function b(){f.close();f.parent.emit("found",f.scanResults);delete f},g)}}module.exports=AMTScanner; | ||||
							
								
								
									
										1
									
								
								agents/modules_meshcmd_min/amt-script.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								agents/modules_meshcmd_min/amt-script.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -1 +0,0 @@ | ||||
| function CreateWsmanComm(){var a={};a.PendingAjax=[];a.ActiveAjaxCount=0;a.MaxActiveAjaxCount=1;a.FailAllError=0;a.digest=null;a.RequestCount=0;if(arguments.length==1&&typeof(arguments[0]=="object")){a.host=arguments[0].host;a.port=arguments[0].port;a.authToken=arguments[0].authToken;a.tls=arguments[0].tls}else{a.host=arguments[0];a.port=arguments[1];a.user=arguments[2];a.pass=arguments[3];a.tls=arguments[4]}a.PerformAjax=function(d,c,f,e,g,b){if((a.ActiveAjaxCount==0||((a.ActiveAjaxCount<a.MaxActiveAjaxCount)&&(a.challengeParams!=null)))&&a.PendingAjax.length==0){a.PerformAjaxEx(d,c,f,g,b)}else{if(e==1){a.PendingAjax.unshift([d,c,f,g,b])}else{a.PendingAjax.push([d,c,f,g,b])}}};a.PerformNextAjax=function(){if(a.ActiveAjaxCount>=a.MaxActiveAjaxCount||a.PendingAjax.length==0){return}var b=a.PendingAjax.shift();a.PerformAjaxEx(b[0],b[1],b[2],b[3],b[4]);a.PerformNextAjax()};a.PerformAjaxEx=function(d,c,g,h,b){if(a.FailAllError!=0){if(a.FailAllError!=999){a.gotNextMessagesError({status:a.FailAllError},"error",null,[d,c,g])}return}if(!d){d=""}if(a.digest==null){if(a.authToken){a.digest=require("http-digest").create({authToken:a.authToken})}else{a.digest=require("http-digest").create(a.user,a.pass)}a.digest.http=require("http")}var f={protocol:(a.tls==1?"https:":"http:"),method:"POST",host:a.host,path:"/wsman",port:a.port,rejectUnauthorized:false,checkServerIdentity:function(i){console.log("checkServerIdentity",JSON.stringify(i))}};var e=a.digest.request(f);e.on("error",function(i){a.gotNextMessagesError({status:600},"error",null,[d,c,g])});e.on("response",function(i){if(i.statusCode!=200){a.gotNextMessagesError({status:i.statusCode},"error",null,[d,c,g])}else{i.acc="";i.on("data",function(j){this.acc+=j});i.on("end",function(){a.gotNextMessages(i.acc,"success",{status:i.statusCode},[d,c,g])})}});e.end(d);a.ActiveAjaxCount++;return e};a.pendingAjaxCall=[];a.gotNextMessages=function(c,e,d,b){a.ActiveAjaxCount--;if(a.FailAllError==999){return}if(a.FailAllError!=0){b[1](null,a.FailAllError,b[2]);return}if(d.status!=200){b[1](null,d.status,b[2]);return}b[1](c,200,b[2]);a.PerformNextAjax()};a.gotNextMessagesError=function(d,e,c,b){a.ActiveAjaxCount--;if(a.FailAllError==999){return}if(a.FailAllError!=0){b[1](null,a.FailAllError,b[2]);return}if(a.FailAllError!=999){b[1]({Header:{HttpError:d.status}},d.status,b[2])}a.PerformNextAjax()};a.CancelAllQueries=function(b){while(a.PendingAjax.length>0){var c=a.PendingAjax.shift();c[1](null,b,c[2])}};return a}module.exports=CreateWsmanComm; | ||||
							
								
								
									
										1
									
								
								agents/modules_meshcmd_min/amt-wsman.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								agents/modules_meshcmd_min/amt-wsman.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								agents/modules_meshcmd_min/amt-xml.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								agents/modules_meshcmd_min/amt-xml.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								agents/modules_meshcmd_min/amt.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								agents/modules_meshcmd_min/amt.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -1 +0,0 @@ | ||||
| var GM=require("_GenericMarshal");function processManager(){this._ObjectID="process-manager";switch(process.platform){case"win32":this._kernel32=GM.CreateNativeProxy("kernel32.dll");this._kernel32.CreateMethod("GetLastError");this._kernel32.CreateMethod("CreateToolhelp32Snapshot");this._kernel32.CreateMethod("Process32First");this._kernel32.CreateMethod("Process32Next");break;case"linux":case"darwin":this._childProcess=require("child_process");break;default:throw (process.platform+" not supported");break}this.enumerateProcesses=function a(){var d=require("promise");var e=new d(function(g,f){this._res=g;this._rej=f});this.getProcesses(function(g,f){f._res(g)},e);return(e)};this.getProcesses=function b(d){switch(process.platform){default:throw ("Enumerating processes on "+process.platform+" not supported");break;case"win32":var n={};var e=this._kernel32.CreateToolhelp32Snapshot(2,0);var g=GM.CreateVariable(304);g.toBuffer().writeUInt32LE(304,0);var j=this._kernel32.Process32First(e,g);while(j.Val){n[g.Deref(8,4).toBuffer().readUInt32LE(0)]={pid:g.Deref(8,4).toBuffer().readUInt32LE(0),cmd:g.Deref(GM.PointerSize==4?36:44,260).String};j=this._kernel32.Process32Next(e,g)}if(d){d.apply(this,[n])}break;case"linux":if(!this._psp){this._psp={}}var l=this._childProcess.execFile("/bin/ps",["ps","-uxa"],{type:this._childProcess.SpawnTypes.TERM});this._psp[l.pid]=l;l.Parent=this;l.ps="";l.callback=d;l.args=[];for(var f=1;f<arguments.length;++f){l.args.push(arguments[f])}l.on("exit",function k(){delete this.Parent._psp[this.pid];var r={},q=this.ps.split("\x0D\x0A"),o={},p=0;for(var h in q){var t=q[h].split(" ");var s=[];for(var u in t){if(h==0&&t[u]){o[t[u]]=p++}if(h>0&&t[u]){s.push(t[u])}}if(h>0){if(s[o.PID]){r[s[o.PID]]={pid:o.PID,user:s[o.USER],cmd:s[o.COMMAND]}}}}if(this.callback){this.args.unshift(r);this.callback.apply(this.parent,this.args)}});l.stdout.on("data",function(h){this.parent.ps+=h.toString()});break;case"darwin":var m=require("promise");var l=new m(function(i,h){this._res=i;this._rej=h});l.pm=this;l.callback=d;l.args=[];for(var f=1;f<arguments.length;++f){l.args.push(arguments[f])}l.child=this._childProcess.execFile("/bin/ps",["ps","-xa"]);l.child.promise=l;l.child.stdout.ps="";l.child.stdout.on("data",function(h){this.ps+=h.toString()});l.child.on("exit",function(){var p=this.stdout.ps.split("\n");var q=p[0].split("PID")[0].length+3;var h=p[0].split("CMD")[0].length;var r={};for(var o=1;o<p.length;++o){if(p[o].length>0){r[p[o].substring(0,q).trim()]={pid:p[o].substring(0,q).trim(),cmd:p[o].substring(h)}}}this.promise._res(r)});l.then(function(h){this.args.unshift(h);this.callback.apply(this.pm,this.args)});break}};this.getProcessInfo=function c(g){switch(process.platform){default:throw ("getProcessInfo() not supported for "+process.platform);break;case"linux":var h=require("fs").readFileSync("/proc/"+g+"/status");var e={};var f=h.toString().split("\n");for(var d in f){var j=f[d].split(":");if(j.length>1){j[1]=j[1].trim()}e[j[0]]=j[1]}return(e);break}}}module.exports=new processManager(); | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								agents/modules_meshcmd_min/smbios.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								agents/modules_meshcmd_min/smbios.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								agents/modules_meshcore_min/amt-lme.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								agents/modules_meshcore_min/amt-lme.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								agents/modules_meshcore_min/amt-mei.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								agents/modules_meshcore_min/amt-mei.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -1 +0,0 @@ | ||||
| function AMTScanner(){var a=require("events").inherits(this);a.createEvent("found");this.dgram=require("dgram");this.buildRmcpPing=function(c){var b=Buffer.from("06000006000011BE80000000","hex");b[9]=c;return b};this.parseRmcpPacket=function(h,b,g,d){if(b==null||b.length<20){return}var f={};if(((b[12]==0)||(b[13]!=0)||(b[14]!=1)||(b[15]!=87))&&(b[21]&32)){f.servertag=b[9];f.minorVersion=b[18]&15;f.majorVersion=(b[18]>>4)&15;f.provisioningState=b[19]&3;var e=(b[16]*256)+b[17];var c=((b[19]&4)!=0)?true:false;f.openPorts=[e];f.address=g.address;if(c==true){f.openPorts=[16992,16993]}if(d!==undefined){d(h,f)}}};this.parseIPv4Range=function(f){if(f==undefined||f==null){return null}var g=f.split("-");if(g.length==2){return{min:this.parseIpv4Addr(g[0]),max:this.parseIpv4Addr(g[1])}}g=f.split("/");if(g.length==2){var c=this.parseIpv4Addr(g[0]),e=parseInt(g[1]),d=0;if(e<=16||e>32){return null}e=32-e;for(var b=0;b<e;b++){d=(d<<1);d++}return{min:c&(4294967295-d),max:(c&(4294967295-d))+d}}g=this.parseIpv4Addr(f);if(g==null){return null}return{min:g,max:g}};this.parseIpv4Addr=function(b){var c=b.split(".");if(c.length==4){return(parseInt(c[0])<<24)+(parseInt(c[1])<<16)+(parseInt(c[2])<<8)+(parseInt(c[3])<<0)}return null};this.IPv4NumToStr=function(b){return((b>>24)&255)+"."+((b>>16)&255)+"."+((b>>8)&255)+"."+(b&255)};this.scan=function(d,g){var c=this.parseIPv4Range(d);var e=this.buildRmcpPing(0);var f=this.dgram.createSocket({type:"udp4"});f.parent=this;f.scanResults=[];f.on("error",function(i){console.log("Error:"+i)});f.on("message",function(i,j){if(j.size>4){this.parent.parseRmcpPacket(this,i,j,function(l,k){l.scanResults.push(k)})}});f.on("listening",function(){for(var j=c.min;j<=c.max;j++){f.send(e,623,f.parent.IPv4NumToStr(j))}});f.bind({address:"0.0.0.0",port:0,exclusive:true});var h=setTimeout(function b(){f.close();f.parent.emit("found",f.scanResults);delete f},g)}}module.exports=AMTScanner; | ||||
| @ -1 +0,0 @@ | ||||
| function CreateWsmanComm(){var a={};a.PendingAjax=[];a.ActiveAjaxCount=0;a.MaxActiveAjaxCount=1;a.FailAllError=0;a.digest=null;a.RequestCount=0;if(arguments.length==1&&typeof(arguments[0]=="object")){a.host=arguments[0].host;a.port=arguments[0].port;a.authToken=arguments[0].authToken;a.tls=arguments[0].tls}else{a.host=arguments[0];a.port=arguments[1];a.user=arguments[2];a.pass=arguments[3];a.tls=arguments[4]}a.PerformAjax=function(d,c,f,e,g,b){if((a.ActiveAjaxCount==0||((a.ActiveAjaxCount<a.MaxActiveAjaxCount)&&(a.challengeParams!=null)))&&a.PendingAjax.length==0){a.PerformAjaxEx(d,c,f,g,b)}else{if(e==1){a.PendingAjax.unshift([d,c,f,g,b])}else{a.PendingAjax.push([d,c,f,g,b])}}};a.PerformNextAjax=function(){if(a.ActiveAjaxCount>=a.MaxActiveAjaxCount||a.PendingAjax.length==0){return}var b=a.PendingAjax.shift();a.PerformAjaxEx(b[0],b[1],b[2],b[3],b[4]);a.PerformNextAjax()};a.PerformAjaxEx=function(d,c,g,h,b){if(a.FailAllError!=0){if(a.FailAllError!=999){a.gotNextMessagesError({status:a.FailAllError},"error",null,[d,c,g])}return}if(!d){d=""}if(a.digest==null){if(a.authToken){a.digest=require("http-digest").create({authToken:a.authToken})}else{a.digest=require("http-digest").create(a.user,a.pass)}a.digest.http=require("http")}var f={protocol:(a.tls==1?"https:":"http:"),method:"POST",host:a.host,path:"/wsman",port:a.port,rejectUnauthorized:false,checkServerIdentity:function(i){console.log("checkServerIdentity",JSON.stringify(i))}};var e=a.digest.request(f);e.on("error",function(i){a.gotNextMessagesError({status:600},"error",null,[d,c,g])});e.on("response",function(i){if(i.statusCode!=200){a.gotNextMessagesError({status:i.statusCode},"error",null,[d,c,g])}else{i.acc="";i.on("data",function(j){this.acc+=j});i.on("end",function(){a.gotNextMessages(i.acc,"success",{status:i.statusCode},[d,c,g])})}});e.end(d);a.ActiveAjaxCount++;return e};a.pendingAjaxCall=[];a.gotNextMessages=function(c,e,d,b){a.ActiveAjaxCount--;if(a.FailAllError==999){return}if(a.FailAllError!=0){b[1](null,a.FailAllError,b[2]);return}if(d.status!=200){b[1](null,d.status,b[2]);return}b[1](c,200,b[2]);a.PerformNextAjax()};a.gotNextMessagesError=function(d,e,c,b){a.ActiveAjaxCount--;if(a.FailAllError==999){return}if(a.FailAllError!=0){b[1](null,a.FailAllError,b[2]);return}if(a.FailAllError!=999){b[1]({Header:{HttpError:d.status}},d.status,b[2])}a.PerformNextAjax()};a.CancelAllQueries=function(b){while(a.PendingAjax.length>0){var c=a.PendingAjax.shift();c[1](null,b,c[2])}};return a}module.exports=CreateWsmanComm; | ||||
							
								
								
									
										1
									
								
								agents/modules_meshcore_min/amt-wsman.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								agents/modules_meshcore_min/amt-wsman.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								agents/modules_meshcore_min/amt-xml.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								agents/modules_meshcore_min/amt-xml.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								agents/modules_meshcore_min/amt.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								agents/modules_meshcore_min/amt.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -1 +0,0 @@ | ||||
| try{Object.defineProperty(Array.prototype,"peek",{value:function(){return(this.length>0?this[this.length-1]:undefined)}})}catch(e){}function dbus(a,b){this._ObjectID="linux-dbus";require("events").EventEmitter.call(this,true).createEvent("signal");Object.defineProperty(this,"uid",{value:b});this._child=require("child_process").execFile("/bin/sh",["sh"],{type:require("child_process").SpawnTypes.TERM,uid:b==null?-1:b});this._child.stdin.write("dbus-monitor --session \"type='signal', interface='"+a+'\'" | ( while read X; do echo "$X"; done )\n');this._child.stdout.dbus=this;this._child.stdout.on("data",function(c){if(!this.ready){this.ready=true;return}var f=[];var g=c.toString().split("\r\n");for(var d in g){if(g[d]==""){this.dbus.preParseRecords(f);f=[]}else{f.push(g[d])}}});this.preParseRecords=function(d){var f=[];for(var c in d){if(d[c].startsWith("signal ")){if(f.length>0){this.parseRecords(f)}f=[]}f.push(d[c])}if(f.length>0){this.parseRecords(f)}};this.parseRecords=function(d){if(d[0].startsWith("signal ")){var g={};var h=d[0].split(" ");h.shift();for(var c in h){var f=h[c].split("=");if(f.length==2){g[f[0]]=f[1]}}d.shift();g.data=d;this.parseSignal(g)}};this.parseSignal=function(f){var c=f.data;f.data=[];for(var d=0;d<c.length;++d){if(c[d].startsWith("array ")){f.data.push([]);for(d=d+1;d<c.length;++d){this.parseSignal2(c[d],f.data.peek())}}else{this.parseSignal2(c[d],f.data)}}this.emit("signal",f)};this.parseSignal2=function(c,d){if(c.startsWith("string ")){d.push(JSON.parse(c.slice(7)))}else{if(c.startsWith("boolean ")){d.push(JSON.parse(c.slice(8)))}}}}module.exports=dbus; | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -1 +0,0 @@ | ||||
| function powerMonitor(){this._ObjectID="power-monitor";require("events").EventEmitter.call(this,true).createEvent("changed").createEvent("sx").createEvent("batteryLevel").createEvent("acdc").createEvent("display");this._i=setImmediate(function(a){require("user-sessions");delete a._i},this)}module.exports=new powerMonitor(); | ||||
| @ -1 +0,0 @@ | ||||
| var GM=require("_GenericMarshal");function processManager(){this._ObjectID="process-manager";switch(process.platform){case"win32":this._kernel32=GM.CreateNativeProxy("kernel32.dll");this._kernel32.CreateMethod("GetLastError");this._kernel32.CreateMethod("CreateToolhelp32Snapshot");this._kernel32.CreateMethod("Process32First");this._kernel32.CreateMethod("Process32Next");break;case"linux":case"darwin":this._childProcess=require("child_process");break;default:throw (process.platform+" not supported");break}this.enumerateProcesses=function a(){var d=require("promise");var e=new d(function(g,f){this._res=g;this._rej=f});this.getProcesses(function(g,f){f._res(g)},e);return(e)};this.getProcesses=function b(d){switch(process.platform){default:throw ("Enumerating processes on "+process.platform+" not supported");break;case"win32":var n={};var e=this._kernel32.CreateToolhelp32Snapshot(2,0);var g=GM.CreateVariable(304);g.toBuffer().writeUInt32LE(304,0);var j=this._kernel32.Process32First(e,g);while(j.Val){n[g.Deref(8,4).toBuffer().readUInt32LE(0)]={pid:g.Deref(8,4).toBuffer().readUInt32LE(0),cmd:g.Deref(GM.PointerSize==4?36:44,260).String};j=this._kernel32.Process32Next(e,g)}if(d){d.apply(this,[n])}break;case"linux":if(!this._psp){this._psp={}}var l=this._childProcess.execFile("/bin/ps",["ps","-uxa"],{type:this._childProcess.SpawnTypes.TERM});this._psp[l.pid]=l;l.Parent=this;l.ps="";l.callback=d;l.args=[];for(var f=1;f<arguments.length;++f){l.args.push(arguments[f])}l.on("exit",function k(){delete this.Parent._psp[this.pid];var r={},q=this.ps.split("\x0D\x0A"),o={},p=0;for(var h in q){var t=q[h].split(" ");var s=[];for(var u in t){if(h==0&&t[u]){o[t[u]]=p++}if(h>0&&t[u]){s.push(t[u])}}if(h>0){if(s[o.PID]){r[s[o.PID]]={pid:o.PID,user:s[o.USER],cmd:s[o.COMMAND]}}}}if(this.callback){this.args.unshift(r);this.callback.apply(this.parent,this.args)}});l.stdout.on("data",function(h){this.parent.ps+=h.toString()});break;case"darwin":var m=require("promise");var l=new m(function(i,h){this._res=i;this._rej=h});l.pm=this;l.callback=d;l.args=[];for(var f=1;f<arguments.length;++f){l.args.push(arguments[f])}l.child=this._childProcess.execFile("/bin/ps",["ps","-xa"]);l.child.promise=l;l.child.stdout.ps="";l.child.stdout.on("data",function(h){this.ps+=h.toString()});l.child.on("exit",function(){var p=this.stdout.ps.split("\n");var q=p[0].split("PID")[0].length+3;var h=p[0].split("CMD")[0].length;var r={};for(var o=1;o<p.length;++o){if(p[o].length>0){r[p[o].substring(0,q).trim()]={pid:p[o].substring(0,q).trim(),cmd:p[o].substring(h)}}}this.promise._res(r)});l.then(function(h){this.args.unshift(h);this.callback.apply(this.pm,this.args)});break}};this.getProcessInfo=function c(g){switch(process.platform){default:throw ("getProcessInfo() not supported for "+process.platform);break;case"linux":var h=require("fs").readFileSync("/proc/"+g+"/status");var e={};var f=h.toString().split("\n");for(var d in f){var j=f[d].split(":");if(j.length>1){j[1]=j[1].trim()}e[j[0]]=j[1]}return(e);break}}}module.exports=new processManager(); | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								agents/modules_meshcore_min/smbios.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								agents/modules_meshcore_min/smbios.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								agents/modules_meshcore_min/toaster.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								agents/modules_meshcore_min/toaster.min.js
									
									
									
									
										vendored
									
									
								
							| @ -1 +0,0 @@ | ||||
| var toasters={};function Toaster(){this._ObjectID="toaster";this.Toast=function a(l,b){var h={};var d=require("events").inherits(h);d.createEvent("Dismissed");h.title=l;h.caption=b;if(process.platform=="win32"){d.createEvent("Clicked");var j=require("user-sessions").Current();for(var f in j){console.log(j[f])}try{console.log("Attempting Toast Mechanism 1");h._child=require("ScriptContainer").Create({processIsolation:true,sessionId:j.Active[0].SessionId})}catch(c){console.log(c);console.log("Attempting Toast Mechanism 2");h._child=require("ScriptContainer").Create({processIsolation:true})}h._child.parent=h;h._child.on("exit",function(e){this.parent.emit("Dismissed");delete this.parent._child});h._child.addModule("win-console",getJSModule("win-console"));h._child.addModule("win-message-pump",getJSModule("win-message-pump"));var k="                    try{                    var toast = require('win-console');                    var balloon = toast.SetTrayIcon({ szInfo: '"+b+"', szInfoTitle: '"+l+"', balloonOnly: true });                    balloon.on('ToastDismissed', function(){process.exit();});                    }                    catch(e)                    {                        require('ScriptContainer').send(e);                    }                        require('ScriptContainer').send('done');                    ";h._child.ExecuteString(k);toasters[h._hashCode()]=h;h.on("Dismissed",function(){delete toasters[this._hashCode()]});console.log("Returning");return(h)}else{if(!require("fs").existsSync("/usr/bin/notify-send")){throw ("Toast not supported on this platform")}Object.defineProperty(h,"_sessions",{value:require("user-sessions").Current(function g(e){this._cchild=require("child_process").execFile("/usr/bin/whoami",["whoami"],{type:require("child_process").SpawnTypes.TERM});this._cchild.stdout.on("data",function(i){if(i.toString().split("\r\n")[0]=="root"){if(e[":0"].State!="Connected"&&e[":0"].State!="Active"){this.parent.parent.Parent.emit("Dismissed");return}this.parent.parent._notify=require("child_process").execFile("/bin/sh",["sh"],{type:require("child_process").SpawnTypes.TERM});this.parent.parent._notify.stdin.write("su - "+e[":0"].Username+" -c \"DISPLAY=:0 notify-send '"+this.parent.parent.Parent.title+"' '"+this.parent.parent.Parent.caption+"'\"\n");this.parent.parent._notify.stdin.write("exit\n");this.parent.parent._notify.stdout.on("data",function(n){})}else{this.parent.parent._notify=require("child_process").execFile("/usr/bin/notify-send",["notify-send",this.parent.parent.Parent.title,this.parent.parent.Parent.caption],{type:require("child_process").SpawnTypes.TERM});this.parent.parent._notify.stdout.on("data",function(n){})}this.parent.parent.Parent._timeout=setTimeout(function m(n){n.emit("Dismissed")},10000,this.parent.parent.Parent)});this._cchild.parent=this})});h._sessions.Parent=h;toasters[h._hashCode()]=h;h.on("Dismissed",function(){delete toasters[this._hashCode()]});return(h)}}}module.exports=new Toaster(); | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -1 +0,0 @@ | ||||
| function _Scan(){var f=this.Marshal.CreatePointer();this.Native.WlanEnumInterfaces(this.Handle,0,f);var a=f.Deref().Deref(0,4).toBuffer().readUInt32LE(0);var d=f.Deref().Deref(8,532);var c=d.Deref(16,512).AnsiString;var e;switch(d.Deref(528,4).toBuffer().readUInt32LE(0)){case 0:e="NOT READY";break;case 1:e="CONNECTED";break;case 2:e="AD-HOC";break;case 3:e="DISCONNECTING";break;case 4:e="DISCONNECTED";break;case 5:e="ASSOCIATING";break;case 6:e="DISCOVERING";break;case 7:e="AUTHENTICATING";break;default:e="UNKNOWN";break}var b=d.Deref(0,16);if(this.Native.WlanScan(this.Handle,b,0,0,0).Val==0){return(true)}else{return(false)}}function AccessPoint(d,a,c,b){this.ssid=d;this.bssid=a;this.rssi=c;this.lq=b}AccessPoint.prototype.toString=function(){return(this.ssid+" ["+this.bssid+"]: "+this.lq)};function OnNotify(g){var h=g.Deref(0,4).toBuffer().readUInt32LE(0);var f=g.Deref(4,4).toBuffer().readUInt32LE(0);var c=g.Deref(8,16);if((h&8)&&(f==7)){var a=this.Parent.Marshal.CreatePointer();var k=this.Parent.Native.GetBSSList(this.Parent.Handle,c,0,3,0,0,a).Val;if(k==0){var n=a.Deref().Deref(0,4).toBuffer().readUInt32LE(0);var j=a.Deref().Deref(4,4).toBuffer().readUInt32LE(0);for(i=0;i<j;++i){var d=a.Deref().Deref(8+(360*i),360);var m=d.Deref(4,32).String.trim();var b=d.Deref(40,6).HexString2;var l=d.Deref(56,4).toBuffer().readUInt32LE(0);var e=d.Deref(60,4).toBuffer().readUInt32LE(0);this.Parent.emit("Scan",new AccessPoint(m,b,l,e))}}}}function Wireless(){var a=require("events").inherits(this);this.Marshal=require("_GenericMarshal");this.Native=this.Marshal.CreateNativeProxy("wlanapi.dll");this.Native.CreateMethod("WlanOpenHandle");this.Native.CreateMethod("WlanGetNetworkBssList","GetBSSList");this.Native.CreateMethod("WlanRegisterNotification");this.Native.CreateMethod("WlanEnumInterfaces");this.Native.CreateMethod("WlanScan");this.Native.CreateMethod("WlanQueryInterface");var c=this.Marshal.CreatePointer();var b=this.Marshal.CreatePointer();this.Native.WlanOpenHandle(2,0,c,b);this.Handle=b.Deref();this._NOTIFY_PROXY_OBJECT=this.Marshal.CreateCallbackProxy(OnNotify,2);this._NOTIFY_PROXY_OBJECT.Parent=this;var d=this.Marshal.CreatePointer();var e=this.Native.WlanRegisterNotification(this.Handle,65535,0,this._NOTIFY_PROXY_OBJECT.Callback,this._NOTIFY_PROXY_OBJECT.State,0,d);a.createEvent("Scan");a.addMethod("Scan",_Scan);this.GetConnectedNetwork=function(){var n=this.Marshal.CreatePointer();console.log("Success = "+this.Native.WlanEnumInterfaces(this.Handle,0,n).Val);var h=n.Deref().Deref(0,4).toBuffer().readUInt32LE(0);var m=n.Deref().Deref(8,532);var l=m.Deref(16,512).AnsiString;var o=m.Deref(528,4).toBuffer().readUInt32LE(0);if(m.Deref(528,4).toBuffer().readUInt32LE(0)==1){var j=this.Marshal.CreatePointer();var q=this.Marshal.CreatePointer();var s=this.Marshal.CreatePointer();var k=m.Deref(0,16);var r=this.Native.WlanQueryInterface(this.Handle,k,7,0,j,q,s).Val;if(r==0){var f=q.Deref().Deref(524,32).String;var g=q.Deref().Deref(560,6).HexString;var p=q.Deref().Deref(576,4).toBuffer().readUInt32LE(0);return(new AccessPoint(f,g,0,p))}}throw ("GetConnectedNetworks: FAILED (not associated to a network)")};return(this)}module.exports=new Wireless(); | ||||
| @ -1 +0,0 @@ | ||||
| var MemoryStream=require("MemoryStream");var WindowsChildScript='var parent = require("ScriptContainer");var Wireless = require("wifi-scanner-windows");Wireless.on("Scan", function (ap) { parent.send(ap); });Wireless.Scan();';function AccessPoint(c,a,b){this.ssid=c;this.bssid=a;this.lq=b}AccessPoint.prototype.toString=function(){return("["+this.bssid+"]: "+this.ssid+" ("+this.lq+")")};function WiFiScanner(){var a=require("events").inherits(this);a.createEvent("accessPoint");this.hasWireless=function(){var d=false;var b=require("os").networkInterfaces();for(var c in b){if(b[c][0].type=="wireless"){d=true;break}}return(d)};this.Scan=function(){if(process.platform=="win32"){this.master=require("ScriptContainer").Create(15,ContainerPermissions.DEFAULT);this.master.parent=this;this.master.on("data",function(e){this.parent.emit("accessPoint",new AccessPoint(e.ssid,e.bssid,e.lq))});this.master.addModule("wifi-scanner-windows",getJSModule("wifi-scanner-windows"));this.master.ExecuteString(WindowsChildScript)}else{if(process.platform=="linux"){var c=require("os").networkInterfaces();var d=null;for(var b in c){if(c[b][0].type=="wireless"){d=b;break}}if(d!=null){this.child=require("child_process").execFile("/sbin/iwlist",["iwlist",d,"scan"]);this.child.parent=this;this.child.ms=new MemoryStream();this.child.ms.parent=this.child;this.child.stdout.on("data",function(e){this.parent.ms.write(e)});this.child.on("exit",function(){this.ms.end()});this.child.ms.on("end",function(){var l=this.buffer.toString();tokens=l.split(" - Address: ");for(var h in tokens){if(h==0){continue}var i=tokens[h].split("\n");var e=i[0];var f;var g;for(var j in i){j=i[j].trim();j=j.trim();if(j.startsWith("ESSID:")){g=j.slice(7,j.length-1);if(g=="<hidden>"){g=""}}if(j.startsWith("Signal level=")){f=j.slice(13,j.length-4)}else{if(j.startsWith("Quality=")){f=j.slice(8,10);var k=j.slice(11,13)}}}this.parent.parent.emit("accessPoint",new AccessPoint(g,e,f))}})}}}}}module.exports=WiFiScanner; | ||||
| @ -1 +0,0 @@ | ||||
| var TrayIconFlags={NIF_MESSAGE:1,NIF_ICON:2,NIF_TIP:4,NIF_STATE:8,NIF_INFO:16,NIF_GUID:32,NIF_REALTIME:64,NIF_SHOWTIP:128,NIM_ADD:0,NIM_MODIFY:1,NIM_DELETE:2,NIM_SETFOCUS:3,NIM_SETVERSION:4};var NOTIFYICON_VERSION_4=4;var MessageTypes={WM_APP:32768,WM_USER:1024};function WindowsConsole(){if(process.platform=="win32"){this._ObjectID="win-console";this._Marshal=require("_GenericMarshal");this._kernel32=this._Marshal.CreateNativeProxy("kernel32.dll");this._user32=this._Marshal.CreateNativeProxy("user32.dll");this._kernel32.CreateMethod("GetConsoleWindow");this._kernel32.CreateMethod("GetCurrentThread");this._user32.CreateMethod("ShowWindow");this._user32.CreateMethod("LoadImageA");this._user32.CreateMethod({method:"GetMessageA",threadDispatch:1});this._shell32=this._Marshal.CreateNativeProxy("Shell32.dll");this._shell32.CreateMethod("Shell_NotifyIconA");this._handle=this._kernel32.GetConsoleWindow();this.minimize=function(){this._user32.ShowWindow(this._handle,6)};this.restore=function(){this._user32.ShowWindow(this._handle,9)};this.hide=function(){this._user32.ShowWindow(this._handle,0)};this.show=function(){this._user32.ShowWindow(this._handle,5)};this._loadicon=function(c){var b=this._user32.LoadImageA(0,this._Marshal.CreateVariable(c),1,0,0,16|32768|64);return(b)};this.SetTrayIcon=function a(h){var b=this._Marshal.CreateVariable(this._Marshal.PointerSize==4?508:528);b.toBuffer().writeUInt32LE(b._size,0);var n=TrayIconFlags.NIF_TIP|TrayIconFlags.NIF_MESSAGE;h.filter=MessageTypes.WM_APP+1;b.Deref(this._Marshal.PointerSize==4?16:24,4).toBuffer().writeUInt32LE(h.filter);if(!h.noBalloon){n|=TrayIconFlags.NIF_INFO}if(h.icon){n|=TrayIconFlags.NIF_ICON;var c=b.Deref(this._Marshal.PointerSize==4?20:32,this._Marshal.PointerSize);h.icon.pointerBuffer().copy(c.toBuffer())}b.Deref(this._Marshal.PointerSize*2,4).toBuffer().writeUInt32LE(1);b.Deref(this._Marshal.PointerSize==4?12:20,4).toBuffer().writeUInt32LE(n);b.Deref(this._Marshal.PointerSize==4?416:432,4).toBuffer().writeUInt32LE(NOTIFYICON_VERSION_4);var m=b.Deref(this._Marshal.PointerSize==4?24:40,128);var k=b.Deref(this._Marshal.PointerSize==4?160:176,256);var l=b.Deref(this._Marshal.PointerSize==4?420:436,64);if(h.szTip){Buffer.from(h.szTip).copy(m.toBuffer())}if(h.szInfo){Buffer.from(h.szInfo).copy(k.toBuffer())}if(h.szInfoTitle){Buffer.from(h.szInfoTitle).copy(l.toBuffer())}var d=require("win-message-pump");retVal={_ObjectID:"WindowsConsole.TrayIcon",MessagePump:new d(h)};var j=require("events").inherits(retVal);j.createEvent("ToastClicked");j.createEvent("IconHover");j.createEvent("ToastDismissed");retVal.Options=h;retVal.MessagePump.TrayIcon=retVal;retVal.MessagePump.NotifyData=b;retVal.MessagePump.WindowsConsole=this;retVal.MessagePump.on("exit",function e(o){console.log("Pump Exited");if(this.TrayIcon){this.TrayIcon.remove()}});retVal.MessagePump.on("hwnd",function f(o){h.hwnd=o;o.pointerBuffer().copy(this.NotifyData.Deref(this.WindowsConsole._Marshal.PointerSize,this.WindowsConsole._Marshal.PointerSize).toBuffer());if(this.WindowsConsole._shell32.Shell_NotifyIconA(TrayIconFlags.NIM_ADD,this.NotifyData).Val==0){}});retVal.MessagePump.on("message",function g(p){if(p.message==this.TrayIcon.Options.filter){var o=false;if(p.wparam==1&&p.lparam==1029){this.TrayIcon.emit("ToastClicked");o=true}if(p.wparam==1&&p.lparam==512){this.TrayIcon.emit("IconHover");o=true}if(this.TrayIcon.Options.balloonOnly&&p.wparam==1&&(p.lparam==1028||p.lparam==1029)){this.TrayIcon.emit("ToastDismissed");this.TrayIcon.remove();o=true}if(!o){console.log(p)}}});retVal.remove=function i(){this.MessagePump.WindowsConsole._shell32.Shell_NotifyIconA(TrayIconFlags.NIM_DELETE,this.MessagePump.NotifyData);this.MessagePump.stop();delete this.MessagePump.TrayIcon;delete this.MessagePump};return(retVal)}}}module.exports=new WindowsConsole(); | ||||
| @ -1 +0,0 @@ | ||||
| var WH_CALLWNDPROC=4;var WM_QUIT=18;var GM=require("_GenericMarshal");function WindowsMessagePump(d){this._ObjectID="win-message-pump";this._options=d;var b=require("events").inherits(this);b.createEvent("hwnd");b.createEvent("error");b.createEvent("message");b.createEvent("exit");this._msg=GM.CreateVariable(GM.PointerSize==4?28:48);this._kernel32=GM.CreateNativeProxy("Kernel32.dll");this._kernel32.mp=this;this._kernel32.CreateMethod("GetLastError");this._kernel32.CreateMethod("GetModuleHandleA");this._user32=GM.CreateNativeProxy("User32.dll");this._user32.mp=this;this._user32.CreateMethod("GetMessageA");this._user32.CreateMethod("CreateWindowExA");this._user32.CreateMethod("TranslateMessage");this._user32.CreateMethod("DispatchMessageA");this._user32.CreateMethod("RegisterClassExA");this._user32.CreateMethod("DefWindowProcA");this._user32.CreateMethod("PostMessageA");this.wndclass=GM.CreateVariable(GM.PointerSize==4?48:80);this.wndclass.mp=this;this.wndclass.hinstance=this._kernel32.GetModuleHandleA(0);this.wndclass.cname=GM.CreateVariable("MainWWWClass");this.wndclass.wndproc=GM.GetGenericGlobalCallback(4);this.wndclass.wndproc.mp=this;this.wndclass.toBuffer().writeUInt32LE(this.wndclass._size);this.wndclass.cname.pointerBuffer().copy(this.wndclass.Deref(GM.PointerSize==4?40:64,GM.PointerSize).toBuffer());this.wndclass.wndproc.pointerBuffer().copy(this.wndclass.Deref(8,GM.PointerSize).toBuffer());this.wndclass.hinstance.pointerBuffer().copy(this.wndclass.Deref(GM.PointerSize==4?20:24,GM.PointerSize).toBuffer());this.wndclass.wndproc.on("GlobalCallback",function c(h,i,g,f){if(this.mp._hwnd!=null&&this.mp._hwnd.Val==h.Val){this.mp.emit("message",{message:i.Val,wparam:g.Val,lparam:f.Val,lparam_hex:f.pointerBuffer().toString("hex")});return(this.mp._user32.DefWindowProcA(h,i,g,f))}else{if(this.mp._hwnd==null&&this.CallingThread()==this.mp._user32.RegisterClassExA.async.threadId()){return(this.mp._user32.DefWindowProcA(h,i,g,f))}}});this._user32.RegisterClassExA.async(this.wndclass).then(function(){this.nativeProxy.CreateWindowExA.async(this.nativeProxy.RegisterClassExA.async,136,this.nativeProxy.mp.wndclass.cname,0,8388608,0,0,100,100,0,0,0,0).then(function(f){if(f.Val==0){this.nativeProxy.mp.emit("error","Error creating hidden window")}else{this.nativeProxy.mp._hwnd=f;this.nativeProxy.mp.emit("hwnd",f);this.nativeProxy.mp._startPump()}})});this._startPump=function a(){this._user32.GetMessageA.async(this._user32.RegisterClassExA.async,this._msg,this._hwnd,0,0).then(function(f){if(f.Val>0){this.nativeProxy.TranslateMessage.async(this.nativeProxy.RegisterClassExA.async,this.nativeProxy.mp._msg).then(function(){this.nativeProxy.DispatchMessageA.async(this.nativeProxy.RegisterClassExA.async,this.nativeProxy.mp._msg).then(function(){this.nativeProxy.mp._startPump()})})}else{delete this.nativeProxy.mp._hwnd;this.nativeProxy.mp.emit("exit",0)}},function(f){this.nativeProxy.mp.stop()})};this.stop=function e(){if(this._hwnd){this._user32.PostMessageA(this._hwnd,WM_QUIT,0,0)}}}module.exports=WindowsMessagePump; | ||||
| @ -1 +0,0 @@ | ||||
| var KEY_QUERY_VALUE=1;var KEY_WRITE=131078;var KEY_DATA_TYPES={REG_NONE:0,REG_SZ:1,REG_EXPAND_SZ:2,REG_BINARY:3,REG_DWORD:4,REG_DWORD_BIG_ENDIAN:5,REG_LINK:6,REG_MULTI_SZ:7,REG_RESOURCE_LIST:8,REG_FULL_RESOURCE_DESCRIPTOR:9,REG_RESOURCE_REQUIREMENTS_LIST:10,REG_QWORD:11};function windows_registry(){this._ObjectId="win-registry";this._marshal=require("_GenericMarshal");this._AdvApi=this._marshal.CreateNativeProxy("Advapi32.dll");this._AdvApi.CreateMethod("RegCreateKeyExA");this._AdvApi.CreateMethod("RegOpenKeyExA");this._AdvApi.CreateMethod("RegQueryValueExA");this._AdvApi.CreateMethod("RegCloseKey");this._AdvApi.CreateMethod("RegDeleteKeyA");this._AdvApi.CreateMethod("RegDeleteValueA");this._AdvApi.CreateMethod("RegSetValueExA");this.HKEY={Root:Buffer.from("80000000","hex").swap32(),CurrentUser:Buffer.from("80000001","hex").swap32(),LocalMachine:Buffer.from("80000002","hex").swap32(),Users:Buffer.from("80000003","hex").swap32()};this.QueryKey=function b(g,k,i){var e=this._marshal.CreatePointer();var j=this._marshal.CreateVariable(4);var m=this._marshal.CreateVariable(4);i=this._marshal.CreateVariable(i);var f=this._marshal.CreatePointer(g);var l=null;if(this._AdvApi.RegOpenKeyExA(f,this._marshal.CreateVariable(k),0,KEY_QUERY_VALUE,e).Val!=0){throw ("Error Opening Registry Key: "+k)}if(this._AdvApi.RegQueryValueExA(e.Deref(),i,0,0,0,j).Val==0){var d=this._marshal.CreateVariable(j.toBuffer().readUInt32LE());if(this._AdvApi.RegQueryValueExA(e.Deref(),i,0,m,d,j).Val==0){switch(m.toBuffer().readUInt32LE()){case KEY_DATA_TYPES.REG_DWORD:l=d.toBuffer().readUInt32LE();break;case KEY_DATA_TYPES.REG_DWORD_BIG_ENDIAN:l=d.toBuffer().readUInt32BE();break;case KEY_DATA_TYPES.REG_SZ:l=d.String;break;case KEY_DATA_TYPES.REG_BINARY:default:l=d.toBuffer();l._data=d;break}}}else{this._AdvApi.RegCloseKey(e.Deref());throw ("Not Found")}this._AdvApi.RegCloseKey(e.Deref());return(l)};this.WriteKey=function c(g,j,i,l){var k;var f=this._marshal.CreatePointer();if(this._AdvApi.RegCreateKeyExA(this._marshal.CreatePointer(g),this._marshal.CreateVariable(j),0,0,0,KEY_WRITE,0,f,0).Val!=0){throw ("Error Opening Registry Key: "+j)}var d;var e;switch(typeof(l)){case"boolean":e=KEY_DATA_TYPES.REG_DWORD;d=this._marshal.CreateVariable(4);d.toBuffer().writeUInt32LE(l?1:0);break;case"number":e=KEY_DATA_TYPES.REG_DWORD;d=this._marshal.CreateVariable(4);d.toBuffer().writeUInt32LE(l);break;case"string":e=KEY_DATA_TYPES.REG_SZ;d=this._marshal.CreateVariable(l);break;default:e=KEY_DATA_TYPES.REG_BINARY;d=this._marshal.CreateVariable(l.length);l.copy(d.toBuffer());break}if(this._AdvApi.RegSetValueExA(f.Deref(),this._marshal.CreateVariable(i),0,e,d,d._size).Val!=0){this._AdvApi.RegCloseKey(f.Deref());throw ("Error writing reg key: "+i)}this._AdvApi.RegCloseKey(f.Deref())};this.DeleteKey=function a(e,g,f){if(!f){if(this._AdvApi.RegDeleteKeyA(this._marshal.CreatePointer(e),this._marshal.CreateVariable(g)).Val!=0){throw ("Error Deleting Key: "+g)}}else{var d=this._marshal.CreatePointer();var i;if(this._AdvApi.RegOpenKeyExA(this._marshal.CreatePointer(e),this._marshal.CreateVariable(g),0,KEY_QUERY_VALUE|KEY_WRITE,d).Val!=0){throw ("Error Opening Registry Key: "+g)}if((i=this._AdvApi.RegDeleteValueA(d.Deref(),this._marshal.CreateVariable(f)).Val)!=0){this._AdvApi.RegCloseKey(d.Deref());throw ("Error["+i+"] Deleting Key: "+g+"."+f)}this._AdvApi.RegCloseKey(d.Deref())}}}module.exports=new windows_registry(); | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										55
									
								
								common.js
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								common.js
									
									
									
									
									
								
							| @ -173,3 +173,58 @@ module.exports.checkPasswordRequirements = function(password, requirements) { | ||||
|     if (requirements.nonalpha && (nonalpha < requirements.nonalpha)) return false; | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // Limits the number of tasks running to a fixed limit placing the rest in a pending queue.
 | ||||
| // This is useful to limit the number of agents upgrading at the same time, to not swamp 
 | ||||
| // the network with traffic.
 | ||||
| 
 | ||||
| // taskLimiterQueue.launch(somethingToDo, argument);
 | ||||
| //
 | ||||
| // function somethingToDo(argument, taskid, taskLimiterQueue) {
 | ||||
| //     setTimeout(function () { taskLimiterQueue.completed(taskid); }, Math.random() * 2000);
 | ||||
| // }
 | ||||
| 
 | ||||
| module.exports.createTaskLimiterQueue = function(maxTasks, maxTaskTime, cleaningInterval) { | ||||
|     var obj = { maxTasks: maxTasks, maxTaskTime: (maxTaskTime * 1000), nextTaskId: 0, currentCount: 0, current: {}, pending: [], timer: null }; | ||||
| 
 | ||||
|     // Add a task to the super queue
 | ||||
|     obj.launch = function (func, arg) { | ||||
|         if (obj.currentCount < obj.maxTasks) { | ||||
|             // Run this task now
 | ||||
|             const id = obj.nextTaskId++; | ||||
|             obj.current[id] = Date.now() + obj.maxTaskTime; | ||||
|             obj.currentCount++; | ||||
|             //console.log('ImmidiateLaunch ' + id);
 | ||||
|             func(arg, id, obj); // Start the task
 | ||||
|             if (obj.timer == null) { obj.timer = setInterval(obj.clean, cleaningInterval * 1000); } | ||||
|         } else { | ||||
|             // Hold this task
 | ||||
|             //console.log('Holding');
 | ||||
|             obj.pending.push({ func: func, arg: arg }); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     // Called when a task is completed
 | ||||
|     obj.completed = function (taskid) { | ||||
|         //console.log('Completed ' + taskid);
 | ||||
|         if (obj.current[taskid]) { delete obj.current[taskid]; obj.currentCount--; } else { return; } | ||||
|         while ((obj.pending.length > 0) && (obj.currentCount < obj.maxTasks)) { | ||||
|             // Run this task now
 | ||||
|             const t = obj.pending.shift(), id = obj.nextTaskId++; | ||||
|             obj.current[id] = Date.now() + obj.maxTaskTime; | ||||
|             obj.currentCount++; | ||||
|             //console.log('PendingLaunch ' + id);
 | ||||
|             t.func(t.arg, id, obj); // Start the task
 | ||||
|         } | ||||
|         if ((obj.pending.length == 0) && (obj.timer != null)) { clearInterval(obj.timer); obj.timer = null; } // All done, clear the timer
 | ||||
|     } | ||||
| 
 | ||||
|     // Look for long standing tasks and clean them up
 | ||||
|     obj.clean = function () { | ||||
|         const t = Date.now(); | ||||
|         for (var i in obj.current) { if (obj.current[i] < t) { obj.completed(parseInt(i)); } } | ||||
|     } | ||||
| 
 | ||||
|     return obj; | ||||
| } | ||||
							
								
								
									
										12
									
								
								meshagent.js
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								meshagent.js
									
									
									
									
									
								
							| @ -45,7 +45,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) { | ||||
|     ws._socket.setKeepAlive(true, 240000); // Set TCP keep alive, 4 minutes
 | ||||
| 
 | ||||
|     // Send a message to the mesh agent
 | ||||
|     obj.send = function (data) { try { if (typeof data == 'string') { obj.ws.send(Buffer.from(data, 'binary')); } else { obj.ws.send(data); } } catch (e) { } }; | ||||
|     obj.send = function (data, func) { try { if (typeof data == 'string') { obj.ws.send(Buffer.from(data, 'binary'), func); } else { obj.ws.send(data, func); } } catch (e) { } }; | ||||
| 
 | ||||
|     // Disconnect this agent
 | ||||
|     obj.close = function (arg) { | ||||
| @ -118,8 +118,14 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) { | ||||
|                                 obj.parent.parent.debug(1, 'Clearing core'); | ||||
|                             } else { | ||||
|                                 // Update new core
 | ||||
|                                 obj.send(obj.common.ShortToStr(10) + obj.common.ShortToStr(0) + meshcorehash + obj.parent.parent.defaultMeshCores[corename]); // MeshCommand_CoreModule, start core update
 | ||||
|                                 obj.parent.parent.debug(1, 'Updating code ' + corename); | ||||
|                                 //obj.send(obj.common.ShortToStr(10) + obj.common.ShortToStr(0) + meshcorehash + obj.parent.parent.defaultMeshCores[corename]); // MeshCommand_CoreModule, start core update
 | ||||
|                                 //obj.parent.parent.debug(1, 'Updating code ' + corename);
 | ||||
| 
 | ||||
|                                 // Update new core with task limiting so not to flood the server.
 | ||||
|                                 obj.parent.parent.taskLimiter.launch(function (argument, taskid, taskLimiterQueue) { | ||||
|                                     obj.send(obj.common.ShortToStr(10) + obj.common.ShortToStr(0) + argument.hash + argument.core, function () { obj.parent.parent.taskLimiter.completed(taskid); }); // MeshCommand_CoreModule, start core update
 | ||||
|                                     obj.parent.parent.debug(1, 'Updating code ' + argument.name); | ||||
|                                 }, { hash: meshcorehash, core: obj.parent.parent.defaultMeshCores[corename], name: corename }); | ||||
|                             } | ||||
|                             obj.agentCoreCheck++; | ||||
|                         } | ||||
|  | ||||
| @ -59,6 +59,7 @@ function CreateMeshCentralServer(config, args) { | ||||
|     obj.serverKey = Buffer.from(obj.crypto.randomBytes(48), 'binary'); | ||||
|     obj.loginCookieEncryptionKey = null; | ||||
|     obj.serverSelfWriteAllowed = true; | ||||
|     obj.taskLimiter = obj.common.createTaskLimiterQueue(10, 20, 60); // This is a task limiter queue to smooth out server work.
 | ||||
|     try { obj.currentVer = JSON.parse(obj.fs.readFileSync(obj.path.join(__dirname, 'package.json'), 'utf8')).version; } catch (e) { } // Fetch server version
 | ||||
| 
 | ||||
|     // Setup the default configuration and files paths
 | ||||
| @ -1214,13 +1215,13 @@ function CreateMeshCentralServer(config, args) { | ||||
|             const decipher = obj.crypto.createDecipheriv('aes-256-gcm', key.slice(0, 32), cookie.slice(0, 12)); | ||||
|             decipher.setAuthTag(cookie.slice(12, 16)); | ||||
|             const o = JSON.parse(decipher.update(cookie.slice(28), 'binary', 'utf8') + decipher.final('utf8')); | ||||
|             if ((o.time == null) || (o.time == null) || (typeof o.time != 'number')) { Debug(1, 'ERR: Bad cookie due to invalid time'); return null; } | ||||
|             if ((o.time == null) || (o.time == null) || (typeof o.time != 'number')) { obj.debug(1, 'ERR: Bad cookie due to invalid time'); return null; } | ||||
|             o.time = o.time * 1000; // Decode the cookie creation time
 | ||||
|             o.dtime = Date.now() - o.time; // Decode how long ago the cookie was created (in milliseconds)
 | ||||
|             if (timeout == null) { timeout = 2; } | ||||
|             if ((o.dtime > (timeout * 60000)) || (o.dtime < -30000)) { Debug(1, 'ERR: Bad cookie due to timeout'); return null; } // The cookie is only valid 120 seconds, or 30 seconds back in time (in case other server's clock is not quite right)
 | ||||
|             if ((o.dtime > (timeout * 60000)) || (o.dtime < -30000)) { obj.debug(1, 'ERR: Bad cookie due to timeout'); return null; } // The cookie is only valid 120 seconds, or 30 seconds back in time (in case other server's clock is not quite right)
 | ||||
|             return o; | ||||
|         } catch (e) { return null; } | ||||
|         } catch (ex) { obj.debug(1, 'ERR: Bad AESGCM cookie due to exception: ' + ex); return null; } | ||||
|     }; | ||||
| 
 | ||||
|     // Decode a cookie back into an object using a key using AES256 / HMAC-SHA386. Return null if it's not a valid cookie. (key must be 80 bytes or more)
 | ||||
| @ -1236,13 +1237,13 @@ function CreateMeshCentralServer(config, args) { | ||||
|             hmac.update(rawmsg.slice(48)); | ||||
|             if (Buffer.compare(hmac.digest(), Buffer.from(rawmsg.slice(0, 48))) == false) { return null; } | ||||
|             const o = JSON.parse(rawmsg.slice(48).toString('utf8')); | ||||
|             if ((o.time == null) || (o.time == null) || (typeof o.time != 'number')) { Debug(1, 'ERR: Bad cookie due to invalid time'); return null; } | ||||
|             if ((o.time == null) || (o.time == null) || (typeof o.time != 'number')) { obj.debug(1, 'ERR: Bad cookie due to invalid time'); return null; } | ||||
|             o.time = o.time * 1000; // Decode the cookie creation time
 | ||||
|             o.dtime = Date.now() - o.time; // Decode how long ago the cookie was created (in milliseconds)
 | ||||
|             if (timeout == null) { timeout = 2; } | ||||
|             if ((o.dtime > (timeout * 60000)) || (o.dtime < -30000)) { obj.debug(1, 'ERR: Bad cookie due to timeout'); return null; } // The cookie is only valid 120 seconds, or 30 seconds back in time (in case other server's clock is not quite right)
 | ||||
|             return o; | ||||
|         } catch (ex) { console.log(ex); return null; } | ||||
|         } catch (ex) { obj.debug(1, 'ERR: Bad AESSHA cookie due to exception: ' + ex); return null; } | ||||
|     }; | ||||
| 
 | ||||
|     // Debug
 | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "meshcentral", | ||||
|   "version": "0.2.6-y", | ||||
|   "version": "0.2.7-a", | ||||
|   "keywords": [ | ||||
|     "Remote Management", | ||||
|     "Intel AMT", | ||||
|  | ||||
| @ -5,11 +5,12 @@ | ||||
| */ | ||||
| 
 | ||||
| // Construct a MeshServer agent direction object
 | ||||
| var CreateAgentRedirect = function (meshserver, module, serverPublicNamePort) { | ||||
| var CreateAgentRedirect = function (meshserver, module, serverPublicNamePort, authCookie) { | ||||
|     var obj = {}; | ||||
|     obj.m = module; // This is the inner module (Terminal or Desktop)
 | ||||
|     module.parent = obj; | ||||
|     obj.meshserver = meshserver; | ||||
|     obj.authCookie = authCookie; | ||||
|     obj.State = 0; | ||||
|     obj.nodeid = null; | ||||
|     obj.socket = null; | ||||
| @ -31,6 +32,7 @@ var CreateAgentRedirect = function (meshserver, module, serverPublicNamePort) { | ||||
|     obj.Start = function (nodeid) { | ||||
|         var url2, url = window.location.protocol.replace("http", "ws") + "//" + window.location.host + window.location.pathname.substring(0, window.location.pathname.lastIndexOf('/')) + "/meshrelay.ashx?id=" + obj.tunnelid; | ||||
|         //if (serverPublicNamePort) { url2 = window.location.protocol.replace("http", "ws") + "//" + serverPublicNamePort + "/meshrelay.ashx?id=" + obj.tunnelid; } else { url2 = url; }
 | ||||
|         if ((authCookie != null) && (authCookie != '')) { url += '&auth=' + authCookie; } | ||||
|         obj.nodeid = nodeid; | ||||
|         obj.connectstate = 0; | ||||
|         obj.socket = new WebSocket(url); | ||||
|  | ||||
| @ -5,10 +5,11 @@ | ||||
| */ | ||||
| 
 | ||||
| // Construct a MeshServer object
 | ||||
| var CreateAmtRedirect = function (module) { | ||||
| var CreateAmtRedirect = function (module, authCookie) { | ||||
|     var obj = {}; | ||||
|     obj.m = module; // This is the inner module (Terminal or Desktop)
 | ||||
|     module.parent = obj; | ||||
|     obj.authCookie = authCookie; | ||||
|     obj.State = 0; | ||||
|     obj.socket = null; | ||||
|     // ###BEGIN###{!Mode-Firmware}
 | ||||
| @ -40,7 +41,9 @@ var CreateAmtRedirect = function (module) { | ||||
|         obj.pass = pass; | ||||
|         obj.connectstate = 0; | ||||
|         obj.inDataCount = 0; | ||||
|         obj.socket = new WebSocket(window.location.protocol.replace("http", "ws") + "//" + window.location.host + window.location.pathname.substring(0, window.location.pathname.lastIndexOf('/')) + "/webrelay.ashx?p=2&host=" + host + "&port=" + port + "&tls=" + tls + ((user == '*') ? "&serverauth=1" : "") + ((typeof pass === "undefined") ? ("&serverauth=1&user=" + user) : "")); // The "p=2" indicates to the relay that this is a REDIRECTION session
 | ||||
|         var url = window.location.protocol.replace("http", "ws") + "//" + window.location.host + window.location.pathname.substring(0, window.location.pathname.lastIndexOf('/')) + "/webrelay.ashx?p=2&host=" + host + "&port=" + port + "&tls=" + tls + ((user == '*') ? "&serverauth=1" : "") + ((typeof pass === "undefined") ? ("&serverauth=1&user=" + user) : ""); // The "p=2" indicates to the relay that this is a REDIRECTION session
 | ||||
|         if ((authCookie != null) && (authCookie != '')) { url += '&auth=' + authCookie; } | ||||
|         obj.socket = new WebSocket(url); | ||||
|         obj.socket.onopen = obj.xxOnSocketConnected; | ||||
|         obj.socket.onmessage = obj.xxOnMessage; | ||||
|         obj.socket.onclose = obj.xxOnSocketClosed; | ||||
|  | ||||
| @ -4,11 +4,12 @@ | ||||
| * @version v0.0.1 | ||||
| */ | ||||
| 
 | ||||
| var MeshServerCreateControl = function (domain) { | ||||
| var MeshServerCreateControl = function (domain, authCookie) { | ||||
|     var obj = {}; | ||||
|     obj.State = 0; | ||||
|     obj.connectstate = 0; | ||||
|     obj.pingTimer = null; | ||||
|     obj.authCookie = authCookie; | ||||
|      | ||||
|     obj.xxStateChange = function (newstate, errCode) { | ||||
|         if (obj.State == newstate) return; | ||||
| @ -20,7 +21,9 @@ var MeshServerCreateControl = function (domain) { | ||||
|     obj.Start = function () { | ||||
|         if (obj.connectstate != 0) return; | ||||
|         obj.connectstate = 0; | ||||
|         obj.socket = new WebSocket(window.location.protocol.replace("http", "ws") + "//" + window.location.host + domain + "control.ashx"); | ||||
|         var url = window.location.protocol.replace("http", "ws") + "//" + window.location.host + domain + "control.ashx"; | ||||
|         if (obj.authCookie && (obj.authCookie != '')) { url += '?auth=' + obj.authCookie; } | ||||
|         obj.socket = new WebSocket(url); | ||||
|         obj.socket.onopen = function (e) { obj.connectstate = 1; } | ||||
|         obj.socket.onmessage = obj.xxOnMessage; | ||||
|         obj.socket.onclose = function(e) { obj.Stop(e.code); } | ||||
| @ -42,6 +45,7 @@ var MeshServerCreateControl = function (domain) { | ||||
|         var message; | ||||
|         try { message = JSON.parse(e.data); } catch (e) { return; } | ||||
|         if ((typeof message != 'object') || (message.action == 'pong')) { return; } | ||||
|         if (message.action == 'close') { if (message.msg) { console.log(message.msg); } obj.Stop(message.cause); return; } | ||||
|         if (obj.onMessage) obj.onMessage(obj, message); | ||||
|     }; | ||||
|      | ||||
|  | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -574,6 +574,7 @@ | ||||
|         var sessionTime = parseInt("{{{sessiontime}}}"); | ||||
|         var domain = "{{{domain}}}"; | ||||
|         var domainUrl = "{{{domainurl}}}"; | ||||
|         var authCookie = "{{{authCookie}}}"; | ||||
|         var meshserver = null; | ||||
|         var xdr = null; | ||||
|         var serverinfo = null; | ||||
| @ -606,7 +607,7 @@ | ||||
|             go(1); | ||||
| 
 | ||||
|             // Connect to the mesh server | ||||
|             meshserver = MeshServerCreateControl(domainUrl); | ||||
|             meshserver = MeshServerCreateControl(domainUrl, authCookie); | ||||
|             meshserver.onStateChanged = onStateChanged; | ||||
|             meshserver.onMessage = onMessage; | ||||
|             meshserver.Start(); | ||||
| @ -622,6 +623,7 @@ | ||||
|                 // Control web socket disconnected | ||||
|                 setDialogMode(0); // Close any dialog boxes if present | ||||
|                 go(0); // Go to disconnection panel | ||||
|                 if (errorCode == 'noauth') { QH('p0span', 'Unable to perform authentication'); return; } | ||||
|                 if (prevState == 2) { setTimeout(serverPoll, 5000); } else { QH('p0span', 'Unable to connect web socket'); } | ||||
|                 // Clean up here | ||||
| 
 | ||||
| @ -2042,7 +2044,7 @@ | ||||
|                 if (contype == 2) { | ||||
|                     // Setup the Intel AMT remote desktop | ||||
|                     if ((desktopNode.intelamt.user == null) || (desktopNode.intelamt.user == '')) { editDeviceAmtSettings(desktopNode._id, connectDesktop); return; } | ||||
|                     desktop = CreateAmtRedirect(CreateAmtRemoteDesktop('Desk')); | ||||
|                     desktop = CreateAmtRedirect(CreateAmtRemoteDesktop('Desk'), authCookie); | ||||
|                     desktop.debugmode = debugmode; | ||||
|                     desktop.onStateChanged = onDesktopStateChange; | ||||
|                     desktop.m.bpp = (desktopsettings.encoding == 1 || desktopsettings.encoding == 3) ? 1 : 2; | ||||
| @ -2053,7 +2055,7 @@ | ||||
|                     desktop.contype = 2; | ||||
|                 } else { | ||||
|                     // Setup the Mesh Agent remote desktop | ||||
|                     desktop = CreateAgentRedirect(meshserver, CreateAgentRemoteDesktop('Desk'), serverPublicNamePort); | ||||
|                     desktop = CreateAgentRedirect(meshserver, CreateAgentRemoteDesktop('Desk'), serverPublicNamePort, authCookie); | ||||
|                     desktop.debugmode = debugmode; | ||||
|                     desktop.m.debugmode = debugmode; | ||||
|                     desktop.attemptWebRTC = attemptWebRTC; | ||||
| @ -2354,7 +2356,7 @@ | ||||
|         function connectFiles(e) { | ||||
|             if (!files) { | ||||
|                 // Setup a mesh agent files | ||||
|                 files = CreateAgentRedirect(meshserver, CreateRemoteFiles(p13gotFiles), serverPublicNamePort); | ||||
|                 files = CreateAgentRedirect(meshserver, CreateRemoteFiles(p13gotFiles), serverPublicNamePort, authCookie); | ||||
|                 files.attemptWebRTC = attemptWebRTC; | ||||
|                 files.onStateChanged = onFilesStateChange; | ||||
|                 files.Start(filesNode._id); | ||||
| @ -2579,7 +2581,7 @@ | ||||
|         // Called by the html page to start a download, arguments are: path, file name and file size. | ||||
|         function p13downloadfile(x, y, z) { | ||||
|             if (xxdialogMode) return; | ||||
|             downloadFile = CreateAgentRedirect(meshserver, CreateRemoteFiles(p13gotDownloadData), serverPublicNamePort); // Create our websocket file transport | ||||
|             downloadFile = CreateAgentRedirect(meshserver, CreateRemoteFiles(p13gotDownloadData), serverPublicNamePort, authCookie); // Create our websocket file transport | ||||
|             downloadFile.ctrlMsgAllowed = false; | ||||
|             downloadFile.onStateChanged = onFileDownloadStateChange; | ||||
|             downloadFile.xpath = decodeURIComponent(x); | ||||
| @ -2666,7 +2668,7 @@ | ||||
| 
 | ||||
|         // Connect again | ||||
|         function p13uploadReconnect() { | ||||
|             uploadFile.ws = CreateAgentRedirect(meshserver, CreateRemoteFiles(p13gotUploadData), serverPublicNamePort); | ||||
|             uploadFile.ws = CreateAgentRedirect(meshserver, CreateRemoteFiles(p13gotUploadData), serverPublicNamePort, authCookie); | ||||
|             uploadFile.ws.attemptWebRTC = false; | ||||
|             uploadFile.ws.ctrlMsgAllowed = false; | ||||
|             uploadFile.ws.onStateChanged = onFileUploadStateChange; | ||||
|  | ||||
| @ -867,6 +867,7 @@ | ||||
|         var sessionTime = parseInt("{{{sessiontime}}}"); | ||||
|         var domain = "{{{domain}}}"; | ||||
|         var domainUrl = "{{{domainurl}}}"; | ||||
|         var authCookie = "{{{authCookie}}}"; | ||||
|         var multiDesktop = {}; | ||||
|         var multiDesktopFilter = null; | ||||
|         var serverPublicNamePort = "{{{serverDnsName}}}:{{{serverPublicPort}}}"; | ||||
| @ -924,7 +925,7 @@ | ||||
|             masterUpdate(512); | ||||
| 
 | ||||
|             // Connect to the mesh server | ||||
|             meshserver = MeshServerCreateControl(domainUrl); | ||||
|             meshserver = MeshServerCreateControl(domainUrl, authCookie); | ||||
|             meshserver.onStateChanged = onStateChanged; | ||||
|             meshserver.onMessage = onMessage; | ||||
|             meshserver.Start(); | ||||
| @ -1040,6 +1041,7 @@ | ||||
|                 hideContextMenu(); // Hide the context menu if present | ||||
|                 QV('verifyEmailId2', false); | ||||
|                 QV('logoutControl', false); | ||||
|                 if (errorCode == 'noauth') { QH('p0span', 'Unable to perform authentication'); return; } | ||||
|                 if (prevState == 2) { setTimeout(serverPoll, 5000); } else { QH('p0span', 'Unable to connect web socket'); } | ||||
|             } else if (state == 2) { | ||||
|                 // Fetch list of meshes, nodes, files | ||||
| @ -2050,7 +2052,7 @@ | ||||
|                 if (contype == 2) { | ||||
|                     // Setup the Intel AMT remote desktop | ||||
|                     if ((node.intelamt.user == null) || (node.intelamt.user == '')) { return; } | ||||
|                     desk = CreateAmtRedirect(CreateAmtRemoteDesktop('kvmid_' + shortid)); | ||||
|                     desk = CreateAmtRedirect(CreateAmtRemoteDesktop('kvmid_' + shortid), authCookie); | ||||
|                     desk.shortid = shortid; | ||||
|                     //desk.debugmode = debugmode; | ||||
|                     desk.onStateChanged = onMultiDesktopStateChange; | ||||
| @ -2065,7 +2067,7 @@ | ||||
|                     multiDesktop[nodeid] = desk; | ||||
|                 } else if (contype == 1) { | ||||
|                     // Setup the Mesh Agent remote desktop | ||||
|                     desk = CreateAgentRedirect(meshserver, CreateAgentRemoteDesktop('kvmid_' + shortid), serverPublicNamePort); | ||||
|                     desk = CreateAgentRedirect(meshserver, CreateAgentRemoteDesktop('kvmid_' + shortid), serverPublicNamePort, authCookie); | ||||
|                     desk.shortid = shortid; | ||||
|                     desk.attemptWebRTC = attemptWebRTC; | ||||
|                     desk.onStateChanged = onMultiDesktopStateChange; | ||||
| @ -3369,7 +3371,9 @@ | ||||
| 
 | ||||
|         function deviceChat() { | ||||
|             if (xxdialogMode) return; | ||||
|             window.open('/messenger?id=meshmessenger/' + encodeURIComponent(currentNode._id) + '/' + encodeURIComponent(userinfo._id) + '&title=' + currentNode.name, 'meshmessenger:' + currentNode._id); | ||||
|             var url = '/messenger?id=meshmessenger/' + encodeURIComponent(currentNode._id) + '/' + encodeURIComponent(userinfo._id) + '&title=' + currentNode.name; | ||||
|             if ((authCookie != null) && (authCookie != '')) { url += '&auth=' + authCookie; } | ||||
|             window.open(url, 'meshmessenger:' + currentNode._id); | ||||
|             meshserver.send({ action: 'meshmessenger', nodeid: decodeURIComponent(currentNode._id) }); | ||||
|         } | ||||
| 
 | ||||
| @ -3792,7 +3796,7 @@ | ||||
|                 if (contype == 2) { | ||||
|                     // Setup the Intel AMT remote desktop | ||||
|                     if ((desktopNode.intelamt.user == null) || (desktopNode.intelamt.user == '')) { editDeviceAmtSettings(desktopNode._id, connectDesktop); return; } | ||||
|                     desktop = CreateAmtRedirect(CreateAmtRemoteDesktop('Desk')); | ||||
|                     desktop = CreateAmtRedirect(CreateAmtRemoteDesktop('Desk'), authCookie); | ||||
|                     desktop.debugmode = debugmode; | ||||
|                     desktop.onStateChanged = onDesktopStateChange; | ||||
|                     desktop.m.bpp = (desktopsettings.encoding == 1 || desktopsettings.encoding == 3) ? 1 : 2; | ||||
| @ -3874,7 +3878,7 @@ | ||||
|                     desktop.contype = 2; | ||||
|                 } else { | ||||
|                     // Setup the Mesh Agent remote desktop | ||||
|                     desktop = CreateAgentRedirect(meshserver, CreateAgentRemoteDesktop('Desk'), serverPublicNamePort); | ||||
|                     desktop = CreateAgentRedirect(meshserver, CreateAgentRemoteDesktop('Desk'), serverPublicNamePort, authCookie); | ||||
|                     desktop.debugmode = debugmode; | ||||
|                     desktop.m.debugmode = debugmode; | ||||
|                     desktop.attemptWebRTC = attemptWebRTC; | ||||
| @ -4333,7 +4337,7 @@ | ||||
|                 if (contype == 2) { | ||||
|                     // Setup the Intel AMT terminal | ||||
|                     if ((terminalNode.intelamt.user == null) || (terminalNode.intelamt.user == '')) { editDeviceAmtSettings(terminalNode._id, connectTerminal); return; } | ||||
|                     terminal = CreateAmtRedirect(CreateAmtRemoteTerminal('Term')); | ||||
|                     terminal = CreateAmtRedirect(CreateAmtRemoteTerminal('Term'), authCookie); | ||||
|                     terminal.debugmode = debugmode; | ||||
|                     terminal.m.debugmode = debugmode; | ||||
|                     terminal.onStateChanged = onTerminalStateChange; | ||||
| @ -4342,7 +4346,7 @@ | ||||
|                     Q('id_ttypebutton').value = terminalEmulations[terminal.m.terminalEmulation]; | ||||
|                 } else { | ||||
|                     // Setup a mesh agent terminal | ||||
|                     terminal = CreateAgentRedirect(meshserver, CreateAmtRemoteTerminal('Term'), serverPublicNamePort); | ||||
|                     terminal = CreateAgentRedirect(meshserver, CreateAmtRemoteTerminal('Term'), serverPublicNamePort, authCookie); | ||||
|                     terminal.debugmode = debugmode; | ||||
|                     terminal.m.debugmode = debugmode; | ||||
|                     terminal.m.lineFeed = ([1,2,3,4,21,22].indexOf(currentNode.agent.id) >= 0)?'\r\n':'\n'; // On windows, send \r\n, on Linux only \n | ||||
| @ -4464,7 +4468,7 @@ | ||||
|         function connectFiles(e) { | ||||
|             if (!files) { | ||||
|                 // Setup a mesh agent files | ||||
|                 files = CreateAgentRedirect(meshserver, CreateRemoteFiles(p13gotFiles), serverPublicNamePort); | ||||
|                 files = CreateAgentRedirect(meshserver, CreateRemoteFiles(p13gotFiles), serverPublicNamePort, authCookie); | ||||
|                 files.attemptWebRTC = attemptWebRTC; | ||||
|                 files.onStateChanged = onFilesStateChange; | ||||
|                 files.Start(filesNode._id); | ||||
| @ -4717,7 +4721,7 @@ | ||||
|         // Called by the html page to start a download, arguments are: path, file name and file size. | ||||
|         function p13downloadfile(x, y, z) { | ||||
|             if (xxdialogMode) return; | ||||
|             downloadFile = CreateAgentRedirect(meshserver, CreateRemoteFiles(p13gotDownloadData), serverPublicNamePort); // Create our websocket file transport | ||||
|             downloadFile = CreateAgentRedirect(meshserver, CreateRemoteFiles(p13gotDownloadData), serverPublicNamePort, authCookie); // Create our websocket file transport | ||||
|             downloadFile.ctrlMsgAllowed = false; | ||||
|             downloadFile.onStateChanged = onFileDownloadStateChange; | ||||
|             downloadFile.xpath = decodeURIComponent(x); | ||||
| @ -4804,7 +4808,7 @@ | ||||
| 
 | ||||
|         // Connect again | ||||
|         function p13uploadReconnect() { | ||||
|             uploadFile.ws = CreateAgentRedirect(meshserver, CreateRemoteFiles(p13gotUploadData), serverPublicNamePort); | ||||
|             uploadFile.ws = CreateAgentRedirect(meshserver, CreateRemoteFiles(p13gotUploadData), serverPublicNamePort, authCookie); | ||||
|             uploadFile.ws.attemptWebRTC = false; | ||||
|             uploadFile.ws.ctrlMsgAllowed = false; | ||||
|             uploadFile.ws.onStateChanged = onFileUploadStateChange; | ||||
| @ -5924,7 +5928,9 @@ | ||||
| 
 | ||||
|         function userChat(e, userid, name) { | ||||
|             haltEvent(e); | ||||
|             window.open('/messenger?id=meshmessenger/' + userid + '/' + encodeURIComponent(userinfo._id) + '&title=' + name, 'meshmessenger:' + userid); | ||||
|             var url = '/messenger?id=meshmessenger/' + userid + '/' + encodeURIComponent(userinfo._id) + '&title=' + name; | ||||
|             if ((authCookie != null) && (authCookie != '')) { url += '&auth=' + authCookie; } | ||||
|             window.open(url, 'meshmessenger:' + userid); | ||||
|             meshserver.send({ action: 'meshmessenger', userid: decodeURIComponent(userid) }); | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
| @ -573,7 +573,9 @@ | ||||
|                 // Get started | ||||
|                 updateControls(); | ||||
|                 if ((typeof args.id == 'string') && (args.id.length > 0)) { | ||||
|                     socket = new WebSocket(window.location.protocol.replace("http", "ws") + "//" + window.location.host + window.location.pathname.substring(0, window.location.pathname.lastIndexOf('/')) + '/meshrelay.ashx?id=' + args.id); | ||||
|                     var url = window.location.protocol.replace("http", "ws") + "//" + window.location.host + window.location.pathname.substring(0, window.location.pathname.lastIndexOf('/')) + '/meshrelay.ashx?id=' + args.id; | ||||
|                     if ((args.auth != null) && (args.auth != '')) { url += '&auth=' + args.auth; } | ||||
|                     socket = new WebSocket(url); | ||||
|                     socket.onopen = function () { state = 1; displayControl('Waiting for other user...'); } | ||||
|                     socket.onerror = function (e) { /*console.error(e);*/ } | ||||
|                     socket.onclose = function () { disconnect(); } | ||||
|  | ||||
							
								
								
									
										31
									
								
								webserver.js
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								webserver.js
									
									
									
									
									
								
							| @ -796,7 +796,10 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) { | ||||
|             if (obj.args.lanonly == true || obj.args.mpsport == 0) { features += 0x0400; } // No CIRA
 | ||||
|             if ((obj.parent.serverSelfWriteAllowed == true) && (user != null) && (user.siteadmin == 0xFFFFFFFF)) { features += 0x0800; } // Server can self-write (Allows self-update)
 | ||||
|             if ((domain.auth != 'sspi') && (obj.parent.certificates.CommonName != 'un-configured') && (obj.args.lanonly !== true) && (obj.args.nousers !== true)) { features += 0x1000; } // 2-step login supported
 | ||||
|              | ||||
| 
 | ||||
|             // Create a authentication cookie
 | ||||
|             const authCookie = obj.parent.encodeCookie({ userid: user._id, domainid: domain.id }, obj.parent.loginCookieEncryptionKey); | ||||
| 
 | ||||
|             // Send the master web application
 | ||||
|             if ((!obj.args.user) && (obj.args.nousers != true) && (nologout == false)) { logoutcontrol += ' <a href=' + domain.url + 'logout?' + Math.random() + ' style=color:white>Logout</a>'; } // If a default user is in use or no user mode, don't display the logout button
 | ||||
|             var httpsPort = ((obj.args.aliasport == null) ? obj.args.port : obj.args.aliasport); // Use HTTPS alias port is specified
 | ||||
| @ -804,14 +807,14 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) { | ||||
|             if (obj.args.minify && !req.query.nominify) { | ||||
|                 // Try to server the minified version if we can.
 | ||||
|                 try { | ||||
|                     res.render(obj.path.join(obj.parent.webViewsPath, isMobileBrowser(req) ? 'default-mobile-min' : 'default-min'), { viewmode: viewmode, currentNode: currentNode, logoutControl: logoutcontrol, title: domain.title, title2: domain.title2, domainurl: domain.url, domain: domain.id, debuglevel: parent.debugLevel, serverDnsName: obj.getWebServerName(domain), serverRedirPort: args.redirport, serverPublicPort: httpsPort, noServerBackup: (args.noserverbackup == 1 ? 1 : 0), features: features, sessiontime: args.sessiontime, mpspass: args.mpspass, passRequirements: passRequirements, webcerthash: Buffer.from(obj.webCertificateFullHashs[domain.id], 'binary').toString('base64').replace(/\+/g, '@').replace(/\//g, '$'), footer: (domain.footer == null) ? '' : domain.footer }); | ||||
|                     res.render(obj.path.join(obj.parent.webViewsPath, isMobileBrowser(req) ? 'default-mobile-min' : 'default-min'), { authCookie: authCookie, viewmode: viewmode, currentNode: currentNode, logoutControl: logoutcontrol, title: domain.title, title2: domain.title2, domainurl: domain.url, domain: domain.id, debuglevel: parent.debugLevel, serverDnsName: obj.getWebServerName(domain), serverRedirPort: args.redirport, serverPublicPort: httpsPort, noServerBackup: (args.noserverbackup == 1 ? 1 : 0), features: features, sessiontime: args.sessiontime, mpspass: args.mpspass, passRequirements: passRequirements, webcerthash: Buffer.from(obj.webCertificateFullHashs[domain.id], 'binary').toString('base64').replace(/\+/g, '@').replace(/\//g, '$'), footer: (domain.footer == null) ? '' : domain.footer }); | ||||
|                 } catch (ex) { | ||||
|                     // In case of an exception, serve the non-minified version.
 | ||||
|                     res.render(obj.path.join(obj.parent.webViewsPath, isMobileBrowser(req) ? 'default-mobile' : 'default'), { viewmode: viewmode, currentNode: currentNode, logoutControl: logoutcontrol, title: domain.title, title2: domain.title2, domainurl: domain.url, domain: domain.id, debuglevel: parent.debugLevel, serverDnsName: obj.getWebServerName(domain), serverRedirPort: args.redirport, serverPublicPort: httpsPort, noServerBackup: (args.noserverbackup == 1 ? 1 : 0), features: features, sessiontime: args.sessiontime, mpspass: args.mpspass, passRequirements: passRequirements, webcerthash: Buffer.from(obj.webCertificateFullHashs[domain.id], 'binary').toString('base64').replace(/\+/g, '@').replace(/\//g, '$'), footer: (domain.footer == null) ? '' : domain.footer }); | ||||
|                     res.render(obj.path.join(obj.parent.webViewsPath, isMobileBrowser(req) ? 'default-mobile' : 'default'), { authCookie: authCookie, viewmode: viewmode, currentNode: currentNode, logoutControl: logoutcontrol, title: domain.title, title2: domain.title2, domainurl: domain.url, domain: domain.id, debuglevel: parent.debugLevel, serverDnsName: obj.getWebServerName(domain), serverRedirPort: args.redirport, serverPublicPort: httpsPort, noServerBackup: (args.noserverbackup == 1 ? 1 : 0), features: features, sessiontime: args.sessiontime, mpspass: args.mpspass, passRequirements: passRequirements, webcerthash: Buffer.from(obj.webCertificateFullHashs[domain.id], 'binary').toString('base64').replace(/\+/g, '@').replace(/\//g, '$'), footer: (domain.footer == null) ? '' : domain.footer }); | ||||
|                 } | ||||
|             } else { | ||||
|                 // Serve non-minified version of web pages.
 | ||||
|                 res.render(obj.path.join(obj.parent.webViewsPath, isMobileBrowser(req) ? 'default-mobile' : 'default'), { viewmode: viewmode, currentNode: currentNode, logoutControl: logoutcontrol, title: domain.title, title2: domain.title2, domainurl: domain.url, domain: domain.id, debuglevel: parent.debugLevel, serverDnsName: obj.getWebServerName(domain), serverRedirPort: args.redirport, serverPublicPort: httpsPort, noServerBackup: (args.noserverbackup == 1 ? 1 : 0), features: features, sessiontime: args.sessiontime, mpspass: args.mpspass, passRequirements: passRequirements, webcerthash: Buffer.from(obj.webCertificateFullHashs[domain.id], 'binary').toString('base64').replace(/\+/g, '@').replace(/\//g, '$'), footer: (domain.footer == null) ? '' : domain.footer }); | ||||
|                 res.render(obj.path.join(obj.parent.webViewsPath, isMobileBrowser(req) ? 'default-mobile' : 'default'), { authCookie: authCookie, viewmode: viewmode, currentNode: currentNode, logoutControl: logoutcontrol, title: domain.title, title2: domain.title2, domainurl: domain.url, domain: domain.id, debuglevel: parent.debugLevel, serverDnsName: obj.getWebServerName(domain), serverRedirPort: args.redirport, serverPublicPort: httpsPort, noServerBackup: (args.noserverbackup == 1 ? 1 : 0), features: features, sessiontime: args.sessiontime, mpspass: args.mpspass, passRequirements: passRequirements, webcerthash: Buffer.from(obj.webCertificateFullHashs[domain.id], 'binary').toString('base64').replace(/\+/g, '@').replace(/\//g, '$'), footer: (domain.footer == null) ? '' : domain.footer }); | ||||
|             } | ||||
|         } else { | ||||
|             // Send back the login application
 | ||||
| @ -2024,7 +2027,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) { | ||||
|             // Check IP filtering and domain
 | ||||
|             var domain = null; | ||||
|             if (noAuthOk == true) { domain = getDomain(req); } else { domain = checkUserIpAddress(ws, req); } // If auth is required, enforce IP address filtering.
 | ||||
|             if (domain == null) { try { ws.send(JSON.stringify({ action: 'close', cause: 'noauth' })); ws.close(); return; } catch (e) { return; } } | ||||
|             if (domain == null) { try { ws.send(JSON.stringify({ action: 'close', cause: 'noauth', msg: 'noauth-1' })); ws.close(); return; } catch (e) { return; } } | ||||
| 
 | ||||
|             // A web socket session can be authenticated in many ways (Default user, session, user/pass and cookie). Check authentication here.
 | ||||
|             if ((req.query.user != null) && (req.query.pass != null)) { | ||||
| @ -2041,24 +2044,24 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) { | ||||
|                         } else { | ||||
|                             // If not authenticated, close the websocket connection
 | ||||
|                             Debug(1, 'ERR: Websocket bad user/pass auth'); | ||||
|                             try { ws.send(JSON.stringify({ action: 'close', cause: 'noauth' })); ws.close(); } catch (e) { } | ||||
|                             try { ws.send(JSON.stringify({ action: 'close', cause: 'noauth', msg: 'noauth-2' })); ws.close(); } catch (e) { } | ||||
|                         } | ||||
|                     } | ||||
|                 }); | ||||
|                 return; | ||||
|             } else if (req.query.auth != null) { | ||||
|             } else if ((req.query.auth != null) && (req.query.auth != '')) { | ||||
|                 // This is a encrypted cookie authentication
 | ||||
|                 var cookie = obj.parent.decodeCookie(req.query.auth, null, 60); // Cookie with 60 minute timeout
 | ||||
|                 if ((cookie != null) && (obj.users[cookie.userid])) { | ||||
|                 var cookie = obj.parent.decodeCookie(req.query.auth, obj.parent.loginCookieEncryptionKey, 240); // Cookie with 4 hour timeout
 | ||||
|                 if ((cookie != null) && (obj.users[cookie.userid]) && (cookie.domainid == domain.id)) { | ||||
|                     // Valid cookie, we are authenticated
 | ||||
|                     func(ws, req, domain, obj.users[cookie.userid], cookie); | ||||
|                     return; | ||||
|                 } else { | ||||
|                     // This is a bad cookie
 | ||||
|                     // This is a bad cookie, keep going anyway, maybe we have a active session that will save us.
 | ||||
|                     Debug(1, 'ERR: Websocket bad cookie auth: ' + req.query.auth); | ||||
|                     try { ws.send(JSON.stringify({ action: 'close', cause: 'noauth' })); ws.close(); } catch (e) { } | ||||
|                 } | ||||
|                 return; | ||||
|             } else if (obj.args.user && obj.users['user/' + domain.id + '/' + obj.args.user.toLowerCase()]) { | ||||
|             } | ||||
|             if (obj.args.user && obj.users['user/' + domain.id + '/' + obj.args.user.toLowerCase()]) { | ||||
|                 // A default user is active
 | ||||
|                 func(ws, req, domain, obj.users['user/' + domain.id + '/' + obj.args.user.toLowerCase()]); | ||||
|                 return; | ||||
| @ -2071,7 +2074,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) { | ||||
|             if (noAuthOk != true) { | ||||
|                 // If not authenticated, close the websocket connection
 | ||||
|                 Debug(1, 'ERR: Websocket no auth'); | ||||
|                 try { ws.send(JSON.stringify({ action: 'close', cause: 'noauth' })); ws.close(); } catch (e) { } | ||||
|                 try { ws.send(JSON.stringify({ action: 'close', cause: 'noauth', msg: 'noauth-4' })); ws.close(); } catch (e) { } | ||||
|             } else { | ||||
|                 // Continue this session without user authentication,
 | ||||
|                 // this is expected if the agent is connecting for a tunnel.
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user