diff --git a/.gitignore b/.gitignore
index c202c2e8..efb6bef4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -308,3 +308,4 @@ __pycache__/
*.btm.cs
*.odx.cs
*.xsd.cs
+.DS_Store
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 00000000..b6e68446
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,15 @@
+{
+ // Verwendet IntelliSense zum Ermitteln möglicher Attribute.
+ // Zeigen Sie auf vorhandene Attribute, um die zugehörigen Beschreibungen anzuzeigen.
+ // Weitere Informationen finden Sie unter https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "type": "pwa-chrome",
+ "request": "launch",
+ "name": "Launch Chrome against localhost",
+ "url": "http://localhost:8080",
+ "webRoot": "${workspaceFolder}"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/MeshCentralServer.njsproj b/MeshCentralServer.njsproj
index e1a07ed2..f0d5a9ec 100644
--- a/MeshCentralServer.njsproj
+++ b/MeshCentralServer.njsproj
@@ -22,7 +22,6 @@
-
@@ -58,7 +57,6 @@
-
@@ -231,6 +229,7 @@
+
diff --git a/agents/MeshCentralAssistant.exe b/agents/MeshCentralAssistant.exe
index f98aed86..92e1d319 100644
Binary files a/agents/MeshCentralAssistant.exe and b/agents/MeshCentralAssistant.exe differ
diff --git a/agents/agent-translations.json b/agents/agent-translations.json
index b37b07b7..86d31677 100644
--- a/agents/agent-translations.json
+++ b/agents/agent-translations.json
@@ -1,11 +1,11 @@
{
"en": {
"agent": "Agent",
- "agentVersion": "New Agent Version",
+ "agentVersion": "New Version",
"group": "Device Group",
"url": "Server URL",
"meshName": "Mesh Name",
- "meshId": "Mesh Identifier",
+ "meshId": "Group Identifier",
"serverId": "Server Identifier",
"setup": "Setup",
"update": "Update",
@@ -14,12 +14,13 @@
"connect": "Connect",
"disconnect": "Disconnect",
"cancel": "Cancel",
+ "close": "Close",
"pressok": "Press OK to disconnect",
- "elevation": "Elevated permissions is required to install/uninstall the agent.",
+ "elevation": "Elevated permissions are required to install/uninstall this software.",
"sudo": "Please try again with sudo.",
"ctrlc": "Press Ctrl-C to exit.",
"commands": "You can run the text version from the command line with the following command(s)",
- "graphicalerror": "The graphical version of this installer canot run on this system",
+ "graphicalerror": "The graphical version of this installer cannot run on this system",
"zenity": "Try installing/updating Zenity, and run again",
"status": [
"NOT INSTALLED",
@@ -27,15 +28,14 @@
"NOT RUNNING"
],
"statusDescription": "Current Agent Status",
- "description": "Click the buttons below to install or uninstall the mesh agent. When installed, this software runs in the background allowing this computer to be managed and controlled by a remote administrator."
+ "description": "Click the buttons below to install or uninstall this remote management software. When installed, this software runs in the background allowing this computer to be managed and controlled by a remote administrator."
},
"cs": {
"agent": "Agent",
- "agentVersion": "Nová verze agenta",
"group": "Skupina zařízení",
"url": "URL serveru",
"meshName": "Název oka",
- "meshId": "Identifikátor sítě",
+ "meshId": "Identifikátor skupiny",
"serverId": "Identifikátor serveru",
"setup": "Založit",
"update": "Aktualizace",
@@ -44,12 +44,11 @@
"connect": "Připojit",
"disconnect": "Odpojit",
"cancel": "Storno",
+ "close": "Zavřít",
"pressok": "Stisknutím tlačítka OK se odpojíte",
- "elevation": "K instalaci / odinstalování agenta je vyžadováno zvýšené oprávnění.",
"sudo": "Zkuste to prosím znovu s sudo.",
"ctrlc": "Ukončete stisknutím Ctrl-C.",
"commands": "Textovou verzi můžete spustit z příkazového řádku pomocí následujících příkazů",
- "graphicalerror": "V tomto systému nelze spustit grafickou verzi tohoto instalačního programu",
"zenity": "Zkuste nainstalovat / aktualizovat Zenity a spustit znovu",
"status": [
"NENÍ INSTALOVÁN",
@@ -57,15 +56,17 @@
"NEFUNGUJE"
],
"statusDescription": "Aktuální stav agenta",
- "description": "Kliknutím na tlačítka níže nainstalujete nebo odinstalujete agenta sítě. Po instalaci je tento software spuštěn na pozadí, což umožňuje spravovat a ovládat tento počítač vzdáleným správcem."
+ "agentVersion": "Nová verze",
+ "elevation": "K instalaci/odinstalaci tohoto softwaru jsou vyžadována zvýšená oprávnění.",
+ "graphicalerror": "Na tomto systému nelze spustit grafickou verzi tohoto instalačního programu",
+ "description": "Klepnutím na tlačítka níže nainstalujete nebo odinstalujete tento software pro vzdálenou správu. Když je tento software nainstalován, běží na pozadí, což umožňuje spravovat a ovládat tento počítač vzdáleným správcem."
},
"de": {
"agent": "Agent",
- "agentVersion": "Neue Agentenversion",
"group": "Gerätegruppe",
"url": "Server-URL",
"meshName": "Maschenname",
- "meshId": "Netzkennung",
+ "meshId": "Gruppen-ID",
"serverId": "Server-ID",
"setup": "Konfiguration",
"update": "Updates",
@@ -74,12 +75,11 @@
"connect": "Verbinden",
"disconnect": "Trennen",
"cancel": "Abbrechen",
+ "close": "Schließen",
"pressok": "Drücken Sie OK, um die Verbindung zu trennen",
- "elevation": "Für die Installation / Deinstallation des Agenten sind erhöhte Berechtigungen erforderlich.",
"sudo": "Bitte versuchen Sie es erneut mit sudo.",
"ctrlc": "Drücken Sie Strg-C, um den Vorgang zu beenden.",
"commands": "Sie können die Textversion über die Befehlszeile mit den folgenden Befehlen ausführen.",
- "graphicalerror": "Die grafische Version dieses Installationsprogramms kann auf diesem System nicht ausgeführt werden",
"zenity": "Versuchen Sie, Zenity zu installieren / zu aktualisieren, und führen Sie es erneut aus",
"status": [
"NICHT INSTALLIERT",
@@ -87,15 +87,17 @@
"NICHT LAUFEN"
],
"statusDescription": "Aktueller Agentenstatus",
- "description": "Klicken Sie auf die Schaltflächen unten, um den Mesh Agent zu installieren oder zu deinstallieren. Bei der Installation wird diese Software im Hintergrund ausgeführt, sodass dieser Computer von einem Remote-Administrator verwaltet und gesteuert werden kann."
+ "agentVersion": "Neue Version",
+ "elevation": "Zum Installieren/Deinstallieren dieser Software sind erhöhte Berechtigungen erforderlich.",
+ "graphicalerror": "Die grafische Version dieses Installationsprogramms kann auf diesem System nicht ausgeführt werden",
+ "description": "Klicken Sie auf die Schaltflächen unten, um diese Fernverwaltungssoftware zu installieren oder zu deinstallieren. Nach der Installation wird diese Software im Hintergrund ausgeführt, sodass dieser Computer von einem entfernten Administrator verwaltet und gesteuert werden kann."
},
"es": {
"agent": "Agente",
- "agentVersion": "Nueva Versión del Agente",
"group": "Grupo de Dispositivos",
"url": "URL del servidor",
"meshName": "Nombre de malla",
- "meshId": "Identificador de malla",
+ "meshId": "Identificador del Grupo",
"serverId": "Identificador de Servidor",
"setup": "Preparar",
"update": "Actualizar",
@@ -104,12 +106,11 @@
"connect": "Conectar",
"disconnect": "Desconectar",
"cancel": "Cancelar",
+ "close": "Cerrar",
"pressok": "Presione OK para desconectar",
- "elevation": "Se requieren permisos elevados para instalar / desinstalar el agente.",
"sudo": "Vuelve a intentarlo con sudo.",
"ctrlc": "Presione Ctrl-C para salir.",
"commands": "Puedes ejecutar la versión de texto desde la línea de comandos con los siguientes comandos",
- "graphicalerror": "La versión gráfica de este instalador no se puede ejecutar en este sistema.",
"zenity": "Intenta instalar / actualizar Zenity y vuelve a ejecutar",
"status": [
"NO INSTALADO",
@@ -117,15 +118,17 @@
"NO EJECUTANDOSE"
],
"statusDescription": "Estado Actual del Agente",
- "description": "Haz clic en los botones a continuación para instalar o desinstalar el agente de malla. Cuando se instala, este software se ejecuta en segundo plano, lo que permite que este equipo sea administrado y controlado por un administrador remoto."
+ "agentVersion": "Nueva versión",
+ "elevation": "Se requieren permisos elevados para instalar/desinstalar este software.",
+ "graphicalerror": "La versión gráfica de este instalador no puede ejecutarse en este sistema",
+ "description": "Haga clic en los botones a continuación para instalar o desinstalar este software de administración remota. Cuando se instala, este software se ejecuta en segundo plano, lo que permite que un administrador remoto administre y controle esta computadora."
},
"fi": {
"agent": "Agentti",
- "agentVersion": "Uusi agenttiversio",
"group": "Laiteryhmä",
"url": "Palvelimen URL-osoite",
"meshName": "Verkon nimi",
- "meshId": "Verkon tunniste",
+ "meshId": "Ryhmän tunniste",
"serverId": "Palvelimen tunniste",
"setup": "Perustaa",
"update": "Päivittää",
@@ -134,12 +137,11 @@
"connect": "Yhdistä",
"disconnect": "Katkaise yhteys",
"cancel": "Peruuta",
+ "close": "Sulje",
"pressok": "Katkaise yhteys painamalla OK",
- "elevation": "Agentin asentaminen / poistaminen edellyttää korotettuja käyttöoikeuksia.",
"sudo": "Yritä uudelleen sudolla.",
"ctrlc": "Poistu painamalla Ctrl-C.",
"commands": "Voit suorittaa tekstiversio komentoriviltä seuraavilla komennoilla",
- "graphicalerror": "Tämän asennusohjelman graafinen versio ei toimi tässä järjestelmässä",
"zenity": "Yritä asentaa / päivittää Zenity ja suorita uudelleen",
"status": [
"EI ASENNETTU",
@@ -147,15 +149,17 @@
"EI RUNNING"
],
"statusDescription": "Agentin nykyinen tila",
- "description": "Napsauta alla olevia painikkeita asentaaksesi tai poistaaksesi verkkoagentin. Asennettuna tämä ohjelmisto toimii taustalla, jolloin etävalvoja hallitsee ja hallitsee tietokonetta."
+ "agentVersion": "Uusi versio",
+ "elevation": "Tämän ohjelmiston asentaminen/asennuksen poistaminen edellyttää korotettuja käyttöoikeuksia.",
+ "graphicalerror": "Tämän asennusohjelman graafista versiota ei voi käyttää tässä järjestelmässä",
+ "description": "Napsauta alla olevia painikkeita asentaaksesi tai poistaaksesi tämän etähallintaohjelmiston. Kun ohjelmisto on asennettu, se toimii taustalla, jolloin etäjärjestelmänvalvoja voi hallita ja ohjata tätä tietokonetta."
},
"fr": {
"agent": "Agent",
- "agentVersion": "Nouvelle version de l'agent",
"group": "Groupe d'appareils",
"url": "URL du serveur",
"meshName": "Nom du maillage",
- "meshId": "Identificateur de maillage",
+ "meshId": "Identifiant de groupe",
"serverId": "Identifiant du serveur",
"setup": "Configuration",
"update": "Mettre à jour",
@@ -164,12 +168,11 @@
"connect": "Se connecter",
"disconnect": "Déconnecter",
"cancel": "Annuler",
+ "close": "Fermer",
"pressok": "Appuyez sur OK pour vous déconnecter",
- "elevation": "Des autorisations élevées sont requises pour installer / désinstaller l'agent.",
"sudo": "Veuillez réessayer avec sudo.",
"ctrlc": "Appuyez sur Ctrl-C pour quitter.",
"commands": "Vous pouvez exécuter la version texte à partir de la ligne de commande avec la ou les commandes suivantes",
- "graphicalerror": "La version graphique de ce programme d'installation ne peut pas s'exécuter sur ce système",
"zenity": "Essayez d'installer / mettre à jour Zenity et réexécutez",
"status": [
"PAS INSTALLÉ",
@@ -177,15 +180,17 @@
"NE PAS COURRIR"
],
"statusDescription": "Statut actuel de l'agent",
- "description": "Cliquez sur les boutons ci-dessous pour installer ou désinstaller l'agent de maillage. Une fois installé, ce logiciel s'exécute en arrière-plan permettant à cet ordinateur d'être géré et contrôlé par un administrateur distant."
+ "agentVersion": "Nouvelle version",
+ "elevation": "Des autorisations élevées sont requises pour installer/désinstaller ce logiciel.",
+ "graphicalerror": "La version graphique de ce programme d'installation ne peut pas s'exécuter sur ce système",
+ "description": "Cliquez sur les boutons ci-dessous pour installer ou désinstaller ce logiciel de gestion à distance. Une fois installé, ce logiciel s'exécute en arrière-plan, ce qui permet à cet ordinateur d'être géré et contrôlé par un administrateur distant."
},
"hi": {
"agent": "एजेंट",
- "agentVersion": "नया एजेंट संस्करण",
"group": "डिवाइस समूह",
"url": "सर्वर URL",
"meshName": "मेष नाम",
- "meshId": "मेष पहचानकर्ता",
+ "meshId": "समूह पहचानकर्ता",
"serverId": "सर्वर पहचानकर्ता",
"setup": "सेट अप",
"update": "अपडेट करें",
@@ -194,12 +199,11 @@
"connect": "जुडिये",
"disconnect": "डिस्कनेक्ट",
"cancel": "रद्द करना",
+ "close": "बंद करे",
"pressok": "डिस्कनेक्ट करने के लिए ओके दबाएं",
- "elevation": "एजेंट को इंस्टॉल / अनइंस्टॉल करने के लिए एलिवेटेड परमिशन की जरूरत होती है।",
"sudo": "कृपया सूडो के साथ फिर से प्रयास करें।",
"ctrlc": "बाहर निकलने के लिए Ctrl-C दबाएं।",
"commands": "आप निम्न कमांड के साथ कमांड लाइन से टेक्स्ट संस्करण चला सकते हैं",
- "graphicalerror": "इस इंस्टॉलर का आलेखीय संस्करण इस सिस्टम पर चलता है",
"zenity": "ज़ेनिटी को स्थापित / अपडेट करने का प्रयास करें, और फिर से चलाएं",
"status": [
"स्थापित नहीं है",
@@ -207,15 +211,17 @@
"चल नहीं रहा"
],
"statusDescription": "वर्तमान एजेंट की स्थिति",
- "description": "मेष एजेंट को स्थापित या अनइंस्टॉल करने के लिए नीचे दिए गए बटन पर क्लिक करें। स्थापित होने पर, यह सॉफ़्टवेयर पृष्ठभूमि में चलता है, जिससे यह कंप्यूटर दूरस्थ व्यवस्थापक द्वारा प्रबंधित और नियंत्रित किया जा सकता है।"
+ "agentVersion": "नया संस्करण",
+ "elevation": "इस सॉफ़्टवेयर को स्थापित/अनइंस्टॉल करने के लिए उन्नत अनुमतियों की आवश्यकता होती है।",
+ "graphicalerror": "इस इंस्टालर का आलेखीय संस्करण इस सिस्टम पर नहीं चल सकता",
+ "description": "इस दूरस्थ प्रबंधन सॉफ़्टवेयर को स्थापित या अनइंस्टॉल करने के लिए नीचे दिए गए बटनों पर क्लिक करें। स्थापित होने पर, यह सॉफ़्टवेयर पृष्ठभूमि में चलता है जिससे इस कंप्यूटर को दूरस्थ व्यवस्थापक द्वारा प्रबंधित और नियंत्रित किया जा सकता है।"
},
"it": {
"agent": "Agente",
- "agentVersion": "Nuova versione dell'agente ",
"group": "Gruppo di dispositivi",
"url": "URL del server",
"meshName": "Nome mesh",
- "meshId": "Identificatore di mesh",
+ "meshId": "Identificatore di gruppo",
"serverId": "Identificatore del server",
"setup": "Impostare",
"update": "Aggiornamenti",
@@ -224,12 +230,11 @@
"connect": "Connetti",
"disconnect": "Disconnetti",
"cancel": "Annulla",
+ "close": "Chiudere",
"pressok": "Premi OK per disconnetterti",
- "elevation": "Sono necessarie autorizzazioni elevate per installare / disinstallare l'agente.",
"sudo": "Riprova con sudo.",
"ctrlc": "Premi Ctrl-C per uscire.",
"commands": "Puoi eseguire la versione testuale dalla riga di comando con i seguenti comandi ",
- "graphicalerror": "La versione grafica di questo programma di installazione non può essere eseguita su questo sistema",
"zenity": "Prova a installare/aggiornare Zenity ed esegui di nuovo",
"status": [
"NON INSTALLATO",
@@ -237,15 +242,17 @@
"NON IN ESECUZIONE"
],
"statusDescription": "Stato attuale dell'agente",
- "description": "Fare clic sui pulsanti sottostanti per installare o disinstallare l'agente mesh. Una volta installato, questo software viene eseguito in background consentendo a questo computer di essere gestito e controllato da un amministratore remoto."
+ "agentVersion": "Nuova versione",
+ "elevation": "Per installare/disinstallare questo software sono necessarie autorizzazioni elevate.",
+ "graphicalerror": "La versione grafica di questo programma di installazione non può essere eseguita su questo sistema",
+ "description": "Fare clic sui pulsanti seguenti per installare o disinstallare questo software di gestione remota. Una volta installato, questo software viene eseguito in background consentendo a questo computer di essere gestito e controllato da un amministratore remoto."
},
"ja": {
"agent": "エージェント",
- "agentVersion": "新しいエージェントバージョン",
"group": "デバイスグループ",
"url": "サーバーのURL",
"meshName": "メッシュ名",
- "meshId": "メッシュ識別子",
+ "meshId": "グループ識別子",
"serverId": "サーバー識別子",
"setup": "セットアップ",
"update": "更新",
@@ -254,12 +261,11 @@
"connect": "つなぐ",
"disconnect": "切断する",
"cancel": "キャンセル",
+ "close": "閉じる",
"pressok": "OKを押して切断します",
- "elevation": "エージェントをインストール/アンインストールするには、昇格された権限が必要です。",
"sudo": "sudoでもう一度やり直してください。",
"ctrlc": "Ctrl-Cを押して終了します。",
"commands": "次のコマンドを使用して、コマンドラインからテキストバージョンを実行できます。",
- "graphicalerror": "このインストーラーのグラフィカルバージョンは、このシステムでは実行できません",
"zenity": "Zenityをインストール/更新して、もう一度実行してください",
"status": [
"インストールされていない",
@@ -267,15 +273,17 @@
"走っていない"
],
"statusDescription": "現在のエージェントステータス",
- "description": "下のボタンをクリックして、メッシュエージェントをインストールまたはアンインストールします。インストールすると、このソフトウェアはバックグラウンドで実行され、リモート管理者がこのコンピューターを管理および制御できるようになります。"
+ "agentVersion": "新しいバージョン",
+ "elevation": "このソフトウェアをインストール/アンインストールするには、昇格された権限が必要です。",
+ "graphicalerror": "このインストーラーのグラフィカルバージョンは、このシステムでは実行できません",
+ "description": "このリモート管理ソフトウェアをインストールまたはアンインストールするには、下のボタンをクリックしてください。インストールすると、このソフトウェアはバックグラウンドで実行され、リモート管理者がこのコンピューターを管理および制御できるようになります。"
},
"ko": {
"agent": "에이전트",
- "agentVersion": "새에이전트 버전",
"group": "장치 그룹",
"url": "서버의 위치",
"meshName": "메시의 이름",
- "meshId": "메시의 식별자",
+ "meshId": "그룹 식별자",
"serverId": "서버의 식별자",
"setup": "설정하다",
"update": "개조하다",
@@ -284,28 +292,25 @@
"connect": "연결",
"disconnect": "연결 해제",
"cancel": "취소",
+ "close": "닫기",
"pressok": "연결을 끊으려면 \"OK\"를 누르십시오",
- "elevation": "관리자 권한은 에이전트 제거 / 설치하는 데 필요",
"sudo": "\"sudo\"로 다시 시도하십시오",
"ctrlc": "종료하려면 \"Ctrl-C\"를 누르십시오.",
"commands": "다음 명령을 사용하여 콘솔에서 텍스트 버전을 실행할 수 있습니다",
- "graphicalerror": "이 설치 프로그램의 그래픽 버전은이 시스템에서 실행할 수 없습니다.",
"zenity": "\"Zenity\"를 설치 또는 업데이트하고 다시 시도하십시오",
"status": [
"없다",
"운영",
"중지됨"
],
- "statusDescription": "에이전트 상태",
- "description": "메시 에이전트를 설치 또는 제거하려면 아래 버튼을 클릭하십시오. 이 프로그램은 설치하면 백그라운드에서 실행되므로 원격 관리자가이 컴퓨터를 관리하고 제어 할 수 있습니다."
+ "statusDescription": "에이전트 상태"
},
"nl": {
"agent": "Agent",
- "agentVersion": "Nieuwe agent versie",
"group": "Apparaat groep",
"url": "Server URL",
"meshName": "Mesh naam",
- "meshId": "Mesh identificatie",
+ "meshId": "Groepsidentificatie",
"serverId": "Server identificatie",
"setup": "Setup",
"update": "Bijwerken",
@@ -314,12 +319,11 @@
"connect": "Verbinden",
"disconnect": "Verbreken",
"cancel": "Annuleren",
+ "close": "Sluiten",
"pressok": "Druk op OK om de verbinding te verbreken",
- "elevation": "Verhoogde machtigingen zijn vereist om de agent te installeren / verwijderen.",
"sudo": "Probeer het opnieuw met sudo.",
"ctrlc": "Druk op Ctrl-C om af te sluiten.",
"commands": "U kunt de tekstversie vanaf de opdrachtregel uitvoeren met de volgende opdracht(en)",
- "graphicalerror": "De grafische versie van dit installatieprogramma kan niet op dit systeem worden uitgevoerd",
"zenity": "Probeer Zenity te installeren / bij te werken en voer het opnieuw uit",
"status": [
"NIET GEÏNSTALLEERD",
@@ -327,15 +331,17 @@
"NIET ACTIEF"
],
"statusDescription": "Huidige agent status",
- "description": "Klik op de onderstaande knoppen om de mesh-agent te installeren of te verwijderen. Na installatie wordt deze software op de achtergrond uitgevoerd, zodat deze computer kan worden beheerd en bestuurd door een externe beheerder."
+ "agentVersion": "Nieuwe versie",
+ "elevation": "Verhoogde machtigingen zijn vereist om deze software te installeren/verwijderen.",
+ "graphicalerror": "De grafische versie van dit installatieprogramma kan niet op dit systeem draaien",
+ "description": "Klik op de onderstaande knoppen om deze software voor beheer op afstand te installeren of te verwijderen. Na installatie draait deze software op de achtergrond waardoor deze computer kan worden beheerd en gecontroleerd door een externe beheerder."
},
"pt": {
"agent": "Agente",
- "agentVersion": "Nova versão do agente",
"group": "Grupo de dispositivos",
"url": "URL do servidor",
"meshName": "Nome da malha",
- "meshId": "Identificador de malha",
+ "meshId": "Identificador de Grupo",
"serverId": "Identificador de Servidor",
"setup": "Configuração",
"update": "Atualizar",
@@ -344,28 +350,25 @@
"connect": "Conectar",
"disconnect": "Desconectar",
"cancel": "Cancelar",
+ "close": "Fechar",
"pressok": "Pressione OK para desconectar",
- "elevation": "Permissões elevadas são necessárias para instalar / desinstalar o agente.",
"sudo": "Por favor, tente novamente com sudo.",
"ctrlc": "Pressione Ctrl-C para sair.",
"commands": "Você pode executar a versão em texto a partir da linha de comando com o (s) seguinte (s) comando (s)",
- "graphicalerror": "A versão gráfica deste instalador não pode ser executada neste sistema",
"zenity": "Tente instalar / atualizar o Zenity e execute novamente",
"status": [
"NÃO INSTALADO",
"CORRIDA",
"NÃO CORRENDO"
],
- "statusDescription": "Status atual do agente",
- "description": "Clique nos botões abaixo para instalar ou desinstalar o agente mesh. Quando instalado, este software é executado em segundo plano, permitindo que o computador seja gerenciado e controlado por um administrador remoto."
+ "statusDescription": "Status atual do agente"
},
"ru": {
"agent": "Агент",
- "agentVersion": "Новая версия агента",
"group": "Группа устройства",
"url": "URL-адрес сервера",
"meshName": "Имя сетки",
- "meshId": "Идентификатор сетки",
+ "meshId": "Идентификатор группы",
"serverId": "Идентификатор сервера",
"setup": "Настроить",
"update": "Обновить",
@@ -374,28 +377,25 @@
"connect": "Подключиться",
"disconnect": "Разъединить",
"cancel": "Отмена",
+ "close": "Закрыть",
"pressok": "Нажмите ОК для отключения",
- "elevation": "Для установки / удаления агента требуются повышенные разрешения.",
"sudo": "Пожалуйста, попробуйте еще раз с помощью sudo.",
"ctrlc": "Нажмите Ctrl-C для выхода.",
"commands": "Вы можете запустить текстовую версию из командной строки с помощью следующих команд",
- "graphicalerror": "Графическая версия этого установщика не может работать в этой системе.",
"zenity": "Попробуйте установить / обновить Zenity и снова запустить",
"status": [
"НЕ УСТАНОВЛЕНО",
"ЗАПУЩЕН",
"НЕ ЗАПУЩЕН"
],
- "statusDescription": "Текущий статус агента",
- "description": "Нажмите кнопки ниже, чтобы установить или удалить агент сетки. После установки это программное обеспечение работает в фоновом режиме, позволяя управлять этим компьютером удаленным администратором."
+ "statusDescription": "Текущий статус агента"
},
"sv": {
"agent": "Agent",
- "agentVersion": "Ny agentversion",
"group": "Enhetsgrupp",
"url": "Serverns URL",
"meshName": "Masknamn",
- "meshId": "Mesh Identifier",
+ "meshId": "Gruppidentifierare",
"serverId": "Serveridentifierare",
"setup": "Uppstart",
"update": "Uppdatering",
@@ -404,28 +404,25 @@
"connect": "Anslut",
"disconnect": "Koppla ifrån",
"cancel": "Avbryt",
+ "close": "Stäng",
"pressok": "Tryck på OK för att koppla bort",
- "elevation": "Förhöjda behörigheter krävs för att installera / avinstallera agenten.",
"sudo": "Försök igen med sudo.",
"ctrlc": "Tryck på Ctrl-C för att avsluta.",
"commands": "Du kan köra textversionen från kommandoraden med följande kommando (er)",
- "graphicalerror": "Den grafiska versionen av detta installationsprogram kan inte köras på detta system",
"zenity": "Försök att installera / uppdatera Zenity och kör igen",
"status": [
"INTE INSTALLERAD",
"LÖPNING",
"SPRINGER INTE"
],
- "statusDescription": "Aktuell agentstatus",
- "description": "Klicka på knapparna nedan för att installera eller avinstallera nätagenten. När den installeras körs denna programvara i bakgrunden så att den här datorn kan hanteras och styras av en fjärradministratör."
+ "statusDescription": "Aktuell agentstatus"
},
"tr": {
"agent": "Ajan",
- "agentVersion": "Yeni Temsilci Sürümü",
"group": "Cihaz Grubu",
"url": "Sunucu URL'si",
"meshName": "Mesh Adı",
- "meshId": "Mesh Tanımlayıcı",
+ "meshId": "Grup Tanımlayıcı",
"serverId": "Sunucu Tanımlayıcı",
"setup": "Kurmak",
"update": "Güncelleme",
@@ -433,29 +430,30 @@
"uninstall": "Kaldır",
"connect": "Bağlan",
"disconnect": "Bağlantıyı kes",
- "cancel": "İptal etmek",
+ "cancel": "İptal",
+ "close": "Kapat",
"pressok": "Bağlantıyı kesmek için Tamam'a basın",
- "elevation": "Aracıyı yüklemek / kaldırmak için yükseltilmiş izinler gereklidir.",
"sudo": "Lütfen sudo ile tekrar deneyin.",
"ctrlc": "Çıkmak için Ctrl-C tuşlarına basın.",
"commands": "Metin sürümünü aşağıdaki komutlarla komut satırından çalıştırabilirsiniz.",
- "graphicalerror": "Bu yükleyicinin grafik versiyonu bu sistemde çalışamaz",
"zenity": "Zenity'yi kurmayı / güncellemeyi deneyin ve tekrar çalıştırın",
"status": [
"YÜKLÜ DEĞİL",
"KOŞU",
"KOŞMAK YOK"
],
- "statusDescription": "Mevcut Temsilci Durumu",
- "description": "Mesh aracısını yüklemek veya kaldırmak için aşağıdaki düğmelere tıklayın. Bu yazılım yüklendiğinde arka planda çalışarak bu bilgisayarın bir uzak yönetici tarafından yönetilmesine ve kontrol edilmesine olanak tanır."
+ "statusDescription": "Mevcut Agent Durumu",
+ "agentVersion": "Yeni sürüm",
+ "elevation": "Bu yazılımı yüklemek/kaldırmak için yüksek izinler gerekir.",
+ "graphicalerror": "Bu yükleyicinin grafik sürümü bu sistemde çalışamaz",
+ "description": "Bu uzaktan yönetim yazılımını yüklemek veya kaldırmak için aşağıdaki düğmelere tıklayın. Yüklendiğinde, bu yazılım arka planda çalışır ve bu bilgisayarın uzak bir yönetici tarafından yönetilmesine ve kontrol edilmesine olanak tanır."
},
"zh-chs": {
"agent": "代理",
- "agentVersion": "新代理版本",
"group": "设备组",
"url": "服务器网址",
"meshName": "网格名称",
- "meshId": "网格标识符",
+ "meshId": "组标识符",
"serverId": "服务器标识符",
"setup": "设定",
"update": "更新资料",
@@ -464,28 +462,25 @@
"connect": "连接",
"disconnect": "断线",
"cancel": "取消",
+ "close": "关",
"pressok": "按确定断开连接",
- "elevation": "安装/卸载代理需要提升的权限。",
"sudo": "请使用sudo再试一次。",
"ctrlc": "按Ctrl-C退出。",
"commands": "您可以使用以下命令从命令行运行文本版本",
- "graphicalerror": "此安装程序Canot的图形版本在此系统上运行",
"zenity": "尝试安装/更新Zenity,然后再次运行",
"status": [
"未安装",
"正在运行",
"不在运行"
],
- "statusDescription": "当前代理状态",
- "description": "单击下面的按钮以安装或卸载网状代理。安装后,该软件将在后台运行,从而允许该计算机由远程管理员进行管理和控制。"
+ "statusDescription": "当前代理状态"
},
"zh-cht": {
"agent": "代理",
- "agentVersion": "新代理版本",
"group": "裝置群",
"url": "服務器網址",
"meshName": "網格名稱",
- "meshId": "網格標識符",
+ "meshId": "群標識符",
"serverId": "服務器標識符",
"setup": "設定",
"update": "更新資料",
@@ -494,28 +489,25 @@
"connect": "連接",
"disconnect": "斷線",
"cancel": "取消",
+ "close": "關",
"pressok": "按確定斷開連接",
- "elevation": "安裝/卸載代理需要提升的權限。",
"sudo": "請使用sudo再試一次。",
"ctrlc": "按Ctrl-C退出。",
"commands": "您可以使用以下命令從命令行運行文本版本",
- "graphicalerror": "此安裝程序Canot的圖形版本在此系統上運行",
"zenity": "嘗試安裝/更新Zenity,然後再次運行",
"status": [
"未安裝",
"正在運行",
"不在運行"
],
- "statusDescription": "當前代理狀態",
- "description": "單擊下面的按鈕以安裝或卸載網狀代理。安裝後,該軟件將在後台運行,從而允許該計算機由遠程管理員進行管理和控制。"
+ "statusDescription": "當前代理狀態"
},
"da": {
"agent": "Agent",
- "agentVersion": "Ny agentversion",
"group": "Enhedsgruppe",
"url": "Server URL",
"meshName": "Mesh Navn",
- "meshId": "Mesh Identifier",
+ "meshId": "Gruppe-id",
"serverId": "Serveridentifikator",
"setup": "Opsætning",
"update": "Opdatering",
@@ -524,12 +516,11 @@
"connect": "Forbind",
"disconnect": "Afbryd",
"cancel": "Annuller",
+ "close": "Luk",
"pressok": "Tryk på OK for at afbryde",
- "elevation": "Elleverede tilladelser er påkrævet for at installere/afinstallere agenten.",
"sudo": "Prøv venligst igen med sudo.",
"ctrlc": "Tryk på Ctrl-C for at afslutte.",
"commands": "Du kan køre tekstversionen fra kommandolinjen med følgende kommando(er)",
- "graphicalerror": "Den grafiske version af dette installationsprogram kan ikke køre på dette system",
"zenity": "Prøv at installere/opdatere Zenity, og kør igen",
"status": [
"IKKE INSTALLERET",
@@ -537,15 +528,17 @@
"KØRER IKKE"
],
"statusDescription": "Aktuel agentstatus",
- "description": "Klik på knapperne nedenfor for at installere eller afinstallere mesh-agenten. Når den er installeret, kører denne software i baggrunden, og tillader at denne computer kan administreres og kontrolleres af en fjernadministrator."
+ "agentVersion": "Ny version",
+ "elevation": "Forhøjede tilladelser er nødvendige for at installere/afinstallere denne software.",
+ "graphicalerror": "Den grafiske version af dette installationsprogram kan ikke køre på dette system",
+ "description": "Klik på knapperne nedenfor for at installere eller afinstallere denne fjernstyringssoftware. Når den er installeret, kører denne software i baggrunden, så denne computer kan administreres og kontrolleres af en fjernadministrator."
},
"pl": {
"agent": "Agent",
- "agentVersion": "Nowa Wersja Agenta",
"group": "Grupa Urządzeń",
"url": "URL Serwera",
"meshName": "Nazwa Sieci",
- "meshId": "Identyfikator sieci",
+ "meshId": "Identyfikator Grupy",
"serverId": "Identyfikator Serwera",
"setup": "Konfiguracja",
"update": "Aktualizacja",
@@ -554,12 +547,11 @@
"connect": "Połącz",
"disconnect": "Rozłącz",
"cancel": "Anuluj",
+ "close": "Zamknij",
"pressok": "Naciśnij OK by się rozłączyć",
- "elevation": "Do zainstalowania/odinstalowania agenta wymagane są podwyższone uprawnienia.",
"sudo": "Proszę spróbować ponownie z sudo.",
"ctrlc": "Naciśnij Ctrl-C by wyjść.",
"commands": "Możesz uruchomić wersję tekstową z linii poleceń za pomocą następujących komend",
- "graphicalerror": "Graficzna wersja tego instalatora nie może być uruchomiona w tym systemie.",
"zenity": "Spróbuj zainstalować/zaktualizować Zenity i uruchom ponownie",
"status": [
"NIE ZAINSTALOWANY",
@@ -567,15 +559,17 @@
"NIE DZIAŁA"
],
"statusDescription": "Obecny Status Agenta",
- "description": "Kliknij poniższe przyciski, aby zainstalować lub odinstalować agenta. Po zainstalowaniu, to oprogramowanie działa w tle, umożliwiając zarządzanie i kontrolowanie tego komputera przez zdalnego administratora."
+ "agentVersion": "Nowa Wersja",
+ "elevation": "Do zainstalowania/odinstalowania tego oprogramowania wymagane są podwyższone uprawnienia.",
+ "graphicalerror": "Graficzna wersja tego instalatora nie może być uruchomiona w tym systemie",
+ "description": "Kliknij poniższe przyciski, aby zainstalować lub odinstalować oprogramowanie zdalnego dostępu. Po zainstalowaniu, to oprogramowanie działa w tle, umożliwiając zarządzanie i kontrolowanie tego komputera przez zdalnego administratora."
},
"pt-br": {
"agent": "Agente",
- "agentVersion": "Nova versão do agente",
"group": "Grupo de Dispositivos",
"url": "URL do servidor",
"meshName": "Nome Mesh",
- "meshId": "Identificador Mesh",
+ "meshId": "Identificador de Grupo",
"serverId": "Identificador de Servidor",
"setup": "Configurar",
"update": "Atualizar",
@@ -584,19 +578,17 @@
"connect": "Conectar",
"disconnect": "Desconectar",
"cancel": "Cancelar",
+ "close": "Fechar",
"pressok": "Pressione OK para desconectar",
- "elevation": "Permissões elevadas são necessárias para instalar / desinstalar o agente.",
"sudo": "Por favor, tente novamente com sudo.",
"ctrlc": "Pressione Ctrl-C para sair.",
"commands": "Você pode executar a versão em texto a partir da linha de comando com o (s) seguinte (s) comando (s)",
- "graphicalerror": "A versão gráfica deste instalador não pode ser executada neste sistema",
"zenity": "Tente instalar / atualizar o Zenity e execute novamente",
"status": [
"NÃO INSTALADO",
"Executando",
"NÃO EXECUTANDO"
],
- "statusDescription": "Status atual do agente",
- "description": "Clique nos botões abaixo para instalar ou desinstalar o agente mesh. Quando instalado, este software é executado em segundo plano, permitindo que o computador seja gerenciado e controlado por um administrador remoto."
+ "statusDescription": "Status atual do agente"
}
}
\ No newline at end of file
diff --git a/agents/modules_meshcore/coretranslations.json b/agents/modules_meshcore/coretranslations.json
index 30923de8..a4a4ec72 100644
--- a/agents/modules_meshcore/coretranslations.json
+++ b/agents/modules_meshcore/coretranslations.json
@@ -13,39 +13,99 @@
},
"cs": {
"allow": "Dovolit",
- "deny": "Odmítnout"
+ "deny": "Odmítnout",
+ "autoAllowForFive": "Automaticky přijímat všechna připojení na dalších 5 minut",
+ "terminalConsent": "{0} žádá o vzdálený terminálový přístup. Přístup povolen?",
+ "desktopConsent": "{0} žádá o přístup ke vzdálené ploše. Přístup povolen?",
+ "fileConsent": "{0} požaduje vzdálený přístup k souboru. Přístup povolen?",
+ "terminalNotify": "{0} zahájil relaci vzdáleného terminálu.",
+ "desktopNotify": "{0} zahájil relaci vzdálené plochy.",
+ "fileNotify": "{0} zahájil relaci vzdáleného souboru.",
+ "privacyBar": "Sdílení plochy s: {0}"
},
"de": {
"allow": "Erlauben",
- "deny": "Verweigern"
+ "deny": "Verweigern",
+ "autoAllowForFive": "Alle Verbindungen für die nächsten 5 Minuten erlauben",
+ "terminalConsent": "{0} erbittet Fern-Terminalzugriff. Zugang erlauben?",
+ "desktopConsent": "{0} erbittet Fern-Desktopzugriff. Zugang erlauben?",
+ "fileConsent": "{0} erbittet Fern-Dateizugriff. Zugang erlauben?",
+ "terminalNotify": "{0} hat eine Fern-Terminalzugriff-Sitzung gestartet.",
+ "desktopNotify": "{0} hat eine Fern-Desktopzugriff-Sitzung gestartet.",
+ "fileNotify": "{0} hat eine Fern-Dateizugriff-Sitzung gestartet.",
+ "privacyBar": "Teile desktop mit: {0}"
},
"es": {
"allow": "Permitir",
- "deny": "Negar"
+ "deny": "Negar",
+ "autoAllowForFive": "Aceptar automáticamente todas las conexiones durante los próximos 5 minutos",
+ "terminalConsent": "{0} solicitando acceso a terminal remoto. ¿Autorizará el acceso?",
+ "desktopConsent": "{0} solicita acceso a escritorio remoto. ¿Autorizará el acceso?",
+ "fileConsent": "{0} solicita acceso remoto al archivo. ¿Autorizará el acceso?",
+ "terminalNotify": "{0} inició una sesión de terminal remota.",
+ "desktopNotify": "{0} inició una sesión de escritorio remoto.",
+ "fileNotify": "{0} inició una sesión de archivo remoto.",
+ "privacyBar": "Compartir escritorio con: {0}"
},
"fi": {
"allow": "Sallia",
- "deny": "Kieltää"
+ "deny": "Kieltää",
+ "autoAllowForFive": "Hyväksy automaattisesti kaikki yhteydet seuraavan 5 minuutin ajan",
+ "terminalConsent": "{0} pyytää etäpäätteen käyttöoikeutta. Myönnetäänkö käyttöoikeus?",
+ "desktopConsent": "{0} pyytää etätyöpöytäkäyttöä. Myönnetäänkö käyttöoikeus?",
+ "fileConsent": "{0} pyytää etäkäyttöoikeutta tiedostoon. Myönnetäänkö käyttöoikeus?",
+ "terminalNotify": "{0} aloitti etäpääteistunnon.",
+ "desktopNotify": "{0} aloitti etätyöpöytäistunnon.",
+ "fileNotify": "{0} aloitti etätiedostoistunnon.",
+ "privacyBar": "Työpöytä jaetaan seuraavien kanssa: {0}"
},
"fr": {
"allow": "Permettre",
"deny": "Refuser",
"autoAllowForFive": "Accepter automatiquement les connexions pendant les 5 prochaines minutes",
- "terminalConsent": "{0} demande(s) d'utilisation du terminal distant. Autoriser l'accès ?",
- "desktopConsent": "{0} demande(s) d'utilisation du bureau distant. Autoriser l'accès ?",
- "fileConsent": "{0} demande(s) d'accès à un fichier distant. Autoriser l'accès ?"
+ "terminalConsent": "{0} demande(nt) d'utilisation du terminal à distance. Autoriser l'accès ?",
+ "desktopConsent": "{0} demande(nt) l'utilisation du bureau à distance. Autoriser l'accès ?",
+ "fileConsent": "{0} demande(nt) d'accès à un fichier à distance. Autoriser l'accès ?",
+ "terminalNotify": "{0} a démarré une session de terminal distant.",
+ "desktopNotify": "{0} a démarré une session de bureau à distance.",
+ "fileNotify": "{0} a démarré une session de fichiers à distance.",
+ "privacyBar": "Partage du bureau avec : {0}"
},
"hi": {
"allow": "अनुमति",
- "deny": "मना"
+ "deny": "मना",
+ "autoAllowForFive": "अगले 5 मिनट के लिए सभी कनेक्शन स्वतः स्वीकार करें",
+ "terminalConsent": "{0} दूरस्थ टर्मिनल पहुंच का अनुरोध कर रहा है। अनुदान पहुँच?",
+ "desktopConsent": "{0} दूरस्थ डेस्कटॉप पहुंच का अनुरोध कर रहा है। अनुदान पहुँच?",
+ "fileConsent": "{0} दूरस्थ फ़ाइल एक्सेस का अनुरोध करना। अनुदान पहुँच?",
+ "terminalNotify": "{0} ने दूरस्थ टर्मिनल सत्र प्रारंभ किया।",
+ "desktopNotify": "{0} ने दूरस्थ डेस्कटॉप सत्र प्रारंभ किया।",
+ "fileNotify": "{0} ने दूरस्थ फ़ाइल सत्र प्रारंभ किया।",
+ "privacyBar": "इसके साथ डेस्कटॉप साझा करना: {0}"
},
"it": {
"allow": "Permettere",
- "deny": "Negare"
+ "deny": "Negare",
+ "autoAllowForFive": "Accetta automaticamente tutte le connessioni per i prossimi 5 minuti",
+ "terminalConsent": "{0} che richiede l'accesso al terminale remoto. Concedere l'accesso?",
+ "desktopConsent": "{0} che richiede l'accesso al desktop remoto. Concedere l'accesso?",
+ "fileConsent": "{0} che richiede l'accesso al file remoto. Concedere l'accesso?",
+ "terminalNotify": "{0} ha avviato una sessione di terminale remoto.",
+ "desktopNotify": "{0} ha avviato una sessione desktop remoto.",
+ "fileNotify": "{0} ha avviato una sessione di file remota.",
+ "privacyBar": "Condivisione del desktop con: {0}"
},
"ja": {
"allow": "許可する",
- "deny": "拒否"
+ "deny": "拒否",
+ "autoAllowForFive": "次の5分間はすべての接続を自動受け入れます",
+ "terminalConsent": "{0}リモート端末アクセスを要求しています。アクセス許可?",
+ "desktopConsent": "{0}リモートデスクトップアクセスを要求しています。アクセス許可?",
+ "fileConsent": "{0}リモートファイルアクセスを要求しています。アクセス許可?",
+ "terminalNotify": "{0}がリモートターミナルセッションを開始しました。",
+ "desktopNotify": "{0}はリモートデスクトップセッションを開始しました。",
+ "fileNotify": "{0}がリモートファイルセッションを開始しました。",
+ "privacyBar": "デスクトップの共有:{0}"
},
"ko": {
"allow": "허용하다",
@@ -57,7 +117,15 @@
},
"nl": {
"allow": "Toestaan",
- "deny": "Weigeren"
+ "deny": "Weigeren",
+ "autoAllowForFive": "Alle verbindingen automatisch accepteren voor de komende 5 minuten",
+ "terminalConsent": "{0} verzoekt om toegang tot externe terminal.Toegang verlenen?",
+ "desktopConsent": "{0} verzoekt om toegang tot extern bureaublad.Toegang verlenen?",
+ "fileConsent": "{0} verzoekt om externe bestandstoegang.Toegang verlenen?",
+ "terminalNotify": "{0} heeft een externe terminalsessie gestart.",
+ "desktopNotify": "{0} heeft een extern bureaubladsessie gestart.",
+ "fileNotify": "{0} heeft een externe bestandssessie gestart.",
+ "privacyBar": "Bureaublad delen met: {0}"
},
"pt": {
"allow": "Permitir",
@@ -73,7 +141,15 @@
},
"tr": {
"allow": "İzin vermek",
- "deny": "İnkar etmek"
+ "deny": "İnkar etmek",
+ "autoAllowForFive": "Sonraki 5 dakika boyunca tüm bağlantıları otomatik olarak kabul et",
+ "terminalConsent": "{0} uzak terminal erişimi istiyor. Erişim izni veriyor musunuz?",
+ "desktopConsent": "{0} uzak masaüstü erişimi istiyor. Erişim izni veriyor musunuz?",
+ "fileConsent": "{0} uzak dosya Erişimi istiyor. Erişim izni veriyor musunuz?",
+ "terminalNotify": "{0} bir uzak terminal oturumu başlattı.",
+ "desktopNotify": "{0} bir uzak masaüstü oturumu başlattı.",
+ "fileNotify": "{0} bir uzak dosya oturumu başlattı.",
+ "privacyBar": "Masaüstünü şu kişilerle paylaşma: {0}"
},
"zh-chs": {
"allow": "允许",
@@ -81,11 +157,27 @@
},
"da": {
"allow": "Tillad",
- "deny": "Afslå"
+ "deny": "Afslå",
+ "autoAllowForFive": "Accepter automatisk alle forbindelser i de næste 5 minutter",
+ "terminalConsent": "{0} anmoder om ekstern terminaladgang. Give adgang?",
+ "desktopConsent": "{0} anmoder om fjernskrivebordsadgang. Give adgang?",
+ "fileConsent": "{0} anmoder om fjernadgang til fil. Give adgang?",
+ "terminalNotify": "{0} startede en fjernterminalsession.",
+ "desktopNotify": "{0} startede en fjernskrivebordssession.",
+ "fileNotify": "{0} startede en ekstern filsession.",
+ "privacyBar": "Deler skrivebordet med: {0}"
},
"pl": {
"allow": "Zezwól",
- "deny": "Odrzucono"
+ "deny": "Odrzucono",
+ "autoAllowForFive": "Automatycznie akceptuj wszystkie połączenia przez następne 5 minut",
+ "terminalConsent": "{0} prosi o zdalny dostęp do terminala. Przyznać dostęp?",
+ "desktopConsent": "{0} prosi o zdalny dostęp do pulpitu. Przyznać dostęp?",
+ "fileConsent": "{0} prosi o zdalny dostęp do plików. Przyznać dostęp?",
+ "terminalNotify": "{0} rozpoczął sesję dostępu do terminala.",
+ "desktopNotify": "{0} rozpoczął sesję dostępu do pulpitu.",
+ "fileNotify": "{0} rozpoczął sesję dostępu do plików.",
+ "privacyBar": "Współdzielenie pulpitu z: {0}"
},
"pt-br": {
"allow": "Permitir",
diff --git a/amt-ider.js b/amt-ider.js
index 1e8bc464..6d7d4934 100644
--- a/amt-ider.js
+++ b/amt-ider.js
@@ -1,7 +1,7 @@
/**
* @description MeshCentral Server IDER handler
* @author Ylian Saint-Hilaire & Bryan Roe
-* @copyright Intel Corporation 2018-2021
+* @copyright Intel Corporation 2018-2022
* @license Apache-2.0
* @version v0.0.1
*/
diff --git a/amtevents.js b/amtevents.js
index 18c1608a..443c2f8e 100644
--- a/amtevents.js
+++ b/amtevents.js
@@ -1,7 +1,7 @@
/**
* @description MeshCentral Intel(R) AMT Event Parser
* @author Ylian Saint-Hilaire & Bryan Roe
-* @copyright Intel Corporation 2018-2021
+* @copyright Intel Corporation 2018-2022
* @license Apache-2.0
* @version v0.0.1
*/
diff --git a/amtmanager.js b/amtmanager.js
index c6769bdb..53cdb4b6 100644
--- a/amtmanager.js
+++ b/amtmanager.js
@@ -1,7 +1,7 @@
/**
* @description MeshCentral Intel AMT manager
* @author Ylian Saint-Hilaire
-* @copyright Intel Corporation 2018-2021
+* @copyright Intel Corporation 2018-2022
* @license Apache-2.0
* @version v0.0.1
*/
diff --git a/amtprovisioningserver.js b/amtprovisioningserver.js
index cfc7a1f7..1486db4d 100644
--- a/amtprovisioningserver.js
+++ b/amtprovisioningserver.js
@@ -1,7 +1,7 @@
/**
* @description MeshCentral Intel AMT Hello server
* @author Ylian Saint-Hilaire
-* @copyright Intel Corporation 2018-2021
+* @copyright Intel Corporation 2018-2022
* @license Apache-2.0
* @version v0.0.1
*/
diff --git a/amtscanner.js b/amtscanner.js
index 688cd52d..941aef7e 100644
--- a/amtscanner.js
+++ b/amtscanner.js
@@ -1,7 +1,7 @@
/**
* @description MeshCentral Intel(R) AMT Local Scanner
* @author Ylian Saint-Hilaire & Joko Sastriawan
-* @copyright Intel Corporation 2018-2021
+* @copyright Intel Corporation 2018-2022
* @license Apache-2.0
* @version v0.0.1
*/
diff --git a/amtscript.js b/amtscript.js
index ec65b333..0d07f79c 100644
--- a/amtscript.js
+++ b/amtscript.js
@@ -1,7 +1,7 @@
/**
* @fileoverview Script Compiler / Decompiler / Runner
* @author Ylian Saint-Hilaire
-* @copyright Intel Corporation 2018-2021
+* @copyright Intel Corporation 2018-2022
* @license Apache-2.0
* @version v0.1.0e
*/
diff --git a/apprelays.js b/apprelays.js
index b8a45e16..3e203f9c 100644
--- a/apprelays.js
+++ b/apprelays.js
@@ -1,7 +1,7 @@
/**
* @description MeshCentral MSTSC & SSH relay
* @author Ylian Saint-Hilaire & Bryan Roe
-* @copyright Intel Corporation 2018-2021
+* @copyright Intel Corporation 2018-2022
* @license Apache-2.0
* @version v0.0.1
*/
diff --git a/certoperations.js b/certoperations.js
index 037f1402..0d837d82 100644
--- a/certoperations.js
+++ b/certoperations.js
@@ -1,7 +1,7 @@
/**
* @description Certificate generator
* @author Joko Sastriawan / Ylian Saint-Hilaire
-* @copyright Intel Corporation 2018-2021
+* @copyright Intel Corporation 2018-2022
* @license Apache-2.0
* @version v0.0.1
*/
diff --git a/common.js b/common.js
index 40fd128e..7db0da7c 100644
--- a/common.js
+++ b/common.js
@@ -1,7 +1,7 @@
/**
* @description MeshCentral Common Library
* @author Ylian Saint-Hilaire
-* @copyright Intel Corporation 2018-2021
+* @copyright Intel Corporation 2018-2022
* @license Apache-2.0
* @version v0.0.1
*/
diff --git a/db.js b/db.js
index 0bba1cd7..4e7d1e0d 100644
--- a/db.js
+++ b/db.js
@@ -1,7 +1,7 @@
/**
* @description MeshCentral database module
* @author Ylian Saint-Hilaire
-* @copyright Intel Corporation 2018-2021
+* @copyright Intel Corporation 2018-2022
* @license Apache-2.0
* @version v0.0.2
*/
@@ -423,7 +423,16 @@ module.exports.CreateDB = function (parent, func) {
// Get the number of records in the database for various types, this is the slow NeDB way.
// WARNING: This is a terrible query for database performance. Only do this when needed. This query will look at almost every document in the database.
obj.getStats = function (func) {
- if (obj.databaseType == 3) {
+ if (obj.databaseType == 6) {
+ // PostgreSQL
+ // TODO
+ } else if (obj.databaseType == 5) {
+ // MySQL
+ // TODO
+ } else if (obj.databaseType == 4) {
+ // MariaDB
+ // TODO
+ } else if (obj.databaseType == 3) {
// MongoDB
obj.file.aggregate([{ "$group": { _id: "$type", count: { $sum: 1 } } }]).toArray(function (err, docs) {
var counters = {}, totalCount = 0;
@@ -656,13 +665,13 @@ module.exports.CreateDB = function (parent, func) {
} else if (parent.args.mysql) {
// Use MySQL
obj.databaseType = 5;
- var tempDatastore = require('mysql').createConnection(connectionObject);
+ var tempDatastore = require('mysql').createPool(connectionObject);
tempDatastore.query('CREATE DATABASE IF NOT EXISTS ' + dbname, function (error) {
if (error != null) {
console.log('Auto-create database failed: ' + error);
}
connectionObject.database = dbname;
- Datastore = require('mysql').createConnection(connectionObject);
+ Datastore = require('mysql').createPool(connectionObject);
createTablesIfNotExist(dbname);
});
setTimeout(function () { tempDatastore.end(); }, 2000);
@@ -677,32 +686,38 @@ module.exports.CreateDB = function (parent, func) {
const { Pool, Client } = require('pg');
connectinArgs.database = dbname;
Datastore = new Client(connectinArgs);
- Datastore.connect()
- parent.debug('db', 'Checking tables...');
- sqlDbBatchExec([
- 'CREATE TABLE IF NOT EXISTS main (id VARCHAR(256) PRIMARY KEY NOT NULL, type CHAR(32), domain CHAR(64), extra CHAR(255), extraex CHAR(255), doc JSON)',
- 'CREATE TABLE IF NOT EXISTS events(id SERIAL PRIMARY KEY, time TIMESTAMP, domain CHAR(64), action CHAR(255), nodeid CHAR(255), userid CHAR(255), doc JSON)',
- 'CREATE TABLE IF NOT EXISTS eventids(fkid INT NOT NULL, target CHAR(255), CONSTRAINT fk_eventid FOREIGN KEY (fkid) REFERENCES events (id) ON DELETE CASCADE ON UPDATE RESTRICT)',
- 'CREATE TABLE IF NOT EXISTS serverstats (time TIMESTAMP PRIMARY KEY, expire TIMESTAMP, doc JSON)',
- 'CREATE TABLE IF NOT EXISTS power (id SERIAL PRIMARY KEY, time TIMESTAMP, nodeid CHAR(255), doc JSON)',
- 'CREATE TABLE IF NOT EXISTS smbios (id CHAR(255) PRIMARY KEY, time TIMESTAMP, expire TIMESTAMP, doc JSON)',
- 'CREATE TABLE IF NOT EXISTS plugin (id SERIAL PRIMARY KEY, doc JSON)'
- ], function (results) {
- parent.debug('db', 'Checking indexes...');
- sqlDbExec('CREATE INDEX ndxtypedomainextra ON main (type, domain, extra)', null, function (err, response) { });
- sqlDbExec('CREATE INDEX ndxextra ON main (extra)', null, function (err, response) { });
- sqlDbExec('CREATE INDEX ndxextraex ON main (extraex)', null, function (err, response) { });
- sqlDbExec('CREATE INDEX ndxeventstime ON events(time)', null, function (err, response) { });
- sqlDbExec('CREATE INDEX ndxeventsusername ON events(domain, userid, time)', null, function (err, response) { });
- sqlDbExec('CREATE INDEX ndxeventsdomainnodeidtime ON events(domain, nodeid, time)', null, function (err, response) { });
- sqlDbExec('CREATE INDEX ndxeventids ON eventids(target)', null, function (err, response) { });
- sqlDbExec('CREATE INDEX ndxserverstattime ON serverstats (time)', null, function (err, response) { });
- sqlDbExec('CREATE INDEX ndxserverstatexpire ON serverstats (expire)', null, function (err, response) { });
- sqlDbExec('CREATE INDEX ndxpowernodeidtime ON power (nodeid, time)', null, function (err, response) { });
- sqlDbExec('CREATE INDEX ndxsmbiostime ON smbios (time)', null, function (err, response) { });
- sqlDbExec('CREATE INDEX ndxsmbiosexpire ON smbios (expire)', null, function (err, response) { });
+ Datastore.connect();
+ if (err == null) {
+ // Database was created, create the tables
+ parent.debug('db', 'Creating tables...');
+ sqlDbBatchExec([
+ 'CREATE TABLE IF NOT EXISTS main (id VARCHAR(256) PRIMARY KEY NOT NULL, type CHAR(32), domain CHAR(64), extra CHAR(255), extraex CHAR(255), doc JSON)',
+ 'CREATE TABLE IF NOT EXISTS events(id SERIAL PRIMARY KEY, time TIMESTAMP, domain CHAR(64), action CHAR(255), nodeid CHAR(255), userid CHAR(255), doc JSON)',
+ 'CREATE TABLE IF NOT EXISTS eventids(fkid INT NOT NULL, target CHAR(255), CONSTRAINT fk_eventid FOREIGN KEY (fkid) REFERENCES events (id) ON DELETE CASCADE ON UPDATE RESTRICT)',
+ 'CREATE TABLE IF NOT EXISTS serverstats (time TIMESTAMP PRIMARY KEY, expire TIMESTAMP, doc JSON)',
+ 'CREATE TABLE IF NOT EXISTS power (id SERIAL PRIMARY KEY, time TIMESTAMP, nodeid CHAR(255), doc JSON)',
+ 'CREATE TABLE IF NOT EXISTS smbios (id CHAR(255) PRIMARY KEY, time TIMESTAMP, expire TIMESTAMP, doc JSON)',
+ 'CREATE TABLE IF NOT EXISTS plugin (id SERIAL PRIMARY KEY, doc JSON)'
+ ], function (results) {
+ parent.debug('db', 'Creating indexes...');
+ sqlDbExec('CREATE INDEX ndxtypedomainextra ON main (type, domain, extra)', null, function (err, response) { });
+ sqlDbExec('CREATE INDEX ndxextra ON main (extra)', null, function (err, response) { });
+ sqlDbExec('CREATE INDEX ndxextraex ON main (extraex)', null, function (err, response) { });
+ sqlDbExec('CREATE INDEX ndxeventstime ON events(time)', null, function (err, response) { });
+ sqlDbExec('CREATE INDEX ndxeventsusername ON events(domain, userid, time)', null, function (err, response) { });
+ sqlDbExec('CREATE INDEX ndxeventsdomainnodeidtime ON events(domain, nodeid, time)', null, function (err, response) { });
+ sqlDbExec('CREATE INDEX ndxeventids ON eventids(target)', null, function (err, response) { });
+ sqlDbExec('CREATE INDEX ndxserverstattime ON serverstats (time)', null, function (err, response) { });
+ sqlDbExec('CREATE INDEX ndxserverstatexpire ON serverstats (expire)', null, function (err, response) { });
+ sqlDbExec('CREATE INDEX ndxpowernodeidtime ON power (nodeid, time)', null, function (err, response) { });
+ sqlDbExec('CREATE INDEX ndxsmbiostime ON smbios (time)', null, function (err, response) { });
+ sqlDbExec('CREATE INDEX ndxsmbiosexpire ON smbios (expire)', null, function (err, response) { });
+ setupFunctions(func);
+ });
+ } else {
+ // Database already existed, skip table and index creation
setupFunctions(func);
- });
+ }
});
} else if (parent.args.mongodb) {
// Use MongoDB
@@ -1103,7 +1118,7 @@ module.exports.CreateDB = function (parent, func) {
else if (results.command == 'SELECT') {
for (var i in results.rows) { if (results.rows[i].doc) { if (typeof results.rows[i].doc == 'string') { docs.push(JSON.parse(results.rows[i].doc)); } else { docs.push(results.rows[i].doc); } } }
}
- if (func) { try { func(null, docs); } catch (ex) { console.log('SQLERR5', ex); } }
+ if (func) { try { func(null, docs, results); } catch (ex) { console.log('SQLERR5', ex); } }
}
});
}
@@ -1260,7 +1275,7 @@ module.exports.CreateDB = function (parent, func) {
obj.RemoveAllEvents = function (domain) { sqlDbQuery('DELETE FROM events', null, function (err, docs) { }); };
obj.RemoveAllNodeEvents = function (domain, nodeid) { if ((domain == null) || (nodeid == null)) return; sqlDbQuery('DELETE FROM events WHERE domain = $1 AND nodeid = $2', [domain, nodeid], function (err, docs) { }); };
obj.RemoveAllUserEvents = function (domain, userid) { if ((domain == null) || (userid == null)) return; sqlDbQuery('DELETE FROM events WHERE domain = $1 AND userid = $2', [domain, userid], function (err, docs) { }); };
- obj.GetFailedLoginCount = function (userid, domainid, lastlogin, func) { sqlDbExec('SELECT COUNT(id) FROM events WHERE action = "authfail" AND domain = $1 AND userid = $2 AND time > $3', [domainid, userid, lastlogin], function (err, response) { func(err == null ? response['COUNT(id)'] : 0); }); }
+ obj.GetFailedLoginCount = function (userid, domainid, lastlogin, func) { sqlDbQuery('SELECT COUNT(*) FROM events WHERE action = \'authfail\' AND domain = $1 AND userid = $2 AND time > $3', [domainid, userid, lastlogin], function (err, response, raw) { func(err == null ? parseInt(raw.rows[0].count) : 0); }); }
// Database actions on the power collection
obj.getAllPower = function (func) { sqlDbQuery('SELECT doc FROM power', null, func); };
@@ -1305,10 +1320,10 @@ module.exports.CreateDB = function (parent, func) {
// Get database information (TODO: Complete this)
obj.getDbStats = function (func) {
obj.stats = { c: 4 };
- sqlDbExec('SELECT COUNT(id) FROM main', null, function (err, response) { obj.stats.meshcentral = response['COUNT(id)']; if (--obj.stats.c == 0) { delete obj.stats.c; func(obj.stats); } });
- sqlDbExec('SELECT COUNT(time) FROM serverstats', null, function (err, response) { obj.stats.serverstats = response['COUNT(time)']; if (--obj.stats.c == 0) { delete obj.stats.c; func(obj.stats); } });
- sqlDbExec('SELECT COUNT(id) FROM power', null, function (err, response) { obj.stats.power = response['COUNT(id)']; if (--obj.stats.c == 0) { delete obj.stats.c; func(obj.stats); } });
- sqlDbExec('SELECT COUNT(id) FROM smbios', null, function (err, response) { obj.stats.smbios = response['COUNT(id)']; if (--obj.stats.c == 0) { delete obj.stats.c; func(obj.stats); } });
+ sqlDbQuery('SELECT COUNT(*) FROM main', null, function (err, response, raw) { obj.stats.meshcentral = (err == null ? parseInt(raw.rows[0].count) : 0); if (--obj.stats.c == 0) { delete obj.stats.c; func(obj.stats); } });
+ sqlDbQuery('SELECT COUNT(*) FROM serverstats', null, function (err, response, raw) { obj.stats.serverstats = (err == null ? parseInt(raw.rows[0].count) : 0); if (--obj.stats.c == 0) { delete obj.stats.c; func(obj.stats); } });
+ sqlDbQuery('SELECT COUNT(*) FROM power', null, function (err, response, raw) { obj.stats.power = (err == null ? parseInt(raw.rows[0].count) : 0); if (--obj.stats.c == 0) { delete obj.stats.c; func(obj.stats); } });
+ sqlDbQuery('SELECT COUNT(*) FROM smbios', null, function (err, response, raw) { obj.stats.smbios = (err == null ? parseInt(raw.rows[0].count) : 0); if (--obj.stats.c == 0) { delete obj.stats.c; func(obj.stats); } });
}
// Plugin operations
diff --git a/emails/translations/account-check_da.html b/emails/translations/account-check_da.html
index bdaf4ad3..feb0437a 100644
--- a/emails/translations/account-check_da.html
+++ b/emails/translations/account-check_da.html
@@ -7,7 +7,7 @@
- Hej [[[USERNAME]], [[[SERVER NAMN]]] anmoder om e-mailbekræftelse, klik på følgende link for at fuldføre processen.
+ Hej [[[USERNAME]], [[[SERVERNAME]]] anmoder om e-mailbekræftelse, klik på følgende link for at fuldføre processen.
Klik her for at bekræfte din e-mailadresse.
diff --git a/emails/translations/account-check_pt-br.html b/emails/translations/account-check_pt-br.html
index fb815890..109ea30f 100644
--- a/emails/translations/account-check_pt-br.html
+++ b/emails/translations/account-check_pt-br.html
@@ -7,7 +7,7 @@
- Olá [[[NOME DE USUÁRIO]]], [[[NOME DO SERVIDOR]]] está solicitando verificação de e-mail, clique no link a seguir para concluir o processo.
+ Olá [[[NOME DE USUÁRIO]]], [[[SERVERNAME]]] está solicitando verificação de e-mail, clique no link a seguir para concluir o processo.
Clique aqui para verificar seu endereço de e-mail.
diff --git a/emails/translations/account-check_sv.html b/emails/translations/account-check_sv.html
index fc644b21..dfa7812e 100644
--- a/emails/translations/account-check_sv.html
+++ b/emails/translations/account-check_sv.html
@@ -7,7 +7,7 @@
- Hej [[[USERNAME]], [[[SERVER NAMN]]] begär e-postverifiering, klicka på följande länk för att slutföra processen.
+ Hej [[[USERNAME]], [[[SERVERNAME]]] begär e-postverifiering, klicka på följande länk för att slutföra processen.
Klicka här för att verifiera din e-postadress.
diff --git a/emails/translations/account-invite_da.html b/emails/translations/account-invite_da.html
index 407eceb2..867ae2c3 100644
--- a/emails/translations/account-invite_da.html
+++ b/emails/translations/account-invite_da.html
@@ -14,6 +14,6 @@
Venlig hilsen,
- [[[BRUGERNAVN]]]
+ [[[USERNAME]]]