From f079170b7086af958062addb55a4ff82334151d7 Mon Sep 17 00:00:00 2001 From: yair-mantis Date: Wed, 15 Feb 2023 18:21:20 +0200 Subject: [PATCH 01/11] corrected links --- readme.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index 45272aff..0ddd1704 100644 --- a/readme.md +++ b/readme.md @@ -23,11 +23,11 @@ For more information, [visit MeshCentral.com](https://www.meshcentral.com). [BlogSpot](https://meshcentral2.blogspot.com/) ## Documentation -The [User's Guide](https://info.meshcentral.com/downloads/MeshCentral2/MeshCentral2UserGuide.pdf) contains information every adminstrator should know including usage, the server configuration file, databases, TLS offloading, Lets Encrypt, IP Filtering, Email setup, embedding, server port aliasing, reverse proxy setup, multi factor authentication, branding & terms of use, HashiCorp Vault support, and SSO. +The [User's Guide](https://meshcentral.com/info/docs/MeshCentral2UserGuide.pdf) contains information every adminstrator should know including usage, the server configuration file, databases, TLS offloading, Lets Encrypt, IP Filtering, Email setup, embedding, server port aliasing, reverse proxy setup, multi factor authentication, branding & terms of use, HashiCorp Vault support, and SSO. -The [Installation Guide](https://info.meshcentral.com/downloads/MeshCentral2/MeshCentral2InstallGuide.pdf) has detailed instructions for installing the MeshCentral Server on Windows 8.1, Windows 10, Windows 2012 R2, Amazon Linux 2, Raspberry Pi, Microsoft Azure, Google Cloud, Ubuntu 18, Ubuntu 16 and OpenBSD. +The [Installation Guide](https://meshcentral.com/info/docs/MeshCentral2InstallGuide.pdf) has detailed instructions for installing the MeshCentral Server on Windows 8.1, Windows 10, Windows 2012 R2, Amazon Linux 2, Raspberry Pi, Microsoft Azure, Google Cloud, Ubuntu 18, Ubuntu 16 and OpenBSD. -The [Design and Architecture Guide](https://info.meshcentral.com/downloads/MeshCentral2/MeshCentral2DesignArchitecture.pdf) is a short document that includes information on the design overview, dependencies, source code descriptions of each file, certificates, TLS security, the agent to server handshake, browser to agent relay and WebRTC and the messenger service. +The [Design and Architecture Guide](https://meshcentral.com/info/docs/MeshCentral2DesignArchitecture.pdf) is a short document that includes information on the design overview, dependencies, source code descriptions of each file, certificates, TLS security, the agent to server handshake, browser to agent relay and WebRTC and the messenger service. [New Searchable Documentation](https://ylianst.github.io/MeshCentral/) @@ -69,4 +69,4 @@ If you are having issues with the following other products, you should file a re [MeshRouter](https://github.com/Ylianst/MeshCentralRouter/issues) ## License -This software is licensed under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0). \ No newline at end of file +This software is licensed under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0). From 250f2e1b854439ddda1920a760905a8928d78715 Mon Sep 17 00:00:00 2001 From: yair-mantis Date: Wed, 15 Feb 2023 18:50:32 +0200 Subject: [PATCH 02/11] more broken pdf links --- docs/docs/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/docs/index.md b/docs/docs/index.md index c9b2b71b..2f82ffdb 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -20,11 +20,11 @@ For more information, [visit MeshCentral.com](https://www.meshcentral.com/). ## Documentation -The [User's Guide](https://info.meshcentral.com/downloads/MeshCentral2/MeshCentral2UserGuide.pdf) contains information every adminstrator should know including usage, the server configuration file, databases, TLS offloading, Lets Encrypt, IP Filtering, Email setup, embedding, server port aliasing, reverse proxy setup, multi factor authentication, branding & terms of use, HashiCorp Vault support, and SSO. +The [User's Guide](https://meshcentral.com/info/docs/MeshCentral2UserGuide.pdf) contains information every adminstrator should know including usage, the server configuration file, databases, TLS offloading, Lets Encrypt, IP Filtering, Email setup, embedding, server port aliasing, reverse proxy setup, multi factor authentication, branding & terms of use, HashiCorp Vault support, and SSO. -The [Installation Guide](https://info.meshcentral.com/downloads/MeshCentral2/MeshCentral2InstallGuide.pdf) has detailed instructions for installing the MeshCentral Server on Windows 8.1, Windows 10, Windows 2012 R2, Amazon Linux 2, Raspberry Pi, Microsoft Azure, Google Cloud, Ubuntu 18, Ubuntu 16 and OpenBSD. +The [Installation Guide](https://meshcentral.com/info/docs/MeshCentral2InstallGuide.pdf) has detailed instructions for installing the MeshCentral Server on Windows 8.1, Windows 10, Windows 2012 R2, Amazon Linux 2, Raspberry Pi, Microsoft Azure, Google Cloud, Ubuntu 18, Ubuntu 16 and OpenBSD. -The [Design and Architecture Guide](https://info.meshcentral.com/downloads/MeshCentral2/MeshCentral2DesignArchitecture.pdf) is a short document that includes information on the design overview, dependencies, source code descriptions of each file, certificates, TLS security, the agent to server handshake, browser to agent relay and WebRTC and the messenger service. +The [Design and Architecture Guide](https://meshcentral.com/info/docs/MeshCentral2DesignArchitecture.pdf) is a short document that includes information on the design overview, dependencies, source code descriptions of each file, certificates, TLS security, the agent to server handshake, browser to agent relay and WebRTC and the messenger service. ## Video Tutorials From 618ab19693d544e6d60720ee8eb17f6e1df6638b Mon Sep 17 00:00:00 2001 From: yair-mantis Date: Wed, 15 Feb 2023 18:54:04 +0200 Subject: [PATCH 03/11] broken exe link for meshCentral Router --- docs/docs/meshrouter/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/meshrouter/index.md b/docs/docs/meshrouter/index.md index 057b0515..fe05c6c2 100644 --- a/docs/docs/meshrouter/index.md +++ b/docs/docs/meshrouter/index.md @@ -21,7 +21,7 @@ MeshCentral is a remote management web site that connects users to remote comput ## Downloading MeshCentral router is a Windows application that comes built-into the MeshCentral server or can -be downloaded at: +be downloaded at: It’s probably best to use the MeshCentral router that comes with your version of the MeshCentral server as the two will likely be most compatible. A given MeshCentral Router version may not From aca0e7aab4f660f4bb3ba626024227a116b326ff Mon Sep 17 00:00:00 2001 From: silversword411 Date: Fri, 24 Feb 2023 17:08:34 -0500 Subject: [PATCH 04/11] Adding vscode json editing https://github.com/Ylianst/MeshCentral/discussions/5004 --- .../images/2023-02-24vscodejsonediting.png | Bin 0 -> 103099 bytes docs/docs/meshcentral/tipsntricks.md | 27 ++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 docs/docs/meshcentral/images/2023-02-24vscodejsonediting.png diff --git a/docs/docs/meshcentral/images/2023-02-24vscodejsonediting.png b/docs/docs/meshcentral/images/2023-02-24vscodejsonediting.png new file mode 100644 index 0000000000000000000000000000000000000000..114e575ba0dfed27338e8f95c9514b40f35870a4 GIT binary patch literal 103099 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 Date: Tue, 28 Feb 2023 18:08:53 -0500 Subject: [PATCH 05/11] Update default-mobile.handlebars Adding the espace key on the send key list on the mobile view --- views/default-mobile.handlebars | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/default-mobile.handlebars b/views/default-mobile.handlebars index a62288b3..9b4cbd7c 100644 --- a/views/default-mobile.handlebars +++ b/views/default-mobile.handlebars @@ -4354,7 +4354,7 @@ QH('deskButtonMenu', x); } - var keyStrings = { 8: "BackSpace", 9: "Tab", 13: "Enter", 27: "Escape", 44 : "Print Screen", 45: "Insert", 46: "Del", 36: "Home", 35: "End", 33: "Page Up", 34: "Page Down", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 0: "None" } + var keyStrings = { 8 : "BackSpace", 9 : "Tab", 13 : "Enter", 27 : "Escape", 44 : "Print Screen", 45 : "Insert", 46 : "Del", 36 : "Home", 35 : "End", 32 : "Espace", 33 : "Page Up", 34 : "Page Down", 37 : "Left", 38 : "Up", 39 : "Right", 40 : "Down", 0 : "None" } function keyShortcutTotext(n) { var x = []; @@ -6946,4 +6946,4 @@ - \ No newline at end of file + From d2d6e95dd95b91a022064ad060a59e61666cb28d Mon Sep 17 00:00:00 2001 From: tryao Date: Wed, 8 Mar 2023 11:30:33 +0800 Subject: [PATCH 06/11] fix(docker): allow usage of external mongodb --- docker/Dockerfile | 1 + docker/readme.md | 9 +++++--- docker/startup.sh | 54 ++++++++++++++++++++++++++--------------------- 3 files changed, 37 insertions(+), 27 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index d1f2e827..f14f915b 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -58,6 +58,7 @@ ENV CONFIG_FILE="config.json" ENV USE_MONGODB="false" ENV MONGO_INITDB_ROOT_USERNAME="root" ENV MONGO_INITDB_ROOT_PASSWORD="pass" +ENV MONGO_URL="" ENV HOSTNAME="localhost" ENV ALLOW_NEW_ACCOUNTS="true" ENV ALLOWPLUGINS="false" diff --git a/docker/readme.md b/docker/readme.md index 63ee201e..48cf1e78 100644 --- a/docker/readme.md +++ b/docker/readme.md @@ -13,11 +13,15 @@ # Templates ## .env +You can place the `config.json` file directly under `./meshcentral/data/`, or use the following `.env` file instead. ```ini NODE_ENV=production -# initial mongodb-variables +USE_MONGODB=false +# set already exist mongo connection string url here +MONGO_URL= +# or set following init params for new mongodb, use it with docker-compose file with mongodb version MONGO_INITDB_ROOT_USERNAME=mongodbadmin MONGO_INITDB_ROOT_PASSWORD=mongodbpasswd @@ -26,8 +30,7 @@ MONGO_INITDB_ROOT_PASSWORD=mongodbpasswd # your hostname HOSTNAME=my.domain.com -USE_MONGODB=false -# set to your reverse proxy IP if you want to put meshcentral behind a reverse proxy +# set to your reverse proxy IP if you want to put meshcentral behind a reverse proxy REVERSE_PROXY=false REVERSE_PROXY_TLS_PORT= # set to true if you wish to enable iframe support diff --git a/docker/startup.sh b/docker/startup.sh index 4333f45f..4d29b877 100644 --- a/docker/startup.sh +++ b/docker/startup.sh @@ -1,28 +1,34 @@ #!/bin/bash -if [ -f "meshcentral-data/${CONFIG_FILE}" ] - then - node meshcentral/meshcentral --configfile ${CONFIG_FILE} - else - cp config.json.template meshcentral-data/${CONFIG_FILE} - if ! [ -z "$USE_MONGODB" ] && [ "$USE_MONGODB" == "true" ]; then - sed -i "s/\"_mongoDb\": null/\"mongoDb\": \"mongodb:\/\/$MONGO_INITDB_ROOT_USERNAME:$MONGO_INITDB_ROOT_PASSWORD@mongodb:27017\"/" meshcentral-data/${CONFIG_FILE} +if [ -f "meshcentral-data/${CONFIG_FILE}" ]; then + node meshcentral/meshcentral --configfile "${CONFIG_FILE}" +else + cp config.json.template meshcentral-data/"${CONFIG_FILE}" + if [ -n "$USE_MONGODB" ] && [ "$USE_MONGODB" == "true" ]; then + if [ -z "$MONGO_URL" ]; then + prefix="" + if [ -n "$MONGO_INITDB_ROOT_USERNAME" ] && [ -n "$MONGO_INITDB_ROOT_PASSWORD" ]; then + prefix="$MONGO_INITDB_ROOT_USERNAME:$MONGO_INITDB_ROOT_PASSWORD@" + fi + MONGO_URL="${prefix}mongodb:27017" fi - sed -i "s/\"cert\": \"myserver.mydomain.com\"/\"cert\": \"$HOSTNAME\"/" meshcentral-data/${CONFIG_FILE} - sed -i "s/\"NewAccounts\": true/\"NewAccounts\": $ALLOW_NEW_ACCOUNTS/" meshcentral-data/${CONFIG_FILE} - sed -i "s/\"enabled\": false/\"enabled\": $ALLOWPLUGINS/" meshcentral-data/${CONFIG_FILE} - sed -i "s/\"localSessionRecording\": false/\"localSessionRecording\": $LOCALSESSIONRECORDING/" meshcentral-data/${CONFIG_FILE} - sed -i "s/\"minify\": true/\"minify\": $MINIFY/" meshcentral-data/${CONFIG_FILE} - sed -i "s/\"WebRTC\": false/\"WebRTC\": $WEBRTC/" meshcentral-data/${CONFIG_FILE} - sed -i "s/\"AllowFraming\": false/\"AllowFraming\": $IFRAME/" meshcentral-data/${CONFIG_FILE} - if [ -z "$SESSION_KEY" ]; then - SESSION_KEY="$(cat /dev/urandom | tr -dc 'A-Za-z0-9!#$%&()*+,-./:;<=>?@[\]^_`{|}~' | fold -w 32 | head -n 1)"; - fi - sed -i "s/\"_sessionKey\": \"MyReallySecretPassword1\"/\"sessionKey\": \"$SESSION_KEY\"/" meshcentral-data/${CONFIG_FILE} - if [ "$REVERSE_PROXY" != "false" ]; then - sed -i "s/\"_certUrl\": \"my\.reverse\.proxy\"/\"certUrl\": \"https:\/\/$REVERSE_PROXY:$REVERSE_PROXY_TLS_PORT\"/" meshcentral-data/${CONFIG_FILE} - node meshcentral/meshcentral --configfile ${CONFIG_FILE} - exit - fi - node meshcentral/meshcentral --configfile ${CONFIG_FILE} --cert "$HOSTNAME" + sed -i "s/\"_mongoDb\": null/\"mongoDb\": \"mongodb:\/\/$MONGO_URL\"/" meshcentral-data/"${CONFIG_FILE}" + fi + sed -i "s/\"cert\": \"myserver.mydomain.com\"/\"cert\": \"$HOSTNAME\"/" meshcentral-data/"${CONFIG_FILE}" + sed -i "s/\"NewAccounts\": true/\"NewAccounts\": $ALLOW_NEW_ACCOUNTS/" meshcentral-data/"${CONFIG_FILE}" + sed -i "s/\"enabled\": false/\"enabled\": $ALLOWPLUGINS/" meshcentral-data/"${CONFIG_FILE}" + sed -i "s/\"localSessionRecording\": false/\"localSessionRecording\": $LOCALSESSIONRECORDING/" meshcentral-data/"${CONFIG_FILE}" + sed -i "s/\"minify\": true/\"minify\": $MINIFY/" meshcentral-data/"${CONFIG_FILE}" + sed -i "s/\"WebRTC\": false/\"WebRTC\": $WEBRTC/" meshcentral-data/"${CONFIG_FILE}" + sed -i "s/\"AllowFraming\": false/\"AllowFraming\": $IFRAME/" meshcentral-data/"${CONFIG_FILE}" + if [ -z "$SESSION_KEY" ]; then + SESSION_KEY="$(cat /dev/urandom | tr -dc 'A-Za-z0-9!#$%&()*+,-./:;<=>?@[\]^_`{|}~' | fold -w 32 | head -n 1)" + fi + sed -i "s/\"_sessionKey\": \"MyReallySecretPassword1\"/\"sessionKey\": \"$SESSION_KEY\"/" meshcentral-data/"${CONFIG_FILE}" + if [ "$REVERSE_PROXY" != "false" ]; then + sed -i "s/\"_certUrl\": \"my\.reverse\.proxy\"/\"certUrl\": \"https:\/\/$REVERSE_PROXY:$REVERSE_PROXY_TLS_PORT\"/" meshcentral-data/"${CONFIG_FILE}" + node meshcentral/meshcentral --configfile "${CONFIG_FILE}" + exit + fi + node meshcentral/meshcentral --configfile "${CONFIG_FILE}" --cert "$HOSTNAME" fi From 7c011b138a3818725a59b85d47c431c2b25c8c2a Mon Sep 17 00:00:00 2001 From: tryao Date: Thu, 16 Mar 2023 15:22:07 +0800 Subject: [PATCH 07/11] fix(translate): some wrong zhs words --- translate/translate.json | 46 ++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/translate/translate.json b/translate/translate.json index 9e1a9fbf..bb4c7976 100644 --- a/translate/translate.json +++ b/translate/translate.json @@ -9697,7 +9697,7 @@ "ru": "Alt", "sv": "Alt", "tr": "Alt", - "zh-chs": "替代", + "zh-chs": "Alt", "zh-cht": "Alt", "hu": "Alt", "xloc": [ @@ -9727,8 +9727,8 @@ "ru": "Альтернативная оболочка", "sv": "Alt Shell", "tr": "Alt Kabuk", - "zh-chs": "替代壳", - "zh-cht": "替代殼", + "zh-chs": "替代Shell", + "zh-cht": "替代Shell", "hu": "Alternatív Shell", "xloc": [ "default.handlebars->47->1280" @@ -20532,8 +20532,8 @@ "ru": "Del", "sv": "Del", "tr": "del", - "zh-chs": "德尔", - "zh-cht": "德爾", + "zh-chs": "Del", + "zh-cht": "Del", "hu": "Del", "xloc": [ "default-mobile.handlebars->11->422", @@ -35303,7 +35303,7 @@ "ru": "Если вы не инициировали этот запрос, игнорируйте это письмо.", "sv": "Om du inte initierade denna begäran, ignorerar du det här meddelandet.", "tr": "Bu isteği siz başlatmadıysanız, lütfen bu postayı dikkate almayın.", - "zh-chs": "如果您没有发起此请求,请不理此邮件。", + "zh-chs": "如果您没有发起此请求,请忽略此邮件。", "zh-cht": "如果你沒有發起此請求,請不理此電郵。", "hu": "Ha nem Ön kezdeményezte ezt a kérést, kérjük, hagyja figyelmen kívül ezt a levelet.", "xloc": [ @@ -41037,8 +41037,8 @@ "ru": "Left", "sv": "Vänster", "tr": "Sol", - "zh-chs": "剩下", - "zh-cht": "剩下", + "zh-chs": "左", + "zh-cht": "左", "hu": "Bal", "xloc": [ "default-mobile.handlebars->11->427", @@ -61030,8 +61030,8 @@ "ru": "Right", "sv": "Rätt", "tr": "Doğru", - "zh-chs": "正确的", - "zh-cht": "正確的", + "zh-chs": "右", + "zh-cht": "右", "hu": "Jobb", "xloc": [ "default-mobile.handlebars->11->429", @@ -66340,8 +66340,8 @@ "ru": "Shift", "sv": "Flytta", "tr": "Vardiya", - "zh-chs": "转移", - "zh-cht": "轉移", + "zh-chs": "Shift", + "zh-cht": "Shift", "hu": "Shift", "xloc": [ "default-mobile.handlebars->11->432", @@ -70539,8 +70539,8 @@ "ru": "TAB", "sv": "FLIK", "tr": "Sekme", - "zh-chs": "标签", - "zh-cht": "標籤", + "zh-chs": "TAB", + "zh-cht": "TAB", "hu": "TAB" }, { @@ -70812,8 +70812,8 @@ "ru": "Tab", "sv": "Flik", "tr": "Sekme", - "zh-chs": "标签", - "zh-cht": "標籤", + "zh-chs": "Tab", + "zh-cht": "Tab", "hu": "Tab", "xloc": [ "default-mobile.handlebars->11->417", @@ -75590,8 +75590,8 @@ "ru": "Up", "sv": "Upp", "tr": "Yukarı", - "zh-chs": "返回", - "zh-cht": "向上", + "zh-chs": "上", + "zh-cht": "上", "hu": "Fel", "xloc": [ "default-mobile.handlebars->11->428", @@ -81566,7 +81566,7 @@ "ru": "[[0]] токен доступа: [[1]]", "sv": "[[0]] åtkomsttoken är: [[1]]", "tr": "[[0]] erişim anahtarı: [[1]]", - "zh-chs": "[[0]]访问保安编码是:[[1]]", + "zh-chs": "[[0]]访问令牌是:[[1]]", "zh-cht": "[[0]]訪問保安編碼是:[[1]]", "hu": "[[0]] hozzáférés token: [[1]]", "xloc": [ @@ -81926,7 +81926,7 @@ "ru": "[[[SERVERNAME]]] - подтверждение по электронной почте", "sv": "[[[SERVERNAME]]] - E-postverifiering", "tr": "[[[SERVERNAME]]] - E-posta Doğrulaması", - "zh-chs": "更改邮件地址", + "zh-chs": "[[[SERVERNAME]]] - 邮件验证", "zh-cht": "[[[SERVERNAME]]] - 電郵驗證", "hu": "[[[SERVERNAME]]] - Email megerősítés", "xloc": [ @@ -84419,7 +84419,7 @@ "ru": "time, type, action, user, message", "sv": "tid, typ, åtgärd, användare, meddelande", "tr": "zaman, tür, işlem, kullanıcı, mesaj", - "zh-chs": "时间,类型,指令,用户,消息", + "zh-chs": "时间,打字,指令,用户,消息", "zh-cht": "時間,類型,指令,用戶,消息", "hu": "time, type, action, user, message" }, @@ -84671,7 +84671,7 @@ "ru": "utc, time, type, action, user, device, message", "sv": "utc, tid, typ, åtgärd, användare, enhet, meddelande", "tr": "utc, saat, tür, işlem, kullanıcı, cihaz, mesaj", - "zh-chs": "utc,时间,类型,指令,用户,设备,消息", + "zh-chs": "utc,时间,打字,指令,用户,设备,消息", "zh-cht": "utc,時間,類型,指令,用戶,裝置,消息", "hu": "utc, time, type, action, user, device, message", "xloc": [ @@ -86816,4 +86816,4 @@ ] } ] -} \ No newline at end of file +} From f3d93c882fb6405d30d07e934328c69955379cc7 Mon Sep 17 00:00:00 2001 From: John Rallis Date: Thu, 30 Mar 2023 15:07:30 +0300 Subject: [PATCH 08/11] add reports to meshctrl The only format that makes sense to me is CSV, node and mesh ids in the sessions report are just too big for terminal view and JSON is inefficient (too much white-space). The first field (group) derives from the groupby arguement and is "0" when no grouping is applicable (e.g. db reports). resolves #3472, resolves #3509 --- meshctrl.js | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/meshctrl.js b/meshctrl.js index acb11e1e..9edc96d5 100644 --- a/meshctrl.js +++ b/meshctrl.js @@ -16,7 +16,7 @@ var settings = {}; const crypto = require('crypto'); const args = require('minimist')(process.argv.slice(2)); const path = require('path'); -const possibleCommands = ['edituser', 'listusers', 'listusersessions', 'listdevicegroups', 'listdevices', 'listusersofdevicegroup', 'listevents', 'logintokens', 'serverinfo', 'userinfo', 'adduser', 'removeuser', 'adddevicegroup', 'removedevicegroup', 'editdevicegroup', 'broadcast', 'showevents', 'addusertodevicegroup', 'removeuserfromdevicegroup', 'addusertodevice', 'removeuserfromdevice', 'sendinviteemail', 'generateinvitelink', 'config', 'movetodevicegroup', 'deviceinfo', 'removedevice', 'editdevice', 'addusergroup', 'listusergroups', 'removeusergroup', 'runcommand', 'shell', 'upload', 'download', 'deviceopenurl', 'devicemessage', 'devicetoast', 'addtousergroup', 'removefromusergroup', 'removeallusersfromusergroup', 'devicesharing', 'devicepower', 'indexagenterrorlog', 'agentdownload']; +const possibleCommands = ['edituser', 'listusers', 'listusersessions', 'listdevicegroups', 'listdevices', 'listusersofdevicegroup', 'listevents', 'logintokens', 'serverinfo', 'userinfo', 'adduser', 'removeuser', 'adddevicegroup', 'removedevicegroup', 'editdevicegroup', 'broadcast', 'showevents', 'addusertodevicegroup', 'removeuserfromdevicegroup', 'addusertodevice', 'removeuserfromdevice', 'sendinviteemail', 'generateinvitelink', 'config', 'movetodevicegroup', 'deviceinfo', 'removedevice', 'editdevice', 'addusergroup', 'listusergroups', 'removeusergroup', 'runcommand', 'shell', 'upload', 'download', 'deviceopenurl', 'devicemessage', 'devicetoast', 'addtousergroup', 'removefromusergroup', 'removeallusersfromusergroup', 'devicesharing', 'devicepower', 'indexagenterrorlog', 'agentdownload', 'report']; if (args.proxy != null) { try { require('https-proxy-agent'); } catch (ex) { console.log('Missing module "https-proxy-agent", type "npm install https-proxy-agent" to install it.'); return; } } if (args['_'].length == 0) { @@ -69,6 +69,7 @@ if (args['_'].length == 0) { console.log(" DevicePower - Perform wake/sleep/reset/off operations on remote devices."); console.log(" DeviceSharing - View, add and remove sharing links for a given device."); console.log(" AgentDownload - Download an agent of a specific type for a device group."); + console.log(" Report - Create and show a CSV report."); console.log("\r\nSupported login arguments:"); console.log(" --url [wss://server] - Server url, wss://localhost:443 is default."); console.log(" - Use wss://localhost:443?key=xxx if login key is required."); @@ -275,6 +276,11 @@ if (args['_'].length == 0) { else { ok = true; } break; } + case 'report': { + if (args.type == null) { console.log(winRemoveSingleQuotes("Missing report type, use --type '[reporttype]'")); } + else { ok = true; } + break; + } case 'help': { if (args['_'].length < 2) { console.log("Get help on an action. Type:\r\n\r\n help [action]\r\n\r\nPossible actions are: " + possibleCommands.join(', ') + '.'); @@ -961,6 +967,20 @@ if (args['_'].length == 0) { console.log(" --title [title] - Toast title, default is \"MeshCentral\"."); break; } + case 'report': { + console.log("Generate a CSV report, Example usages:\r\n"); + console.log(" MeshCtrl Report --type sessions --devicegroup mesh//..."); + console.log(" MeshCtrl Report --type traffic --json"); + console.log(" MeshCtrl Report --type logins --groupby day"); + console.log(" MeshCtrl Report --type db"); + console.log("\r\nOptional arguments:\r\n"); + console.log(" --start [yyyy-mm-ddThh:mm:ss] - Filter the results starting at that date. Defaults to last 24h and last week when used with --groupby day. Usable with sessions, traffic and logins"); + console.log(" --end [yyyy-mm-ddThh:mm:ss] - Filter the results ending at that date. Defaults to now. Usable with sessions, traffic and logins"); + console.log(" --groupby [name] - How to group results. Options: user, day, device. Defaults to user. User and day usable in sessions and logins, device usable in sessions."); + console.log(" --devicegroup [devicegroupid] - Filter the results by device group. Usable in sessions"); + console.log(" --showtraffic - Add traffic data in sessions report"); + break; + } default: { console.log("Get help on an action. Type:\r\n\r\n help [action]\r\n\r\nPossible actions are: " + possibleCommands.join(', ') + '.'); } @@ -1683,6 +1703,41 @@ function serverConnect() { ws.send(JSON.stringify({ action: 'toast', nodeids: [args.id], title: args.title ? args.title : "MeshCentral", msg: args.msg, responseid: 'meshctrl' })); break; } + case 'report': { + var reporttype = 1; + switch(args.type) { + case 'traffic': + reporttype = 2; + break; + case 'logins': + reporttype = 3; + break; + case 'db': + reporttype = 4; + break; + } + + var reportgroupby = 1; + if(args.groupby){ + reportgroupby = args.groupby === 'device' ? 2 : args.groupby === 'day' ? 3: 1; + } + + var start = null, end = null; + if (args.start) { + start = Math.floor(Date.parse(args.start) / 1000); + } else { + start = reportgroupby === 3 ? Math.round(new Date().getTime() / 1000) - (168 * 3600) : Math.round(new Date().getTime() / 1000) - (24 * 3600); + } + if (args.end) { + end = Math.floor(Date.parse(args.end) / 1000); + } else { + end = Math.round(new Date().getTime() / 1000); + } + if (end <= start) { console.log("End time must be ahead of start time."); process.exit(1); return; } + + ws.send(JSON.stringify({ action: 'report', type: reporttype, groupBy: reportgroupby, devGroup: args.devicegroup || null, start, end, tz: Intl.DateTimeFormat().resolvedOptions().timeZone, tf: new Date().getTimezoneOffset(), showTraffic: args.hasOwnProperty('showtraffic'), l: 'en', responseid: 'meshctrl' })); + break; + } } }); @@ -2249,6 +2304,15 @@ function serverConnect() { console.log(data.data); process.exit(); } + case 'report': { + console.log('group,' + data.data.columns.flatMap(c => c.id).join(',')); + Object.keys(data.data.groups).forEach(gk => { + data.data.groups[gk].entries.forEach(e => { + console.log(gk + ',' + Object.values(e).join(',')); + }); + }); + process.exit(); + } default: { break; } } //console.log('Data', data); From 1fcb9124b6c615bcfb5e72ad26c6c52e1c204308 Mon Sep 17 00:00:00 2001 From: John Rallis Date: Thu, 30 Mar 2023 15:10:04 +0300 Subject: [PATCH 09/11] linting I'm a tab person but now it should look better --- meshctrl.js | 78 ++++++++++++++++++++++++++--------------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/meshctrl.js b/meshctrl.js index 9edc96d5..0a87d13c 100644 --- a/meshctrl.js +++ b/meshctrl.js @@ -1704,37 +1704,37 @@ function serverConnect() { break; } case 'report': { - var reporttype = 1; - switch(args.type) { - case 'traffic': - reporttype = 2; - break; - case 'logins': - reporttype = 3; - break; - case 'db': - reporttype = 4; - break; - } - - var reportgroupby = 1; - if(args.groupby){ - reportgroupby = args.groupby === 'device' ? 2 : args.groupby === 'day' ? 3: 1; - } - - var start = null, end = null; - if (args.start) { - start = Math.floor(Date.parse(args.start) / 1000); - } else { - start = reportgroupby === 3 ? Math.round(new Date().getTime() / 1000) - (168 * 3600) : Math.round(new Date().getTime() / 1000) - (24 * 3600); - } - if (args.end) { - end = Math.floor(Date.parse(args.end) / 1000); - } else { - end = Math.round(new Date().getTime() / 1000); - } - if (end <= start) { console.log("End time must be ahead of start time."); process.exit(1); return; } - + var reporttype = 1; + switch(args.type) { + case 'traffic': + reporttype = 2; + break; + case 'logins': + reporttype = 3; + break; + case 'db': + reporttype = 4; + break; + } + + var reportgroupby = 1; + if(args.groupby){ + reportgroupby = args.groupby === 'device' ? 2 : args.groupby === 'day' ? 3: 1; + } + + var start = null, end = null; + if (args.start) { + start = Math.floor(Date.parse(args.start) / 1000); + } else { + start = reportgroupby === 3 ? Math.round(new Date().getTime() / 1000) - (168 * 3600) : Math.round(new Date().getTime() / 1000) - (24 * 3600); + } + if (args.end) { + end = Math.floor(Date.parse(args.end) / 1000); + } else { + end = Math.round(new Date().getTime() / 1000); + } + if (end <= start) { console.log("End time must be ahead of start time."); process.exit(1); return; } + ws.send(JSON.stringify({ action: 'report', type: reporttype, groupBy: reportgroupby, devGroup: args.devicegroup || null, start, end, tz: Intl.DateTimeFormat().resolvedOptions().timeZone, tf: new Date().getTimezoneOffset(), showTraffic: args.hasOwnProperty('showtraffic'), l: 'en', responseid: 'meshctrl' })); break; } @@ -2304,15 +2304,15 @@ function serverConnect() { console.log(data.data); process.exit(); } - case 'report': { - console.log('group,' + data.data.columns.flatMap(c => c.id).join(',')); - Object.keys(data.data.groups).forEach(gk => { - data.data.groups[gk].entries.forEach(e => { - console.log(gk + ',' + Object.values(e).join(',')); - }); - }); + case 'report': { + console.log('group,' + data.data.columns.flatMap(c => c.id).join(',')); + Object.keys(data.data.groups).forEach(gk => { + data.data.groups[gk].entries.forEach(e => { + console.log(gk + ',' + Object.values(e).join(',')); + }); + }); process.exit(); - } + } default: { break; } } //console.log('Data', data); From 6789dda69f5f85ab33f68fa41f8e33dbed90b867 Mon Sep 17 00:00:00 2001 From: John Rallis Date: Fri, 31 Mar 2023 12:01:21 +0300 Subject: [PATCH 10/11] add report to doc --- docs/docs/meshctrl/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/docs/meshctrl/index.md b/docs/docs/meshctrl/index.md index c8f46b1c..859fd614 100644 --- a/docs/docs/meshctrl/index.md +++ b/docs/docs/meshctrl/index.md @@ -274,6 +274,7 @@ devicesharing devicepower indexagenterrorlog agentdownload +report ``` You can get this list by just running MeshCtrl without any argument and can get more information on each action by typing “meshctrl help [action]” From 19c95070b30dcddf6136e8a1d89ea7ff841c88a2 Mon Sep 17 00:00:00 2001 From: Pawel Gardzinski <30794662+pawelg89@users.noreply.github.com> Date: Wed, 12 Apr 2023 15:46:27 +0200 Subject: [PATCH 11/11] Update sharing.handlebars --- views/sharing.handlebars | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/sharing.handlebars b/views/sharing.handlebars index 99db6d95..c08eee74 100644 --- a/views/sharing.handlebars +++ b/views/sharing.handlebars @@ -1908,7 +1908,7 @@ function p13zipFiles() { var inputFiles = [], checkboxes = document.getElementsByName('fd'); for (var i = 0; i < checkboxes.length; i++) { if (checkboxes[i].checked) { inputFiles.push(p13filetree.dir[checkboxes[i].value].n); } } - setDialogMode(2, "Zip Filename", 3, p13zipFilesEx, '', { action: 'zip', path: p13filetreelocation.join('/'), files: inputFiles }); + setDialogMode(2, "Zip Filename", 3, p13zipFilesEx, '', { action: 'zip -r', path: p13filetreelocation.join('/'), files: inputFiles }); focusTextBox('p13renameinput'); p13fileNameCheck(); } @@ -2289,4 +2289,4 @@ start(); - \ No newline at end of file +