From cdadf8595bd9c32a600ed9d2b3d6e99efc0d54af Mon Sep 17 00:00:00 2001 From: Ylian Saint-Hilaire Date: Thu, 24 Oct 2019 23:58:39 -0700 Subject: [PATCH] Fixed minification bug in login page. --- MeshCentralServer.njsproj | 5 - agents/MeshCmd-signed.exe | Bin 4488128 -> 4468704 bytes agents/MeshCmd64-signed.exe | Bin 4103104 -> 4083680 bytes agents/meshcmd.js | 71 +-- agents/meshcmd.min.js | 71 +-- agents/modules_meshcmd/service-host.js | 389 -------------- agents/modules_meshcmd/service-manager.js | 497 ------------------ .../modules_meshcmd_min/service-host.min.js | 1 - .../service-manager.min.js | 1 - package.json | 2 +- public/minify.bat | 3 + public/player-min.htm | 2 +- public/translations/player-min_fr.htm | 2 +- translate/translate.js | 4 +- views/agentinvite-min.handlebars | 2 +- views/default-min.handlebars | 2 +- views/default-mobile-min.handlebars | 2 +- views/login-min.handlebars | 2 +- views/login-mobile-min.handlebars | 2 +- views/login-mobile.handlebars | 10 +- views/login.handlebars | 10 +- .../agentinvite-min_fr.handlebars | 2 +- views/translations/default-min_fr.handlebars | 2 +- .../default-mobile-min_fr.handlebars | 2 +- views/translations/login-min_fr.handlebars | 2 +- .../login-mobile-min_fr.handlebars | 2 +- views/translations/login-mobile_fr.handlebars | 10 +- views/translations/login_fr.handlebars | 10 +- 28 files changed, 120 insertions(+), 988 deletions(-) delete mode 100644 agents/modules_meshcmd/service-host.js delete mode 100644 agents/modules_meshcmd/service-manager.js delete mode 100644 agents/modules_meshcmd_min/service-host.min.js delete mode 100644 agents/modules_meshcmd_min/service-manager.min.js create mode 100644 public/minify.bat diff --git a/MeshCentralServer.njsproj b/MeshCentralServer.njsproj index e72e3d05..d2d0cf3f 100644 --- a/MeshCentralServer.njsproj +++ b/MeshCentralServer.njsproj @@ -274,19 +274,14 @@ - - - - - diff --git a/agents/MeshCmd-signed.exe b/agents/MeshCmd-signed.exe index e2a53826dad674c7ad45d06ff0049150c99c2626..fab6f6fbcb8d104de390bd9fdec7a4a00ce17a49 100644 GIT binary patch delta 26915 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≪oXZj_)P71`-=;iNBgZ< zwWfXUh~j}+4F~6yOzHiRFSe|aln;BTi#mLuFZ+2 zQ{D{@c(&2yQ#8Lu`Dt2uoAlOg)6&`xPi@)6HGXD~nSXjXxH_i!IrQY1JDGQavn<92}hPb9~t0zQxaO=vU|PK-Bj4$Mn8ko!jJWzr6QGn>u*C zb}(_$j;V9w)*rmKtYT?*zq!ZO{q$y^Zywy}`n2mej!XVXc`~GS`=M#?ym8^ylxLTv zg{Rc~d|%ha^vSVlDT}-6()V4dZsXNw$8x9Y+z})Ex9kWAtT_JAqfJZ3{g^z}-;}|l z)_x!P`;}h54!`BqEqHL(Wv4%Hxv@vPHJ`qAd?Mp-M2_D3v-`ft-&+qqIU}lM+J?h^ zpQcXTyYl7-2mXBJ`L_zrMTZq;9`_nL_1A9mE{qwe+rK+&`6BODZ{EMQ_BrPT`S)+X zvTuXF|IM^1EegHozyDzWyv1WXr=Gg++@hCyoqYAsrEt>^?IVB7ePLa8$&Ats!S~&F G-~R#&P1ExL delta 46860 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 WM_+pP>z_KttjG$!{FlG{<$nPoTD*Y( delta 46931 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 diff --git a/agents/meshcmd.js b/agents/meshcmd.js index 3dfb676d..a7a848d1 100644 --- a/agents/meshcmd.js +++ b/agents/meshcmd.js @@ -2564,46 +2564,53 @@ function removeItemFromArray(array, element) { } // Run MeshCmd, but before we do, we need to see if what type of service we are going to be -var serviceName = null; -var serviceOpSpecified = 0; -var serviceInstall = 0; - +var serviceName = null, serviceDisplayName = null, serviceDesc = null; for (var i in process.argv) { - if (process.argv[i].toLowerCase() == 'install') { serviceInstall = 1 } else if (process.argv[i].toLowerCase() == 'uninstall') { serviceInstall = -1 } - if ((process.argv[i].toLowerCase() == 'microlms') || (process.argv[i].toLowerCase() == 'amtlms') || (process.argv[i].toLowerCase() == 'lms')) { serviceName = 'MicroLMS'; break; } - if ((process.argv[i].toLowerCase() == 'meshcommander') || (process.argv[i].toLowerCase() == 'commander')) { serviceName = 'MeshCommander'; break; } + if (process.argv[i].toLowerCase() == 'install') { process.argv[i] = '-install'; } + if (process.argv[i].toLowerCase() == 'uninstall') { process.argv[i] = '-uninstall'; } + if ((process.argv[i].toLowerCase() == 'microlms') || (process.argv[i].toLowerCase() == 'amtlms') || (process.argv[i].toLowerCase() == 'lms')) { + serviceName = 'MicroLMS'; + serviceDisplayName = 'MicroLMS Service for Intel(R) AMT'; + serviceDesc = 'Intel AMT Micro Local Manageability Service (MicroLMS)'; + } else if ((process.argv[i].toLowerCase() == 'intellms')) { + serviceName = 'LMS'; + serviceDisplayName = 'Intel(R) Management and Security Application Local Management Service'; + serviceDesc = 'Intel(R) Management and Security Application Local Management Service - Provides OS-related Intel(R) ME functionality.'; + } else if ((process.argv[i].toLowerCase() == 'meshcommander') || (process.argv[i].toLowerCase() == 'commander')) { + serviceName = 'MeshCommander'; + serviceDisplayName = 'MeshCommander, Intel AMT Management console'; + serviceDesc = 'MeshCommander is a Intel AMT management console.'; + } } if (serviceName == null) { - for (var i in process.argv) { - if ((process.argv[i].toLowerCase() == 'install') || (process.argv[i].toLowerCase() == 'uninstall')) { - console.log('In order to install/uninstall, a service type must be specified.'); - process.exit(); - } - } if (process.execPath.includes('MicroLMS')) { serviceName = 'MicroLMS'; } + else if (process.execPath.includes('LMS')) { serviceName = 'LMS'; } else if (process.execPath.includes('MeshCommander')) { serviceName = 'MeshCommander'; } - else { serviceName = 'not_a_service'; } + if (serviceName == null) { for (var i in process.argv) { if ((process.argv[i].toLowerCase() == '-install') || (process.argv[i].toLowerCase() == '-uninstall')) { console.log('In order to install/uninstall, a service type must be specified.'); process.exit(); } } } + if (serviceName == null) { try { run(process.argv); } catch (e) { console.log('ERROR: ' + e); } process.exit(); } } -if (serviceInstall == 0) { - run(process.argv); -} else { - var serviceHost = require('service-host'); - var meshcmdService = new serviceHost({ name: serviceName, startType: 'AUTO_START' }); +var serviceHost = require('service-host'); +var meshcmdService = new serviceHost({ name: serviceName, displayName: serviceDisplayName, startType: 'AUTO_START', description: serviceDesc }); - // Called when the background service is started. - meshcmdService.on('serviceStart', function onStart() { - console.setDestination(console.Destinations.DISABLED); // Disable console.log(). - if (process.execPath.includes('MicroLMS')) { run([process.execPath, 'microlms']); } // - else if (process.execPath.includes('MeshCommander')) { run([process.execPath, 'meshcommander']); } - else { console.log('Aborting Service Start, because unknown binary: ' + process.execPath); process.exit(1); } - }); +// Called when the background service is started. +meshcmdService.on('serviceStart', function onStart() { + //process.coreDumpLocation = 'C:\\tmp\\meshcommander.dmp'; + //process.on('exit', function () { console.log('exit3'); _debugCrash(); }); + console.setDestination(console.Destinations.DISABLED); // Disable console.log(). + //console.setDestination(console.Destinations.LOGFILE); + //attachDebuger({ webport: 0, wait: 1 }).then(console.log, console.log); - // Called when the background service is stopping - meshcmdService.on('serviceStop', function onStop() { console.log('Stopping service'); process.exit(); }); // The console.log() is for debugging, will be ignored unless "console.setDestination()" is set. + if (process.execPath.includes('MicroLMS')) { run([process.execPath, 'microlms']); } // Start MicroLMS + else if (process.execPath.includes('LMS')) { run([process.execPath, 'microlms']); } // Start MicroLMS + else if (process.execPath.includes('MeshCommander')) { run([process.execPath, 'meshcommander']); } // Start MeshCommander + else { console.log('Aborting Service Start, because unknown binary: ' + process.execPath); process.exit(1); } +}); - // Called when the executable is not running as a service, run normally. - meshcmdService.on('normalStart', function onNormalStart() { try { run(process.argv); } catch (e) { console.log('ERROR: ' + e); } }); - meshcmdService.run(); -} +// Called when the background service is stopping +meshcmdService.on('serviceStop', function onStop() { console.log('Stopping service'); process.exit(); }); // The console.log() is for debugging, will be ignored unless "console.setDestination()" is set. + +// Called when the executable is not running as a service, run normally. +meshcmdService.on('normalStart', function onNormalStart() { try { run(process.argv); } catch (e) { console.log('ERROR: ' + e); } }); +meshcmdService.run(); diff --git a/agents/meshcmd.min.js b/agents/meshcmd.min.js index 3dfb676d..a7a848d1 100644 --- a/agents/meshcmd.min.js +++ b/agents/meshcmd.min.js @@ -2564,46 +2564,53 @@ function removeItemFromArray(array, element) { } // Run MeshCmd, but before we do, we need to see if what type of service we are going to be -var serviceName = null; -var serviceOpSpecified = 0; -var serviceInstall = 0; - +var serviceName = null, serviceDisplayName = null, serviceDesc = null; for (var i in process.argv) { - if (process.argv[i].toLowerCase() == 'install') { serviceInstall = 1 } else if (process.argv[i].toLowerCase() == 'uninstall') { serviceInstall = -1 } - if ((process.argv[i].toLowerCase() == 'microlms') || (process.argv[i].toLowerCase() == 'amtlms') || (process.argv[i].toLowerCase() == 'lms')) { serviceName = 'MicroLMS'; break; } - if ((process.argv[i].toLowerCase() == 'meshcommander') || (process.argv[i].toLowerCase() == 'commander')) { serviceName = 'MeshCommander'; break; } + if (process.argv[i].toLowerCase() == 'install') { process.argv[i] = '-install'; } + if (process.argv[i].toLowerCase() == 'uninstall') { process.argv[i] = '-uninstall'; } + if ((process.argv[i].toLowerCase() == 'microlms') || (process.argv[i].toLowerCase() == 'amtlms') || (process.argv[i].toLowerCase() == 'lms')) { + serviceName = 'MicroLMS'; + serviceDisplayName = 'MicroLMS Service for Intel(R) AMT'; + serviceDesc = 'Intel AMT Micro Local Manageability Service (MicroLMS)'; + } else if ((process.argv[i].toLowerCase() == 'intellms')) { + serviceName = 'LMS'; + serviceDisplayName = 'Intel(R) Management and Security Application Local Management Service'; + serviceDesc = 'Intel(R) Management and Security Application Local Management Service - Provides OS-related Intel(R) ME functionality.'; + } else if ((process.argv[i].toLowerCase() == 'meshcommander') || (process.argv[i].toLowerCase() == 'commander')) { + serviceName = 'MeshCommander'; + serviceDisplayName = 'MeshCommander, Intel AMT Management console'; + serviceDesc = 'MeshCommander is a Intel AMT management console.'; + } } if (serviceName == null) { - for (var i in process.argv) { - if ((process.argv[i].toLowerCase() == 'install') || (process.argv[i].toLowerCase() == 'uninstall')) { - console.log('In order to install/uninstall, a service type must be specified.'); - process.exit(); - } - } if (process.execPath.includes('MicroLMS')) { serviceName = 'MicroLMS'; } + else if (process.execPath.includes('LMS')) { serviceName = 'LMS'; } else if (process.execPath.includes('MeshCommander')) { serviceName = 'MeshCommander'; } - else { serviceName = 'not_a_service'; } + if (serviceName == null) { for (var i in process.argv) { if ((process.argv[i].toLowerCase() == '-install') || (process.argv[i].toLowerCase() == '-uninstall')) { console.log('In order to install/uninstall, a service type must be specified.'); process.exit(); } } } + if (serviceName == null) { try { run(process.argv); } catch (e) { console.log('ERROR: ' + e); } process.exit(); } } -if (serviceInstall == 0) { - run(process.argv); -} else { - var serviceHost = require('service-host'); - var meshcmdService = new serviceHost({ name: serviceName, startType: 'AUTO_START' }); +var serviceHost = require('service-host'); +var meshcmdService = new serviceHost({ name: serviceName, displayName: serviceDisplayName, startType: 'AUTO_START', description: serviceDesc }); - // Called when the background service is started. - meshcmdService.on('serviceStart', function onStart() { - console.setDestination(console.Destinations.DISABLED); // Disable console.log(). - if (process.execPath.includes('MicroLMS')) { run([process.execPath, 'microlms']); } // - else if (process.execPath.includes('MeshCommander')) { run([process.execPath, 'meshcommander']); } - else { console.log('Aborting Service Start, because unknown binary: ' + process.execPath); process.exit(1); } - }); +// Called when the background service is started. +meshcmdService.on('serviceStart', function onStart() { + //process.coreDumpLocation = 'C:\\tmp\\meshcommander.dmp'; + //process.on('exit', function () { console.log('exit3'); _debugCrash(); }); + console.setDestination(console.Destinations.DISABLED); // Disable console.log(). + //console.setDestination(console.Destinations.LOGFILE); + //attachDebuger({ webport: 0, wait: 1 }).then(console.log, console.log); - // Called when the background service is stopping - meshcmdService.on('serviceStop', function onStop() { console.log('Stopping service'); process.exit(); }); // The console.log() is for debugging, will be ignored unless "console.setDestination()" is set. + if (process.execPath.includes('MicroLMS')) { run([process.execPath, 'microlms']); } // Start MicroLMS + else if (process.execPath.includes('LMS')) { run([process.execPath, 'microlms']); } // Start MicroLMS + else if (process.execPath.includes('MeshCommander')) { run([process.execPath, 'meshcommander']); } // Start MeshCommander + else { console.log('Aborting Service Start, because unknown binary: ' + process.execPath); process.exit(1); } +}); - // Called when the executable is not running as a service, run normally. - meshcmdService.on('normalStart', function onNormalStart() { try { run(process.argv); } catch (e) { console.log('ERROR: ' + e); } }); - meshcmdService.run(); -} +// Called when the background service is stopping +meshcmdService.on('serviceStop', function onStop() { console.log('Stopping service'); process.exit(); }); // The console.log() is for debugging, will be ignored unless "console.setDestination()" is set. + +// Called when the executable is not running as a service, run normally. +meshcmdService.on('normalStart', function onNormalStart() { try { run(process.argv); } catch (e) { console.log('ERROR: ' + e); } }); +meshcmdService.run(); diff --git a/agents/modules_meshcmd/service-host.js b/agents/modules_meshcmd/service-host.js deleted file mode 100644 index fabc4e81..00000000 --- a/agents/modules_meshcmd/service-host.js +++ /dev/null @@ -1,389 +0,0 @@ -/* -Copyright 2018 Intel Corporation - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - -var SERVICE_WIN32 = 0x00000010 | 0x00000020; -var SERVICE_STATE = { STOPPED: 0x00000001, SERVICE_START_PENDING: 0x00000002, SERVICE_STOP_PENDING: 0x00000003, RUNNING: 0x00000004 }; -var SERVICE_ACCEPT = { SERVICE_ACCEPT_STOP: 0x00000001, SERVICE_ACCEPT_SHUTDOWN: 0x00000004, SERVICE_ACCEPT_POWEREVENT: 0x00000040, SERVICE_ACCEPT_SESSIONCHANGE: 0x00000080 }; - -var SERVICE_CONTROL = { SERVICE_CONTROL_SHUTDOWN: 0x00000005, SERVICE_CONTROL_STOP: 0x00000001, SERVICE_CONTROL_POWEREVENT: 0x0000000D, SERVICE_CONTROL_SESSIONCHANGE: 0x0000000E}; -var SESSION_CHANGE_TYPE = -{ - WTS_CONSOLE_CONNECT: 0x1, - WTS_CONSOLE_DISCONNECT: 0x2, - WTS_REMOTE_CONNECT: 0x3, - WTS_REMOTE_DISCONNECT: 0x4, - WTS_SESSION_LOGON: 0x5, - WTS_SESSION_LOGOFF: 0x6, - WTS_SESSION_LOCK: 0x7, - WTS_SESSION_UNLOCK: 0x8, - WTS_SESSION_REMOTE_CONTROL: 0x9, - WTS_SESSION_CREATE: 0xa, - WTS_SESSION_TERMINATE: 0xb -}; - - -var NO_ERROR = 0; - -var serviceManager = require('service-manager'); - -function serviceHost(serviceName) -{ - this._ObjectID = 'service-host'; - var emitterUtils = require('events').inherits(this); - emitterUtils.createEvent('serviceStart'); - emitterUtils.createEvent('serviceStop'); - emitterUtils.createEvent('normalStart'); - emitterUtils.createEvent('session'); - emitterUtils.createEvent('powerStateChange'); - - if (process.platform == 'win32') - { - this.GM = require('_GenericMarshal'); - this.Advapi = this.GM.CreateNativeProxy('Advapi32.dll'); - this.Advapi.CreateMethod({ method: 'StartServiceCtrlDispatcherA', threadDispatch: 1 }); - this.Advapi.CreateMethod('RegisterServiceCtrlHandlerExA'); - this.Advapi.CreateMethod('SetServiceStatus'); - this.Kernel32 = this.GM.CreateNativeProxy('Kernel32.dll'); - this.Kernel32.CreateMethod('GetLastError'); - - this.Ole32 = this.GM.CreateNativeProxy('Ole32.dll'); - this.Ole32.CreateMethod('CoInitializeEx'); - this.Ole32.CreateMethod('CoUninitialize'); - - this._ServiceName = this.GM.CreateVariable(typeof (serviceName) == 'string' ? serviceName : serviceName.name); - this._ServiceMain = this.GM.GetGenericGlobalCallback(2); - this._ServiceMain.Parent = this; - this._ServiceMain.GM = this.GM; - this._ServiceMain.on('GlobalCallback', function onGlobalCallback(argc, argv) - { - //ToDo: Check to make sure this is for us - - this.Parent._ServiceStatus = this.GM.CreateVariable(28); - //typedef struct _SERVICE_STATUS { - // DWORD dwServiceType; - // DWORD dwCurrentState; - // DWORD dwControlsAccepted; - // DWORD dwWin32ExitCode; - // DWORD dwServiceSpecificExitCode; - // DWORD dwCheckPoint; - // DWORD dwWaitHint; - //} SERVICE_STATUS, *LPSERVICE_STATUS; - - // Initialise service status - this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_WIN32); - this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_STATE.SERVICE_STOPPED, 4); - this.Parent._ServiceStatusHandle = this.Parent.Advapi.RegisterServiceCtrlHandlerExA(this.Parent._ServiceName, this.Parent._ServiceControlHandler, this.Parent.GM.StashObject(this.Parent._ServiceControlHandler)); - if(this.Parent._ServiceStatusHandle.Val == 0) - { - process.exit(1); - } - - // Service is starting - this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_STATE.SERVICE_START_PENDING, 4); - this.Parent.Advapi.SetServiceStatus(this.Parent._ServiceStatusHandle, this.Parent._ServiceStatus); - - // Service running - this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_STATE.RUNNING, 4); - this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_ACCEPT.SERVICE_ACCEPT_STOP | SERVICE_ACCEPT.SERVICE_ACCEPT_POWEREVENT | SERVICE_ACCEPT.SERVICE_ACCEPT_SESSIONCHANGE, 8); - this.Parent.Advapi.SetServiceStatus(this.Parent._ServiceStatusHandle, this.Parent._ServiceStatus); - - this.Parent.Ole32.CoInitializeEx(0, 2); - this.Parent.on('~', function OnServiceHostFinalizer() - { - var GM = require('_GenericMarshal'); - var Advapi = GM.CreateNativeProxy('Advapi32.dll'); - Advapi.CreateMethod('SetServiceStatus'); - - Kernel32 = this.GM.CreateNativeProxy('Kernel32.dll'); - Kernel32.CreateMethod('GetLastError'); - - var status = GM.CreateVariable(28); - - // Service was stopped - status.toBuffer().writeUInt32LE(SERVICE_WIN32); - status.toBuffer().writeUInt32LE(0x00000001, 4); - status.toBuffer().writeUInt32LE(0, 8); - - Advapi.SetServiceStatus(this._ServiceStatusHandle, status); - - this.Ole32.CoUninitialize(); - }); - - this.Parent.emit('serviceStart'); - }); - this._ServiceControlHandler = this.GM.GetGenericGlobalCallback(4); - this._ServiceControlHandler.Parent = this; - this._ServiceControlHandler.GM = this.GM; - this._ServiceControlHandler.on('GlobalCallback', function onServiceControlHandler(code, eventType, eventData, context) - { - var j = this.Parent.GM.UnstashObject(context); - if (j != null && j == this) - { - switch (code.Val) - { - case SERVICE_CONTROL.SERVICE_CONTROL_SHUTDOWN: - case SERVICE_CONTROL.SERVICE_CONTROL_STOP: - this.Parent.emit('serviceStop'); - return; - case SERVICE_CONTROL.SERVICE_CONTROL_SESSIONCHANGE: - var sessionId = eventData.Deref(4, 4).toBuffer().readUInt32LE(); - switch(eventType.Val) - { - case SESSION_CHANGE_TYPE.WTS_SESSION_LOGON: - case SESSION_CHANGE_TYPE.WTS_SESSION_LOGOFF: - require('user-sessions').emit('changed'); - break; - } - break; - default: - break; - } - - this.Parent.Advapi.SetServiceStatus(this.Parent._ServiceStatusHandle, this.Parent._ServiceStatus); - } - }); - } - - if (serviceName) { this._ServiceOptions = typeof (serviceName) == 'object' ? serviceName : { name: serviceName }; } - else - { - throw ('Must specify either ServiceName or Options'); - } - if (!this._ServiceOptions.servicePath) - { - this._ServiceOptions.servicePath = process.execPath; - } - - this.run = function run() - { - var serviceOperation = 0; - - for(var i = 0; iStandardOutPath\n' + options.stdout + '') : ''); - var autoStart = (options.startType == 'AUTO_START' ? '' : ''); - var params = ' ProgramArguments\n'; - params += ' \n'; - params += (' /usr/local/mesh_services/' + options.name + '/' + options.name + '\n'); - if(options.parameters) - { - for(var itm in options.parameters) - { - params += (' ' + options.parameters[itm] + '\n'); - } - } - params += ' \n'; - - var plist = '\n'; - plist += '\n'; - plist += '\n'; - plist += ' \n'; - plist += ' Label\n'; - plist += (' ' + options.name + '\n'); - plist += (params + '\n'); - plist += ' WorkingDirectory\n'; - plist += (' /usr/local/mesh_services/' + options.name + '\n'); - plist += (stdoutpath + '\n'); - plist += ' RunAtLoad\n'; - plist += (autoStart + '\n'); - plist += ' \n'; - plist += ''; - - if (!require('fs').existsSync('/usr/local/mesh_services')) { require('fs').mkdirSync('/usr/local/mesh_services'); } - if (!require('fs').existsSync('/Library/LaunchDaemons/' + options.name + '.plist')) - { - if (!require('fs').existsSync('/usr/local/mesh_services/' + options.name)) { require('fs').mkdirSync('/usr/local/mesh_services/' + options.name); } - if (options.binary) - { - require('fs').writeFileSync('/usr/local/mesh_services/' + options.name + '/' + options.name, options.binary); - } - else - { - require('fs').copyFileSync(options.servicePath, '/usr/local/mesh_services/' + options.name + '/' + options.name); - } - require('fs').writeFileSync('/Library/LaunchDaemons/' + options.name + '.plist', plist); - var m = require('fs').statSync('/usr/local/mesh_services/' + options.name + '/' + options.name).mode; - m |= (require('fs').CHMOD_MODES.S_IXUSR | require('fs').CHMOD_MODES.S_IXGRP); - require('fs').chmodSync('/usr/local/mesh_services/' + options.name + '/' + options.name, m); - } - else - { - throw ('Service: ' + options.name + ' already exists'); - } - } - } - this.uninstallService = function uninstallService(name) - { - if (!this.isAdmin()) { throw ('Uninstalling a service, requires admin'); } - - if (typeof (name) == 'object') { name = name.name; } - if (process.platform == 'win32') - { - var service = this.getService(name); - if (service.status.state == undefined || service.status.state == 'STOPPED') - { - if (this.proxy.DeleteService(service._service) == 0) - { - throw ('Uninstall Service for: ' + name + ', failed with error: ' + this.proxy2.GetLastError()); - } - else - { - try - { - require('fs').unlinkSync(this.getServiceFolder() + '\\' + name + '.exe'); - } - catch(e) - { - } - } - } - else - { - throw ('Cannot uninstall service: ' + name + ', because it is: ' + service.status.state); - } - } - else if(process.platform == 'linux') - { - switch (this.getServiceType()) - { - case 'init': - this._update = require('child_process').execFile('/bin/sh', ['sh'], { type: require('child_process').SpawnTypes.TERM }); - this._update.stdout.on('data', function (chunk) { }); - this._update.stdin.write('service ' + name + ' stop\n'); - this._update.stdin.write('update-rc.d -f ' + name + ' remove\n'); - this._update.stdin.write('exit\n'); - this._update.waitExit(); - try - { - require('fs').unlinkSync('/etc/init.d/' + name); - console.log(name + ' uninstalled'); - - } - catch (e) - { - console.log(name + ' could not be uninstalled', e) - } - break; - case 'systemd': - this._update = require('child_process').execFile('/bin/sh', ['sh'], { type: require('child_process').SpawnTypes.TERM }); - this._update.stdout.on('data', function (chunk) { }); - this._update.stdin.write('systemctl stop ' + name + '.service\n'); - this._update.stdin.write('systemctl disable ' + name + '.service\n'); - this._update.stdin.write('exit\n'); - this._update.waitExit(); - try - { - require('fs').unlinkSync('/usr/local/mesh/' + name); - require('fs').unlinkSync('/lib/systemd/system/' + name + '.service'); - console.log(name + ' uninstalled'); - } - catch (e) - { - console.log(name + ' could not be uninstalled', e) - } - break; - default: // unknown platform service type - break; - } - } - else if(process.platform == 'darwin') - { - if (require('fs').existsSync('/Library/LaunchDaemons/' + name + '.plist')) - { - var child = require('child_process').execFile('/bin/sh', ['sh']); - child.stdout.on('data', function (chunk) { }); - child.stdin.write('launchctl stop ' + name + '\n'); - child.stdin.write('launchctl unload /Library/LaunchDaemons/' + name + '.plist\n'); - child.stdin.write('exit\n'); - child.waitExit(); - - try - { - require('fs').unlinkSync('/usr/local/mesh_services/' + name + '/' + name); - require('fs').unlinkSync('/Library/LaunchDaemons/' + name + '.plist'); - } - catch(e) - { - throw ('Error uninstalling service: ' + name + ' => ' + e); - } - - try - { - require('fs').rmdirSync('/usr/local/mesh_services/' + name); - } - catch(e) - {} - } - else - { - throw ('Service: ' + name + ' does not exist'); - } - } - } - if(process.platform == 'linux') - { - this.getServiceType = function getServiceType() - { - return (require('process-manager').getProcessInfo(1).Name); - }; - } -} - -module.exports = serviceManager; \ No newline at end of file diff --git a/agents/modules_meshcmd_min/service-host.min.js b/agents/modules_meshcmd_min/service-host.min.js deleted file mode 100644 index b3a0287a..00000000 --- a/agents/modules_meshcmd_min/service-host.min.js +++ /dev/null @@ -1 +0,0 @@ -var SERVICE_WIN32=16|32;var SERVICE_STATE={STOPPED:1,SERVICE_START_PENDING:2,SERVICE_STOP_PENDING:3,RUNNING:4};var SERVICE_ACCEPT={SERVICE_ACCEPT_STOP:1,SERVICE_ACCEPT_SHUTDOWN:4,SERVICE_ACCEPT_POWEREVENT:64,SERVICE_ACCEPT_SESSIONCHANGE:128};var SERVICE_CONTROL={SERVICE_CONTROL_SHUTDOWN:5,SERVICE_CONTROL_STOP:1,SERVICE_CONTROL_POWEREVENT:13,SERVICE_CONTROL_SESSIONCHANGE:14};var SESSION_CHANGE_TYPE={WTS_CONSOLE_CONNECT:1,WTS_CONSOLE_DISCONNECT:2,WTS_REMOTE_CONNECT:3,WTS_REMOTE_DISCONNECT:4,WTS_SESSION_LOGON:5,WTS_SESSION_LOGOFF:6,WTS_SESSION_LOCK:7,WTS_SESSION_UNLOCK:8,WTS_SESSION_REMOTE_CONTROL:9,WTS_SESSION_CREATE:10,WTS_SESSION_TERMINATE:11};var NO_ERROR=0;var serviceManager=require("service-manager");function serviceHost(e){this._ObjectID="service-host";var a=require("events").inherits(this);a.createEvent("serviceStart");a.createEvent("serviceStop");a.createEvent("normalStart");a.createEvent("session");a.createEvent("powerStateChange");if(process.platform=="win32"){this.GM=require("_GenericMarshal");this.Advapi=this.GM.CreateNativeProxy("Advapi32.dll");this.Advapi.CreateMethod({method:"StartServiceCtrlDispatcherA",threadDispatch:1});this.Advapi.CreateMethod("RegisterServiceCtrlHandlerExA");this.Advapi.CreateMethod("SetServiceStatus");this.Kernel32=this.GM.CreateNativeProxy("Kernel32.dll");this.Kernel32.CreateMethod("GetLastError");this.Ole32=this.GM.CreateNativeProxy("Ole32.dll");this.Ole32.CreateMethod("CoInitializeEx");this.Ole32.CreateMethod("CoUninitialize");this._ServiceName=this.GM.CreateVariable(typeof(e)=="string"?e:e.name);this._ServiceMain=this.GM.GetGenericGlobalCallback(2);this._ServiceMain.Parent=this;this._ServiceMain.GM=this.GM;this._ServiceMain.on("GlobalCallback",function b(f,g){this.Parent._ServiceStatus=this.GM.CreateVariable(28);this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_WIN32);this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_STATE.SERVICE_STOPPED,4);this.Parent._ServiceStatusHandle=this.Parent.Advapi.RegisterServiceCtrlHandlerExA(this.Parent._ServiceName,this.Parent._ServiceControlHandler,this.Parent.GM.StashObject(this.Parent._ServiceControlHandler));if(this.Parent._ServiceStatusHandle.Val==0){process.exit(1)}this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_STATE.SERVICE_START_PENDING,4);this.Parent.Advapi.SetServiceStatus(this.Parent._ServiceStatusHandle,this.Parent._ServiceStatus);this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_STATE.RUNNING,4);this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_ACCEPT.SERVICE_ACCEPT_STOP|SERVICE_ACCEPT.SERVICE_ACCEPT_POWEREVENT|SERVICE_ACCEPT.SERVICE_ACCEPT_SESSIONCHANGE,8);this.Parent.Advapi.SetServiceStatus(this.Parent._ServiceStatusHandle,this.Parent._ServiceStatus);this.Parent.Ole32.CoInitializeEx(0,2);this.Parent.on("~",function h(){var j=require("_GenericMarshal");var i=j.CreateNativeProxy("Advapi32.dll");i.CreateMethod("SetServiceStatus");Kernel32=this.GM.CreateNativeProxy("Kernel32.dll");Kernel32.CreateMethod("GetLastError");var k=j.CreateVariable(28);k.toBuffer().writeUInt32LE(SERVICE_WIN32);k.toBuffer().writeUInt32LE(1,4);k.toBuffer().writeUInt32LE(0,8);i.SetServiceStatus(this._ServiceStatusHandle,k);this.Ole32.CoUninitialize()});this.Parent.emit("serviceStart")});this._ServiceControlHandler=this.GM.GetGenericGlobalCallback(4);this._ServiceControlHandler.Parent=this;this._ServiceControlHandler.GM=this.GM;this._ServiceControlHandler.on("GlobalCallback",function c(f,i,h,g){var k=this.Parent.GM.UnstashObject(g);if(k!=null&&k==this){switch(f.Val){case SERVICE_CONTROL.SERVICE_CONTROL_SHUTDOWN:case SERVICE_CONTROL.SERVICE_CONTROL_STOP:this.Parent.emit("serviceStop");return;case SERVICE_CONTROL.SERVICE_CONTROL_SESSIONCHANGE:var l=h.Deref(4,4).toBuffer().readUInt32LE();switch(i.Val){case SESSION_CHANGE_TYPE.WTS_SESSION_LOGON:case SESSION_CHANGE_TYPE.WTS_SESSION_LOGOFF:require("user-sessions").emit("changed");break}break;default:break}this.Parent.Advapi.SetServiceStatus(this.Parent._ServiceStatusHandle,this.Parent._ServiceStatus)}})}if(e){this._ServiceOptions=typeof(e)=="object"?e:{name:e}}else{throw ("Must specify either ServiceName or Options")}if(!this._ServiceOptions.servicePath){this._ServiceOptions.servicePath=process.execPath}this.run=function d(){var r=0;for(var h=0;hStandardOutPath\n"+r.stdout+""):"");var i=(r.startType=="AUTO_START"?"":"");var s=" ProgramArguments\n";s+=" \n";s+=(" /usr/local/mesh_services/"+r.name+"/"+r.name+"\n");if(r.parameters){for(var p in r.parameters){s+=(" "+r.parameters[p]+"\n")}}s+=" \n";var t='\n';t+='\n';t+='\n';t+=" \n";t+=" Label\n";t+=(" "+r.name+"\n");t+=(s+"\n");t+=" WorkingDirectory\n";t+=(" /usr/local/mesh_services/"+r.name+"\n");t+=(y+"\n");t+=" RunAtLoad\n";t+=(i+"\n");t+=" \n";t+="";if(!require("fs").existsSync("/usr/local/mesh_services")){require("fs").mkdirSync("/usr/local/mesh_services")}if(!require("fs").existsSync("/Library/LaunchDaemons/"+r.name+".plist")){if(!require("fs").existsSync("/usr/local/mesh_services/"+r.name)){require("fs").mkdirSync("/usr/local/mesh_services/"+r.name)}if(r.binary){require("fs").writeFileSync("/usr/local/mesh_services/"+r.name+"/"+r.name,r.binary)}else{require("fs").copyFileSync(r.servicePath,"/usr/local/mesh_services/"+r.name+"/"+r.name)}require("fs").writeFileSync("/Library/LaunchDaemons/"+r.name+".plist",t);var q=require("fs").statSync("/usr/local/mesh_services/"+r.name+"/"+r.name).mode;q|=(require("fs").CHMOD_MODES.S_IXUSR|require("fs").CHMOD_MODES.S_IXGRP);require("fs").chmodSync("/usr/local/mesh_services/"+r.name+"/"+r.name,q)}else{throw ("Service: "+r.name+" already exists")}}};this.uninstallService=function f(i){if(!this.isAdmin()){throw ("Uninstalling a service, requires admin")}if(typeof(i)=="object"){i=i.name}if(process.platform=="win32"){var j=this.getService(i);if(j.status.state==undefined||j.status.state=="STOPPED"){if(this.proxy.DeleteService(j._service)==0){throw ("Uninstall Service for: "+i+", failed with error: "+this.proxy2.GetLastError())}else{try{require("fs").unlinkSync(this.getServiceFolder()+"\\"+i+".exe")}catch(h){}}}else{throw ("Cannot uninstall service: "+i+", because it is: "+j.status.state)}}else{if(process.platform=="linux"){switch(this.getServiceType()){case"init":this._update=require("child_process").execFile("/bin/sh",["sh"],{type:require("child_process").SpawnTypes.TERM});this._update.stdout.on("data",function(k){});this._update.stdin.write("service "+i+" stop\n");this._update.stdin.write("update-rc.d -f "+i+" remove\n");this._update.stdin.write("exit\n");this._update.waitExit();try{require("fs").unlinkSync("/etc/init.d/"+i);console.log(i+" uninstalled")}catch(h){console.log(i+" could not be uninstalled",h)}break;case"systemd":this._update=require("child_process").execFile("/bin/sh",["sh"],{type:require("child_process").SpawnTypes.TERM});this._update.stdout.on("data",function(k){});this._update.stdin.write("systemctl stop "+i+".service\n");this._update.stdin.write("systemctl disable "+i+".service\n");this._update.stdin.write("exit\n");this._update.waitExit();try{require("fs").unlinkSync("/usr/local/mesh/"+i);require("fs").unlinkSync("/lib/systemd/system/"+i+".service");console.log(i+" uninstalled")}catch(h){console.log(i+" could not be uninstalled",h)}break;default:break}}else{if(process.platform=="darwin"){if(require("fs").existsSync("/Library/LaunchDaemons/"+i+".plist")){var g=require("child_process").execFile("/bin/sh",["sh"]);g.stdout.on("data",function(k){});g.stdin.write("launchctl stop "+i+"\n");g.stdin.write("launchctl unload /Library/LaunchDaemons/"+i+".plist\n");g.stdin.write("exit\n");g.waitExit();try{require("fs").unlinkSync("/usr/local/mesh_services/"+i+"/"+i);require("fs").unlinkSync("/Library/LaunchDaemons/"+i+".plist")}catch(h){throw ("Error uninstalling service: "+i+" => "+h)}try{require("fs").rmdirSync("/usr/local/mesh_services/"+i)}catch(h){}}else{throw ("Service: "+i+" does not exist")}}}}};if(process.platform=="linux"){this.getServiceType=function c(){return(require("process-manager").getProcessInfo(1).Name)}}}module.exports=serviceManager; \ No newline at end of file diff --git a/package.json b/package.json index ec75e3d0..9a90e6ca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "meshcentral", - "version": "0.4.3-a", + "version": "0.4.3-c", "keywords": [ "Remote Management", "Intel AMT", diff --git a/public/minify.bat b/public/minify.bat new file mode 100644 index 00000000..567c4800 --- /dev/null +++ b/public/minify.bat @@ -0,0 +1,3 @@ +@ECHO OFF +CD ..\translate +C:\Users\Default.DESKTOP-M9I88C9\AppData\Roaming\nvm\v12.13.0\node translate.js minifyall \ No newline at end of file diff --git a/public/player-min.htm b/public/player-min.htm index 942a7b6e..0f7af242 100644 --- a/public/player-min.htm +++ b/public/player-min.htm @@ -1 +1 @@ -
00:00:00
 
