mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2024-11-26 07:57:56 +03:00
Fixed and improved minified mode.
This commit is contained in:
parent
16c5d96bd7
commit
b6ce3307c8
@ -917,6 +917,8 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||
try { info.cpuUsage = process.cpuUsage(); } catch (ex) { }
|
||||
try { info.warnings = parent.parent.getServerWarnings(); } catch (ex) { }
|
||||
try { info.database = ["Unknown", "NeDB", "MongoJS", "MongoDB", "MariaDB", "MySQL"][parent.parent.db.databaseType]; } catch (ex) { }
|
||||
try { info.productionMode = ((process.env.NODE_ENV != null) && (process.env.NODE_ENV == 'production')); } catch (ex) { }
|
||||
|
||||
r = JSON.stringify(info, null, 4);
|
||||
break;
|
||||
}
|
||||
|
4
public/minify.bat
Normal file
4
public/minify.bat
Normal file
@ -0,0 +1,4 @@
|
||||
@ECHO OFF
|
||||
CD ..\translate
|
||||
%LOCALAPPDATA%\..\Roaming\nvm\v12.13.0\node translate.js minifyall
|
||||
DEL ..\emails\translations\*-min_*
|
1
public/scripts/agent-desktop-0.0.2-min.js
vendored
Normal file
1
public/scripts/agent-desktop-0.0.2-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/scripts/agent-redir-rtc-0.1.0-min.js
vendored
Normal file
1
public/scripts/agent-redir-rtc-0.1.0-min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
var CreateKvmDataChannel=function(e,t,n){var o={};((o.m=t).parent=o).webchannel=e,o.State=0,o.protocol=t.protocol,o.onStateChanged=null,o.onControlMsg=null,o.debugmode=0,o.keepalive=n,o.rtcKeepAlive=null,o.Start=function(){1==o.debugmode&&console.log("start"),o.xxStateChange(3),o.webchannel.onmessage=o.xxOnMessage,o.rtcKeepAlive=setInterval(o.xxSendRtcKeepAlive,3e4)};var l=new FileReader,i=!1,s=[];return l.readAsBinaryString?l.onload=function(e){o.xxOnSocketData(e.target.result),0==s.length?i=!1:l.readAsBinaryString(new Blob([s.shift()]))}:l.readAsArrayBuffer&&(l.onloadend=function(e){o.xxOnSocketData(e.target.result),0==s.length?i=!1:l.readAsArrayBuffer(s.shift())}),o.xxOnMessage=function(e){if("string"!=typeof e.data)if("object"==typeof e.data){if(1==i)return void s.push(e.data);if(l.readAsBinaryString)i=!0,l.readAsBinaryString(new Blob([e.data]));else if(f.readAsArrayBuffer)i=!0,l.readAsArrayBuffer(e.data);else{for(var t="",n=new Uint8Array(e.data),a=n.byteLength,r=0;r<a;r++)t+=String.fromCharCode(n[r]);o.xxOnSocketData(t)}}else o.xxOnSocketData(e.data);else null!=o.onControlMsg&&o.onControlMsg(e.data)},o.xxOnSocketData=function(e){if(e){if("object"==typeof e){for(var t="",n=new Uint8Array(e),a=n.byteLength,r=0;r<a;r++)t+=String.fromCharCode(n[r]);e=t}else if("string"!=typeof e)return;return o.m.ProcessData(e)}},o.sendCtrlMsg=function(e){"string"==typeof e&&(o.webchannel.send(e),null!=o.keepalive&&o.keepalive.sendKeepAlive())},o.send=function(e){if("string"==typeof e){for(var t=new Uint8Array(e.length),n=0;n<e.length;++n)t[n]=e.charCodeAt(n);e=t}o.webchannel.send(e)},o.xxStateChange=function(e){o.State!=e&&(o.State=e,o.m.xxStateChange(o.State),null!=o.onStateChanged&&o.onStateChanged(o,o.State))},o.Stop=function(){1==o.debugmode&&console.log("stop"),null!=o.rtcKeepAlive&&(clearInterval(o.rtcKeepAlive),o.rtcKeepAlive=null),o.xxStateChange(0)},o.xxSendRtcKeepAlive=function(){o.sendCtrlMsg(JSON.stringify({action:"ping"}))},o}
|
1
public/scripts/agent-redir-ws-0.1.1-min.js
vendored
Normal file
1
public/scripts/agent-redir-ws-0.1.1-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/scripts/amt-0.2.0-min.js
vendored
Normal file
1
public/scripts/amt-0.2.0-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/scripts/amt-desktop-0.0.2-min.js
vendored
Normal file
1
public/scripts/amt-desktop-0.0.2-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
560
public/scripts/amt-ider-ws-0.0.1-min.js
vendored
Normal file
560
public/scripts/amt-ider-ws-0.0.1-min.js
vendored
Normal file
@ -0,0 +1,560 @@
|
||||
/**
|
||||
* @description IDER Handling Module
|
||||
* @author Ylian Saint-Hilaire
|
||||
* @version v0.0.2
|
||||
*/
|
||||
|
||||
// Construct a Intel AMT IDER object
|
||||
var CreateAmtRemoteIder = function () {
|
||||
var obj = {};
|
||||
obj.protocol = 3; // IDER
|
||||
obj.bytesToAmt = 0;
|
||||
obj.bytesFromAmt = 0;
|
||||
obj.rx_timeout = 30000; // Default 30000
|
||||
obj.tx_timeout = 0; // Default 0
|
||||
obj.heartbeat = 20000; // Default 20000
|
||||
obj.version = 1;
|
||||
obj.acc = "";
|
||||
obj.inSequence = 0;
|
||||
obj.outSequence = 0;
|
||||
obj.iderinfo = null;
|
||||
obj.enabled = false;
|
||||
obj.iderStart = 0; // OnReboot = 0, Graceful = 1, Now = 2
|
||||
obj.floppy = null;
|
||||
obj.cdrom = null;
|
||||
obj.floppyReady = false;
|
||||
obj.cdromReady = false;
|
||||
obj.pingTimer = null;
|
||||
|
||||
// Private method
|
||||
function debug() { if (urlvars && urlvars['idertrace']) { console.log(...arguments); } }
|
||||
|
||||
// Mode Sense
|
||||
var IDE_ModeSence_LS120Disk_Page_Array = String.fromCharCode(0x00, 0x26, 0x31, 0x80, 0x00, 0x00, 0x00, 0x00, 0x05, 0x1E, 0x10, 0xA9, 0x08, 0x20, 0x02, 0x00, 0x03, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xD0, 0x00, 0x00);
|
||||
var IDE_ModeSence_3F_LS120_Array = String.fromCharCode(0x00, 0x5c, 0x24, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x16, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x05, 0x1E, 0x10, 0xA9, 0x08, 0x20, 0x02, 0x00, 0x03, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xD0, 0x00, 0x00, 0x08, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x11, 0x24, 0x31);
|
||||
var IDE_ModeSence_FloppyDisk_Page_Array = String.fromCharCode(0x00, 0x26, 0x24, 0x80, 0x00, 0x00, 0x00, 0x00, 0x05, 0x1E, 0x04, 0xB0, 0x02, 0x12, 0x02, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xD0, 0x00, 0x00);
|
||||
var IDE_ModeSence_3F_Floppy_Array = String.fromCharCode(0x00, 0x5c, 0x24, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x16, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x05, 0x1e, 0x04, 0xb0, 0x02, 0x12, 0x02, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xd0, 0x00, 0x00, 0x08, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x11, 0x24, 0x31);
|
||||
var IDE_ModeSence_CD_1A_Array = String.fromCharCode(0x00, 0x12, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
|
||||
//var IDE_ModeSence_CD_1B_Array = String.fromCharCode(0x00, 0x12, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x0A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
|
||||
var IDE_ModeSence_CD_1D_Array = String.fromCharCode(0x00, 0x12, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
|
||||
var IDE_ModeSence_CD_2A_Array = String.fromCharCode(0x00, 0x20, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
|
||||
//var IDE_ModeSence_CD_01_Array = String.fromCharCode(0x00, 0x0E, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00);
|
||||
var IDE_ModeSence_3F_CD_Array = String.fromCharCode(0x00, 0x28, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
|
||||
|
||||
// 0x46 constant data
|
||||
var IDE_CD_ConfigArrayHeader = String.fromCharCode(0x00, 0x00,0x00, 0x28, 0x00, 0x00, 0x00, 0x08);
|
||||
var IDE_CD_ConfigArrayProfileList = String.fromCharCode(0x00, 0x00, 0x03, 0x04, 0x00, 0x08, 0x01, 0x00);
|
||||
var IDE_CD_ConfigArrayCore = String.fromCharCode(0x00, 0x01, 0x03, 0x04, 0x00, 0x00, 0x00, 0x02);
|
||||
var IDE_CD_Morphing = String.fromCharCode(0x00, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00);
|
||||
var IDE_CD_ConfigArrayRemovable = String.fromCharCode(0x00, 0x03, 0x03, 0x04, 0x29, 0x00, 0x00, 0x02);
|
||||
var IDE_CD_ConfigArrayRandom = String.fromCharCode(0x00, 0x10, 0x01, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00);
|
||||
var IDE_CD_Read = String.fromCharCode(0x00, 0x1E, 0x03, 0x00);
|
||||
var IDE_CD_PowerManagement = String.fromCharCode(0x01, 0x00, 0x03, 0x00);
|
||||
var IDE_CD_Timeout = String.fromCharCode(0x01, 0x05, 0x03, 0x00);
|
||||
|
||||
// 0x01 constant data
|
||||
var IDE_ModeSence_FloppyError_Recovery_Array = String.fromCharCode(0x00, 0x12, 0x24, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00);
|
||||
var IDE_ModeSence_Ls120Error_Recovery_Array = String.fromCharCode(0x00, 0x12, 0x31, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0A, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00);
|
||||
var IDE_ModeSence_CDError_Recovery_Array = String.fromCharCode(0x00, 0x0E, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00);
|
||||
|
||||
|
||||
// Private method, called by parent when it change state
|
||||
obj.xxStateChange = function (newstate) {
|
||||
debug("IDER-StateChange", newstate);
|
||||
if (newstate == 0) { obj.Stop(); }
|
||||
if (newstate == 3) { obj.Start(); }
|
||||
}
|
||||
|
||||
obj.Start = function () {
|
||||
debug("IDER-Start");
|
||||
debug(obj.floppy, obj.cdrom);
|
||||
obj.bytesToAmt = 0;
|
||||
obj.bytesFromAmt = 0;
|
||||
obj.inSequence = 0;
|
||||
obj.outSequence = 0;
|
||||
|
||||
// Send first command, OPEN_SESSION
|
||||
obj.SendCommand(0x40, ShortToStrX(obj.rx_timeout) + ShortToStrX(obj.tx_timeout) + ShortToStrX(obj.heartbeat) + IntToStrX(obj.version));
|
||||
|
||||
// Setup the ping timer
|
||||
//obj.pingTimer = setInterval(function () { obj.SendCommand(0x44); }, 5000);
|
||||
}
|
||||
|
||||
obj.Stop = function () {
|
||||
debug("IDER-Stop");
|
||||
if (obj.pingTimer) { clearInterval(obj.pingTimer); obj.pingTimer = null; }
|
||||
obj.parent.Stop();
|
||||
}
|
||||
|
||||
// Private method
|
||||
obj.ProcessData = function (data) {
|
||||
obj.bytesFromAmt += data.length;
|
||||
obj.acc += data;
|
||||
debug('IDER-ProcessData', obj.acc.length, rstr2hex(obj.acc));
|
||||
|
||||
// Process as many commands as possible
|
||||
while (true) {
|
||||
var len = obj.ProcessDataEx();
|
||||
if (len == 0) return;
|
||||
if (obj.inSequence != ReadIntX(obj.acc, 4)) { debug('ERROR: Out of sequence', obj.inSequence, ReadIntX(obj.acc, 4)); obj.Stop(); return; }
|
||||
obj.inSequence++;
|
||||
obj.acc = obj.acc.substring(len);
|
||||
}
|
||||
}
|
||||
|
||||
// Private method
|
||||
obj.SendCommand = function (cmdid, data, completed, dma) {
|
||||
if (data == null) { data = ''; }
|
||||
var attributes = ((cmdid > 50) && (completed == true)) ? 2 : 0;
|
||||
if (dma) { attributes += 1; }
|
||||
var x = String.fromCharCode(cmdid, 0, 0, attributes) + IntToStrX(obj.outSequence++) + data;
|
||||
obj.parent.xxSend(x);
|
||||
obj.bytesToAmt += x.length;
|
||||
if (cmdid != 0x4B) { debug('IDER-SendData', x.length, rstr2hex(x)); }
|
||||
}
|
||||
|
||||
// CommandEndResponse (SCSI_SENSE)
|
||||
obj.SendCommandEndResponse = function (error, sense, device, asc, asq) {
|
||||
if (error) { obj.SendCommand(0x51, String.fromCharCode(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xc5, 0, 3, 0, 0, 0, device, 0x50, 0, 0, 0), true); }
|
||||
else { obj.SendCommand(0x51, String.fromCharCode(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x87, (sense << 4), 3, 0, 0, 0, device, 0x51, sense, asc, asq), true); }
|
||||
}
|
||||
|
||||
//54 00 00 03 71 00 00 00 00 00 0c 00 b4 00 02 00 00 00 a0 58 85 00 03 00 00 00 a0 50 00 00
|
||||
//54 00 00 02 26 00 00 00 00 00 0c 00 b5 00 02 00 00 0c a0 58 85 00 03 00 00 00 a0 50 00 00
|
||||
|
||||
// DataToHost (SCSI_READ)
|
||||
obj.SendDataToHost = function (device, completed, data, dma) {
|
||||
var dmalen = (dma) ? 0 : data.length;
|
||||
if (completed == true) {
|
||||
obj.SendCommand(0x54, String.fromCharCode(0, (data.length & 0xff), (data.length >> 8), 0, dma ? 0xb4 : 0xb5, 0, 2, 0, (dmalen & 0xff), (dmalen >> 8), device, 0x58, 0x85, 0, 3, 0, 0, 0, device, 0x50, 0, 0, 0, 0, 0, 0) + data, completed, dma);
|
||||
} else {
|
||||
obj.SendCommand(0x54, String.fromCharCode(0, (data.length & 0xff), (data.length >> 8), 0, dma ? 0xb4 : 0xb5, 0, 2, 0, (dmalen & 0xff), (dmalen >> 8), device, 0x58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + data, completed, dma);
|
||||
}
|
||||
}
|
||||
|
||||
// GetDataFromHost (SCSI_CHUNK)
|
||||
obj.SendGetDataFromHost = function (device, chunksize) {
|
||||
obj.SendCommand(0x52, String.fromCharCode(0, (chunksize & 0xff), (chunksize >> 8), 0, 0xb5, 0, 0, 0, (chunksize & 0xff), (chunksize >> 8), device, 0x58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), false);
|
||||
}
|
||||
|
||||
// DisableEnableFeatures (STATUS_DATA)
|
||||
// If type is REGS_TOGGLE (3), 4 bytes of data must be provided.
|
||||
obj.SendDisableEnableFeatures = function (type, data) { if (data == null) { data = ''; } obj.SendCommand(0x48, String.fromCharCode(type) + data); }
|
||||
|
||||
// Private method
|
||||
obj.ProcessDataEx = function () {
|
||||
if (obj.acc.length < 8) return 0;
|
||||
|
||||
// First 8 bytes are the header
|
||||
// CommandID + 0x000000 + Sequence Number
|
||||
|
||||
switch(obj.acc.charCodeAt(0)) {
|
||||
case 0x41: // OPEN_SESSION
|
||||
if (obj.acc.length < 30) return 0;
|
||||
var len = obj.acc.charCodeAt(29);
|
||||
if (obj.acc.length < (30 + len)) return 0;
|
||||
obj.iderinfo = {};
|
||||
obj.iderinfo.major = obj.acc.charCodeAt(8);
|
||||
obj.iderinfo.minor = obj.acc.charCodeAt(9);
|
||||
obj.iderinfo.fwmajor = obj.acc.charCodeAt(10);
|
||||
obj.iderinfo.fwminor = obj.acc.charCodeAt(11);
|
||||
obj.iderinfo.readbfr = ReadShortX(obj.acc, 16);
|
||||
obj.iderinfo.writebfr = ReadShortX(obj.acc, 18);
|
||||
obj.iderinfo.proto = obj.acc.charCodeAt(21);
|
||||
obj.iderinfo.iana = ReadIntX(obj.acc, 25);
|
||||
debug(obj.iderinfo);
|
||||
|
||||
if (obj.iderinfo.proto != 0) { debug("Unknown proto", obj.iderinfo.proto); obj.Stop(); }
|
||||
if (obj.iderinfo.readbfr > 8192) { debug("Illegal read buffer size", obj.iderinfo.readbfr); obj.Stop(); }
|
||||
if (obj.iderinfo.writebfr > 8192) { debug("Illegal write buffer size", obj.iderinfo.writebfr); obj.Stop(); }
|
||||
|
||||
if (obj.iderStart == 0) { obj.SendDisableEnableFeatures(3, IntToStrX(0x01 + 0x08)); } // OnReboot
|
||||
else if (obj.iderStart == 1) { obj.SendDisableEnableFeatures(3, IntToStrX(0x01 + 0x10)); } // Graceful
|
||||
else if (obj.iderStart == 2) { obj.SendDisableEnableFeatures(3, IntToStrX(0x01 + 0x18)); } // Now
|
||||
//obj.SendDisableEnableFeatures(1); // GetSupportedFeatures
|
||||
return 30 + len;
|
||||
case 0x43: // CLOSE
|
||||
debug('CLOSE');
|
||||
obj.Stop();
|
||||
return 8;
|
||||
case 0x44: // KEEPALIVEPING
|
||||
obj.SendCommand(0x45); // Send PONG back
|
||||
return 8;
|
||||
case 0x45: // KEEPALIVEPONG
|
||||
debug('PONG');
|
||||
return 8;
|
||||
case 0x46: // RESETOCCURED
|
||||
if (obj.acc.length < 9) return 0;
|
||||
var resetMask = obj.acc.charCodeAt(8);
|
||||
if (g_media === null) {
|
||||
// No operations are pending
|
||||
obj.SendCommand(0x47); // Send ResetOccuredResponse
|
||||
debug('RESETOCCURED1', resetMask);
|
||||
} else {
|
||||
// Operations are being done, sent the reset once completed.
|
||||
g_reset = true;
|
||||
debug('RESETOCCURED2', resetMask);
|
||||
}
|
||||
return 9;
|
||||
case 0x49: // STATUS_DATA - DisableEnableFeaturesReply
|
||||
if (obj.acc.length < 13) return 0;
|
||||
var type = obj.acc.charCodeAt(8);
|
||||
var value = ReadIntX(obj.acc, 9);
|
||||
debug('STATUS_DATA', type, value);
|
||||
switch (type)
|
||||
{
|
||||
case 1: // REGS_AVAIL
|
||||
if (value & 1) {
|
||||
if (obj.iderStart == 0) { obj.SendDisableEnableFeatures(3, IntToStrX(0x01 + 0x08)); } // OnReboot
|
||||
else if (obj.iderStart == 1) { obj.SendDisableEnableFeatures(3, IntToStrX(0x01 + 0x10)); } // Graceful
|
||||
else if (obj.iderStart == 2) { obj.SendDisableEnableFeatures(3, IntToStrX(0x01 + 0x18)); } // Now
|
||||
}
|
||||
break;
|
||||
case 2: // REGS_STATUS
|
||||
obj.enabled = (value & 2) ? true : false;
|
||||
debug("IDER Status: " + obj.enabled);
|
||||
break;
|
||||
case 3: // REGS_TOGGLE
|
||||
if (value != 1) { debug("Register toggle failure"); } //else { obj.SendDisableEnableFeatures(2); }
|
||||
break;
|
||||
}
|
||||
return 13;
|
||||
case 0x4A: // ERROR OCCURED
|
||||
if (obj.acc.length < 11) return 0;
|
||||
debug('IDER: ABORT', obj.acc.charCodeAt(8));
|
||||
//obj.Stop();
|
||||
return 11;
|
||||
case 0x4B: // HEARTBEAT
|
||||
//debug('HEARTBEAT');
|
||||
return 8;
|
||||
case 0x50: // COMMAND WRITTEN
|
||||
if (obj.acc.length < 28) return 0;
|
||||
var device = (obj.acc.charCodeAt(14) & 0x10) ? 0xB0 : 0xA0;
|
||||
var deviceFlags = obj.acc.charCodeAt(14);
|
||||
var cdb = obj.acc.substring(16, 28);
|
||||
var featureRegister = obj.acc.charCodeAt(9);
|
||||
debug('SCSI_CMD', device, rstr2hex(cdb), featureRegister, deviceFlags);
|
||||
handleSCSI(device, cdb, featureRegister, deviceFlags);
|
||||
return 28;
|
||||
case 0x53: // DATA FROM HOST
|
||||
if (obj.acc.length < 14) return 0;
|
||||
var len = ReadShortX(obj.acc, 9);
|
||||
if (obj.acc.length < (14 + len)) return 0;
|
||||
debug('SCSI_WRITE, len = ' + (14 + len));
|
||||
obj.SendCommand(0x51, String.fromCharCode(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x70, 0x03, 0x00, 0x00, 0x00, 0xa0, 0x51, 0x07, 0x27, 0x00), true);
|
||||
return 14 + len;
|
||||
default:
|
||||
debug('Unknown IDER command', obj.acc[0]);
|
||||
obj.Stop();
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
function handleSCSI(dev, cdb, featureRegister, deviceFlags)
|
||||
{
|
||||
var lba;
|
||||
var len;
|
||||
|
||||
switch(cdb.charCodeAt(0))
|
||||
{
|
||||
case 0x00: // TEST_UNIT_READY:
|
||||
debug("SCSI: TEST_UNIT_READY", dev);
|
||||
switch (dev) {
|
||||
case 0xA0: // DEV_FLOPPY
|
||||
if (obj.floppy == null) { obj.SendCommandEndResponse(1, 0x02, dev, 0x3a, 0x00); return -1; }
|
||||
if (obj.floppyReady == false) { obj.floppyReady = true; obj.SendCommandEndResponse(1, 0x06, dev, 0x28, 0x00); return -1; } // Switch to ready
|
||||
break;
|
||||
case 0xB0: // DEV_CDDVD
|
||||
if (obj.cdrom == null) { obj.SendCommandEndResponse(1, 0x02, dev, 0x3a, 0x00); return -1; }
|
||||
if (obj.cdromReady == false) { obj.cdromReady = true; obj.SendCommandEndResponse(1, 0x06, dev, 0x28, 0x00); return -1; } // Switch to ready
|
||||
break;
|
||||
default:
|
||||
debug("SCSI Internal error 3", dev);
|
||||
return -1;
|
||||
}
|
||||
obj.SendCommandEndResponse(1, 0x00, dev, 0x00, 0x00); // Indicate ready
|
||||
break;
|
||||
case 0x08: // READ_6
|
||||
lba = ((cdb.charCodeAt(1) & 0x1f) << 16) + (cdb.charCodeAt(2) << 8) + cdb.charCodeAt(3);
|
||||
len = cdb.charCodeAt(4);
|
||||
if (len == 0) { len = 256; }
|
||||
debug("SCSI: READ_6", dev, lba, len);
|
||||
sendDiskData(dev, lba, len, featureRegister);
|
||||
break;
|
||||
case 0x0a: // WRITE_6
|
||||
lba = ((cdb.charCodeAt(1) & 0x1f) << 16) + (cdb.charCodeAt(2) << 8) + cdb.charCodeAt(3);
|
||||
len = cdb.charCodeAt(4);
|
||||
if (len == 0) { len = 256; }
|
||||
debug("SCSI: WRITE_6", dev, lba, len);
|
||||
obj.SendCommandEndResponse(1, 0x02, dev, 0x3a, 0x00); // Write is not supported, remote no medium.
|
||||
return -1;
|
||||
/*
|
||||
case 0x15: // MODE_SELECT_6:
|
||||
debug("SCSI ERROR: MODE_SELECT_6", dev);
|
||||
obj.SendCommandEndResponse(1, 0x05, dev, 0x20, 0x00);
|
||||
return -1;
|
||||
*/
|
||||
case 0x1a: // MODE_SENSE_6
|
||||
debug("SCSI: MODE_SENSE_6", dev);
|
||||
if ((cdb.charCodeAt(2) == 0x3f) && (cdb.charCodeAt(3) == 0x00)) {
|
||||
var a = 0, b = 0;
|
||||
switch (dev) {
|
||||
case 0xA0: // DEV_FLOPPY
|
||||
if (obj.floppy == null) { obj.SendCommandEndResponse(1, 0x02, dev, 0x3a, 0x00); return -1; }
|
||||
a = 0x00;
|
||||
b = 0x80; // Read only = 0x80, Read write = 0x00
|
||||
break;
|
||||
case 0xB0: // DEV_CDDVD
|
||||
if (obj.cdrom == null) { obj.SendCommandEndResponse(1, 0x02, dev, 0x3a, 0x00); return -1; }
|
||||
a = 0x05;
|
||||
b = 0x80;
|
||||
break;
|
||||
default:
|
||||
debug("SCSI Internal error 6", dev);
|
||||
return -1;
|
||||
}
|
||||
obj.SendDataToHost(dev, true, String.fromCharCode(0, a, b, 0), featureRegister & 1);
|
||||
return;
|
||||
}
|
||||
obj.SendCommandEndResponse(1, 0x05, dev, 0x24, 0x00);
|
||||
break;
|
||||
case 0x1b: // START_STOP (Called when you eject the CDROM)
|
||||
//var immediate = cdb.charCodeAt(1) & 0x01;
|
||||
//var loej = cdb.charCodeAt(4) & 0x02;
|
||||
//var start = cdb.charCodeAt(4) & 0x01;
|
||||
obj.SendCommandEndResponse(1, 0, dev);
|
||||
break;
|
||||
case 0x1e: // LOCK_UNLOCK - ALLOW_MEDIUM_REMOVAL
|
||||
debug("SCSI: ALLOW_MEDIUM_REMOVAL", dev);
|
||||
if ((dev == 0xA0) && (obj.floppy == null)) { obj.SendCommandEndResponse(1, 0x02, dev, 0x3a, 0x00); return -1; }
|
||||
if ((dev == 0xB0) && (obj.cdrom == null)) { obj.SendCommandEndResponse(1, 0x02, dev, 0x3a, 0x00); return -1; }
|
||||
obj.SendCommandEndResponse(1, 0x00, dev, 0x00, 0x00);
|
||||
break;
|
||||
case 0x23: // READ_FORMAT_CAPACITIES (Floppy only)
|
||||
debug("SCSI: READ_FORMAT_CAPACITIES", dev);
|
||||
var buflen = ReadShort(cdb, 7);
|
||||
var mediaStatus = 0, sectors;
|
||||
var mcSize = buflen / 8; // Capacity descriptor size is 8
|
||||
|
||||
switch (dev) {
|
||||
case 0xA0: // DEV_FLOPPY
|
||||
if ((obj.floppy == null) || (obj.floppy.size == 0)) { obj.SendCommandEndResponse(0, 0x05, dev, 0x24, 0x00); return -1; }
|
||||
sectors = (obj.floppy.size >> 9) - 1;
|
||||
break;
|
||||
case 0xB0: // DEV_CDDVD
|
||||
if ((obj.cdrom == null) || (obj.cdrom.size == 0)) { obj.SendCommandEndResponse(0, 0x05, dev, 0x24, 0x00); return -1; }
|
||||
sectors = (obj.cdrom.size >> 11) - 1; // Number 2048 byte blocks
|
||||
break;
|
||||
default:
|
||||
debug("SCSI Internal error 4", dev);
|
||||
return -1;
|
||||
}
|
||||
|
||||
obj.SendDataToHost(dev, true, IntToStr(8) + String.fromCharCode(0x00, 0x00, 0x0b, 0x40, 0x02, 0x00, 0x02, 0x00), featureRegister & 1);
|
||||
break;
|
||||
case 0x25: // READ_CAPACITY
|
||||
debug("SCSI: READ_CAPACITY", dev);
|
||||
var len = 0;
|
||||
switch(dev)
|
||||
{
|
||||
case 0xA0: // DEV_FLOPPY
|
||||
if ((obj.floppy == null) || (obj.floppy.size == 0)) { obj.SendCommandEndResponse(0, 0x02, dev, 0x3a, 0x00); return -1; }
|
||||
if (obj.floppy != null) { len = (obj.floppy.size >> 9) - 1; }
|
||||
debug('DEV_FLOPPY', len); // Number 512 byte blocks
|
||||
break;
|
||||
case 0xB0: // DEV_CDDVD
|
||||
if ((obj.floppy == null) || (obj.floppy.size == 0)) { obj.SendCommandEndResponse(0, 0x02, dev, 0x3a, 0x00); return -1; }
|
||||
if (obj.cdrom != null) { len = (obj.cdrom.size >> 11) - 1; } // Number 2048 byte blocks
|
||||
debug('DEV_CDDVD', len);
|
||||
break;
|
||||
default:
|
||||
debug("SCSI Internal error 4", dev);
|
||||
return -1;
|
||||
}
|
||||
//if (dev == 0xA0) { dev = 0x00; } else { dev = 0x10; } // Weird but seems to work.
|
||||
debug("SCSI: READ_CAPACITY2", dev, deviceFlags);
|
||||
obj.SendDataToHost(deviceFlags, true, IntToStr(len) + String.fromCharCode(0, 0, ((dev == 0xB0) ? 0x08 : 0x02), 0), featureRegister & 1);
|
||||
break;
|
||||
case 0x28: // READ_10
|
||||
lba = ReadInt(cdb, 2);
|
||||
len = ReadShort(cdb, 7);
|
||||
debug("SCSI: READ_10", dev, lba, len);
|
||||
sendDiskData(dev, lba, len, featureRegister);
|
||||
break;
|
||||
case 0x2a: // WRITE_10 (Floppy only)
|
||||
case 0x2e: // WRITE_AND_VERIFY (Floppy only)
|
||||
lba = ReadInt(cdb, 2);
|
||||
len = ReadShort(cdb, 7);
|
||||
debug("SCSI: WRITE_10", dev, lba, len);
|
||||
obj.SendGetDataFromHost(dev, 512 * len); // Floppy writes only, accept sectors of 512 bytes
|
||||
break;
|
||||
case 0x43: // READ_TOC (CD Audio only)
|
||||
var buflen = ReadShort(cdb, 7);
|
||||
var msf = cdb.charCodeAt(1) & 0x02;
|
||||
var format = cdb.charCodeAt(2) & 0x07;
|
||||
if (format == 0) { format = cdb.charCodeAt(9) >> 6; }
|
||||
debug("SCSI: READ_TOC, dev=" + dev + ", buflen=" + buflen + ", msf=" + msf + ", format=" + format);
|
||||
|
||||
switch (dev) {
|
||||
case 0xA0: // DEV_FLOPPY
|
||||
obj.SendCommandEndResponse(1, 0x05, dev, 0x20, 0x00); // Not implemented
|
||||
return -1;
|
||||
case 0xB0: // DEV_CDDVD
|
||||
// NOP
|
||||
break;
|
||||
default:
|
||||
debug("SCSI Internal error 9", dev);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (format == 1) { obj.SendDataToHost(dev, true, String.fromCharCode(0x00, 0x0a, 0x01, 0x01, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00), featureRegister & 1); }
|
||||
else if (format == 0) {
|
||||
if (msf) {
|
||||
obj.SendDataToHost(dev, true, String.fromCharCode(0x00, 0x12, 0x01, 0x01, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x14, 0xaa, 0x00, 0x00, 0x00, 0x34, 0x13), featureRegister & 1);
|
||||
} else {
|
||||
obj.SendDataToHost(dev, true, String.fromCharCode(0x00, 0x12, 0x01, 0x01, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00), featureRegister & 1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 0x46: // GET_CONFIGURATION
|
||||
var sendall = (cdb.charCodeAt(1) != 2);
|
||||
var firstcode = ReadShort(cdb, 2);
|
||||
var buflen = ReadShort(cdb, 7);
|
||||
|
||||
debug("SCSI: GET_CONFIGURATION", dev, sendall, firstcode, buflen);
|
||||
|
||||
if (buflen == 0) { obj.SendDataToHost(dev, true, IntToStr(0x003c) + IntToStr(0x0008), featureRegister & 1); return -1; } // TODO: Fixed this return, it's not correct.
|
||||
|
||||
// Set the header
|
||||
var r = IntToStr(0x0008);
|
||||
|
||||
// Add the data
|
||||
if (firstcode == 0) { r += IDE_CD_ConfigArrayProfileList; }
|
||||
if ((firstcode == 0x1) || (sendall && (firstcode < 0x1))) { r += IDE_CD_ConfigArrayCore; }
|
||||
if ((firstcode == 0x2) || (sendall && (firstcode < 0x2))) { r += IDE_CD_Morphing; }
|
||||
if ((firstcode == 0x3) || (sendall && (firstcode < 0x3))) { r += IDE_CD_ConfigArrayRemovable; }
|
||||
if ((firstcode == 0x10) || (sendall && (firstcode < 0x10))) { r += IDE_CD_ConfigArrayRandom; }
|
||||
if ((firstcode == 0x1E) || (sendall && (firstcode < 0x1E))) { r += IDE_CD_Read; }
|
||||
if ((firstcode == 0x100) || (sendall && (firstcode < 0x100))) { r += IDE_CD_PowerManagement; }
|
||||
if ((firstcode == 0x105) || (sendall && (firstcode < 0x105))) { r += IDE_CD_Timeout; }
|
||||
|
||||
// Set the length
|
||||
r = IntToStr(r.length) + r;
|
||||
|
||||
// Cut the length to buflen if needed
|
||||
if (r.length > buflen) { r = r.substring(0, buflen); }
|
||||
|
||||
obj.SendDataToHost(dev, true, r, featureRegister & 1);
|
||||
return -1;
|
||||
case 0x4a: // GET_EV_STATUS - GET_EVENT_STATUS_NOTIFICATION
|
||||
//var buflen = (cdb.charCodeAt(7) << 8) + cdb.charCodeAt(8);
|
||||
//if (buflen == 0) { obj.SendDataToHost(dev, true, IntToStr(0x003c) + IntToStr(0x0008), featureRegister & 1); return -1; } // TODO: Fixed this return, it's not correct.
|
||||
debug("SCSI: GET_EVENT_STATUS_NOTIFICATION", dev, cdb.charCodeAt(1), cdb.charCodeAt(4), cdb.charCodeAt(9));
|
||||
if ((cdb.charCodeAt(1) != 0x01) && (cdb.charCodeAt(4) != 0x10)) { debug('SCSI ERROR'); obj.SendCommandEndResponse(1, 0x05, dev, 0x26, 0x01); break; }
|
||||
var present = 0x00;
|
||||
if ((dev == 0xA0) && (obj.floppy != null)) { present = 0x02; }
|
||||
else if ((dev == 0xB0) && (obj.cdrom != null)) { present = 0x02; }
|
||||
obj.SendDataToHost(dev, true, String.fromCharCode(0x00, present, 0x80, 0x00), featureRegister & 1); // This is the original version, 4 bytes long
|
||||
break;
|
||||
case 0x4c:
|
||||
obj.SendCommand(0x51, IntToStrX(0) + IntToStrX(0) + IntToStrX(0) + String.fromCharCode(0x87, 0x50, 0x03, 0x00, 0x00, 0x00, 0xb0, 0x51, 0x05, 0x20, 0x00), true);
|
||||
break;
|
||||
case 0x51: // READ_DISC_INFO
|
||||
debug("SCSI READ_DISC_INFO", dev);
|
||||
obj.SendCommandEndResponse(0, 0x05, dev, 0x20, 0x00); // Correct
|
||||
return -1;
|
||||
case 0x55: // MODE_SELECT_10:
|
||||
debug("SCSI ERROR: MODE_SELECT_10", dev);
|
||||
obj.SendCommandEndResponse(1, 0x05, dev, 0x20, 0x00);
|
||||
return -1;
|
||||
case 0x5a: // MODE_SENSE_10
|
||||
debug("SCSI: MODE_SENSE_10", dev, cdb.charCodeAt(2) & 0x3f);
|
||||
var buflen = ReadShort(cdb, 7);
|
||||
//var pc = cdb.charCodeAt(2) & 0xc0;
|
||||
var r = null;
|
||||
|
||||
if (buflen == 0) { obj.SendDataToHost(dev, true, IntToStr(0x003c) + IntToStr(0x0008), featureRegister & 1); return -1; } // TODO: Fixed this return, it's not correct.
|
||||
|
||||
// 1.44 mb floppy or LS120 (sectorCount == 0x3c300)
|
||||
var sectorCount = 0;
|
||||
if (dev == 0xA0) {
|
||||
if (obj.floppy != null) { sectorCount = (obj.floppy.size >> 9); }
|
||||
} else {
|
||||
if (obj.cdrom != null) { sectorCount = (obj.cdrom.size >> 11); }
|
||||
}
|
||||
|
||||
switch (cdb.charCodeAt(2) & 0x3f) {
|
||||
case 0x01: if (dev == 0xA0) { r = (sectorCount <= 0xb40)?IDE_ModeSence_FloppyError_Recovery_Array:IDE_ModeSence_Ls120Error_Recovery_Array; } else { r = IDE_ModeSence_CDError_Recovery_Array; } break;
|
||||
case 0x05: if (dev == 0xA0) { r = (sectorCount <= 0xb40)?IDE_ModeSence_FloppyDisk_Page_Array:IDE_ModeSence_LS120Disk_Page_Array; } break;
|
||||
case 0x3f: if (dev == 0xA0) { r = (sectorCount <= 0xb40)?IDE_ModeSence_3F_Floppy_Array:IDE_ModeSence_3F_LS120_Array; } else { r = IDE_ModeSence_3F_CD_Array; } break;
|
||||
case 0x1A: if (dev == 0xB0) { r = IDE_ModeSence_CD_1A_Array; } break;
|
||||
case 0x1D: if (dev == 0xB0) { r = IDE_ModeSence_CD_1D_Array; } break;
|
||||
case 0x2A: if (dev == 0xB0) { r = IDE_ModeSence_CD_2A_Array; } break;
|
||||
}
|
||||
|
||||
if (r == null) {
|
||||
obj.SendCommandEndResponse(0, 0x05, dev, 0x20, 0x00); // TODO: Send proper error!!!
|
||||
} else {
|
||||
// Set disk to read only (we don't support write).
|
||||
//ms_data[3] = ms_data[3] | 0x80;
|
||||
obj.SendDataToHost(dev, true, r, featureRegister & 1);
|
||||
}
|
||||
break;
|
||||
default: // UNKNOWN COMMAND
|
||||
debug("IDER: Unknown SCSI command", cdb.charCodeAt(0));
|
||||
obj.SendCommandEndResponse(0, 0x05, dev, 0x20, 0x00);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
function sendDiskData(dev, lba, len, featureRegister) {
|
||||
var media = null;
|
||||
var mediaBlocks = 0;
|
||||
if (dev == 0xA0) { media = obj.floppy; if (obj.floppy != null) { mediaBlocks = (obj.floppy.size >> 9); } }
|
||||
if (dev == 0xB0) { media = obj.cdrom; if (obj.cdrom != null) { mediaBlocks = (obj.cdrom.size >> 11); } }
|
||||
if ((len < 0) || (lba + len > mediaBlocks)) { obj.SendCommandEndResponse(1, 0x05, dev, 0x21, 0x00); return 0; }
|
||||
if (len == 0) { obj.SendCommandEndResponse(1, 0x00, dev, 0x00, 0x00); return 0; }
|
||||
if (media != null) {
|
||||
if (dev == 0xA0) { lba <<= 9; len <<= 9; } else { lba <<= 11; len <<= 11; }
|
||||
if (g_media !== null) {
|
||||
console.log('IDERERROR: Read while performing read');
|
||||
obj.Stop();
|
||||
} else {
|
||||
// obj.iderinfo.readbfr // TODO: MaxRead
|
||||
g_media = media;
|
||||
g_dev = dev;
|
||||
g_lba = lba;
|
||||
g_len = len;
|
||||
sendDiskDataEx(featureRegister);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var g_reset = false;
|
||||
var g_media = null;
|
||||
var g_dev;
|
||||
var g_lba;
|
||||
var g_len;
|
||||
function sendDiskDataEx(featureRegister) {
|
||||
var len = g_len, lba = g_lba;
|
||||
if (g_len > obj.iderinfo.readbfr) { len = obj.iderinfo.readbfr; }
|
||||
g_len -= len;
|
||||
g_lba += len;
|
||||
var fr = new FileReader();
|
||||
fr.onload = function () {
|
||||
obj.SendDataToHost(g_dev, (g_len == 0), this.result, featureRegister & 1);
|
||||
if ((g_len > 0) && (g_reset == false)) {
|
||||
sendDiskDataEx(featureRegister);
|
||||
} else {
|
||||
g_media = null;
|
||||
if (g_reset) { obj.SendCommand(0x47); g_reset = false; } // Send ResetOccuredResponse
|
||||
}
|
||||
};
|
||||
//console.log('Read from ' + lba + ' to ' + (lba + len) + ', total of ' + len);
|
||||
fr.readAsBinaryString(g_media.slice(lba, lba + len));
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
1
public/scripts/amt-redir-ws-0.1.0-min.js
vendored
Normal file
1
public/scripts/amt-redir-ws-0.1.0-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/scripts/amt-script-0.2.0-min.js
vendored
Normal file
1
public/scripts/amt-script-0.2.0-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/scripts/amt-setupbin-0.1.0-min.js
vendored
Normal file
1
public/scripts/amt-setupbin-0.1.0-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/scripts/amt-terminal-0.0.2-min.js
vendored
Normal file
1
public/scripts/amt-terminal-0.0.2-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/scripts/amt-wsman-0.2.0-min.js
vendored
Normal file
1
public/scripts/amt-wsman-0.2.0-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/scripts/amt-wsman-ws-0.2.0-min.js
vendored
Normal file
1
public/scripts/amt-wsman-ws-0.2.0-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/scripts/charts-min.js
vendored
Normal file
1
public/scripts/charts-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/scripts/common-0.0.1-min.js
vendored
Normal file
1
public/scripts/common-0.0.1-min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
function Q(t){return document.getElementById(t)}function QS(t){try{return Q(t).style}catch(t){}}function QE(t,r){try{Q(t).disabled=!r}catch(t){}}function QV(t,r){try{QS(t).display=r?"":"none"}catch(t){}}function QA(t,r){Q(t).innerHTML+=r}function QH(t,r){Q(t).innerHTML=r}function QC(t){try{return Q(t).classList}catch(t){}}function inputBoxFocus(t){Q(t).focus();var r=Q(t).value;Q(t).value="",Q(t).value=r}function ReadShort(t,r){return(t.charCodeAt(r)<<8)+t.charCodeAt(r+1)}function ReadShortX(t,r){return(t.charCodeAt(r+1)<<8)+t.charCodeAt(r)}function ReadInt(t,r){return 16777216*t.charCodeAt(r)+(t.charCodeAt(r+1)<<16)+(t.charCodeAt(r+2)<<8)+t.charCodeAt(r+3)}function ReadSInt(t,r){return(t.charCodeAt(r)<<24)+(t.charCodeAt(r+1)<<16)+(t.charCodeAt(r+2)<<8)+t.charCodeAt(r+3)}function ReadIntX(t,r){return 16777216*t.charCodeAt(r+3)+(t.charCodeAt(r+2)<<16)+(t.charCodeAt(r+1)<<8)+t.charCodeAt(r)}function ShortToStr(t){return String.fromCharCode(t>>8&255,255&t)}function ShortToStrX(t){return String.fromCharCode(255&t,t>>8&255)}function IntToStr(t){return String.fromCharCode(t>>24&255,t>>16&255,t>>8&255,255&t)}function IntToStrX(t){return String.fromCharCode(255&t,t>>8&255,t>>16&255,t>>24&255)}function MakeToArray(t){return t&&null!=t&&"object"!=typeof t?[t]:t}function SplitArray(t){return t.split(",")}function Clone(t){return JSON.parse(JSON.stringify(t))}function EscapeHtml(t){return"string"==typeof t?t.replace(/&/g,"&").replace(/>/g,">").replace(/</g,"<").replace(/"/g,""").replace(/'/g,"'"):"boolean"==typeof t?t:"number"==typeof t?t:void 0}function EscapeHtmlBreaks(t){return"string"==typeof t?t.replace(/&/g,"&").replace(/>/g,">").replace(/</g,"<").replace(/"/g,""").replace(/'/g,"'").replace(/\r/g,"<br />").replace(/\n/g,"").replace(/\t/g," "):"boolean"==typeof t?t:"number"==typeof t?t:void 0}function ArrayElementMove(t,r,n){t.splice(n,0,t.splice(r,1)[0])}function ObjectToStringEx(t,r){var n="";if(0!=t&&(!t||null==t))return"(Null)";if(t instanceof Array)for(var e in t)n+="<br />"+gap(r)+"Item #"+e+": "+ObjectToStringEx(t[e],r+1);else if(t instanceof Object)for(var e in t)n+="<br />"+gap(r)+e+" = "+ObjectToStringEx(t[e],r+1);else n+=EscapeHtml(t);return n}function ObjectToStringEx2(t,r){var n="";if(0!=t&&(!t||null==t))return"(Null)";if(t instanceof Array)for(var e in t)n+="\r\n"+gap2(r)+"Item #"+e+": "+ObjectToStringEx2(t[e],r+1);else if(t instanceof Object)for(var e in t)n+="\r\n"+gap2(r)+e+" = "+ObjectToStringEx2(t[e],r+1);else n+=EscapeHtml(t);return n}function gap(t){for(var r="",n=0;n<4*t;n++)r+=" ";return r}function gap2(t){for(var r="",n=0;n<4*t;n++)r+=" ";return r}function ObjectToString(t){return ObjectToStringEx(t,0)}function ObjectToString2(t){return ObjectToStringEx2(t,0)}function hex2rstr(t){if("string"!=typeof t||0==t.length)return"";for(var r,n="",e=(""+t).match(/../g);r=e.shift();)n+=String.fromCharCode("0x"+r);return n}function char2hex(t){return(t+256).toString(16).substr(-2).toUpperCase()}function rstr2hex(t){var r,n="";for(r=0;r<t.length;r++)n+=char2hex(t.charCodeAt(r));return n}function encode_utf8(t){return unescape(encodeURIComponent(t))}function decode_utf8(t){return decodeURIComponent(escape(t))}function data2blob(t){for(var r=new Array(t.length),n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return new Blob([new Uint8Array(r)])}function utf2blob(t){for(var r=[],n=unescape(encodeURIComponent(t)),e=0;e<n.length;e++)r.push(n.charCodeAt(e));return new Blob([new Uint8Array(r)])}function random(t){return Math.floor(Math.random()*t)}function trademarks(t){return t.replace(/\(R\)/g,"®").replace(/\(TM\)/g,"™")}function zeroPad(t,r){null==r&&(r=2);var n="00000000"+t;return n.substr(n.length-r)}String.prototype.startsWith||(String.prototype.startsWith=function(t){return 0===this.lastIndexOf(t,0)}),String.prototype.endsWith||(String.prototype.endsWith=function(t){return-1!==this.indexOf(t,this.length-t.length)})
|
1
public/scripts/meshcentral-min.js
vendored
Normal file
1
public/scripts/meshcentral-min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
var MeshServerCreateControl=function(t,e){var o={State:0,connectstate:0,pingTimer:null};return o.authCookie=e,o.trace=!1,o.xxStateChange=function(e,t){if(o.State!=e){var n=o.State;o.State=e,o.onStateChanged&&o.onStateChanged(o,o.State,n,t)}},o.Start=function(){if(0==o.connectstate){o.connectstate=0;var e=window.location.protocol.replace("http","ws")+"//"+window.location.host+t+"control.ashx";o.authCookie&&""!=o.authCookie&&(e+="?auth="+o.authCookie),o.socket=new WebSocket(e),o.socket.onopen=function(e){o.connectstate=1},o.socket.onmessage=o.xxOnMessage,o.socket.onclose=function(e){o.Stop(e.code)},o.xxStateChange(1,0),null!=o.pingTimer&&clearInterval(o.pingTimer),o.pingTimer=setInterval(function(){o.send({action:"ping"})},29e3)}},o.Stop=function(e){o.connectstate=0,o.socket&&(o.socket.close(),delete o.socket),null!=o.pingTimer&&(clearInterval(o.pingTimer),o.pingTimer=null),o.xxStateChange(0,e)},o.xxOnMessage=function(e){var t;1==o.State&&o.xxStateChange(2);try{t=JSON.parse(e.data)}catch(e){return}if("object"==typeof t&&"pong"!=t.action){if("close"==t.action)return t.msg&&console.log(t.msg),void o.Stop(t.cause);o.trace&&console.log("RECV",t),o.onMessage&&o.onMessage(o,t)}},o.send=function(e){null!=o.socket&&1==o.connectstate&&(o.trace&&"ping"!=e.action&&console.log("SEND",e),o.socket.send(JSON.stringify(e)))},o}
|
1
public/scripts/ol-min.js
vendored
Normal file
1
public/scripts/ol-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/scripts/ol3-contextmenu-min.js
vendored
Normal file
1
public/scripts/ol3-contextmenu-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/scripts/u2f-api-min.js
vendored
Normal file
1
public/scripts/u2f-api-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/scripts/xterm-addon-fit-min.js
vendored
Normal file
1
public/scripts/xterm-addon-fit-min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.FitAddon=t():e.FitAddon=t()}(window,function(){return n={},o.m=r=[function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=(o.prototype.activate=function(e){this._terminal=e},o.prototype.dispose=function(){},o.prototype.fit=function(){var e=this.proposeDimensions();if(e&&this._terminal){var t=this._terminal._core;this._terminal.rows===e.rows&&this._terminal.cols===e.cols||(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}},o.prototype.proposeDimensions=function(){if(this._terminal&&this._terminal.element&&this._terminal.element.parentElement){var e=this._terminal._core,t=window.getComputedStyle(this._terminal.element.parentElement),r=parseInt(t.getPropertyValue("height")),n=Math.max(0,parseInt(t.getPropertyValue("width"))),o=window.getComputedStyle(this._terminal.element),i=r-(parseInt(o.getPropertyValue("padding-top"))+parseInt(o.getPropertyValue("padding-bottom"))),a=n-(parseInt(o.getPropertyValue("padding-right"))+parseInt(o.getPropertyValue("padding-left")))-e.viewport.scrollBarWidth;return{cols:Math.max(2,Math.floor(a/e._renderService.dimensions.actualCellWidth)),rows:Math.max(1,Math.floor(i/e._renderService.dimensions.actualCellHeight))}}},o);function o(){}t.FitAddon=n}],o.c=n,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)o.d(r,n,function(e){return t[e]}.bind(null,n));return r},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0);function o(e){if(n[e])return n[e].exports;var t=n[e]={i:e,l:!1,exports:{}};return r[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}var r,n})
|
1
public/scripts/xterm-min.js
vendored
Normal file
1
public/scripts/xterm-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/scripts/zlib-adler32-min.js
vendored
Normal file
1
public/scripts/zlib-adler32-min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
"undefined"==typeof ZLIB&&alert("ZLIB is not defined. SRC zlib.js before zlib-adler32.js"),function(){var c=65521,C=5552;ZLIB.adler32=function(r,e,o,t){return"string"==typeof e?function(r,e,o,t){var a,d;if(a=r>>>16&65535,r&=65535,1==t)return r+=255&e.charCodeAt(o),c<=r&&(r-=c),c<=(a+=r)&&(a-=c),r|a<<16;if(null===e)return 1;if(t<16){for(;t--;)a+=r+=255&e.charCodeAt(o++);return c<=r&&(r-=c),r|(a%=c)<<16}for(;C<=t;){for(t-=C,d=347;a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),--d;);r%=c,a%=c}if(t){for(;16<=t;)t-=16,a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++),a+=r+=255&e.charCodeAt(o++);for(;t--;)a+=r+=255&e.charCodeAt(o++);r%=c,a%=c}return r|a<<16}(r,e,o,t):function(r,e,o,t){var a,d;if(a=r>>>16&65535,r&=65535,1==t)return r+=e[o],c<=r&&(r-=c),c<=(a+=r)&&(a-=c),r|a<<16;if(null===e)return 1;if(t<16){for(;t--;)a+=r+=e[o++];return c<=r&&(r-=c),r|(a%=c)<<16}for(;C<=t;){for(t-=C,d=347;a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],--d;);r%=c,a%=c}if(t){for(;16<=t;)t-=16,a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++],a+=r+=e[o++];for(;t--;)a+=r+=e[o++];r%=c,a%=c}return r|a<<16}(r,e,o,t)},ZLIB.adler32_combine=function(r,e,o){var t,a,d;return o<0?4294967295:(a=(d=o%=c)*(t=65535&r),a%=c,c<=(t+=(65535&e)+c-1)&&(t-=c),c<=t&&(t-=c),c<<1<=(a+=(r>>16&65535)+(e>>16&65535)+c-d)&&(a-=c<<1),c<=a&&(a-=c),t|a<<16)}}()
|
1
public/scripts/zlib-crc32-min.js
vendored
Normal file
1
public/scripts/zlib-crc32-min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
"undefined"==typeof ZLIB&&alert("ZLIB is not defined. SRC zlib.js before zlib-crc32.js"),function(){var t=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];ZLIB.crc32=function(r,e,n,o){return"string"==typeof e?function(r,e,n,o){if(null==e)return 0;for(r^=4294967295;8<=o;)r=t[255&(r^e.charCodeAt(n++))]^r>>>8,r=t[255&(r^e.charCodeAt(n++))]^r>>>8,r=t[255&(r^e.charCodeAt(n++))]^r>>>8,r=t[255&(r^e.charCodeAt(n++))]^r>>>8,r=t[255&(r^e.charCodeAt(n++))]^r>>>8,r=t[255&(r^e.charCodeAt(n++))]^r>>>8,r=t[255&(r^e.charCodeAt(n++))]^r>>>8,r=t[255&(r^e.charCodeAt(n++))]^r>>>8,o-=8;if(o)for(;r=t[255&(r^e.charCodeAt(n++))]^r>>>8,--o;);return 4294967295^r}(r,e,n,o):function(r,e,n,o){if(null==e)return 0;for(r^=4294967295;8<=o;)r=t[255&(r^e[n++])]^r>>>8,r=t[255&(r^e[n++])]^r>>>8,r=t[255&(r^e[n++])]^r>>>8,r=t[255&(r^e[n++])]^r>>>8,r=t[255&(r^e[n++])]^r>>>8,r=t[255&(r^e[n++])]^r>>>8,r=t[255&(r^e[n++])]^r>>>8,r=t[255&(r^e[n++])]^r>>>8,o-=8;if(o)for(;r=t[255&(r^e[n++])]^r>>>8,--o;);return 4294967295^r}(r,e,n,o)};function i(r,e){var n,o=0;for(n=0;e;)1&e&&(n^=r[o]),e>>=1,o++;return n}function u(r,e){var n;for(n=0;n<32;n++)r[n]=i(e,e[n])}ZLIB.crc32_combine=function(r,e,n){var o,t,f,c;if(n<=0)return r;for(f=new Array(32),(c=new Array(32))[0]=3988292384,o=t=1;o<32;o++)c[o]=t,t<<=1;u(f,c),u(c,f);do{if(u(f,c),1&n&&(r=i(f,r)),0==(n>>=1))break;u(c,f),1&n&&(r=i(c,r)),n>>=1}while(0!=n);return r^=e}}()
|
1
public/scripts/zlib-inflate-min.js
vendored
Normal file
1
public/scripts/zlib-inflate-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/scripts/zlib-min.js
vendored
Normal file
1
public/scripts/zlib-min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
var ZLIB=ZLIB||{};void 0===ZLIB.common_initialized&&(ZLIB.Z_NO_FLUSH=0,ZLIB.Z_PARTIAL_FLUSH=1,ZLIB.Z_SYNC_FLUSH=2,ZLIB.Z_FULL_FLUSH=3,ZLIB.Z_FINISH=4,ZLIB.Z_BLOCK=5,ZLIB.Z_TREES=6,ZLIB.Z_OK=0,ZLIB.Z_STREAM_END=1,ZLIB.Z_NEED_DICT=2,ZLIB.Z_ERRNO=-1,ZLIB.Z_STREAM_ERROR=-2,ZLIB.Z_DATA_ERROR=-3,ZLIB.Z_MEM_ERROR=-4,ZLIB.Z_BUF_ERROR=-5,ZLIB.Z_VERSION_ERROR=-6,ZLIB.Z_DEFLATED=8,ZLIB.z_stream=function(){this.next_in=0,this.avail_in=0,this.total_in=0,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=null,this.state=null,this.data_type=0,this.adler=0,this.input_data="",this.output_data="",this.error=0,this.checksum_function=null},ZLIB.gz_header=function(){this.text=0,this.time=0,this.xflags=0,this.os=255,this.extra=null,this.extra_len=0,this.extra_max=0,this.name=null,this.name_max=0,this.comment=null,this.comm_max=0,this.hcrc=0,this.done=0},ZLIB.common_initialized=!0)
|
@ -60,7 +60,31 @@ var minifyMeshCentralSourceFiles = [
|
||||
"../views/xterm.handlebars",
|
||||
"../views/message.handlebars",
|
||||
"../views/messenger.handlebars",
|
||||
"../views/player.handlebars"
|
||||
"../views/player.handlebars",
|
||||
"../public/scripts/agent-desktop-0.0.2.js",
|
||||
"../public/scripts/agent-redir-rtc-0.1.0.js",
|
||||
"../public/scripts/agent-redir-ws-0.1.1.js",
|
||||
"../public/scripts/amt-0.2.0.js",
|
||||
"../public/scripts/amt-desktop-0.0.2.js",
|
||||
"../public/scripts/amt-ider-ws-0.0.1.js",
|
||||
"../public/scripts/amt-redir-ws-0.1.0.js",
|
||||
"../public/scripts/amt-script-0.2.0.js",
|
||||
"../public/scripts/amt-setupbin-0.1.0.js",
|
||||
"../public/scripts/amt-terminal-0.0.2.js",
|
||||
"../public/scripts/amt-wsman-0.2.0.js",
|
||||
"../public/scripts/amt-wsman-ws-0.2.0.js",
|
||||
"../public/scripts/charts.js",
|
||||
"../public/scripts/common-0.0.1.js",
|
||||
"../public/scripts/meshcentral.js",
|
||||
"../public/scripts/ol.js",
|
||||
"../public/scripts/ol3-contextmenu.js",
|
||||
"../public/scripts/u2f-api.js",
|
||||
"../public/scripts/xterm-addon-fit.js",
|
||||
"../public/scripts/xterm.js",
|
||||
"../public/scripts/zlib-adler32.js",
|
||||
"../public/scripts/zlib-crc32.js",
|
||||
"../public/scripts/zlib-inflate.js",
|
||||
"../public/scripts/zlib.js"
|
||||
];
|
||||
|
||||
// True is this module is run directly using NodeJS
|
||||
@ -286,14 +310,36 @@ function startEx(argv) {
|
||||
outnamemin = (outname.substring(0, outname.length - 5) + '-min.html');
|
||||
} else if (outname.endsWith('.htm')) {
|
||||
outnamemin = (outname.substring(0, outname.length - 4) + '-min.htm');
|
||||
} else if (outname.endsWith('.js')) {
|
||||
outnamemin = (outname.substring(0, outname.length - 3) + '-min.js');
|
||||
} else {
|
||||
outnamemin = (outname, outname + '.min');
|
||||
}
|
||||
log('Generating ' + outnamemin + '...');
|
||||
|
||||
/*
|
||||
// Minify the file
|
||||
if (minifyLib = 2) {
|
||||
var minifiedOut = minify(fs.readFileSync(outname).toString(), {
|
||||
if (minifyLib == 1) {
|
||||
minify.file({
|
||||
file: outname,
|
||||
dist: outnamemin
|
||||
}, function (e, compress) {
|
||||
if (e) { log('ERROR ', e); return done(); }
|
||||
compress.run((e) => { e ? log('Minification fail', e) : log('Minification sucess'); minifyDone(); });
|
||||
}
|
||||
);
|
||||
}
|
||||
*/
|
||||
|
||||
// Minify the file
|
||||
if (minifyLib == 2) {
|
||||
var inFile = fs.readFileSync(outname).toString();
|
||||
|
||||
// Perform minification pre-processing
|
||||
if (outname.indexOf('default.handlebars') >= 0) { inFile = inFile.split('{{{pluginHandler}}}').join('"{{{pluginHandler}}}"'); }
|
||||
if (outname.endsWith('.js')) { inFile = '<script>' + inFile + '</script>'; }
|
||||
|
||||
var minifiedOut = minify(inFile, {
|
||||
collapseBooleanAttributes: true,
|
||||
collapseInlineTagWhitespace: false, // This is not good.
|
||||
collapseWhitespace: true,
|
||||
@ -309,6 +355,11 @@ function startEx(argv) {
|
||||
preserveLineBreaks: false,
|
||||
useShortDoctype: true
|
||||
});
|
||||
|
||||
// Perform minification post-processing
|
||||
if (outname.endsWith('.js')) { minifiedOut = minifiedOut.substring(8, minifiedOut.length - 9); }
|
||||
if (outname.indexOf('default.handlebars') >= 0) { minifiedOut = minifiedOut.split('"{{{pluginHandler}}}"').join('{{{pluginHandler}}}'); }
|
||||
|
||||
fs.writeFileSync(outnamemin, minifiedOut, { flag: 'w+' });
|
||||
}
|
||||
}
|
||||
@ -698,7 +749,7 @@ function translateFromHtml(lang, file, createSubDir) {
|
||||
minify.file({
|
||||
file: outname,
|
||||
dist: outnamemin
|
||||
}, (e, compress) => {
|
||||
}, function(e, compress) {
|
||||
if (e) { log('ERROR ', e); return done(); }
|
||||
compress.run((e) => { e ? log('Minification fail', e) : log('Minification sucess'); minifyDone(); });
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -7,18 +7,18 @@
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="format-detection" content="telephone=no" />
|
||||
<link rel="shortcut icon" type="image/x-icon" href="{{{domainurl}}}favicon.ico" />
|
||||
<script type="text/javascript" src="scripts/common-0.0.1.js"></script>
|
||||
<script type="text/javascript" src="scripts/meshcentral.js"></script>
|
||||
<script type="text/javascript" src="scripts/agent-redir-ws-0.1.1.js"></script>
|
||||
<script type="text/javascript" src="scripts/agent-desktop-0.0.2.js"></script>
|
||||
<script type="text/javascript" src="scripts/amt-0.2.0.js"></script>
|
||||
<script type="text/javascript" src="scripts/amt-redir-ws-0.1.0.js"></script>
|
||||
<script type="text/javascript" src="scripts/amt-desktop-0.0.2.js"></script>
|
||||
<script type="text/javascript" src="scripts/zlib.js"></script>
|
||||
<script type="text/javascript" src="scripts/zlib-inflate.js"></script>
|
||||
<script type="text/javascript" src="scripts/zlib-adler32.js"></script>
|
||||
<script type="text/javascript" src="scripts/zlib-crc32.js"></script>
|
||||
<script keeplink=1 type="text/javascript" src="scripts/filesaver.js"></script>
|
||||
<script type="text/javascript" src="scripts/common-0.0.1{{{min}}}.js"></script>
|
||||
<script type="text/javascript" src="scripts/meshcentral{{{min}}}.js"></script>
|
||||
<script type="text/javascript" src="scripts/agent-redir-ws-0.1.1{{{min}}}.js"></script>
|
||||
<script type="text/javascript" src="scripts/agent-desktop-0.0.2{{{min}}}.js"></script>
|
||||
<script type="text/javascript" src="scripts/amt-0.2.0{{{min}}}.js"></script>
|
||||
<script type="text/javascript" src="scripts/amt-redir-ws-0.1.0{{{min}}}.js"></script>
|
||||
<script type="text/javascript" src="scripts/amt-desktop-0.0.2{{{min}}}.js"></script>
|
||||
<script type="text/javascript" src="scripts/zlib{{{min}}}.js"></script>
|
||||
<script type="text/javascript" src="scripts/zlib-inflate{{{min}}}.js"></script>
|
||||
<script type="text/javascript" src="scripts/zlib-adler32{{{min}}}.js"></script>
|
||||
<script type="text/javascript" src="scripts/zlib-crc32{{{min}}}.js"></script>
|
||||
<script keeplink=1 type="text/javascript" src="scripts/filesaver.min.js"></script>
|
||||
<title>{{{title}}}</title>
|
||||
<style>
|
||||
a {
|
||||
@ -621,7 +621,7 @@
|
||||
for (var i in webState) { localStorage.setItem(i, webState[i]); }
|
||||
if (!webState.loctag) { delete localStorage.removeItem('loctag'); }
|
||||
|
||||
var args = parseUriArgs();
|
||||
var args = parseUriArgs(), urlargs = args;
|
||||
var debugLevel = parseInt('{{{debuglevel}}}');
|
||||
var features = parseInt('{{{features}}}');
|
||||
var sessionTime = parseInt('{{{sessiontime}}}');
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -303,7 +303,9 @@
|
||||
var otpsms = (decodeURIComponent('{{{otpsms}}}') === 'true');
|
||||
var twoFactorCookieDays = parseInt('{{{twoFactorCookieDays}}}');
|
||||
|
||||
function startup() {
|
||||
// Display the right server message
|
||||
var i;
|
||||
var messageid = parseInt('{{{messageid}}}');
|
||||
var okmessages = ['', "Hold on, reset mail sent.", "Email sent.", "Email verification required, check your mailbox and click the confirmation link.", "SMS sent."];
|
||||
var failmessages = ["Unable to create account.", "Account limit reached.", "Existing account with this email address.", "Invalid account creation token.", "Username already exists.", "Password rejected, use a different one.", "Invalid email.", "Account not found.", "Invalid token, try again.", "Unable to sent email.", "Account locked.", "Access denied.", "Login failed, check username and password.", "Password change requested.", "IP address blocked, try again later."];
|
||||
@ -313,7 +315,7 @@
|
||||
else if ((messageid >= 100) && ((messageid - 100) < failmessages.length)) { msg = failmessages[messageid - 100]; }
|
||||
if (msg != '') {
|
||||
if (messageid >= 100) { msg = ('<span class="msg error"><b style=color:#8C001A>' + msg + '<b></span><br /><br />'); } else { msg = ('<span class="msg success"><b>' + msg + '</b></span><br /><br />'); }
|
||||
for (var i = 1; i < 8; i++) { QH('message' + i, msg); }
|
||||
for (i = 1; i < 8; i++) { QH('message' + i, msg); }
|
||||
}
|
||||
}
|
||||
|
||||
@ -348,7 +350,6 @@
|
||||
//if (webPageFullScreen == 'true') { webPageFullScreen = true; }
|
||||
//toggleFullScreen();
|
||||
|
||||
function startup() {
|
||||
if ((features & 32) == 0) {
|
||||
// Guard against other site's top frames (web bugs).
|
||||
var loc = null;
|
||||
@ -544,11 +545,11 @@
|
||||
var ok = (userok && emailok && pass1ok && pass2ok && newAccOk);
|
||||
|
||||
// Color the fields
|
||||
QS('nuUser').color = userok?'black':'#7b241c';
|
||||
QS('nuEmail').color = emailok?'black':'#7b241c';
|
||||
QS('nuPass1').color = pass1ok?'black':'#7b241c';
|
||||
QS('nuPass2').color = pass2ok?'black':'#7b241c';
|
||||
QS('nuToken').color = newAccOk?'black':'#7b241c';
|
||||
QS('nuUser').color = userok ? 'black' : '#7b241c';
|
||||
QS('nuEmail').color = emailok ? 'black' : '#7b241c';
|
||||
QS('nuPass1').color = pass1ok ? 'black' : '#7b241c';
|
||||
QS('nuPass2').color = pass2ok ? 'black' : '#7b241c';
|
||||
QS('nuToken').color = newAccOk ? 'black' : '#7b241c';
|
||||
|
||||
if (Q('apassword1').value == '') {
|
||||
QH('passWarning', '');
|
||||
@ -666,7 +667,7 @@
|
||||
function checkPasswordStrength(password) {
|
||||
var r = 0, letters = {}, varCount = 0, variations = { digits: /\d/.test(password), lower: /[a-z]/.test(password), upper: /[A-Z]/.test(password), nonWords: /\W/.test(password) }
|
||||
if (!password) return 0;
|
||||
for (var i = 0; i< password.length; i++) { letters[password[i]] = (letters[password[i]] || 0) + 1; r += 5.0 / letters[password[i]]; }
|
||||
for (var i = 0; i < password.length; i++) { letters[password[i]] = (letters[password[i]] || 0) + 1; r += 5.0 / letters[password[i]]; }
|
||||
for (var c in variations) { varCount += (variations[c] == true) ? 1 : 0; }
|
||||
return parseInt(r + (varCount - 1) * 10);
|
||||
}
|
||||
@ -826,7 +827,7 @@
|
||||
function putstore(name, val) { try { if (typeof (localStorage) === 'undefined') return; localStorage.setItem(name, val); } catch (e) { } }
|
||||
function getstore(name, val) { try { if (typeof (localStorage) === 'undefined') return val; var v = localStorage.getItem(name); if ((v == null) || (v == null)) return val; return v; } catch (e) { return val; } }
|
||||
function format(format) { var args = Array.prototype.slice.call(arguments, 1); return format.replace(/{(\d+)}/g, function (match, number) { return typeof args[number] != 'undefined' ? args[number] : match; }); };
|
||||
function addTextLink(subtext, text, link) { var i = text.toLowerCase().indexOf(subtext.toLowerCase()); if (i == -1) { return text; } return text.substring(0, i) + '<a href=\"' + link + '\">' + subtext + '</a>' + text.substring(i + subtext.length); }
|
||||
function addTextLink(subtext, text, link) { var i = text.toLowerCase().indexOf(subtext.toLowerCase()); if (i == -1) { return text; } return text.substring(0, i) + '<a href="' + link + '">' + subtext + '</a>' + text.substring(i + subtext.length); }
|
||||
function parseUriArgs() { var href = window.document.location.href; if (href.endsWith('#')) { href = href.substring(0, href.length - 1); } var name, r = {}, parsedUri = href.split(/[\?&|\=]/); parsedUri.splice(0, 1); for (x in parsedUri) { switch (x % 2) { case 0: { name = decodeURIComponent(parsedUri[x]); break; } case 1: { r[name] = decodeURIComponent(parsedUri[x]); var x = parseInt(r[name]); if (x == r[name]) { r[name] = x; } break; } default: { break; } } } return r; }
|
||||
function addHtmlValue(t, v) { return '<table><td style=width:120px;text-align:left>' + t + '<td><b>' + v + '</b></table>'; }
|
||||
|
||||
|
@ -163,7 +163,8 @@
|
||||
var webPageStackMenu = false;
|
||||
var webPageFullScreen = true;
|
||||
var nightMode = (getstore('_nightMode', '0') == '1');
|
||||
var logoutControls = {{{logoutControls}}};
|
||||
var logoutControls = JSON.parse(decodeURIComponent('{{{logoutControls}}}'));
|
||||
console.log(logoutControls);
|
||||
|
||||
var terms = '{{{terms}}}';
|
||||
if (terms != '') { QH('column_l', decodeURIComponent(terms)); }
|
||||
|
21
webserver.js
21
webserver.js
@ -1893,10 +1893,6 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
|
||||
// Clean up the U2F challenge if needed
|
||||
if (req.session.u2fchallenge) { delete req.session.u2fchallenge; };
|
||||
|
||||
// If geolocation is disabled, comment out all geolocation code to speed up the web application
|
||||
var StartGeoLocation = '', EndGeoLocation = '', StartGeoLocationJS = '', EndGeoLocationJS = '';
|
||||
if (domain.geolocation !== true) { StartGeoLocation = '<!--'; EndGeoLocation = '-->'; StartGeoLocationJS = '/*'; EndGeoLocationJS = '*/'; }
|
||||
|
||||
// Fetch the web state
|
||||
parent.debug('web', 'handleRootRequestEx: success.');
|
||||
obj.db.Get('ws' + user._id, function (err, states) {
|
||||
@ -1908,7 +1904,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
|
||||
for (var i in domain.forceduserwebstate) { webstate2[i] = domain.forceduserwebstate[i]; }
|
||||
webstate = JSON.stringify(webstate2);
|
||||
}
|
||||
render(req, res, getRenderPage('default', req, domain), getRenderArgs({ authCookie: authCookie, authRelayCookie: authRelayCookie, viewmode: viewmode, currentNode: currentNode, logoutControls: JSON.stringify(logoutcontrols), 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, webstate: encodeURIComponent(webstate), pluginHandler: (parent.pluginHandler == null) ? 'null' : parent.pluginHandler.prepExports(), StartGeoLocation: StartGeoLocation, EndGeoLocation: EndGeoLocation, StartGeoLocationJS: StartGeoLocationJS, EndGeoLocationJS: EndGeoLocationJS }, domain));
|
||||
render(req, res, getRenderPage('default', req, domain), getRenderArgs({ authCookie: authCookie, authRelayCookie: authRelayCookie, viewmode: viewmode, currentNode: currentNode, logoutControls: encodeURIComponent(JSON.stringify(logoutcontrols)), 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, webstate: encodeURIComponent(webstate), pluginHandler: (parent.pluginHandler == null) ? 'null' : parent.pluginHandler.prepExports() }, domain));
|
||||
});
|
||||
} else {
|
||||
// Send back the login application
|
||||
@ -2058,7 +2054,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
|
||||
const authCookie = obj.parent.encodeCookie({ userid: user._id, domainid: domain.id, ip: cleanRemoteAddr(req.ip) }, obj.parent.loginCookieEncryptionKey);
|
||||
const authRelayCookie = obj.parent.encodeCookie({ ruserid: user._id, domainid: domain.id }, obj.parent.loginCookieEncryptionKey);
|
||||
var httpsPort = ((obj.args.aliasport == null) ? obj.args.port : obj.args.aliasport); // Use HTTPS alias port is specified
|
||||
render(req, res, getRenderPage('xterm', req, domain), getRenderArgs({ serverDnsName: obj.getWebServerName(domain), serverRedirPort: args.redirport, serverPublicPort: httpsPort, authCookie: authCookie, authRelayCookie: authRelayCookie, logoutControls: JSON.stringify(logoutcontrols), name: EscapeHtml(node.name) }, domain));
|
||||
render(req, res, getRenderPage('xterm', req, domain), getRenderArgs({ serverDnsName: obj.getWebServerName(domain), serverRedirPort: args.redirport, serverPublicPort: httpsPort, authCookie: authCookie, authRelayCookie: authRelayCookie, logoutControls: encodeURIComponent(JSON.stringify(logoutcontrols)), name: EscapeHtml(node.name) }, domain));
|
||||
});
|
||||
} else {
|
||||
res.redirect(domain.url + getQueryPortion(req));
|
||||
@ -2082,9 +2078,9 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
|
||||
var logoutcontrols = { name: user.name };
|
||||
var extras = (req.query.key != null) ? ('&key=' + req.query.key) : '';
|
||||
if ((domain.ldap == null) && (domain.sspi == null) && (obj.args.user == null) && (obj.args.nousers != true)) { logoutcontrols.logoutUrl = (domain.url + 'logout?' + Math.random() + extras); } // If a default user is in use or no user mode, don't display the logout button
|
||||
render(req, res, getRenderPage('terms', req, domain), getRenderArgs({ terms: encodeURIComponent(parent.configurationFiles['terms.txt'].toString()).split('\'').join('\\\''), logoutControls: JSON.stringify(logoutcontrols) }, domain));
|
||||
render(req, res, getRenderPage('terms', req, domain), getRenderArgs({ terms: encodeURIComponent(parent.configurationFiles['terms.txt'].toString()).split('\'').join('\\\''), logoutControls: encodeURIComponent(JSON.stringify(logoutcontrols)) }, domain));
|
||||
} else {
|
||||
render(req, res, getRenderPage('terms', req, domain), getRenderArgs({ terms: encodeURIComponent(parent.configurationFiles['terms.txt'].toString()).split('\'').join('\\\''), logoutControls: '{}' }, domain));
|
||||
render(req, res, getRenderPage('terms', req, domain), getRenderArgs({ terms: encodeURIComponent(parent.configurationFiles['terms.txt'].toString()).split('\'').join('\\\''), logoutControls: encodeURIComponent('{}') }, domain));
|
||||
}
|
||||
} else {
|
||||
// See if there is a terms.txt file in meshcentral-data
|
||||
@ -2101,9 +2097,9 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
|
||||
var logoutcontrols = { name: user.name };
|
||||
var extras = (req.query.key != null) ? ('&key=' + req.query.key) : '';
|
||||
if ((domain.ldap == null) && (domain.sspi == null) && (obj.args.user == null) && (obj.args.nousers != true)) { logoutcontrols.logoutUrl = (domain.url + 'logout?' + Math.random() + extras); } // If a default user is in use or no user mode, don't display the logout button
|
||||
render(req, res, getRenderPage('terms', req, domain), getRenderArgs({ terms: encodeURIComponent(data).split('\'').join('\\\''), logoutControls: JSON.stringify(logoutcontrols) }, domain));
|
||||
render(req, res, getRenderPage('terms', req, domain), getRenderArgs({ terms: encodeURIComponent(data).split('\'').join('\\\''), logoutControls: encodeURIComponent(JSON.stringify(logoutcontrols)) }, domain));
|
||||
} else {
|
||||
render(req, res, getRenderPage('terms', req, domain), getRenderArgs({ terms: encodeURIComponent(data).split('\'').join('\\\''), logoutControls: '{}' }, domain));
|
||||
render(req, res, getRenderPage('terms', req, domain), getRenderArgs({ terms: encodeURIComponent(data).split('\'').join('\\\''), logoutControls: encodeURIComponent('{}') }, domain));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
@ -2116,9 +2112,9 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
|
||||
var logoutcontrols = { name: user.name };
|
||||
var extras = (req.query.key != null) ? ('&key=' + req.query.key) : '';
|
||||
if ((domain.ldap == null) && (domain.sspi == null) && (obj.args.user == null) && (obj.args.nousers != true)) { logoutcontrols.logoutUrl = (domain.url + 'logout?' + Math.random() + extras); } // If a default user is in use or no user mode, don't display the logout button
|
||||
render(req, res, getRenderPage('terms', req, domain), getRenderArgs({ logoutControls: JSON.stringify(logoutcontrols) }, domain));
|
||||
render(req, res, getRenderPage('terms', req, domain), getRenderArgs({ logoutControls: encodeURIComponent(JSON.stringify(logoutcontrols)) }, domain));
|
||||
} else {
|
||||
render(req, res, getRenderPage('terms', req, domain), getRenderArgs({ logoutControls: '{}' }, domain));
|
||||
render(req, res, getRenderPage('terms', req, domain), getRenderArgs({ logoutControls: encodeURIComponent('{}') }, domain));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4802,6 +4798,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
|
||||
|
||||
// Return the correct render page arguments.
|
||||
function getRenderArgs(xargs, domain) {
|
||||
xargs.min = obj.args.minify?'-min':'';
|
||||
xargs.titlehtml = domain.titlehtml;
|
||||
xargs.title = (domain.title != null) ? domain.title : 'MeshCentral';
|
||||
if ((domain.titlepicture == null) && (domain.titlehtml == null)) {
|
||||
|
Loading…
Reference in New Issue
Block a user