diff --git a/meshcentral.js b/meshcentral.js
index 10703c33..b74f454b 100644
--- a/meshcentral.js
+++ b/meshcentral.js
@@ -60,7 +60,6 @@ function CreateMeshCentralServer(config, args) {
obj.multiServer = null;
obj.maintenanceTimer = null;
obj.serverId = null;
- obj.currentVer = null;
obj.serverKey = Buffer.from(obj.crypto.randomBytes(48), 'binary');
obj.loginCookieEncryptionKey = null;
obj.invitationLinkEncryptionKey = null;
@@ -71,7 +70,11 @@ function CreateMeshCentralServer(config, args) {
obj.serverWarnings = []; // List of warnings that should be shown to administrators
obj.cookieUseOnceTable = {}; // List of cookies that are already expired
obj.cookieUseOnceTableCleanCounter = 0; // Clean the cookieUseOnceTable each 20 additions
- try { obj.currentVer = JSON.parse(obj.fs.readFileSync(obj.path.join(__dirname, 'package.json'), 'utf8')).version; } catch (e) { } // Fetch server version
+
+ // Server version
+ obj.currentVer = null;
+ function getCurrentVerion() { try { obj.currentVer = JSON.parse(obj.fs.readFileSync(obj.path.join(__dirname, 'package.json'), 'utf8')).version; } catch (e) { } return obj.currentVer; } // Fetch server version
+ getCurrentVerion();
// Setup the default configuration and files paths
if ((__dirname.endsWith('/node_modules/meshcentral')) || (__dirname.endsWith('\\node_modules\\meshcentral')) || (__dirname.endsWith('/node_modules/meshcentral/')) || (__dirname.endsWith('\\node_modules\\meshcentral\\'))) {
@@ -126,7 +129,7 @@ function CreateMeshCentralServer(config, args) {
for (i in obj.config.settings) { obj.args[i] = obj.config.settings[i]; } // Place all settings into arguments, arguments have already been placed into settings so arguments take precedence.
if ((obj.args.help == true) || (obj.args['?'] == true)) {
- console.log('MeshCentral v' + obj.currentVer + ', a open source remote computer management web portal.');
+ console.log('MeshCentral v' + getCurrentVerion() + ', a open source remote computer management web portal.');
console.log('Details at: https://www.meshcommander.com/meshcentral2\r\n');
if (obj.platform == 'win32') {
console.log('Run as a Windows Service');
@@ -263,7 +266,7 @@ function CreateMeshCentralServer(config, args) {
try {
var errlogpath = null;
if (typeof obj.args.mesherrorlogpath == 'string') { errlogpath = obj.path.join(obj.args.mesherrorlogpath, 'mesherrors.txt'); } else { errlogpath = obj.getConfigFilePath('mesherrors.txt'); }
- obj.fs.appendFileSync(obj.getConfigFilePath('mesherrors.txt'), '-------- ' + new Date().toLocaleString() + ' ---- ' + obj.currentVer + ' --------\r\n\r\n' + data + '\r\n\r\n\r\n');
+ obj.fs.appendFileSync(obj.getConfigFilePath('mesherrors.txt'), '-------- ' + new Date().toLocaleString() + ' ---- ' + getCurrentVerion() + ' --------\r\n\r\n' + data + '\r\n\r\n\r\n');
} catch (ex) { console.log('ERROR: Unable to write to mesherrors.txt.'); }
});
childProcess.on('close', function (code) { if ((code != 0) && (code != 123)) { /* console.log("Exited with code " + code); */ } });
@@ -273,7 +276,7 @@ function CreateMeshCentralServer(config, args) {
obj.getLatestServerVersion = function (callback) {
if (callback == null) return;
try {
- if (typeof obj.args.selfupdate == 'string') { callback(obj.currentVer, obj.args.selfupdate); return; } // If we are targetting a specific version, return that one as current.
+ if (typeof obj.args.selfupdate == 'string') { callback(getCurrentVerion(), obj.args.selfupdate); return; } // If we are targetting a specific version, return that one as current.
var child_process = require('child_process');
var npmpath = ((typeof obj.args.npmpath == 'string') ? obj.args.npmpath : 'npm');
var npmproxy = ((typeof obj.args.npmproxy == 'string') ? (' --proxy ' + obj.args.npmproxy) : '');
@@ -284,9 +287,9 @@ function CreateMeshCentralServer(config, args) {
xxprocess.on('close', function (code) {
var latestVer = null;
if (code == 0) { try { latestVer = xxprocess.data.split(' ').join('').split('\r').join('').split('\n').join(''); } catch (e) { } }
- callback(obj.currentVer, latestVer);
+ callback(getCurrentVerion(), latestVer);
});
- } catch (ex) { callback(obj.currentVer, null, ex); } // If the system is running out of memory, an exception here can easily happen.
+ } catch (ex) { callback(getCurrentVerion(), null, ex); } // If the system is running out of memory, an exception here can easily happen.
};
// Initiate server self-update
@@ -702,7 +705,7 @@ function CreateMeshCentralServer(config, args) {
// If we are targetting a specific version, update now.
if ((obj.serverSelfWriteAllowed == true) && (typeof obj.args.selfupdate == 'string')) {
obj.args.selfupdate = obj.args.selfupdate.toLowerCase();
- if (obj.currentVer !== obj.args.selfupdate) { obj.performServerUpdate(); return; } // We are targetting a specific version, run self update now.
+ if (getCurrentVerion() !== obj.args.selfupdate) { obj.performServerUpdate(); return; } // We are targetting a specific version, run self update now.
}
// Write the server state
@@ -966,7 +969,7 @@ function CreateMeshCentralServer(config, args) {
// Write server version and run mode
var productionMode = (process.env.NODE_ENV && (process.env.NODE_ENV == 'production'));
var runmode = (obj.args.lanonly ? 2 : (obj.args.wanonly ? 1 : 0));
- console.log("MeshCentral v" + obj.currentVer + ', ' + (["Hybrid (LAN + WAN) mode", "WAN mode", "LAN mode"][runmode]) + (productionMode ? ", Production mode." : '.'));
+ console.log("MeshCentral v" + getCurrentVerion() + ', ' + (["Hybrid (LAN + WAN) mode", "WAN mode", "LAN mode"][runmode]) + (productionMode ? ", Production mode." : '.'));
// Check that no sub-domains have the same DNS as the parent
for (i in obj.config.domains) {
@@ -1167,7 +1170,7 @@ function CreateMeshCentralServer(config, args) {
// Perform maintenance operations (called every hour)
obj.maintenanceActions = function () {
// Check for self-update that targets a specific version
- if ((typeof obj.args.selfupdate == 'string') && (obj.currentVer === obj.args.selfupdate)) { obj.args.selfupdate = false; }
+ if ((typeof obj.args.selfupdate == 'string') && (getCurrentVerion() === obj.args.selfupdate)) { obj.args.selfupdate = false; }
// Check if we need to perform server self-update
if ((obj.args.selfupdate) && (obj.serverSelfWriteAllowed == true)) {
@@ -1620,7 +1623,7 @@ function CreateMeshCentralServer(config, args) {
else if ((obj.args.minifycore !== false) && (obj.fs.existsSync(obj.path.join(__dirname, 'agents', 'meshcmd.min.js')))) { meshcmdPath = obj.path.join(__dirname, 'agents', 'meshcmd.min.js'); meshCmd = obj.fs.readFileSync(meshcmdPath).toString(); }
else if (obj.fs.existsSync(obj.path.join(__dirname, 'agents', 'meshcmd.js'))) { meshcmdPath = obj.path.join(__dirname, 'agents', 'meshcmd.js'); meshCmd = obj.fs.readFileSync(meshcmdPath).toString(); }
else { obj.defaultMeshCmd = null; if (func != null) { func(false); } } // meshcmd.js not found
- meshCmd = meshCmd.replace("'***Mesh*Cmd*Version***'", '\'' + obj.currentVer + '\'');
+ meshCmd = meshCmd.replace("'***Mesh*Cmd*Version***'", '\'' + getCurrentVerion() + '\'');
// Figure out where the modules_meshcmd folder is.
if (obj.args.minifycore !== false) { try { moduleDirPath = obj.path.join(meshcmdPath, 'modules_meshcmd_min'); modulesDir = obj.fs.readdirSync(moduleDirPath); } catch (e) { } } // Favor minified modules if present.
diff --git a/meshuser.js b/meshuser.js
index b50120de..842c55cc 100644
--- a/meshuser.js
+++ b/meshuser.js
@@ -756,9 +756,13 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
break;
}
case 'mpsstats': {
- var stats = parent.parent.mpsserver.getStats();
- for (var i in stats) {
- if (typeof stats[i] == 'object') { r += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { r += (i + ': ' + stats[i] + '\r\n'); }
+ if (parent.parent.mpsserver == null) {
+ r = 'MPS not enabled.';
+ } else {
+ var stats = parent.parent.mpsserver.getStats();
+ for (var i in stats) {
+ if (typeof stats[i] == 'object') { r += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { r += (i + ': ' + stats[i] + '\r\n'); }
+ }
}
break;
}
diff --git a/public/styles/style.css b/public/styles/style.css
index 1c1eb49b..1ad4ee95 100644
--- a/public/styles/style.css
+++ b/public/styles/style.css
@@ -221,6 +221,14 @@ body {
right: 6px;
}
+#logoutControlSpan2 {
+ cursor: pointer;
+ color: white;
+ position: absolute;
+ top: 5px;
+ right: 24px;
+}
+
#uiMenu {
position: absolute;
top: 17px;
diff --git a/views/default-min.handlebars b/views/default-min.handlebars
index 87cf1eff..71b13888 100644
--- a/views/default-min.handlebars
+++ b/views/default-min.handlebars
@@ -1,4 +1,4 @@
-{{{StartGeoLocation}}}{{{EndGeoLocation}}}
{{{title}}}My Devices | My Account | My Events | My Files | My Users | My Server | |
General | Desktop | Terminal | Files | Events | Details | Intel® AMT | Console | Plugins | |
Server disconnected,click to reconnect.
My Devices
| No device groups. |
My Account
Device Groups ( New )My Events
| Show | |
My Files
These files are shared publicly, click "link" to get public url.
✓
✗
My Server
Server StatisticsIntel® AMT Redirection port or KVM feature is disabled, click here to enable it.
Remote computer is not powered on, click here to issue a power command.
Intel® AMT Redirection port or KVM feature is disabled, click here to enable it.
Remote computer is not powered on, click here to issue a power command.
| Show | |
General -
Events -
| Show | |
My Server Plugins
| | Name | Description | Link | Version | Latest | Status | Action | |
---|
No plugins on server.
{{{StartGeoLocation}}}{{{EndGeoLocation}}}{{{title}}}My Devices | My Account | My Events | My Files | My Users | My Server | |
General | Desktop | Terminal | Files | Events | Details | Intel® AMT | Console | Plugins | |
Server disconnected,click to reconnect.
| No device groups. |
My Account
Device Groups ( New )My Events
| Show | |
My Files
These files are shared publicly, click "link" to get public url.
✓
✗
My Server
Server StatisticsIntel® AMT Redirection port or KVM feature is disabled, click here to enable it.
Remote computer is not powered on, click here to issue a power command.
Intel® AMT Redirection port or KVM feature is disabled, click here to enable it.
Remote computer is not powered on, click here to issue a power command.
| Show | |
General -
| Show | |
My Server Plugins
| | Name | Description | Link | Version | Latest | Status | Action | |
---|
No plugins on server.
{{{StartGeoLocation}}}{{{EndGeoLocation}}}{{{title}}}Moje zařízení | Můj účet | Moje události | Moje soubory | Uživatelé | Můj server | |
Obecné | Plocha | Terminál | Soubory | Události | Detaily | Intel® AMT | Konzole | Pluginy | |
Server odpojen,klikni pro opětovné připojení.
Moje zařízení
| Žádná skupina zařízení. |
Moje události
| Zobrazit | |
Moje soubory
Tyto soubory jsou veřejné, klikni "link" pro získání veřejného url.
✓
✗
Můj server
Statistiky serveruIntel® AMT přesměrování portu nebo KVM vlastnost je vypnuta, zde kliknout pro aktivaci.
Vzdálený počítač není zapnutý, klikněte zde pro zapnutí.
Intel® AMT přesměrování portu nebo KVM vlastnost je vypnuta, zde kliknout pro aktivaci.
Vzdálený počítač není zapnutý, klikněte zde pro zapnutí.
| Zobrazit | |
Obecné -
Události -
| Zobrazit | |
Moje serverové pluginy
| | Jméno | Popis | Odkaz | Verze | Poslední | Status | Akce | |
---|
Žádný plugin na serveru.
{{{StartGeoLocation}}}{{{EndGeoLocation}}}{{{title}}}Moje zařízení | Můj účet | Moje události | Moje soubory | Uživatelé | Můj server | |
Obecné | Plocha | Terminál | Soubory | Události | Detaily | Intel® AMT | Konzole | Pluginy | |
Server odpojen,klikni pro opětovné připojení.
| Žádná skupina zařízení. |
Moje události
| Zobrazit | |
Moje soubory
Tyto soubory jsou veřejné, klikni "link" pro získání veřejného url.
✓
✗
Můj server
Statistiky serveruIntel® AMT přesměrování portu nebo KVM vlastnost je vypnuta, zde kliknout pro aktivaci.
Vzdálený počítač není zapnutý, klikněte zde pro zapnutí.
Intel® AMT přesměrování portu nebo KVM vlastnost je vypnuta, zde kliknout pro aktivaci.
Vzdálený počítač není zapnutý, klikněte zde pro zapnutí.
| Zobrazit | |
Obecné -
| Zobrazit | |
Moje serverové pluginy
| | Jméno | Popis | Odkaz | Verze | Poslední | Status | Akce | |
---|
Žádný plugin na serveru.
{{{StartGeoLocation}}}{{{EndGeoLocation}}}{{{title}}}Mes Appareils | Mon Compte | Mes Événements | Mes Dossiers | Mes Utilisateurs | Mon Serveur | |
Général | Desktop | Terminal | Dossiers | Événements | Details | Intel® AMT | Console | Plugins | |
Server disconnected,click to reconnect.
Mes Appareils
| Aucun groupe d'appareils. |
Mon Compte
Device Groups ( Nouveau )Mes Événements
| Afficher | |
Mes Dossiers
Ces fichiers sont partagés publiquement, cliquez sur "lien" pour obtenir une URL publique.
✓
✗
Mon Serveur
Statistiques du serveurAvertissements du serveur Intel® AMT Redirection port or KVM feature is disabled, click here to enable it.
L'ordinateur distant n'est pas sous tension, cliquez ici pour émettre une commande d'alimentation.
Intel® AMT Redirection port or KVM feature is disabled, click here to enable it.
L'ordinateur distant n'est pas sous tension, cliquez ici pour émettre une commande d'alimentation.
| Afficher | |
Général -
Événements -
| Afficher | |
Statistiques de mon serveur
Mes plugins serveur
| | Nom | Description | Lien | Version | Dernier | Statut | Action | |
---|
No plugins on server.
{{{StartGeoLocation}}}{{{EndGeoLocation}}}{{{title}}}Mes Appareils | Mon Compte | Mes Événements | Mes Dossiers | Mes Utilisateurs | Mon Serveur | |
Général | Desktop | Terminal | Dossiers | Événements | Details | Intel® AMT | Console | Plugins | |
Server disconnected,click to reconnect.
| Aucun groupe d'appareils. |
Mon Compte
Device Groups ( Nouveau )Mes Événements
| Afficher | |
Mes Dossiers
Ces fichiers sont partagés publiquement, cliquez sur "lien" pour obtenir une URL publique.
✓
✗
Mon Serveur
Statistiques du serveurAvertissements du serveur Intel® AMT Redirection port or KVM feature is disabled, click here to enable it.
L'ordinateur distant n'est pas sous tension, cliquez ici pour émettre une commande d'alimentation.
Intel® AMT Redirection port or KVM feature is disabled, click here to enable it.
L'ordinateur distant n'est pas sous tension, cliquez ici pour émettre une commande d'alimentation.
| Afficher | |
Général -
| Afficher | |
Statistiques de mon serveur
Mes plugins serveur
| | Nom | Description | Lien | Version | Dernier | Statut | Action | |
---|
No plugins on server.
{{{StartGeoLocation}}}{{{EndGeoLocation}}}{{{title}}}私のデバイス | マイアカウント | 私のイベント | 私のファイル | 私のユーザー | 私のサーバー | |
全般 | デスクトップ | ターミナル | ファイル | イベント | 詳細 | Intel® AMT | コンソール | プラグイン | |
私のデバイス
| デバイスグループはありません。 |
マイアカウント
デバイスグループ ( 新しい )私のイベント
| ショー | |
私のファイル
これらのファイルは一般公開されています。「リンク」をクリックして公開URLを取得してください。
✓
✗
私のサーバー
サーバー統計Intel® AMTリダイレクトポートまたはKVM機能が無効になっています、ここをクリックして有効にします。
リモートコンピューターの電源が入っていません。ここをクリックして電源コマンドを発行してください。
Intel® AMTリダイレクトポートまたはKVM機能が無効になっています、ここをクリックして有効にします。
リモートコンピューターの電源が入っていません。ここをクリックして電源コマンドを発行してください。
| ショー | |
全般-
イベント-
| ショー | |
私のサーバープラグイン
サーバーにプラグインはありません。
{{{StartGeoLocation}}}{{{EndGeoLocation}}}{{{title}}}私のデバイス | マイアカウント | 私のイベント | 私のファイル | 私のユーザー | 私のサーバー | |
全般 | デスクトップ | ターミナル | ファイル | イベント | 詳細 | Intel® AMT | コンソール | プラグイン | |
| デバイスグループはありません。 |
マイアカウント
デバイスグループ ( 新しい )私のイベント
| ショー | |
私のファイル
これらのファイルは一般公開されています。「リンク」をクリックして公開URLを取得してください。
✓
✗
私のサーバー
サーバー統計Intel® AMTリダイレクトポートまたはKVM機能が無効になっています、ここをクリックして有効にします。
リモートコンピューターの電源が入っていません。ここをクリックして電源コマンドを発行してください。
Intel® AMTリダイレクトポートまたはKVM機能が無効になっています、ここをクリックして有効にします。
リモートコンピューターの電源が入っていません。ここをクリックして電源コマンドを発行してください。
| ショー | |
全般-
| ショー | |
私のサーバープラグイン
サーバーにプラグインはありません。
{{{StartGeoLocation}}}{{{EndGeoLocation}}}{{{title}}}Mijn apparaten | Mijn Account | Mijn gebeurtenissen | Mijn bestanden | Mijn gebruikers | Mijn server | |
Algemeen | Bureaublad | Terminal | Bestanden | Gebeurtenissen | Details | Intel® AMT | Console | Plugins | |
Server verbroken,klik om opnieuw verbinding te maken.
Mijn apparaten
| Geen apparaatgroepen. |
Mijn Account
Gebruikersaccount beveiliging
Apparaatgroepen ( Nieuw )Mijn gebeurtenissen
| Tonen | |
Mijn bestanden
Deze bestanden worden openbaar gedeeld, klik op "link" om de openbare URL te krijgen.
✓
✗
Mijn server
ServerstatistiekenIntel® AMT omleidingspoort of KVM-functie is uitgeschakeld, klik hier om in te schakelen
Externe computer is niet ingeschakeld, klik hier om een stroomopdracht uit te voeren.
Intel® AMT omleidingspoort of KVM-functie is uitgeschakeld, klik hier om in te schakelen
Externe computer is niet ingeschakeld, klik hier om een stroomopdracht uit te voeren.
| Tonen | |
Algemeen -
Gebeurtenissen -
| Tonen | |
Mijn serverplug-ins
| | Naam | Omschrijving | Link | Versie | Laatste | Status | Actie | |
---|
Geen plug-ins op server.
{{{StartGeoLocation}}}{{{EndGeoLocation}}}{{{title}}}Mijn apparaten | Mijn Account | Mijn gebeurtenissen | Mijn bestanden | Mijn gebruikers | Mijn server | |
Algemeen | Bureaublad | Terminal | Bestanden | Gebeurtenissen | Details | Intel® AMT | Console | Plugins | |
Server verbroken,klik om opnieuw verbinding te maken.
| Geen apparaatgroepen. |
Mijn Account
Gebruikersaccount beveiliging
Apparaatgroepen ( Nieuw )Mijn gebeurtenissen
| Tonen | |
Mijn bestanden
Deze bestanden worden openbaar gedeeld, klik op "link" om de openbare URL te krijgen.
✓
✗
Mijn server
ServerstatistiekenIntel® AMT omleidingspoort of KVM-functie is uitgeschakeld, klik hier om in te schakelen
Externe computer is niet ingeschakeld, klik hier om een stroomopdracht uit te voeren.
Intel® AMT omleidingspoort of KVM-functie is uitgeschakeld, klik hier om in te schakelen
Externe computer is niet ingeschakeld, klik hier om een stroomopdracht uit te voeren.
| Tonen | |
Algemeen -
| Tonen | |
Mijn serverplug-ins
| | Naam | Omschrijving | Link | Versie | Laatste | Status | Actie | |
---|
Geen plug-ins op server.
{{{StartGeoLocation}}}{{{EndGeoLocation}}}{{{title}}}Meus dispositivos | Minha conta | Meus Eventos | Meus arquivos | Meus usuários | Meu servidor | |
Geral | Área de Trabalho | Terminal | Arquivos | Eventos | Detalhes | Intel® AMT | Console | Plugins | |
Servidor desconectado,clique para reconectar.
Meus dispositivos
| Nenhum grupo de dispositivos. |
X
Resultados da Localização
Minha conta
Grupos de dispositivos ( Novo )Meus Eventos
| Mostrar | |
Meus arquivos
Esses arquivos são compartilhados publicamente, clique em "link" para obter o URL público.
✓
✗
Meu servidor
Estatísticas do servidorIntel® Porta de redirecionamento AMT ou recurso KVM desativado, clique aqui para habilitá-lo.
O computador remoto não está ligado, clique aqui para emitir um comando de energia.
Intel® Porta de redirecionamento AMT ou recurso KVM desativado, clique aqui para habilitá-lo.
O computador remoto não está ligado, clique aqui para emitir um comando de energia.
| Mostrar | |
Geral -
Eventos -
| Mostrar | |
Estatísticas do meu servidor
My Server Plugins
| | Nome | Descrição | Ligação | Versão | Latest | Status | Ação | |
---|
No plugins on server.
{{{StartGeoLocation}}}{{{EndGeoLocation}}}{{{title}}}Meus dispositivos | Minha conta | Meus Eventos | Meus arquivos | Meus usuários | Meu servidor | |
Geral | Área de Trabalho | Terminal | Arquivos | Eventos | Detalhes | Intel® AMT | Console | Plugins | |
Servidor desconectado,clique para reconectar.
| Nenhum grupo de dispositivos. |
X
Resultados da Localização
Minha conta
Grupos de dispositivos ( Novo )Meus Eventos
| Mostrar | |
Meus arquivos
Esses arquivos são compartilhados publicamente, clique em "link" para obter o URL público.
✓
✗
Meu servidor
Estatísticas do servidorIntel® Porta de redirecionamento AMT ou recurso KVM desativado, clique aqui para habilitá-lo.
O computador remoto não está ligado, clique aqui para emitir um comando de energia.
Intel® Porta de redirecionamento AMT ou recurso KVM desativado, clique aqui para habilitá-lo.
O computador remoto não está ligado, clique aqui para emitir um comando de energia.
| Mostrar | |
Geral -
| Mostrar | |
Estatísticas do meu servidor
My Server Plugins
| | Nome | Descrição | Ligação | Versão | Latest | Status | Ação | |
---|
No plugins on server.