\ No newline at end of file +
00:00:00
 
\ No newline at end of file diff --git a/public/translations/player-min_fr.htm b/public/translations/player-min_fr.htm index 92c93734..08a0cf73 100644 --- a/public/translations/player-min_fr.htm +++ b/public/translations/player-min_fr.htm @@ -1 +1 @@ -
00:00:00
 
\ No newline at end of file +
00:00:00
 
\ No newline at end of file diff --git a/translate/translate.js b/translate/translate.js index 69bc5252..c5e51769 100644 --- a/translate/translate.js +++ b/translate/translate.js @@ -141,7 +141,7 @@ function start() { if (minifyLib = 2) { var minifiedOut = minify(fs.readFileSync(outname).toString(), { collapseBooleanAttributes: true, - collapseInlineTagWhitespace: true, + collapseInlineTagWhitespace: false, // This is not good. collapseWhitespace: true, minifyCSS: true, minifyJS: true, @@ -333,7 +333,7 @@ function translateFromHtml(lang, file, createSubDir) { if (minifyLib = 2) { var minifiedOut = minify(out, { collapseBooleanAttributes: true, - collapseInlineTagWhitespace: true, + collapseInlineTagWhitespace: false, // This is not good. collapseWhitespace: true, minifyCSS: true, minifyJS: true, diff --git a/views/agentinvite-min.handlebars b/views/agentinvite-min.handlebars index 621bfcd4..feb7ddeb 100644 --- a/views/agentinvite-min.handlebars +++ b/views/agentinvite-min.handlebars @@ -1 +1 @@ -MeshCentral - Agent Installation
{{{title}}}
{{{title2}}}

{{{logoutControl}}}

Remote Agent Installation

You have been invited to install a software that will allow a remote operator to fully access your computer remotely including the desktop and files. Only follow the instructions below if this invitation was expected and you know who will be accessing your computer. Selecting your operation system and follow the instructions below.

Microsoft™ Windows 64bit

Download the software here, run it and press "Install" or "Connect".

Microsoft™ Windows 32bit

Download the software here, run it and press "Install" or "Connect".

Linux

To install, cut and paste the following command in a root terminal.

To uninstall, cut and paste the following command as root.



Apple™ MacOS

Download the installer here, right click on it or press "control" and click on the file. Then select "Open" and follow the instructions.

\ No newline at end of file +MeshCentral - Agent Installation
{{{title}}}
{{{title2}}}

{{{logoutControl}}}

Remote Agent Installation

You have been invited to install a software that will allow a remote operator to fully access your computer remotely including the desktop and files. Only follow the instructions below if this invitation was expected and you know who will be accessing your computer. Selecting your operation system and follow the instructions below.

Microsoft™ Windows 64bit

Download the software here, run it and press "Install" or "Connect".

Microsoft™ Windows 32bit

Download the software here, run it and press "Install" or "Connect".

Linux

To install, cut and paste the following command in a root terminal.

To uninstall, cut and paste the following command as root.



Apple™ MacOS

Download the installer here, right click on it or press "control" and click on the file. Then select "Open" and follow the instructions.

\ No newline at end of file diff --git a/views/default-min.handlebars b/views/default-min.handlebars index 59173b48..8e683d73 100644 --- a/views/default-min.handlebars +++ b/views/default-min.handlebars @@ -1,4 +1,4 @@ -{{{title}}}
{{{title}}}
{{{title2}}}

{{{logoutControl}}}

 

{{{title}}}
{{{title}}}
{{{title2}}}

{{{logoutControl}}}

 

{{{title}}}
{{{title}}}
{{{title2}}}
\ No newline at end of file +{{{title}}}
{{{title}}}
{{{title2}}}
\ No newline at end of file diff --git a/views/login-min.handlebars b/views/login-min.handlebars index 08876e88..e10557a7 100644 --- a/views/login-min.handlebars +++ b/views/login-min.handlebars @@ -1 +1 @@ -{{{title}}} - Login
{{{title}}}
{{{title2}}}

Welcome


\ No newline at end of file +{{{title}}} - Login
{{{title}}}
{{{title2}}}

Welcome


\ No newline at end of file diff --git a/views/login-mobile-min.handlebars b/views/login-mobile-min.handlebars index ddbe028e..352aaa7b 100644 --- a/views/login-mobile-min.handlebars +++ b/views/login-mobile-min.handlebars @@ -1 +1 @@ -MeshCentral - Login
{{{title}}}
{{{title2}}}
\ No newline at end of file +MeshCentral - Login
{{{title}}}
{{{title2}}}
\ No newline at end of file diff --git a/views/login-mobile.handlebars b/views/login-mobile.handlebars index 2ce21002..40352073 100644 --- a/views/login-mobile.handlebars +++ b/views/login-mobile.handlebars @@ -267,6 +267,8 @@ MeshCentral - Agent Installation
{{{title}}}
{{{title2}}}

{{{logoutControl}}}

Remote Agent Installation

You have been invited to install a software that will allow a remote operator to fully access your computer remotely including the desktop and files. Only follow the instructions below if this invitation was expected and you know who will be accessing your computer. Selecting your operation system and follow the instructions below.

Microsoft™ Windows 64bit

Download the software here, run it and press "Install" or "Connect".

Microsoft™ Windows 32bit

Download the software here, run it and press "Install" or "Connect".

Linux

To install, cut and paste the following command in a root terminal.

To uninstall, cut and paste the following command as root.



Apple™ MacOS

Download the installer here, right click on it or press "control" and click on the file. Then select "Open" and follow the instructions.

\ No newline at end of file +MeshCentral - Agent Installation
{{{title}}}
{{{title2}}}

{{{logoutControl}}}

Remote Agent Installation

You have been invited to install a software that will allow a remote operator to fully access your computer remotely including the desktop and files. Only follow the instructions below if this invitation was expected and you know who will be accessing your computer. Selecting your operation system and follow the instructions below.

Microsoft™ Windows 64bit

Download the software here, run it and press "Install" or "Connect".

Microsoft™ Windows 32bit

Download the software here, run it and press "Install" or "Connect".

Linux

To install, cut and paste the following command in a root terminal.

To uninstall, cut and paste the following command as root.



Apple™ MacOS

Download the installer here, right click on it or press "control" and click on the file. Then select "Open" and follow the instructions.

\ No newline at end of file diff --git a/views/translations/default-min_fr.handlebars b/views/translations/default-min_fr.handlebars index d828a15e..0c1c28c3 100644 --- a/views/translations/default-min_fr.handlebars +++ b/views/translations/default-min_fr.handlebars @@ -1,4 +1,4 @@ -{{{title}}}
{{{title}}}
{{{title2}}}

{{{logoutControl}}}

 

{{{title}}}
{{{title}}}
{{{title2}}}

{{{logoutControl}}}

 

{{{title}}}
{{{title}}}
{{{title2}}}
\ No newline at end of file +{{{title}}}
{{{title}}}
{{{title2}}}
\ No newline at end of file diff --git a/views/translations/login-min_fr.handlebars b/views/translations/login-min_fr.handlebars index 54ec8fe4..2bd7a83f 100644 --- a/views/translations/login-min_fr.handlebars +++ b/views/translations/login-min_fr.handlebars @@ -1 +1 @@ -{{{title}}} - Login
{{{title}}}
{{{title2}}}

Bienvenue


\ No newline at end of file +{{{title}}} - Login
{{{title}}}
{{{title2}}}

Bienvenue


\ No newline at end of file diff --git a/views/translations/login-mobile-min_fr.handlebars b/views/translations/login-mobile-min_fr.handlebars index 68a5c00d..89528bde 100644 --- a/views/translations/login-mobile-min_fr.handlebars +++ b/views/translations/login-mobile-min_fr.handlebars @@ -1 +1 @@ -MeshCentral - Login
{{{title}}}
{{{title2}}}
\ No newline at end of file +MeshCentral - Login
{{{title}}}
{{{title2}}}
\ No newline at end of file diff --git a/views/translations/login-mobile_fr.handlebars b/views/translations/login-mobile_fr.handlebars index e6d78ba7..f81ce8b9 100644 --- a/views/translations/login-mobile_fr.handlebars +++ b/views/translations/login-mobile_fr.handlebars @@ -265,6 +265,8 @@