Compare commits

...

1315 Commits

Author SHA1 Message Date
stephannn
49da5da9dd
autoAcceptIfLocked and more! (#7319) 2025-10-28 17:20:49 +00:00
si458
1bd06ccded finally add http/s_proxy support for oidc and more in future #6616
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-10-28 16:42:32 +00:00
si458
7681f52ee6 fix modern ui menu opening multiple windows with shift key #7343
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-10-27 17:18:35 +00:00
TheDevRyan
3bcfd031ca
Update to customFiles - Object instead of array (#7384)
* Updated to use Object instead of array, still supports old array
2025-10-27 16:09:10 +00:00
si458
b50d07c183 add interface speed for networking (windows for now) #7354
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-10-27 16:05:35 +00:00
Simon Smith
a051cb5548 try ubuntu-22.04 docker
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-10-27 10:27:10 +00:00
Simon Smith
d0e352c6c8 remove package-lock for docker fixes
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-10-27 10:09:29 +00:00
Simon Smith
d7efb1f3b1 add DISABLE_EXTRACT to dockerfile and max-parallel to fix docker workflows
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-10-27 09:50:15 +00:00
Simon Smith
4137132701 fix dockerfile and improved docker workflow
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-10-27 09:29:57 +00:00
si458
c899ee2404 fix proxmox and nodered websocket web relay issue (no cookies being passed) #7269
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-10-25 18:49:59 +01:00
DaanSelen
6e2f9aad37
feat: add docker healthcheck and expand documentation (#7375) 2025-10-25 16:31:44 +01:00
TheDevRyan
f58217280a
Update dropdown styling (Light/DarkMode) (#7382) 2025-10-25 16:25:32 +01:00
TheDevRyan
29858c65e7
Added loginkey check for server maintenance mode (#7383) 2025-10-25 13:42:09 +01:00
TheDevRyan
d31a7e54dc
Add permission checks to user dropdown menu (#7381)
Menu items are now conditionally rendered based on user rights and server features.
2025-10-25 11:59:55 +01:00
TechWorkz
f9bb7315cc
Update logout redirection logic with key parameter on logoutonidlesessiontimeout (#7379) 2025-10-25 10:32:06 +01:00
Simon Smith
751f6a80e5
update docs script windows
Added installation commands for mkdocs-print-site-plugin and pymdown-extensions.
2025-10-24 23:25:10 +01:00
Simon Smith
d386f02a2e
Add mkdocs-print-site-plugin to docs dependencies 2025-10-24 23:21:11 +01:00
DaanSelen
781c2ea60a
refac(docs): MeshCentral Mkdocs rewrite (#7216)
* Sanitation and cleanup.

* More sanitation.

* Good base.

* Conversion of images to jpeg for background and added border-radius.

* sanitation and css addition.

* Moved documents and further expanded documentation.

* Converting images and setting structure.

* Minor text addition

* [ENH] Improve home page documentation, meshcentral index page documentation

* [ENH]Improve submodules & features page

* [ENH]review and improve how-to-contribute page

* [ENH]review and improve Design and Architecture page

* [ENH] Reviewed and improve 'Other' pages

* reworked advanced page

* Small additions and corrections.

* minor removal of dashes

* [ENH] Review and improve install menu (With related pages) in the docs (#16)

* feat: rewrite entire install directory

---------

Co-authored-by: alain.cisirika <cisirikalain@gmail.com>
Co-authored-by: Daan Selen <dselen@systemec.nl>
2025-10-24 23:12:52 +01:00
TheDevRyan
b96db142c8
Updated Dropdown Style (#7376)
Updated dropdownMenu Missing Styles + Updated Mobile for Translations
2025-10-24 22:32:11 +01:00
TheDevRyan
683b4e882b
Updated DevListToolbar for Mobile (#7377) 2025-10-24 22:04:29 +01:00
Ylian Saint-Hilaire
740a2bfbaa Version 1.1.53 2025-10-24 06:51:19 -07:00
Szymon Sypula
e89f97aaed
Fix OIDC login: ensure Passport callback is defined (#7312)
MeshCentral OIDC strategy was throwing `TypeError: done is not a function`
because the callback was not properly passed when using openid-client.

This patch wraps the OIDC callback to detect missing callback parameters,
extracts user info from the id_token if needed, and ensures `done()` is
called in all code paths, including async group fetching. This restores
functional OIDC logins for Azure AD/Keycloak.

Tested on Azure B2C OIDC

Co-authored-by: Szymon Sypula <szymon.sypula@dieboldnixdorf.com>
2025-10-24 14:03:58 +01:00
si458
bd37bb5391 fix user.links being null #7371
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-10-24 13:18:40 +01:00
TheDevRyan
acd6001a8a
Dropdown Menu - re-design / Updated Notifications Icon (#7372)
* Redesign user dropdown menu with new icons and UI

Replaces the old top menu and UI selection controls with a modern user dropdown menu featuring new icon assets, improved styling, and a UI settings submenu. Updates CSS for layout and responsiveness, adds new PNG icon files, and refactors related JavaScript logic for menu toggling and user image handling.

* Replace user dropdown icons with Font Awesome

Swapped out image-based icons in the user dropdown menu for Font Awesome icon elements. This change reduces reliance on image assets, improves consistency, and simplifies icon management.

* Update icons in user dropdown menu

Replaced the UI Settings, Left bar interface, and night mode icons with more appropriate Font Awesome icons for improved clarity and consistency in the user dropdown menu.

* Fixed menu position for Fixed Width Style

* Updated Dropdown for Translations

Refactored hardcoded dropdown text to support translation handling.

* Updated Translations

* Updated dropdown to close SubMenu on all buttons.

* Removed "UserDummyMenuSpan" Not needed any more as we have removed UIMenu

* Improve notification icon UI and add badge

Replaces the plain notification count with a bell icon and a badge for better visibility. (FA)

* notificationBadge & notificationCount:hover

* Add new translations

Added new translation entries for 'Toggle Dark Mode', 'Toggle Light Mode', 'Toggle Footer Bar', 'Left Bar Interface', and 'Top Bar Interface'

* Updated Dropdown background

* Updated Dark/Light Mode Toggle

* Updated Right Chevron Arrow
2025-10-24 12:18:03 +01:00
TheDevRyan
c7d1c0e18f
Add advanced custom CSS/JS file support per template (#7361)
Introduces a new 'customFiles' array in the config schema for granular domain-level CSS and JavaScript customization. Updates webserver logic to inject custom CSS/JS tags based on template scope, replacing static custom.css/custom.js references in all Handlebars views. Also updates meshctrl.js to support the new config property.
2025-10-24 11:53:37 +01:00
Ylian Saint-Hilaire
e5205f285b Version 1.1.52 2025-10-22 12:23:57 -07:00
TheDevRyan
dd01abc38e
Update login token modal and button behavior (#7360)
* Update login token modal and button behavior

Removes orange background from username and password fields in the login token modal,
updates modal title to 'Login Token Created', disables the OK button, and changes
the Cancel button text to 'Close'. Also adds a 'return false' statement to
account_createLoginTokenEx to keep the modal open upon token creation.

* Added Close and Login Token Created

Added Close and Login Token Created

* Add translations for 'Login Token Created'

Added multiple language translations for the 'Login Token Created' message in translate.json to improve localization support.
2025-10-20 15:02:04 +01:00
TheDevRyan
64ece1df90
Fix remove login token modal callback (#7359)
Corrected the callback function for the ‘Remove Login Token’ modal to properly execute the token removal. The previous implementation incorrectly wrapped the callback in an arrow function returning another function, preventing the logic from running.
2025-10-18 10:42:06 +01:00
TheDevRyan
4140656028
Update plugins page Back Button (#7337)
* Updated plugins page, Back Button + Text
2025-10-15 12:36:34 +01:00
五百藏 康平
bd78975048
japanese translate. (#7345) 2025-10-14 18:23:45 +01:00
si458
1a37425f6e hide installation type correctly on linux binary page in agentinvite #7322
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-10-03 14:13:49 +01:00
panreyes
dedae6c495
Add a custom.js support in the same way we have custom.css (as proposed by Melo-Professional) (#7317)
* Add a custom.js support in the same way we have custom.css (as proposed by Melo-Professional)

* Added empty custom.js to avoid a loading error
2025-10-02 09:51:17 +01:00
si458
819e9c528c package updates
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-09-30 20:48:36 +01:00
si458
f2a2676cbb fix monogdb-js/saslprep actually needs installing #7265
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-09-30 17:45:21 +01:00
si458
4c9729290d fix response_types example in oidc docs
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-09-30 17:09:40 +01:00
si458
7b7c8348c6 fix copy and paste in files for linux devices #7284
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-09-30 10:05:32 +01:00
stephannn
bd3f582b68
manageAllDeviceGroups - Added group support (members of) (#7310) 2025-09-30 09:27:07 +01:00
PTR
63092f16c1
PG-allow special characters in user/pw/dbname (#7307)
* PG-handle special chars with encodeURIComponent

* PG backup-don't use dbname in dumpfile
2025-09-29 18:58:56 +01:00
si458
5d3c3941f4 update package-lock.json
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-09-27 14:25:13 +01:00
Simon Smith
cc9a2d109c update packages
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-09-27 11:39:42 +01:00
Habetdin
c7d096a0e5
[Modern UI] Update Remote Desktop Settings dialog style (#7299) 2025-09-26 17:29:37 +01:00
si458
003e0ded6a update fontawesome to 6.7.2
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-09-25 22:42:34 +01:00
DaanSelen
5032755c29
fix: workflow again where every tag is given. (#7293)
* Workflow split (#14)

* Made the workflow build multiple images for simplicity

* New method

* Trying workflow

* Finalize

* Reset package files to upstream/master

* Edit workflow according to @si458

* Whoops accidentally removed these. Back again.

* Testing out embedded tokens

* Workflow split (#12)

* Made the workflow build multiple images for simplicity

* New method

* Trying workflow

* Finalize

* Reset package files to upstream/master

* Edit workflow according to @si458

* Whoops accidentally removed these. Back again.

* Testing out embedded tokens

---------

Co-authored-by: Daan Selen <dselen@systemec.nl>

* Why the flip do we even use that???

* Testing out suggestions of permissions

* Testing fallback.

* Remove fallback

* Minor removal of comment

---------

Co-authored-by: Daan Selen <dselen@systemec.nl>

* fix: workflow like we want

---------

Co-authored-by: Daan Selen <dselen@systemec.nl>
2025-09-24 20:51:56 +01:00
Habetdin
d4c4a90395
Update Modern UI button styles (#7297) 2025-09-24 20:34:42 +01:00
Ylian Saint-Hilaire
709675ffb7 Version 1.1.51 2025-09-22 13:43:39 -07:00
si458
4295901fc1 fix modern ui missing time dropdown in device action (android)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-09-22 13:09:51 +01:00
DaanSelen
0a837aa96d
refac(docker): fix npm install issues at runtime (#7282)
* Merge into master (#11)

* Made the workflow build multiple images for simplicity

* New method

* Trying workflow

* Finalize

* Reset package files to upstream/master

* Edit workflow according to @si458

* Whoops accidentally removed these. Back again.

* Integrate the syslog compiler

* Changed logging accordingly.

* Looks to be a working prototype

* chore(docker): bump alpine version

* feat: make simon less anxious :P

* refac: dockerfile and some package.json packages to improve compat

* chore: revert package lock

---------

Co-authored-by: Daan Selen <dselen@systemec.nl>
2025-09-18 10:23:12 +01:00
si458
4379eb5f33 fix manifest.json with userAllowedIP using DNS values #7283
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-09-18 10:06:13 +01:00
DaanSelen
f1ddf6e26a
feat: add slim image with no database backends (#7277) 2025-09-16 22:36:23 +01:00
DaanSelen
ea341774e5
refac(docker): half the Docker image size due to deferment of compilation (#7227)
* Merge into master (#11)

* Made the workflow build multiple images for simplicity

* New method

* Trying workflow

* Finalize

* Reset package files to upstream/master

* Edit workflow according to @si458

* Whoops accidentally removed these. Back again.

---------

Co-authored-by: Daan Selen <dselen@systemec.nl>

* Integrate the syslog compiler

* Changed logging accordingly.

* Looks to be a working prototype

* chore(docker): bump alpine version

* feat: make simon less anxious :P

---------

Co-authored-by: Daan Selen <dselen@systemec.nl>
2025-09-16 19:22:36 +01:00
DaanSelen
0f247f835f
feat(workflows): Create multiple docker images for lean image usage (#7222)
Co-authored-by: Daan Selen <dselen@systemec.nl>
2025-09-16 18:41:36 +01:00
si458
ce5111477d return correct responses for removedevices #7273
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-09-16 14:53:26 +01:00
si458
15f6c9d30b fix logout link and loginkey modern mobile ui #7275
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-09-16 14:28:38 +01:00
si458
b66948132a pin duo_universal to 2.1.0 for time being #7272
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-09-15 17:46:35 +01:00
Ylian Saint-Hilaire
dbb4615ce0 Version 1.1.50 2025-09-09 23:50:35 -07:00
si458
760ee24be9 update dompurify to 3.2.6
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-09-09 21:25:36 +01:00
si458
6bcf39610a replace yubikeyotp to avoid form-data cve
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-09-09 15:38:57 +01:00
si458
4bff9f1788 fix guest sharing file download with userallowedip showing unauthorised #7261
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-09-09 10:10:15 +01:00
si458
97f61b3562 finally fix pong reply after 5 years
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-08-30 22:49:52 +01:00
si458
b515576317 remove random console.log ?
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-08-29 12:40:12 +01:00
silversword411
3cf6b9334c
Add MkDocs configuration and tasks for local documentation setup via vscode run and debug (#7251) 2025-08-29 10:10:35 +01:00
si458
d2433cb250 add vnc/rdp/ssh web links to classic mobile ui #7240
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-08-28 13:49:08 +01:00
Ylian Saint-Hilaire
6dfdb5267e Version 1.1.49 2025-08-26 20:47:10 -07:00
Jakub Maruszczak
88ccd14438
encode nodeid parameter in connectTunnel url (#7232) 2025-08-14 13:38:56 +01:00
si458
28f6f5b7e0 fix meshctrl not quitting on shell error #7229
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-08-13 18:09:59 +01:00
PTR
2a9daae82e
Fix backupconfig info (#7228)
- add missing postgresql info
- properly handle new autobackup switch
2025-08-11 18:14:21 +01:00
PTR
87c37ea3f9
Make autobackup: false disable all backup functions and remove cmdline from checkbackup error message. (#7225) 2025-08-11 14:29:34 +01:00
si458
6bb1441330 fix for amt v19+ with cira #7207 #7213
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-08-10 22:33:05 +01:00
Liub0myr
b3ca1f9882
Fix Ukrainian localization for the agent (#7214) 2025-08-06 23:06:06 +01:00
Emmanuel Ferdman
793ec3384c
Fix issues with the minify in translate (#7211)
Signed-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>
2025-08-06 09:43:37 +01:00
si458
8f4a98a781 update packages in docker
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-08-04 22:29:27 +01:00
si458
5c5bcb4152 fix usergroup links not being removed correctly #7198
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-08-01 14:44:53 +01:00
si458
27472852a2 forgot translate for killing process #7197
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-08-01 14:21:53 +01:00
Sammy Ndabo
8c90f5c67d
update readme to improve structure and add community meetings section (#7202) 2025-08-01 13:44:11 +01:00
si458
1e534282ac killing process now shows process name in event logs #7197
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-07-31 15:39:04 +01:00
si458
f723486fc4 fix run commands dark mode visibity #7191
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-07-30 14:43:07 +01:00
si458
a50265a2c5 fix modern ui hide parameter bug #7186
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-07-29 18:28:02 +01:00
si458
9345ee718c fix whitespace, doh!
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-07-24 20:26:40 +01:00
si458
2383280736 dont record end of intel wsman in events
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-07-24 20:02:43 +01:00
si458
a63a1de2f2 fix amt bare-metal checkbox in web ui
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-07-24 17:59:35 +01:00
Ylian Saint-Hilaire
b770086132 Version 1.1.48 2025-07-22 22:53:58 -07:00
si458
ae46993519 fix lastbootuptime not refreshing in list view #7170
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-07-19 12:40:01 +01:00
bundabrg
a7633d27c5
Add initial support for custom stylesheets (#7164)
* Add initial support for custom stylesheets

Allow an override file `custom.css` that can partially override the
stylesheet used for the web interface.

# Changes
1. Update default views to use custom stylesheet
2. Update documentation

Related to: https://github.com/Ylianst/MeshCentral/issues/7144

* Add custom style support to more views

Load `custom.css` in the following views:
- agentinvite.handlebars
- invite.handlebars
- login2.handlebars
- message2.handlebars
- messenger.handlebars
- player.handlebars
- sharing.handlebars
2025-07-18 21:06:00 +01:00
si458
bd670a74b4 update packages for vulnerabilities #7169
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-07-18 20:50:14 +01:00
si458
aa44cfb319 fix prometheus ConnectedIntelAMT crash #7168
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-07-18 13:53:03 +01:00
Roman
baddb42664
Add backgroundContainer class for modal content in night mode in modern ui (#7162)
Introduces the .backgroundContainer class to improve styling of modal content in night mode by setting text color. Updates relevant divs in default3.handlebars to use this class for hardware keys and login events sections. Also adjusts the width of login event entries for better display.
2025-07-17 16:37:20 +01:00
Simon Smith
cebbb68fdd Update translate.json (Fill gaps in language "de") #7160 2025-07-16 21:37:30 +01:00
si458
554999d07f run apf.ashx on agentport
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-07-14 21:37:43 +01:00
Ylian Saint-Hilaire
e891596a3e Version 1.1.47 2025-07-13 17:45:21 -07:00
Ylian Saint-Hilaire
62bfe0aa37 Updated MeshCentral Router 2025-07-13 17:44:42 -07:00
mstrhakr
4565158b94
Update 'Preset OpenID Connect Configurations' section of documentation. (#7150)
* fix documentation for OpenID Connect presets and clarify tenant_id usage

* remove redundant introduction section from OpenID Connect strategy documentation
2025-07-13 07:33:33 +01:00
si458
6feebaee57 fix meshctrl with individual devices
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-07-12 12:57:52 +01:00
si458
4a48ea0323 update windows arm64 agent so its actually arm64 and not x64
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-07-11 21:20:17 +01:00
si458
d820f7aee0 fix github auth endpoints always being enabled even though not setup #7142
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-07-11 13:21:17 +01:00
si458
045fac4639 forgot close bracket for new gotodeviceip
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-07-10 15:19:50 +01:00
si458
5939cf4e6c fix sitestyle url switching
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-07-10 14:53:55 +01:00
Rida Abou
cb9bc580d0
Implement ?gotodevicername url option (#7131)
* update default.handlebars to implement gotodevicername

Adding a new gotodevicername url option to reach the device page

* update default3.handlebars to implement gotodevicername

Adding a new gotodevicername url option to reach the device page

* update mobile.handlebars to implement gotodevicername

Adding a new gotodevicername url option to reach the device page

---------

Co-authored-by: rida.abou <rida.abouechcharaf@pytech.it>
2025-07-02 20:38:03 +01:00
si458
11eee2f5eb allow fido to not ask for pin (fidopininput) #7115
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-07-02 16:11:36 +01:00
si458
1383df3f4e fix meshcentralrouter not being told about all 2fa options
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-07-01 16:45:42 +01:00
Liub0myr
8e47123611
Fix mobile page load failure and Ukrainian UI text improvements (#7125)
* 🐛 Fix mobile load issue caused by bad quote escaping

Resolved an issue that blocked page loading on mobile devices caused by improperly escaped quotation marks.

* Ukrainian localization fixes
2025-06-27 16:36:09 +01:00
DaanSelen
0b6d4b28be
Minor Docker fixes and nice things (#7120) 2025-06-25 00:13:04 +01:00
Ylian Saint-Hilaire
0aaab322ad Version 1.1.46 2025-06-23 19:12:41 -07:00
si458
f2bb94c8ca allow dns names in userallowedip,userblockedip,agentallowedip,agentblockedip #5089
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-21 20:32:18 +01:00
si458
3e07d92e6f add translations for Connection Details in meshagent #4944
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-21 14:24:20 +01:00
si458
7ad49ba0ac fix modern ui fullscreen toolbar #6874
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-20 22:58:59 +01:00
si458
92c2b61318 disable compression by default and dont compress webrelays #4369
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-20 20:18:21 +01:00
si458
e47626a688 fixed minify problem with new library #7107
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-20 15:31:38 +01:00
dependabot[bot]
6467947904
Bump brace-expansion from 2.0.1 to 2.0.2 (#7101)
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 2.0.1 to 2.0.2.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v2.0.1...v2.0.2)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 2.0.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-19 21:26:11 +01:00
si458
28aa2710fd few ipv6 fixes in web ui
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-19 19:40:57 +01:00
si458
fb7940b2ce revert getDeviceDetails commits as was external problem
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-19 17:17:06 +01:00
Simon Smith
9bc2b3f4cf forgot to fix meshctrl for json output from getDeviceDetails
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-06-19 16:23:29 +01:00
si458
cadc0d03d2 fix webrelay not creating new tunnels #7113
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-19 15:12:58 +01:00
si458
c6d8428725 fix amt json import naming bug
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-18 19:35:37 +01:00
si458
809451741e fix run commands switcher in modern ui #7097
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-15 19:03:40 +01:00
si458
95759d4022 fix webrelay timeouting too fast #7102
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-15 14:31:19 +01:00
Simon Smith
2b4ab2b122 fix getDeviceDetails json stringify problem #7103
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-06-12 14:36:05 +01:00
Simon Smith
1d7d68cde3
final attempt at stale.yml 2025-06-12 08:59:24 +01:00
Simon Smith
d21d7ab935
Update stale.yml 2025-06-12 08:29:25 +01:00
si458
960326ab40 remove semver dependency for plugins
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-10 18:01:42 +01:00
si458
8588fe2497 fix stale bot
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-10 09:51:37 +01:00
PTR
b3f3d658b2
Changed sqldump errortext (#7098)
Previous text was incorrect regarding path
2025-06-09 21:05:42 +01:00
Simon Smith
b1876f0fcf few more docker clean ups to make smaller size
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-06-09 19:20:53 +01:00
PTR
ec3e06e37f
WebDAV: update to v5 (#6780)
* Convert to async-await

* use require instead of import

* Use pipeline instead of pipe

* Revert "use require instead of import"

This reverts commit b5635e89cc71e47e0b7a078bce223321dc519e51.

* Sanitize webdav foldername, move to setup defaults

* Check for webdav config
2025-06-09 18:38:59 +01:00
Liub0myr
fa75a96af0
Ukrainian localization fixes (#7092) 2025-06-09 18:21:59 +01:00
Simon Smith
108a297b84 speed up docker build github actions
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-06-09 18:00:02 +01:00
DaanSelen
5044339c80
Docker hotfix for npm modules (#7075)
* Added Dockerfile improvements for parsing and building

* Downgraded versions to match meshcentral.js

* removed unneeded removal

* syntax fix.

* added label

* Overwritten error fix.

* Remove label
2025-06-09 12:23:57 +01:00
si458
28b31b2476 use html-minifier-terser instead for translate and fix translate multi-threaded
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-08 22:50:22 +01:00
Marc Laporte
809e6e6ef8
Remove broken link 2025-06-08 09:19:32 -04:00
Simon Smith
a2a9939a23 remove matrix, ran out of memory?
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-06-04 09:36:02 +01:00
Simon Smith
bb58763308 try github actions matrix to improve speed
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-06-04 00:16:38 +01:00
Simon Smith
653074c5f4 restore old docker workflow for now
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-06-03 22:59:00 +01:00
Simon Smith
8f70820629 forgot permissions for actions
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-06-03 21:51:06 +01:00
Simon Smith
1ea043a94b repository_owner not actor for docker workflow, doh!
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-06-03 20:41:11 +01:00
Simon Smith
cd30e13ad7 remove token_check, use github_token and add annotations to docker workflows
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-06-03 20:22:14 +01:00
si458
6f5f5325f8 introducing stalebot to help clean up old issues
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-03 16:41:15 +01:00
si458
31e4ebe803 undo test line change
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-02 16:32:48 +01:00
si458
62020e1cde fix docker package reinstalls
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-02 16:05:50 +01:00
DaanSelen
d533cc377b
Dockerfix (#7074)
* Added Dockerfile improvements for parsing and building

* Downgraded versions to match meshcentral.js

* removed unneeded removal

* syntax fix.
2025-06-02 14:26:20 +01:00
si458
da3c4ad7f7 fix last seen ordering #7073
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-06-02 13:52:18 +01:00
Simon Smith
1009f7470a
Docker image rewrite
Merge pull request #6937 from DaanSelen/dockerrewrite
[ENH](/[REFAC]) Docker Image Building and Usage refactor.
2025-05-28 14:15:34 +01:00
DaanSelen
ae0aa7e9ac
Merge branch 'master' into dockerrewrite 2025-05-28 15:09:25 +02:00
si458
5ef5e9ce0e send 404 with expired/not yet valid sharing links #7062
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-28 12:44:53 +01:00
Simon Smith
cf183cfdae update packages in docker image
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-05-28 12:17:41 +01:00
si458
3b2aaccf1b remove console.log doh! #6634
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-26 14:15:48 +01:00
si458
89238303cb allow system variables in footer, loginfooter, welcometext, title2 #6634
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-26 14:03:55 +01:00
si458
5fcffcd608 fix email/sms/messaging customised templates #6994
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-24 12:47:28 +01:00
DaanSelen
620df54036
Merge branch 'Ylianst:master' into dockerrewrite 2025-05-23 10:32:17 +02:00
si458
1399ce3590 forgot 2 extra otpduo to clear!
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-22 13:54:04 +01:00
si458
3d57a25e49 add connectivity filtering #7009
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-22 13:41:16 +01:00
si458
d98f41ad31 fix browser fullscreen context menus #7046
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-22 12:15:11 +01:00
si458
12c5908ae4 forgot to also remove sweetalert2.min.css #7050
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-22 09:51:45 +01:00
si458
ab17a5858b remove sweetalert2 as we dont use it #7050
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-22 09:40:57 +01:00
Ylian Saint-Hilaire
199bb7ae5e Version 1.1.45 2025-05-20 16:42:44 -07:00
si458
a8ed3464e4 forgot duo and push notifications for force2factor #7045
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-21 00:14:47 +01:00
si458
45ec199839 fix autoAcceptOnTimeout with oldStyle #7036
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-20 23:55:47 +01:00
si458
fc32e1c261 refix placeholder {0}{1} #7037
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-20 23:29:32 +01:00
si458
4afe0fe3f9 fix ~users in active sessions popup #7044
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-20 22:29:04 +01:00
si458
158107d6ae add sessionrecordings for powershell/user shells #7035
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-20 20:11:34 +01:00
Daan
6bb6b186ce Added mysql dependency 2025-05-19 17:52:23 +02:00
DaanSelen
933b37f3aa
Merge branch 'Ylianst:master' into dockerrewrite 2025-05-19 12:15:19 +02:00
Daan Selen
5d18a1ad71 Added default exposure of non-encrypted http port. 2025-05-19 12:14:46 +02:00
si458
b97caabc35 upgrade image-size to 2.0.2
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-19 11:08:09 +01:00
Daan Selen
5223cbd619 removed possible unwanted references 2025-05-19 11:40:55 +02:00
Daan Selen
f17b96bc05 Commented out docker scout 2025-05-19 11:40:14 +02:00
DaanSelen
6eacc9f312
Merge branch 'master' into dockerrewrite 2025-05-19 11:32:18 +02:00
si458
022f85efe7 fix consent/notify messages with multiple placeholders #7037
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-19 10:27:49 +01:00
Daan
5d47415edb added npm install and removed saslprep dependency. 2025-05-18 19:46:54 +02:00
Daan
d864789451 bump version 2025-05-18 19:05:32 +02:00
Simon Smith
4fc921c14f upgrade mongodb+image-size, fix package installs again, stop docker installing translate packages
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-05-18 17:01:14 +01:00
Simon Smith
b64b1436cb oops forget codecertname includes extra data at the end #6999
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-05-18 16:37:24 +01:00
Simon Smith
0feaec0d6b generate new codesign-cert if cert value changes #6999
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2025-05-18 16:24:51 +01:00
si458
db282b22f0 fix android agentinvite mobile ui #7032
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-15 19:14:12 +01:00
si458
14b0882b3d more german translations #7023
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-13 10:22:49 +01:00
si458
3b0a1bc256 few more translations #7023
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-12 14:58:34 +01:00
si458
5e031aaa62 fix attemptCleanCertsSync function for non tls amt
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-10 22:05:36 +01:00
si458
f1c1e3bfd9 fix zh-cht/zh-chs wrong way round #7026
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-10 09:51:59 +01:00
si458
001cdd1aab fix Chinese Simplified/Traditional in web ui for now #7026
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-10 09:41:14 +01:00
dselen
59ca8b0815
Merge branch 'Ylianst:master' into dockerrewrite 2025-05-09 09:35:48 +02:00
si458
fa7f194ed1 fix amt notls always using tls, fix tls undefined, amt timeout shortened, commander typo fix
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-05 01:34:50 +01:00
si458
d9f2f869a2 fix older amt devices with custom amt certificates #6565
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-04 14:17:39 +01:00
si458
9cfe44a430 refix #7003 used wrong variable
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-04 11:54:59 +01:00
Simon Smith
bfa9dace14
Update SECURITY.md 2025-05-02 07:46:44 +01:00
si458
665a78d564 tiny translate fix
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-01 18:19:58 +01:00
si458
9699e9b457 fix connectivity crashing serverstats #7003
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-01 13:45:45 +01:00
si458
0ee73bd98a fix long usernames in list view #6997
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-05-01 12:55:13 +01:00
dselen
39395c9ac7
Merge branch 'Ylianst:master' into dockerrewrite 2025-04-25 13:23:30 +02:00
Ylian Saint-Hilaire
8fa54324d2 Version 1.1.44 2025-04-23 12:33:22 -07:00
Ylian Saint-Hilaire
d0f99cb4d9 Code sign MeshCentralRouter + Translations 2025-04-23 12:29:26 -07:00
Chris Norman
5b974e8226
externalsignjob - External Code Signing Job (#6977)
* Moving external call back into meshcentral

* Debugging logging

* Moved the external call to the callback function

* Updated codesigning.md

* Move callback invoke of callExternalSignJob outside of err check

* change console.log to obj.debug for external sign job call logging

* obj debug signing failed using obj.debug and console.error inside callExternalSignJob
2025-04-21 17:49:28 +01:00
si458
11ae3775d3 add user locked key to list view #6985
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-21 17:38:12 +01:00
si458
c6928846d0 dont log amt wsman end events
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-21 16:09:39 +01:00
si458
134ca4f025 fix rsakeysize for letsencrypt #6988
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-21 15:57:56 +01:00
Simon Smith
b7364d8988
disable network for lshw to fix vmware workstation bug on ubuntu 24
https://bugs.launchpad.net/ubuntu/+source/lshw/+bug/2069649
2025-04-19 10:44:27 +01:00
misszia
4be31f5554
Clarify AgentConfig in Traefik guide (#6984)
Docs mention the agentconfig line without it being in the code block. I'm pretty sure this is both needed and the correct agent flag.
2025-04-18 22:36:45 +01:00
Simon Smith
95e1796844
use minversion tlsv1 to fix older amt issues (#6983)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-18 22:22:18 +01:00
si458
f029abb1f8 dont log amt wsman events and fix start/end times in recordings
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-16 20:22:21 +01:00
si458
1cd2bb26f0 fix start and end times for recordings
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-16 18:07:50 +01:00
si458
b75f96cb1c fix duo with csp and chrome/edge
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-16 15:06:59 +01:00
si458
2b1129fb13 fix batch tags dialogue box #6971
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-15 21:12:16 +01:00
si458
1902e5aeeb change time range to 2 seperate boxes #6947
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-15 18:13:06 +01:00
PTR
f4b17909fd
add forgotten err object check for fs.unlink (#6972) 2025-04-14 19:04:54 +01:00
si458
b0b0f0c23a apply assistantTypeAgentInvite to email invites too #6970
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-14 11:42:49 +01:00
si458
c249282554 add amt relay events and fixamt recordings #6652
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-13 19:11:18 +01:00
Daan
b7512b9bed Disable dynamic config feature by default. 2025-04-13 11:59:34 +02:00
si458
41d9241625 fix messager recordings/events/downloads
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-13 01:03:16 +01:00
si458
ea692073fb forgot minify for amt local session recording changes
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-12 23:08:39 +01:00
si458
def7d737e0 change local recording for amt from 200 to 102 to avoid messenger conflict
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-12 22:53:40 +01:00
Daan
8c5c319323 Pinning to Alpine 3.21 2025-04-12 22:19:22 +02:00
dselen
0514f4a859
Merge branch 'Ylianst:master' into dockerrewrite 2025-04-12 22:14:57 +02:00
Daan
5f306a23e1 include_mongodb_tools fix in workflow. 2025-04-12 22:11:05 +02:00
si458
440cad5b50 runcommands now shows live output in console instead of after finishing #6948
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-12 11:03:44 +01:00
Daniel Hammerschmidt
5f68458cc5
Add flags to meshes to prefer agentname when synced and to override synced name temporarily (#6809)
* Add flags to meshes to prefer agentname when synced and to override synced name temporarily

* automatically enable sub-options

* change caption

* apply changes to bootstrap UI
2025-04-12 10:14:37 +01:00
PTR
c202339b67
Add mongodump args option (#6921)
* Add mongodump args option

* Put mongodumpargs in proper place
2025-04-12 10:00:32 +01:00
si458
42d02fdb84 add meshgroup to relay groups for clarification #6949
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-12 09:50:05 +01:00
si458
e238aaecc1 dont compress devicefile.ashx to show file sizes
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-12 09:39:23 +01:00
si458
918e889b1a maybe fix Backuppathtestfile can't be deleted #6965
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-12 09:27:50 +01:00
Daan Selen
4cd9196650 case insensitivity hotfix. 2025-04-09 16:40:49 +02:00
Daan Selen
90b2a3dfec Add other volumes to readme. 2025-04-09 16:14:11 +02:00
Daan Selen
8b2dcf4d9d Removed case sensitivity in true/false prompts 2025-04-09 16:12:41 +02:00
Daan Selen
ecd32fa665 Pinning LTS version. 2025-04-09 16:07:13 +02:00
Daan Selen
23c8c4999b Compression of build arguments and environment variables. 2025-04-09 15:53:16 +02:00
si458
08430a5fa7 add missing login events to duo and pushlogin
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-07 15:14:53 +01:00
si458
640a874a96 fix riscv64 in ‘meshinstall.sh’.sh
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-04-06 17:15:12 +01:00
dselen
17a36325d0
Also for the docker compose 2025-03-31 16:04:22 +02:00
dselen
9464c1b01a
Change example values 2025-03-31 16:03:43 +02:00
Daan Selen
46f77841e2 Release candidate. 2025-03-31 10:19:16 +02:00
dselen
ea1b71ede6
Merge branch 'Ylianst:master' into dockerrewrite 2025-03-31 10:16:06 +02:00
si458
17aff90501 fix failed 2fa port undefined in authlog
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-28 14:25:25 +00:00
si458
fee02a17ff fix 2fa modal issues in modern ui #6925
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-26 14:54:47 +00:00
si458
36b5af7ad4 seperate intel amt + amt cira in serverstats and monitoring #6549
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-25 19:42:50 +00:00
Daan Selen
6008767f0e Wrong variable. 2025-03-25 15:24:44 +01:00
Daan Selen
75df7b86c4 added "true" to the all option for trusted_proxy env variable. 2025-03-25 15:22:12 +01:00
dselen
e3636c0452
Merge pull request #2 from DaanSelen/master
Working in wrong branch
2025-03-25 15:17:52 +01:00
Daan Selen
9e6b98a031 Made names consistent 2025-03-25 15:16:39 +01:00
Daan Selen
db7eacbca3 Added trustedproxy to dynamic config feature. 2025-03-25 15:13:46 +01:00
dselen
910f12c25a
Merge branch 'Ylianst:master' into master 2025-03-24 19:39:02 +01:00
Daan Selen
39e5691c24 Make qemu ready. 2025-03-24 15:38:50 +01:00
Daan Selen
c5a2286149 More platforms supported. 2025-03-24 15:36:18 +01:00
Daan Selen
1e897ee401 Added support for psql mariadb.
Added docker scout action.
2025-03-24 15:35:52 +01:00
dselen
470f22b0c0
Merge branch 'Ylianst:master' into dockerrewrite 2025-03-24 12:20:26 +01:00
Daan Selen
3919c12d64 Finishing up. 2025-03-24 08:53:52 +01:00
Ylian Saint-Hilaire
23bee3b987 Added MeshCmd back 2025-03-23 15:26:27 -07:00
Ylian Saint-Hilaire
a2a1db39d9 Version 1.1.43 2025-03-23 15:24:41 -07:00
Daan
7f0f12a2e0 sorted. 2025-03-23 23:13:52 +01:00
Daan
51ad698213 Use jq with mongo. 2025-03-23 22:45:09 +01:00
Daan
162b372b4d Move preinstall libs to top. 2025-03-23 22:09:17 +01:00
dselen
6a99f3c723
Merge pull request #1 from DaanSelen/latestcode
Latestcode
2025-03-23 22:07:26 +01:00
dselen
c2f590e39d
Merge branch 'dockerrewrite' into latestcode 2025-03-23 22:07:15 +01:00
Daan
8448a6add0 Further foolproofed the Dockerfile. 2025-03-23 22:00:24 +01:00
dselen
b8168530be
bump semver to 7.7.1 (#6911) 2025-03-23 20:24:38 +00:00
si458
46e6ddb8fc upgrade otplib to 12.0.1 #6912
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-23 20:07:06 +00:00
dselen
1604764a3b
Merge branch 'Ylianst:master' into dockerrewrite 2025-03-23 21:03:06 +01:00
Daan
62443dd4f4 Dockerfile change. 2025-03-23 21:02:30 +01:00
dselen
59204bc3fb
bump pg npm module to 8.14.1 (#6914) 2025-03-23 16:29:30 +00:00
si458
af8947e416 add Client Hints for browser detection #6899
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-23 15:02:09 +00:00
si458
7daadfe399 update translations #6898
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-22 19:45:42 +00:00
si458
2337013acf cira connected instead of cira detected
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-22 19:27:45 +00:00
si458
126c8856cb fix amt/cira browser notification wrong way round
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-22 16:29:36 +00:00
Daan
660312eff3 Working prototype and clear and easy to understand logic. 2025-03-22 03:21:45 +01:00
Daan
59194abc27 More work done on the logic. mongoDB url editing works. 2025-03-22 02:10:42 +01:00
Daan Selen
e11a858081 I hate sed modification but I must. 2025-03-21 16:56:47 +01:00
Daan Selen
86ecc4267d @DaanSelen Docker overhaul intermediate commit. 2025-03-21 16:32:35 +01:00
dselen
5594b15df3
Merge branch 'Ylianst:master' into master 2025-03-21 08:53:36 +01:00
si458
ce417aa18f forgot consentMessages descriptions
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-20 21:07:21 +00:00
si458
0fd4dae036 fix getDeviceDetails for 3rd party libraries
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-20 19:31:27 +00:00
Daan Selen
6eb85fa892 Refactored more Dockerfile 2025-03-20 17:07:08 +01:00
si458
bc3f9ed89f forgot newAccountsRights in schema
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-20 11:03:08 +00:00
si458
027e5b52c5 add descriptions to schema and fix sample-config-advanced.json
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-20 10:49:10 +00:00
Daan Selen
ddeeb8cd58 Renamed the workflow for better recognition and upgraded docker/build-push-action action to version 6 2025-03-19 15:38:22 +01:00
Daan Selen
da5ef522f8 Modified Dockerfile for readability
Renamed startup.sh to entrypoint.sh
2025-03-19 15:34:44 +01:00
tobias9931
5cb565c005
Update meshcentral-config-schema.json (#6897)
siteStyle 3 option added
2025-03-19 09:06:05 +00:00
Edwin Hermans
7a33270e9a
Allow allowedOrigin to be configured on container startup (#6894)
* This allows allowedOrigin to be configured on container startup

* Allow for all forms of allowedOrigin values

* Update readme.md
2025-03-19 00:00:54 +00:00
si458
1cecf84b1b add riscv64 agent
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-18 18:11:04 +00:00
si458
b34d314cd2 fix seconds calculation in web ui #6893
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-18 15:43:31 +00:00
Daniel Hammerschmidt
0d346b1d62
delete temp file when download is redirected (#6877) 2025-03-12 07:49:35 +00:00
si458
1f83b7927a fix duo 2fa failing to add #2432
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-11 19:24:57 +00:00
si458
88a765bb13 add agentupdate to console agent actions #6869
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-08 18:37:18 +00:00
Daniel Hammerschmidt
7ad4b917be
print stack trace on plugin error and add space for readability of error message (#6859)
* add space for readability of error message

* print stack trace on plugin error
2025-03-08 17:50:39 +00:00
si458
d10173a018 fix sharing-mobile view only having control #6764
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-08 17:20:30 +00:00
si458
0e3a6b4915 fix logoutOnIdleSessionTimeout spelling and extra translations #6851
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-08 16:48:37 +00:00
Ylian Saint-Hilaire
b949cecc5f Version 1.1.42 2025-03-07 09:06:50 -08:00
Ylian Saint-Hilaire
c7cbf2f12a Updated Windows x86-32 and 64 agents. 2025-03-07 09:05:07 -08:00
si458
d49afdd7bf report version/size correctly to control panel #6860
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-07 16:31:11 +00:00
Ylian Saint-Hilaire
133e77c8c6 Version 1.1.41 2025-03-05 18:09:42 -08:00
Ylian Saint-Hilaire
e404e86b9f Updated Windows Agents 2025-03-05 18:06:30 -08:00
si458
c6da201af8 fix duo 2fa redirect when session changes
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-05 10:37:39 +00:00
Roman
9a27d7637c
Improvements to the German translation in various areas (#6849) 2025-03-04 20:44:36 +00:00
Daniel Hammerschmidt
5aa2467409
add comment about meshrelay ping-pong in docs(#6842) 2025-03-04 18:47:00 +00:00
si458
9398afd07e fix getDeviceDetails asking for all devices not including lastconnect #6833
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-03-03 14:13:34 +00:00
Ylian Saint-Hilaire
b2cd84035b Version 1.1.40 2025-03-02 10:47:32 -08:00
Ylian Saint-Hilaire
97547d72a3 Updated MeshCmd 2025-03-02 10:46:13 -08:00
si458
7faf043c35 recording not recoding
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-02-27 18:35:11 +00:00
Daniel Hammerschmidt
9df0330896
avoid double logging in debug console (#6827) 2025-02-27 18:23:36 +00:00
si458
42f61ea46e fix bootstrap padding #6755
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-02-27 18:08:12 +00:00
ijustw0rkhere
0d65080a8a
fix runcommands in a peering environment (#6825)
* fix adding meshes and user groups in a peering environment

* fix runcommands in a peering environment
2025-02-27 15:12:18 +00:00
si458
bd4d8b12d4 fix consent with oldstyle: true and rdp sessions #6816
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-02-26 20:51:24 +00:00
si458
18ae8bdbf4 fix relaystate for entra #6822
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-02-26 20:32:38 +00:00
si458
46c76f7234 smoothing not smooting #6818
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-02-26 15:36:23 +00:00
Ylian Saint-Hilaire
e65bf77111 Version 1.1.39 2025-02-25 19:58:15 -08:00
Ylian Saint-Hilaire
f19ad6c664 Extra argument validation. 2025-02-25 19:57:27 -08:00
Ylian Saint-Hilaire
fe2f12149d Updated French Translations. 2025-02-25 19:20:43 -08:00
si458
91bd5ae702 fix minify files and log minify errors
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-02-25 17:21:50 +00:00
Daniel Hammerschmidt
38f5bf2e0f
Fix parameter names in usage message (#6810) 2025-02-25 13:08:51 +00:00
Daniel Hammerschmidt
79f00bcaab
fix evaluation of config.settings.agentlogdump (#6812) 2025-02-25 12:51:52 +00:00
si458
c55065505b fix relaylog ip order again
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-02-23 01:13:20 +00:00
PTR
e0e8a3fcaa
Add comma to escapeFieldName for NeDBv4 (#6803) 2025-02-22 16:59:41 +00:00
Daniel Hammerschmidt
3f77cfa93a
Add collectors to monitoring (#6777)
* Add collectors to monitoring

* Pass request and response objects to collectors
2025-02-20 22:37:14 +00:00
Jakub Maruszczak
5ee9aa2410
fix meshctrl tag filter search (#6798) 2025-02-20 22:16:15 +00:00
Jakub Maruszczak
0ab3f01ca6
prevent runcommand with --reply from terminating other ws connections (#6797) 2025-02-20 22:09:02 +00:00
Daniel Hammerschmidt
4b621a01fb
Fix gauge typo (#6778) 2025-02-20 21:59:36 +00:00
si458
f2681de87d fix webrtc viewonly mode #6792
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-02-19 14:03:31 +00:00
PTR
c90fa55c99
Init webstate with empty object (#6788) 2025-02-18 11:35:23 +00:00
si458
edeef03f00 track/show locked active users #6782
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-02-14 15:42:43 +00:00
si458
d7fe87d1db fix sessionrecording ip addresses wrong way round
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-02-13 21:39:15 +00:00
Martin Mädler
9d4f51e970
Add support for logoutOnIdleSessionTimeout (#6773) 2025-02-12 10:04:10 +00:00
si458
0b376fe5a0 fix player for windows and terminal #6761
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-02-11 17:04:19 +00:00
si458
9fd40751b2 fix remote desktop consent for rdp sessions #6710
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-02-09 21:41:08 +00:00
si458
d246307fae translation improvements
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-02-09 21:03:54 +00:00
Simon Smith
711bb56a93
autoAcceptIfNoUser (#6759)
* autoAcceptIfNoUser for desktop

* autoAcceptIfNoUser for terminal

* autoAcceptIfNoUser for files

* forgot few extra files

---------

Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-02-09 19:54:51 +00:00
Simon Smith
5734bcc33a
UI Toggle between Classic and Modern (#6763)
* [ENH] Add toggle switch for new MeshCentral UI in settings and top header of the classic UI

* [ENH] Add toggle for new MeshCentral UI in settings and in top headbar of the modern UI

* add showModernUIToggle and store uiviewmode in db

---------

Co-authored-by: kambereBr <brunokambere@gmail.com>
2025-02-09 19:41:47 +00:00
si458
1310c57397 return more than 100 groups for azure oidc #6669
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-02-05 21:21:39 +00:00
si458
854d6c00d2 fix view chunksize being too big causing pixelation
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-02-05 11:44:23 +00:00
si458
c96d7ff1ca remove CSP for web relay as apps dont load properly with the default set #6456
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-02-05 11:32:56 +00:00
Simon Smith
712f06db3c
fix meshcentral-config-schema.json for ace editor 2025-01-27 23:02:56 +00:00
si458
cac505e2cd few more translations
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-26 18:10:26 +00:00
interfect
9d962bc523
Note maximum password length in USB key dialog (#6735) 2025-01-26 18:02:42 +00:00
si458
f079692b16 change dnslytics.com to maclookup.app for mac address lookup #6704
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-26 14:57:41 +00:00
nmmclwhitehead
3ee06abfe8
Update webserver.js - allow saml relaystate in POST request (#6685)
added check for relaystate saml and regex check

added in rest of allowed params

correct formatting on regex string - now evaluates correctly

set relaystate on get request

check for ipv6
2025-01-26 14:42:48 +00:00
PTR
b46ddf2f70
Update console info command (#6722)
* Add human readable option (h) to info command

* Add option to helptext
2025-01-26 14:35:18 +00:00
PTR
f7b958d28b
Autobackup update (#6695)
* add backupHours option and many debug messages

* Cleanup debug messages, add backupinfo

* Add full path to remove log message

* Put backupcheck after config init, check proper backuppath

* Handle absolute backuppath, check access in checkBackupCapability, seperated expired files check to function, more message edits, serverwarnings

* Revert fallback to default backuppath

* Cleanup checkBackupCapability and messages

* add WebDAV messages
2025-01-26 14:24:40 +00:00
KevinBK1998
64c8d2c238
include username for amt direct connect in logs 2025-01-26 14:07:37 +00:00
si458
31f2224a93 add notransval to fix select options translate issues
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-26 13:54:04 +00:00
petervanv
de685556c8
Dutch language update 1.1.38 (#6716)
update and cleaned up some useless strings
2025-01-26 12:52:04 +00:00
si458
92375ddc93 add lastbootuptime to csv and fix spaces in csv translations #6723
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-26 12:42:30 +00:00
si458
ea80f8595e fix some functions not being called in sitestyle=3 #6733
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-26 10:59:08 +00:00
Ylian Saint-Hilaire
763f76b68f Version 1.1.38 2025-01-09 17:08:31 -08:00
nmmclwhitehead
1a02539f23
Added support for &gotodeviceip=x.x.x.x (#6672) 2025-01-08 11:27:50 +00:00
si458
90b71e924f properly fix multiple dialog popups in a row
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-07 16:52:19 +00:00
si458
73c18c4dd5 fix deviceaction multiple modals not working
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-07 16:35:13 +00:00
si458
def62075c7 fix theme switch to default bug and include google fonts in csp #6665
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-06 16:02:10 +00:00
Ylian Saint-Hilaire
998769a888 Version 1.1.37 2025-01-05 15:37:41 -08:00
si458
ca6ec5ebc9 fix delete node bootstrap ui
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-05 22:16:09 +00:00
si458
0dd56d5708 improve translations all around
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-05 21:37:56 +00:00
si458
95729d2a88 set default minify to false in docker
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-05 17:47:21 +00:00
si458
1ae7b9f641 fix minify in bootstrap #6662
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-05 17:38:03 +00:00
si458
c66a9a12ef i hate sundays, fix passport module again
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-05 14:48:51 +00:00
si458
2c310450cf fix passport module not installing for multiple domains
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-05 14:40:19 +00:00
Ylian Saint-Hilaire
b6e022c01e Version 1.1.36 2025-01-03 17:22:49 -08:00
si458
e66776c5da if no nodes return nothing for getDeviceDetails #6637
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-03 16:59:29 +00:00
si458
d1cb184e9e fix deleting user with no events causes page to not change
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-03 16:18:42 +00:00
si458
6aa60d556f fix reload issue with # in url
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-03 16:03:17 +00:00
Noah Zalev
8d4e9bcede
Re-enable autobackups by default (#6644) (#6653) 2025-01-03 15:54:47 +00:00
si458
eb0d24cf0b fix trafficstats with novnc
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-02 23:55:43 +00:00
si458
fe02d3158d add pwr,conn,agct,cict to getDeviceDetails #6650
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-02 23:49:02 +00:00
Simon Smith
61d3487f8a
add prometheus metrics (#6654)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2025-01-02 23:38:13 +00:00
Simon Smith
a23725eb40
fix trafficstats relaycount NaN 2025-01-02 20:13:51 +00:00
Ylian Saint-Hilaire
9b60271f31
Update index.md
Added Duo link
2025-01-01 17:22:03 -08:00
Ylian Saint-Hilaire
31f328086e
Update security.md
JSON fix
2025-01-01 17:18:59 -08:00
Ylian Saint-Hilaire
7aa4061cad
Update security.md
Added Duo installation steps.
2025-01-01 17:18:38 -08:00
Ylian Saint-Hilaire
54bb0177ee
Update index.md
Minor fixes
2025-01-01 17:03:30 -08:00
Jason N. White
ce70f4ac08
Update LICENSE, fix license year (#6646)
Signed-off-by: JasonnnW3000 <sufssl04@gmail.com>
2025-01-01 16:52:53 -08:00
Pablo Henrique Batista
f712cd9425
Fixes multi domain using default domain cert without trying to recreate for new domains (#6645) 2025-01-01 20:04:32 +00:00
Ylian Saint-Hilaire
c4592dcc4f Fixed Duo Boost UI. 2024-12-31 14:11:21 -08:00
Ylian Saint-Hilaire
2a274fe569 More Duo UI improvements. 2024-12-31 11:48:30 -08:00
Ylian Saint-Hilaire
5d0b5acdfb Duo UI improvements. 2024-12-31 11:40:08 -08:00
Ylian Saint-Hilaire
f80ba62cfc Fixed Duo 2FA security. 2024-12-31 10:37:09 -08:00
dev6699
5da849063b
fix: db.js expire server stats comment typo (#6633) 2024-12-29 12:39:50 -08:00
si458
68ac8cf86c fix duo and theme switcher
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-12-24 11:20:58 +00:00
Sammy Ndabo
8e70cd7187
[NEW] Add Theme Switcher with Bootstrap/Bootswatch Themes (#6622) 2024-12-24 10:15:45 +00:00
si458
5cf468159d fix duo and package.json
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-12-23 13:13:37 +00:00
Ylian Saint-Hilaire
c92b88a374 Duo changes, but not yet fully tested. 2024-12-22 19:10:35 -08:00
si458
1b01b90cd6 bootstrap3: dark mode fixes, buttons replaced, more translate fixes #6496
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-12-22 01:28:31 +00:00
si458
6a366fe174 bootstrap3: fix translations, fix button styling, new contextmenus, mouse disable cursor #6496
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-12-21 19:42:50 +00:00
Simon Smith
e2362a0547
add duo authentication support (#6609)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-12-21 13:52:54 +00:00
Simon Smith
59fcc0dbc6
fix bootstrap 3 record session formatting #6618 2024-12-21 11:24:12 +00:00
Simon Smith
988983b880
alpine 3.21 and node 22 in docker 2024-12-18 18:58:32 +00:00
Simon Smith
a1854fa074
fix createmesh with email as userid #6596 2024-12-18 18:31:20 +00:00
Ylian Saint-Hilaire
22fc95926a Fixed module update for modules like firebase-admin.js 2024-12-15 00:24:18 -08:00
Ylian Saint-Hilaire
c2eb1f2516 Updated to MeshCentral Firebase support, updated to using firebase-admin module. 2024-12-14 21:56:36 -08:00
si458
832d11739b fix defender not showing
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-12-09 13:17:35 +00:00
si458
ab7be919a0 fix meshcmd amtinfo UNCAUGHT EXCEPTION #4135
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-12-07 14:41:19 +00:00
si458
624d61db43 move windows_volumes and bitlocker to win-volumes
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-12-06 13:56:15 +00:00
si458
b0d8e3fe48 package updates
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-12-06 13:34:24 +00:00
si458
a33047747a add OS Descripton to Details #6556
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-12-06 12:34:06 +00:00
PTR
39e81befe1
fix bitlocker/manage-bde cmdline (#6586) 2024-12-05 17:40:20 +00:00
Roman
8eeb96fb0d
Spelling mistake in German translation (#6585) 2024-12-05 13:45:23 +00:00
PTR
f9228ad0eb
connectinArgs.Database > connectinArgs.database typo (#6576) 2024-12-02 14:06:58 +00:00
si458
ce4217c346 fix messenger background notifications #2440
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-12-01 23:19:41 +00:00
si458
d9262f7c9d update translate, fix bootstrap version panel, deskbackground
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-12-01 22:26:03 +00:00
Ylian Saint-Hilaire
8e8ec4f88a Version 1.1.35 2024-12-01 10:28:35 -08:00
Ikko Eltociear Ashimine
18167499d9
chore: update pluginHandler.js (#6569)
ocurred -> occurred
2024-11-30 22:41:06 +00:00
si458
da5d03b0e7 fix annoying firefox paste option with clipboard #6571
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-30 16:14:35 +00:00
si458
c41eb72a2c fix win7+server2008r2 powershell/wmi
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-30 13:50:02 +00:00
si458
ef4d764ab4 Revert "swap powershell write to command instead" to fix win7/server2008r2
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-30 00:21:44 +00:00
Ylian Saint-Hilaire
c16ff89902 Version 1.1.34 2024-11-27 12:24:37 -08:00
Ylian Saint-Hilaire
041e8021d1 Added test Windows x86-32, x86-64, ARM-64 agents. 2024-11-27 12:08:36 -08:00
Kaiwalya Koparkar
6e31562ecb
feat: Added Elestio as one-click deploy option (#6453) 2024-11-26 10:53:02 -08:00
dependabot[bot]
874ef23c40
Bump cross-spawn from 7.0.3 to 7.0.6 (#6562)
Bumps [cross-spawn](https://github.com/moxystudio/node-cross-spawn) from 7.0.3 to 7.0.6.
- [Changelog](https://github.com/moxystudio/node-cross-spawn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/moxystudio/node-cross-spawn/compare/v7.0.3...v7.0.6)

---
updated-dependencies:
- dependency-name: cross-spawn
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-26 10:48:48 -08:00
Ylian Saint-Hilaire
7bd5b66ebc Disabled Firebase support on NodeJS 23 for now, added warning. 2024-11-26 10:37:27 -08:00
Simon Smith
975e49a190
use @seald-io/nedb for node23 support (#6561)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-26 10:01:12 -08:00
si458
462c383b77 update openid-client to 5.7.1
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-26 17:52:59 +00:00
si458
dbb5b4ba11 add webrelay to websocket and meshctrl #6484
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-26 16:46:14 +00:00
si458
545bf58e8d fix pwa orientation #6554
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-25 10:16:13 +00:00
si458
30b390bdbf increase usernames to 128 for oidc identifiers #6447
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-19 19:08:10 +00:00
si458
d0a51e90e9 fix mobile ui file upload #6543 #6460
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-18 16:04:56 +00:00
PTR
c773857b17
Add forgotten space in query GetNodeEventsWithLimit (#6541) 2024-11-17 23:12:57 +00:00
Ylian Saint-Hilaire
cae1f7ea14 Switched to BlueSky 2024-11-17 11:50:55 -08:00
si458
b398cb7fa9 bootstrap: more fixes and icon changes part 2
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-16 02:25:25 +00:00
PTR
5a1a97ca7e
Fix quoting of string literals from double to single (#6530)
See: https://www.sqlite.org/quirks.html#double_quoted_string_literals_are_accepted
2024-11-15 22:14:58 +00:00
PTR
dd21f14f4e
Mariadb/mysql: Fix ssl option on autobackup cmdline and deprecated warnings (#6537)
Fix: error: 2026: "TLS/SSL error: Server certificate validation failed. The certificate's CN name does not match the passed value. Error 0x800B010F(CERT_E_CN_NO_MATCH)"
by adding '--ssl-verify-server-cert=false'
and updating the modules.
2024-11-15 22:04:19 +00:00
ijustw0rkhere
3da60b43ac
fix adding meshes and user groups in a peering environment (#6534) 2024-11-15 21:54:28 +00:00
si458
727080ab68 bootstrap: more fixes and icon changes
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-15 16:04:08 +00:00
si458
54170c44a0 bootstrap: fix files edit file feature
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-14 15:51:46 +00:00
ijustw0rkhere
8a5ad1563d
adjust removemeshuser to allow for shorter user ids (#6520) 2024-11-11 10:58:25 +00:00
si458
911d987a84 fix actions modal popup and icon changes
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-10 22:27:57 +00:00
si458
9a8f4e8ebe bootstrap: fix edit node and duplicate lastbootuptime
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-10 20:23:54 +00:00
si458
badee98b71 fix badlogins naming #6516
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-10 17:50:45 +00:00
si458
d44faed29e fix filter input #6498 #6507
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-10 17:41:22 +00:00
Josiah Baldwin
01c585f7f1
Added the ability to fetch timestamp for codesigning through https (#6510) 2024-11-10 14:39:12 +00:00
PTR
777eb53476
Add sqlite config options (#6517) 2024-11-10 14:04:17 +00:00
PTR
b71c69e81d
Fix autobackup defaults and zip level for performance (#6518)
* Fix autobackup defaults and zip level for performance

* Add zipcompression configuration option
2024-11-10 13:49:11 +00:00
si458
7d59210d05 swap powershell write to command instead
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-06 15:37:26 +00:00
si458
fc387ca417 set backup vars on object for acess and fix nedb backup #6481
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-05 16:05:15 +00:00
si458
fc83211e90 open note urls in new tab #4091
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-05 15:58:51 +00:00
si458
9ebd23a518 restore login screen enter button use #6494
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-05 15:41:37 +00:00
PTR
3f8301e9d7
Put dbdumpfile back in root of zip instead of meshcentral-data subfolder and normalize some more (#6500) 2024-11-05 13:26:05 +00:00
si458
b39235643e more wmic replacements
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-04 15:09:38 +00:00
si458
0ec8b061c8 Revert "require package version from correct folder"
This reverts commit cfe9345b53fcd660985d7ce7b82278182b40f41e.
2024-11-04 13:59:50 +00:00
PTR
e58d659fa9
Fix archiver error, add backup options and SQLite maintenance (#6487) 2024-11-03 18:44:15 +00:00
Ylian Saint-Hilaire
45169b2cfd Version 1.1.33 2024-11-03 09:40:52 -08:00
Ylian Saint-Hilaire
c09d2fad3e Can now switch to the bootstrap ui at runtime with ?sitestyle=3 in the url. 2024-11-03 09:34:26 -08:00
si458
7928f7fb30 fix ntfy missing user-agent #6488
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-11-01 11:23:45 +00:00
si458
438289b2ed few more bootstrap fixes
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-31 13:31:33 +00:00
Marc Laporte
561fc67f33
Adding LinkedIn and a few fixes (#6486) 2024-10-31 12:44:28 +00:00
si458
aa7767f37c fix menu bar and swap icons in bootstrap
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-28 13:35:43 +00:00
si458
f23792881e more general web fixes and updates
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-28 11:26:30 +00:00
si458
c920b28acc more bootstrap fixes
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-28 11:17:09 +00:00
Josiah Baldwin
36f1b4d5be
Added global ws error handler (#6475) 2024-10-25 11:02:53 +01:00
si458
141bec559f AddLocalDevice and AddAmtDevice to meshctrl.js #6473
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-25 10:34:16 +01:00
si458
0d885e6fa0 fix some modals not working in bootstrap
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-24 18:31:55 +01:00
si458
e10f5277e9 improve bootstrap icons and formatting
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-24 15:56:02 +01:00
si458
f33768fe32 1st bootstrap 5 cosmetic fixes
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-21 18:15:05 +01:00
si458
1e565768d1 fix sitestyle for new bootstrap
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-19 19:28:23 +01:00
Sammy Ndabo
5193fef888
[BETA] Meshcentral Bootstrap 5 User Interface (#6450)
Co-authored-by: Bruno Kambere <brunokambere@gmail.com>
Co-authored-by: snyk-bot <snyk-bot@snyk.io>
Co-authored-by: Simon Smith <simonsmith5521@gmail.com>
2024-10-19 18:33:40 +01:00
trmdi
63930c4b33
Use built-in login validation (#6434)
* Use built-in login validation

* use button instead of submit to avoid duplicate submits

---------

Co-authored-by: Simon Smith <simonsmith5521@gmail.com>
2024-10-19 16:47:33 +01:00
si458
ac27034542 update packages
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-17 20:45:11 +01:00
si458
cfe9345b53 require package version from correct folder
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-17 20:18:05 +01:00
si458
1e2d736d6d pin openid-client to 5.7.0 for moment
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-17 17:36:17 +01:00
Meet50
0c825251eb
Update sysinfo.js meshcmd (#6448) 2024-10-15 11:36:01 +01:00
Daniel-Hillenbrand
ccf00b7d06
add annotation about using own IDP, CA and Docker (#6454) 2024-10-15 09:45:24 +01:00
si458
6d412a7bea show local/relay devices in online filter #6440
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-12 03:24:31 +01:00
si458
5a0d3054b8 fix reports missing multiplex desktop sessions #6445
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-12 02:53:50 +01:00
si458
6dbc6d2d07 update express to fix xss
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-12 00:12:51 +01:00
si458
ea8e1b1076 fix log.txt with json objects
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-10 18:34:52 +01:00
si458
d1368791e9 move orphanAgentUser to domain config-schema
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-08 14:01:02 +01:00
si458
590166f847 fix meshaction with foldr based domains #6436
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-08 08:51:16 +01:00
si458
19d0df7e7f always show active users for offline devices #6421
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-05 21:38:49 +01:00
Josiah Baldwin
1d87c42977
Fixed bug with agent reconnecting (#6431) 2024-10-05 17:21:48 +01:00
si458
ec7505987d fix login button disabled when autofilled #6428
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-05 16:59:55 +01:00
si458
37729269ba fix public folder sharing for domains without dns
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-01 12:10:48 +01:00
si458
952bcde25f refix publicfiles sharing for folder based domains #6406
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-10-01 11:47:41 +01:00
Ylian Saint-Hilaire
4848df4faf Version 1.1.32 2024-09-30 09:39:41 -07:00
si458
41d1f9d26f Revert "allow password resets when using allowaccountreset and reset together #6261"
This reverts commit 8e5aa35bf3ba169611a074b24a32cf944264f443.
2024-09-30 17:30:07 +01:00
si458
113adb5b85 add debug/log to schema file
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-30 14:07:34 +01:00
si458
8e5aa35bf3 allow password resets when using allowaccountreset and reset together #6261
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-30 12:20:01 +01:00
si458
1139a37338 update noVNC to 1.5.0
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-29 15:26:20 +01:00
si458
b20e51561a fix novnc missing desktopName from title #6412
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-29 13:26:11 +01:00
si458
5ff44bbae8 fix DeskTools only dragging one way #6257
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-28 14:29:17 +01:00
si458
2beeb6f644 fix agentTimeStampServer and agentTimeStampProxy not being set correctly #6409
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-27 19:11:41 +01:00
si458
3eede1bf43 update package-lock.json
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-27 07:05:04 +01:00
Simon Smith
9f8ea3a6b5
Update package.json 2024-09-27 06:54:26 +01:00
Ylian Saint-Hilaire
23679d119b Dependency fix 2024-09-26 21:20:43 -07:00
Ylian Saint-Hilaire
a3fd6008a0 Version 1.1.31 2024-09-26 21:19:11 -07:00
Ylian Saint-Hilaire
d0014b3f8b Removed cleanReqQuery() 2024-09-26 21:13:55 -07:00
Josiah Baldwin
04c96eb2ff
Fix/xss (#6403)
* Fixed filenames not being escaped when editing files

This allowed a possible XSS by naming a file in a particular way on your device.

* Fixed HTML generation in webserver not escaping most things from req.query

This would allow XSS through a very simple phishing attack

* Added HtmlEscape to Mobile default as well

* Added sanitization to SAML redirect and Twitter/Azure
2024-09-26 21:09:34 -07:00
Simon Smith
df64c750cc add runCommands to server peering #6404
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2024-09-26 22:56:13 +01:00
si458
b90b2ac0bf add RDP to device context menu #6401
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-26 19:51:06 +01:00
si458
39a1755b3d fix 404 on public files with /login url #6406
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-26 19:21:25 +01:00
si458
61fb6898c0 add ctrl+c ctrl+x and esc to mobile terminal ui
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-24 20:00:32 +01:00
si458
bc34f140c8 upgrade express-handlebars #6357
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-24 19:17:08 +01:00
si458
0bee2be3cf generate manifest.json from domain and add pwalogo
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-24 19:09:14 +01:00
si458
1d67172dd3 fix RDP canvas size #4701
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-24 13:29:57 +01:00
si458
b99a97eb48 add restart agent service to agent action
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-23 13:20:05 +01:00
si458
a1899a719f add freebsd install/uinstall/start/stop/restart commands #6040
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-19 22:33:24 +01:00
si458
5fcfa8f369 fix storage volumes on arch/busybox
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-16 11:00:33 +01:00
si458
7172d1f701 always show operating system section and LastBootUpTime fix
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-15 23:02:23 +01:00
si458
8bc760855e add raspberry pi arm/gpu memory
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-15 19:39:41 +01:00
si458
5fc3683ebb update archiver
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-15 18:34:42 +01:00
Ylian Saint-Hilaire
626416a202 Version 1.1.30 2024-09-15 10:07:28 -07:00
Ylian Saint-Hilaire
d84afb939a More dependency updates. 2024-09-15 10:02:51 -07:00
Ylian Saint-Hilaire
3cd875d6ee Dependency update. 2024-09-15 09:56:07 -07:00
Ylian Saint-Hilaire
f5e63b7cbd Updated dependencies. 2024-09-15 09:52:32 -07:00
wdlut
8b20f44dd5
Update meshuser.js (#6210)
Added a hook "uiCustomEvent" to start plug-ins from custom dialog boxes.
In the config.json:
````
     "CustomUI": {
        "deviceButtons": {
          "custom_dialog": {
            "name": "Show custom dialog",
            "action": "dialog:customDialog"
          }
        },
        "dialogs": {
          "customDialog": {
...
````

In the plug-in: ````
obj.uiCustomEvent = function(command, parent) {
    switch(command.element) {
            case 'customDialog':
                onCustomDialog(command, obj, parent.ws);
                break;
            default:
                console.log("Element "+command.element+ " not supported.");
        }
    };
````
2024-09-15 09:43:37 -07:00
Dmitry Kostenkov
59a3a22ea5
fix orphanagentuser toLowerCase() (#6317)
https://github.com/Ylianst/MeshCentral/issues/2095#issuecomment-2276360509
2024-09-15 09:42:15 -07:00
Ylian Saint-Hilaire
2f34b7e83b Improved debug documentation. 2024-09-15 09:40:36 -07:00
silversword411
4d5ec6cac1
Docs: Adding meshcentral server debug command (#6369) 2024-09-15 09:21:37 -07:00
Ylian Saint-Hilaire
7635109f6d
fix: package.json & package-lock.json to reduce vulnerabilities (#6378)
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-BODYPARSER-7926860
- https://snyk.io/vuln/SNYK-JS-EXPRESS-7926867
- https://snyk.io/vuln/SNYK-JS-SEND-7926862
- https://snyk.io/vuln/SNYK-JS-SERVESTATIC-7926865

Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2024-09-15 09:18:08 -07:00
si458
de60b7f952 update meshcentralrouter with fixes
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-12 19:15:45 +01:00
petervanv
405261a67e
Dutch language update 1.1.29 (#6379)
cleaned up some unused text
2024-09-12 19:09:21 +01:00
si458
4bcec73e07 forgot new lines in backupconfig
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-10 22:01:44 +01:00
si458
d81c00c0b0 add extra info to backupconfig
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-10 21:54:44 +01:00
si458
d2e4f12ea3 fix left mousebutton click with event.button #6351
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-10 21:06:16 +01:00
si458
f7c79166da fix dockerfile translate
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-10 20:14:08 +01:00
si458
2b5337329a remove minify-js use html-minifier instead #6357
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-10 20:01:10 +01:00
si458
21206b670c refix #6240 as switching devices keep session open by mistake
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-10 13:31:15 +01:00
si458
1d04a13a64 add oldStyle to consentMessages as workaround for win-userconsent crashing #6290
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-10 11:01:23 +01:00
si458
9e309584db update package-lock 1.1.29
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-09 11:47:43 +01:00
Ylian Saint-Hilaire
0d56504d96 Version 1.1.29 2024-09-08 15:07:05 -07:00
Ylian Saint-Hilaire
d17918936d express-ws update. 2024-09-08 14:59:35 -07:00
Ylian Saint-Hilaire
0a64b80654 Updated express-ws. 2024-09-08 14:48:19 -07:00
Ylian Saint-Hilaire
35e38a71c0 Re-translated & minified. 2024-09-08 14:27:10 -07:00
si458
6fe30b7730 add new line break feature to file edit #6365
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-08 20:11:06 +01:00
Simon Smith
516a14b4ca
Update readme.md 2024-09-07 23:31:03 +01:00
si458
390991123a fix pluginhandler http protocol #6362
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-06 11:00:41 +01:00
si458
d367b2ed87 few fixes and doc updates
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-05 19:19:52 +01:00
Simon Smith
5a410ccd5b properly fix peering #5714
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2024-09-05 18:31:37 +01:00
Simon Smith
ad1d82152a fix clonesafenode in dbNodeChange #5591
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2024-09-05 15:39:45 +01:00
Simon Smith
7c79dbcda1 fix peering traffic #5714
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2024-09-05 12:57:29 +01:00
si458
cf23a3df81 fix volumes not closing powershell
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-03 20:03:05 +01:00
si458
e8cbebaffe fix webrtc file upload maybe #6309
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-03 14:46:25 +01:00
si458
ac0d805378 fix webrtcconfig and allow stun servers #6309
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-03 13:42:06 +01:00
si458
7b48e3b5f5 update webrtc servers and examples
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-09-01 18:56:33 +01:00
si458
ea6682e06a fix passport failure url
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-30 16:31:54 +01:00
si458
4e37455471 fix agentdownload on agentonly port #3282
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-30 13:17:14 +01:00
si458
b4323223cc support markdown in notes when using showNotesPanel #4091 #6332
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-27 15:24:36 +01:00
si458
bf00de4425 full keyboard control in fullscreen using chrome in sharing #1881
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-27 15:12:05 +01:00
si458
f95dbdd404 allow full keyboard control in fullscreen using chrome #1881
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-27 14:58:29 +01:00
si458
e1e59953f4 fix remoteaddr null in consent disconnect #6290
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-27 10:46:25 +01:00
si458
d2d9f7a13e fix disconnections of new user logins with ldap #6240
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-25 17:34:44 +01:00
si458
21e196e35c dont do utf8 validation for mongodb #6340
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-24 00:12:14 +01:00
si458
0ccce62c9d dont minify charts or OL JS files #6338
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-23 13:47:34 +01:00
si458
3a78cb83c4 add ukrainian agent-translations
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-23 13:14:28 +01:00
Simon Smith
8dd5545a2b add Ukrainian translation #6335
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2024-08-23 12:47:22 +01:00
Ylian Saint-Hilaire
2f61e3edad Spanish update. 2024-08-18 22:16:23 -07:00
si458
7caf2aa05d fix file edit box missing data #5813
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-17 16:00:06 +01:00
si458
cee181fb61 fix meshcmd os select #6327
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-16 16:14:27 +01:00
si458
fa39f8a105 fix meshctrl with key=xxx and loginkey #6328
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-16 16:02:21 +01:00
Simon Smith
c1e3354c91 fix mysql autoback zippassword
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2024-08-15 13:06:40 +01:00
si458
aae551dab9 autobackup improvements #6324
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-15 11:32:24 +01:00
si458
3a28e33efb use hardware identifier if no intelamt uuid
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-14 10:09:46 +01:00
wow
92385e3d73
AMT: Fix One Click Recovery support (#6301)
* add support for PXE reboot/power

* AMT: Fix support for OneClickRecovery
2024-08-13 21:22:26 +01:00
Simon Smith
adeaac1588 getLocalAmtNodes only show intelamt devices fix #6321
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2024-08-13 18:55:59 +01:00
Simon Smith
77f44fc308 fix local amt with sqlite/mysql/postgres #6321
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2024-08-13 17:46:37 +01:00
si458
3efa680361 add png and tiff to encoding in web ui #6315
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-13 10:20:31 +01:00
si458
899ff0c742 dont allow deleting yourself in my users tab in web ui
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-12 16:01:36 +01:00
Simon Smith
61f1c22c27 update mpkg with arm64 support
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2024-08-06 16:28:44 +01:00
si458
08877844c4 show seperate macos mpkgs in web ui #6308
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-06 15:33:49 +01:00
GraphicHealer
698b7fb056
Update apprelays.js to fix Header issue (#6306)
Add `.trim()` to the header label value (`i`) to fix a rare circumstance where there can be a space in the header name.
2024-08-05 22:18:15 +01:00
si458
fbd4533477 add intel amt identifier to ui to help find passwords in amtpasswords
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-05 13:34:00 +01:00
si458
6f2b57998f fix agentidletimeout being undefined
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-05 11:48:53 +01:00
Ylian Saint-Hilaire
a6acb35a31 Fixed typo. 2024-08-04 22:31:17 -07:00
Ylian Saint-Hilaire
fc29e60939 Improved configuration file encryption in the database, added testing. 2024-08-04 22:00:37 -07:00
Josiah Baldwin
5b76a31644
Changed database file encryption to pbkdf2 for key derivation and aes-256-gcm for encryption (#6296)
* Added pbkdf2 and aes-256-gcm options for database file encryption

* Added dbCipherAlgorithm option

* Changed pbkdf2 to default

Maintains backward compatibility, but will require a manual repush to update to the new version

* Removed dbkeyderivationiterations option, as this branch is to be more opinionated
2024-08-04 16:02:22 -07:00
si458
41e4213fc5 update translate.json
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-08-02 11:58:27 +01:00
wow
999ae7f67f
add support for PXE reboot/power (#6298) 2024-08-02 11:48:38 +01:00
Josiah Baldwin
44991975d3
Added ability to use environment variables as arguments (#6184) 2024-08-01 15:47:30 +01:00
Simon Smith
6da9222871
add s3 autobackup support (#6280)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-29 14:41:36 +01:00
si458
10b57dcf9e fix default linuxshell for mobile ui #6275
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-24 10:15:43 +01:00
Ylian Saint-Hilaire
1cfe0e2c31 Version 1.1.27 2024-07-23 12:59:40 -07:00
si458
7e504a28e6 fix autoRemoveInactiveDevices again #6268
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-23 17:28:36 +01:00
Ylian Saint-Hilaire
92869ec78b Version 1.1.26 2024-07-23 08:53:54 -07:00
si458
9264b9d281 fix autoRemoveInactiveDevices is 1 #6268
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-23 15:58:13 +01:00
si458
d8a91d3150 fix loading=lazy minify bug
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-23 14:37:40 +01:00
si458
5e71bcc634 fix minifed files
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-23 14:03:03 +01:00
si458
4d75d48eea add watchdog to config-schema
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-23 13:10:01 +01:00
si458
df6474802d fix language change event log
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-23 12:39:15 +01:00
si458
31c323583b fix message box Korean translate #1392
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-22 11:26:51 +01:00
si458
4b891c5be0 fix cancelhelp translate error #4888
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-21 20:00:53 +01:00
Ylian Saint-Hilaire
86713cacac Version 1.1.25 2024-07-20 10:45:06 -07:00
Ylian Saint-Hilaire
95d60fef13 Added Catalan language support and Italian fixes. 2024-07-20 10:34:18 -07:00
si458
b4e7e7384d show previous logins for all users and fix mobile ui account permissions
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-20 17:11:33 +01:00
si458
62cae4cf8a fix autobackup: true
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-18 10:48:40 +01:00
si458
aaad8b79cc fix autobackup not running if no backupintervalhours specified
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-18 10:03:32 +01:00
si458
b0d9b17e36 fix external auth with loginkey passthrough #4883
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-17 15:19:05 +01:00
si458
991c23c5f9 fix remote input lock button from desktop views #4542
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-17 13:43:35 +01:00
si458
87c5745594 fix invite code installation type display #4541
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-17 12:43:24 +01:00
si458
707982a71b fix Localization Settings not saving server side #2164
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-16 12:06:06 +01:00
si458
a8fc5e1187 disable open button in files for android
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-16 11:03:29 +01:00
si458
40ac6aa636 fix download button in files for android
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-16 09:30:34 +01:00
si458
1d9de2e144 add lock button to mobile ui #6251
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-15 10:16:37 +01:00
si458
ee0018e4d1 fix force2fa for files and groupactions #6247 #6246
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-10 15:33:39 +01:00
si458
721c909158 add proxmox to isVM
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-09 18:13:02 +01:00
si458
2630931eee dont allow go to folder button for android
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-09 17:41:17 +01:00
si458
13b8ca3686 fix Hungarian translate #6234
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-08 15:03:01 +01:00
mitch
a59da2fb9a
Remove link to archived user guide in new docs 2024-07-04 17:37:58 +01:00
si458
c3470f493b forgot d7encoding css
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-07-04 11:39:25 +01:00
Simon Smith
3d815824ba
Update readme.md 2024-07-04 10:24:43 +01:00
si458
9619a83ba7 update package-lock.json
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-28 15:18:06 +01:00
Simon Smith
f6c7761afb
update ws to 8.17.1 (#6214)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-28 15:09:34 +01:00
Joel Roth
9fd3e4c569
Check agent IP address instead of user IP address for agent file downloads. (#6155) 2024-06-28 14:50:57 +01:00
Josiah Baldwin
118b0c58dc
Added "trustedproxy" to the arguments list (#6211) 2024-06-28 14:25:49 +01:00
Simon Smith
57442e4988
fix filter refilling in chrome and safari (#6209)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-27 16:07:03 +01:00
Simon Smith
602eb3c64a
add encoding options to remote desktop (#6198)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-23 21:00:30 +01:00
si458
28c522c5bb add android version+api to dtails page
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-23 14:21:08 +01:00
si458
df91c90d33 fix ip fliters from files #3401
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-20 22:34:08 +01:00
si458
81557ab2d4 forgot user new events filter fix #6189
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-20 18:16:34 +01:00
si458
6b21bacad2 fix new events appearing when filtered #6189
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-20 18:07:50 +01:00
Simon Smith
46ebadf440
fix mac mpkg agent again (#6194)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-20 12:36:24 +01:00
si458
6c3e60e13c update translate.json
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-17 10:54:58 +01:00
si458
7955bc4954 include connect-flash with passport to allow displaying of errors
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-17 10:10:35 +01:00
Simon Smith
482e79f913
fix meshcentral-web-domain translate displaying (#6180)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-17 09:48:21 +01:00
Simon Smith
0a89d07937
add userSessionsSort for session sorting (#6177)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-14 09:56:02 +01:00
si458
c053c14dd0 fix star covering desc in list view #6174
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-12 14:23:37 +01:00
si458
5950b2c829 make sure to clear flash errors after display to avoid showing again #6154
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-11 20:46:45 +01:00
si458
42a07e9d74 fix passport failureRedirect for subdomain paths
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-11 20:38:09 +01:00
si458
d7341ab153 display flash errors for external auths like saml or oidc on the login screen #6154
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-11 20:06:19 +01:00
si458
74d6252699 increase uploadFile buffer to speed up file uploads #6169
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-11 17:02:20 +01:00
si458
b08f3827f5 fix obj.user._id undefined for rdp/ssh #6127
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-11 10:05:58 +01:00
si458
6976992735 fix oidc paths with aliasport #6148
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-04 10:26:29 +01:00
si458
b1c3e2a8e7 remove power-monitor server side to fix windows battery levels #6143
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-01 23:17:13 +01:00
si458
c67a76bcc2 fix oidc reauth #6132
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-01 20:31:25 +01:00
si458
62199d8057 fix handleStrategyLogin invalid token/user
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-06-01 17:13:22 +01:00
si458
52a2194116 require connect-flash for oidc #6132
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-28 20:00:33 +01:00
si458
2b3c329a54 remove comments and console.log meshctrl.js
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-28 18:26:21 +01:00
si458
17cf36edd9 add installflags to agentdownload in meshctrl.js #6133
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-28 18:24:39 +01:00
si458
a171cde2ff update package-lock.json
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-25 16:57:15 +01:00
Ylian Saint-Hilaire
5d5e861a4a Version 1.1.24 2024-05-25 08:38:28 -07:00
si458
26ac23c80d fix web-rdp/web-ssh save creds per user
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-24 17:27:22 +01:00
si458
5a7e3d9869 fix allowSavingDeviceCredentials description
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-24 16:25:25 +01:00
si458
abbb0fa9ee fix sharing keyboard input after Ctrl+Alt+Delete #6120
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-24 15:51:39 +01:00
si458
89b67ff999 fix sharing latency and timer
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-24 15:30:03 +01:00
si458
6c685d5557 fix realname undefined #6118
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-24 10:54:27 +01:00
Ylian Saint-Hilaire
49b561260a Updated ExpressJS to 4.19.2 2024-05-23 15:47:44 -07:00
Ylian Saint-Hilaire
aa8f45f4a9 Version 1.1.23 2024-05-23 15:32:29 -07:00
si458
7cf14a2b69 meshctrl deviceinfo error on unescaped nodeid
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-23 20:59:33 +01:00
si458
7e7361de9b add/fix iplocation
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-21 20:01:45 +01:00
si458
4cd7b408fa fix linux storage volumes 0kb
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-21 19:42:52 +01:00
si458
bc6451fee5 migrate groups.enabled in oidc #6104
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-21 19:04:43 +01:00
si458
f1ba76a423 fix device notifications not dismissing on other web sessions
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-21 17:47:39 +01:00
si458
385a4738cd forgot oidc group schema fix
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-21 16:56:56 +01:00
si458
5c13f178be fix oidc sync groups
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-21 16:05:00 +01:00
si458
323ef2d50a fix cookieEncoding hex for 2fa #6096
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-18 19:45:31 +01:00
Simon Smith
dd249938b3
fix keyboard shortcuts and add restore default keyboard shortcuts (#6103)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-18 18:30:26 +01:00
si458
30d958fbd9 fix auth-oidc-callback examples
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-18 12:26:27 +01:00
si458
1c8d664962 fix oidc groups.claim undefined
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-17 20:01:12 +01:00
Simon Smith
b22e56b6d2
add openidConnectStrategy to mkdocs.yml 2024-05-17 18:09:48 +01:00
Simon Smith
bc2f34b629
remove sendconsoletext from computer-identifiers.js 2024-05-17 17:13:59 +01:00
si458
e8da6a607c add nodeid to info in console #6097
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-17 14:41:51 +01:00
si458
77d268d064 listdevice filter should be string #6091
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-14 20:49:08 +01:00
si458
23ee76e26a fix mac volume detection for older os
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-14 10:11:49 +01:00
si458
be3e333b40 add macos storage volumes using df
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-14 00:13:46 +01:00
si458
e3f68226d2 add linux storage volumes using df
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-13 23:44:47 +01:00
si458
b71b4d04e6 bring power-monitor server side to fix mac battery levels
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-13 21:47:08 +01:00
Simon Smith
bf7957ebff
add zerossl acme (#6084)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-12 15:45:24 +01:00
Simon Smith
19eb1235f5
set min to node 16 (#5955)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-12 15:37:47 +01:00
Simon Smith
274bb525a5
allow msh get/set/delete from console (#6074)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-10 14:12:39 +01:00
si458
33c0e82286 fix mobile ui upload mesh agent core
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-05-07 14:16:23 +01:00
Simon Smith
56d6527bf5
add run commands to mobile ui (#6044)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-24 09:09:35 +01:00
adnan29979
3ce2fd92c0
Missing languages added to translator
All languages from source code default.handlebars added to translator.htm
2024-04-22 00:19:22 +01:00
adnan29979
eb27334b82
Doc update - Addition of 'How to Contribute' section (#6046) 2024-04-21 19:20:51 +01:00
si458
414d9b9561 undo #5452 and #6036 commits
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-19 11:48:49 +01:00
si458
1747ff7550 fix email in use meshctrl reply #6036
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-18 20:48:58 +01:00
si458
f39b6f8859 add smtp user/pass to schema and help docs
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-18 20:22:25 +01:00
Simon Smith
ca868afdd1
update translate readme.txt url #6041 2024-04-18 17:09:31 +01:00
Simon Smith
410c84c30b
add --mysql --mariadb arguments for stateless run (#6031)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-18 17:07:01 +01:00
Attocode1
18b731fd36
Updated install document - Corrected chmod command examples. (#6035) 2024-04-18 15:41:07 +01:00
si458
832e618602 forgot semicolon in a hurry meshctrl.js #6029
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-15 18:48:25 +01:00
si458
7b8cf85740 dont require, use readFileSync and phase for config.json in meshctrl #6029
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-15 18:46:40 +01:00
si458
1dca9e2235 fix missing connect-flash again #6028
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-15 14:51:18 +01:00
Simon Smith
30d570f28b
translation fixes for meshcentral-data-domain (#6027)
* dont translate min files
* translate meshcentral-web-domain folders with --translate
* also translate default views folder incase of changes

Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-15 13:00:42 +01:00
si458
f854c80421 fix meshctrl configfile undefined
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-13 23:00:43 +01:00
Simon Smith
f5891f2946
fix custom public folders for dns domains (#6018)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-12 10:43:06 +01:00
Simon Smith
1da33f0ade
add nice404 to invite and fix invite with dns use #6017
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-11 18:51:54 +01:00
Simon Smith
e025e9558b
fix authStrategyFlags using wrong domain (#6015)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-11 17:43:08 +01:00
Simon Smith
ccf57bee1a
add missing rights to meshctrl and meshServerRightsArrayToNumber (#6004)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-09 13:31:00 +01:00
Simon Smith
4ba08a96f7
unEscape ssh/rdp creds from db (#6001)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-09 11:47:32 +01:00
Simon Smith
548edd13d6
add lastbootuptime to columns and device powered on event (#5999)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-07 19:12:01 +01:00
si458
31ebb21e0b fix ipv6 only letsencrypt #5988
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-06 23:47:02 +01:00
adnan29979
4a3c6db0ea
Fixing documentation of gmail smtp (#5998)
• removal of "accessToken" from documentation, since it is not in the source code.
• addition of a new step of 'changing publishing status from testing to production'
• removal of a duplicate picture in index.md and adding an appropriate pic instead.
2024-04-06 21:27:01 +01:00
si458
f9af1ffc90 fix powertimeline daylights savings on mobile ui #5997
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-06 21:11:32 +01:00
si458
95e7997e60 fix daylight savings in powertimeline #5997
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-06 21:09:43 +01:00
buckybytes
9081a6aeac
Google Workspace OAuth2 SMTP Documentation (#5939) 2024-04-05 14:35:18 +01:00
si458
afc6165827 nochecks description attempt 3 #5987
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-03 11:41:16 +01:00
si458
c9c0a6cb67 fix nocheck description again #5987
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-03 11:22:29 +01:00
si458
b46c322c41 fix nochecks description #5987
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-03 11:18:46 +01:00
si458
4ff5a5c912 add letsencrypt nochecks to schema #5987
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-03 11:14:42 +01:00
Simon Smith
65d1346e06
open files/folders on desktop with files and console with openfile (#5986)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-03 09:51:18 +01:00
Simon Smith
5d1c8ca68b
add open web link to mobile ui (#5985)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-02 23:36:05 +01:00
Simon Smith
9294488d4e
fix name display for oauth (#5980)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-01 15:48:01 +01:00
Simon Smith
d2a0946f22
add user import via csv file (#5978)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-04-01 00:21:47 +01:00
Simon Smith
3be8ec5add
add mac uninstall and fix windows uninstall (#5976)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-31 22:28:10 +01:00
Simon Smith
102489447d
check db exists first before creating in postgres (#5968)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-31 19:20:15 +01:00
si458
8e8cc4b327 rename 2x mac image
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-31 14:05:20 +01:00
si458
ce93c896ce fix null values in filters
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-31 13:55:41 +01:00
si458
7b67b992e2 fix postgres nedbtodb
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-31 13:52:16 +01:00
Simon Smith
95bbd7157f
add filter for events (#5975)
* add filter to node events
* add filter to my events
* add filter to user events
* improve sql querys

Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-31 13:50:38 +01:00
Simon Smith
8e6cc14981
set flatpickr to 1 minute increments (#5974)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-29 18:11:29 +00:00
buckybytes
862e2ee80b
Various grammar, spelling, and clarity issues. (#5964)
* Update plugins.md

* Update faq.md

* Update debugging.md

* Update customization.md

* Update codesigning.md

* Update assistant.md
2024-03-27 11:26:38 +00:00
si458
81e98033fc fix mac memory part number
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-25 13:41:42 +00:00
Ylian Saint-Hilaire
fbae83dd9f Version 1.1.22 2024-03-24 11:43:32 -07:00
adnan29979
8498414ae9
Doc update - Agent Invitation Customization (#5937)
* Update assistant.md

* Email Invite and customization

* Update assistant.md

* Email Invitation pic upload

* point agent invitation customization to assistant.md
2024-03-24 11:32:08 -07:00
Ylian Saint-Hilaire
d33aa25e5b Updated Spanish translation. 2024-03-24 11:14:42 -07:00
Ylian Saint-Hilaire
8775b7dcf7 Set login autocomplete to off when set to false in config.json. 2024-03-24 11:03:33 -07:00
Simon Smith
e6ee2034d1
add biosSerial/biosMode to csv (#5949)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-22 14:31:47 +00:00
Simon Smith
f874e76f0c
wake mac screen with caffeinate (#5935)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-15 12:13:19 +00:00
adnan29979
105612c199
Doc update - Custom Web Icons (#5931) 2024-03-14 20:35:04 +00:00
silversword411
4027ee1b28
Fixing realname in notification for terminal sessions (#5928) 2024-03-14 14:51:33 +00:00
Simon Smith
4f11d7fdbc
allow meshctrl.js to reply with output from runcommands (#5932)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-14 14:33:02 +00:00
si458
b8238ef34d add selfupdate version to schema
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-10 16:26:52 +00:00
si458
4b6da03d2f fix crash caused my oidc merge
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-10 11:54:55 +00:00
mstrhakr
05fca6cb36
Fix formatting issues from merging (#5909)
* fix formatting issues in webserver.js

* fix formatting issues is meshcentral.js
2024-03-09 23:46:01 -08:00
Josiah Baldwin
150e2337f5
Add options for overriding TLS ciphers used (#5915)
* Add the ability to set TLS cipher suites

Added config option to set the TLS ciphers instead of relying on a hardcoded list of ciphers determined by meshcentral.

* Added option to use default node ciphers

This allows the ciphers used to be set to the recommended ciphers by nodejs, as well as allowing the user to override the ciphers using the "--tls-cipher-list" command line switch for node.

* Updated validArguments array to include "usenodedefaulttlsciphers" and "tlsciphers" as options
2024-03-09 23:45:10 -08:00
mstrhakr
dfc08b05a9
Login/logout bugfix for OIDC strategy. (#5920)
* add extra logging

* fix how strategy is saved
2024-03-09 23:44:18 -08:00
si458
fbe1445691 fix windows arm terminal
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-08 18:03:31 +00:00
si458
05ee40c591 add 'EFI Development Kit II / OVMF' as VM
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-08 17:04:08 +00:00
si458
872794e15f update showpaths with domain custom folders #5496
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-08 15:22:12 +00:00
Aaron Meese
334fee706e
Changed insure to ensure (#5913) 2024-03-07 16:08:11 +00:00
si458
e9c28d03b5 add windows arm 64bit to agentinvite page
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-07 15:21:10 +00:00
si458
2d75bbde33 add osx mpkg customized filename
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-07 10:19:31 +00:00
mstrhakr
ab0d9c188d
Update Passport version in meshcentral.js - Fix bad merge (#5908) 2024-03-06 19:00:24 +00:00
petervanv
d71ca89b58
Dutch language update 1.1.21 (#5903)
Update 3
2024-03-05 22:34:38 +00:00
wdlut
0e896fe9fe
Bugfix for plugin filemode #5865 (#5897)
Some files were created with file rights of 0o000. It was not even possible to read them.
2024-03-05 10:33:13 +00:00
si458
0a59f9dbae update agentinvite with osx universal mpkg
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-05 10:21:16 +00:00
si458
c1bec67839 allow multiple osx mpkg installs now and update uninstall.command
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-04 16:34:41 +00:00
si458
234acd3347 add displayname to macos pkg
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-04 12:50:22 +00:00
si458
473b9d0265 add osx custom filename to zip
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-04 11:17:43 +00:00
si458
6f47f2bc89 add note about apple quarantine for binarys
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-04 11:11:42 +00:00
si458
548c1b9bb4 fix mac memory and invalid smc values
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-04 10:57:09 +00:00
tschettervictor
3ffc92e917
Update common.js (#5895)
typo

Co-authored-by: Ylian Saint-Hilaire <ysainthilaire@hotmail.com>
2024-03-03 17:50:26 -08:00
Ylian Saint-Hilaire
bab35e7bca Removed Reddit auth strategy since it never worked well. 2024-03-03 16:34:01 -08:00
mstrhakr
4be5b7273e
Migrate to openid client (#5856)
* Create forksync.yml

* update oidc to use openid-client

* update oidc module requirements

* working oidc+

includes all oauth2 clients automatically migrated. azure will need some kind of fix for the uid

* update openid-client install checks

* created overarching schema for OIDC

* bug fixs for azure login

* update schema

prepare schema for unified oidc module

* update 'oidc' to strategy variable

* working azure+ groups

groups from azure are in,
you can use memberOf or transitiveMemberOf in config (Graphs API)

* clean up old config import + working google oidc

previous config map was recursive nonsense, changed to multiple IFs

* added convertStrArray

* de-expanded scope

put all other auth strategies back to normal and fixed oidc strategy

* swap back to using authlog debugger

* Update meshcentral-config-schema.json

* working google oidc + groups

* working azure+groups (again)

* init oidc docs

very incomplete but basic config is present

* add oidc

* more work on docs

* add scope and claim options

plus fixed a few bugs and faults in my logic
used logs correctly

* further cleanup debug

* more debug cleanup

* continue documentation push

fixed minor debug bugs also

* more work on docs

missing links, need to get azure preset docs, probably more.

* done with docs

its good enough for now

* minor fix + presets get correct icon

* fix google oidc not visible at login

* fix bug with emailVerified property

* fix logout bug + debug cleanup

* fix strategy logout bug +cleanup

* fixed preset login icon

* fix alert + fix schema

* terminate lines

* Dutch language update 1.0.85

line up polish translation

* Fixed guest web relay session revocation (#4667)

* Updated French translation.

* Add hook to allow adding custom api endpoints to Express routing

* Updated German translation.

* Update meshcentral-config-schema.json (change formatting)

This way it is easier to edit and maintain

* Fixed schema.

* fix meshcentral-config-schema.json

* add language selector to login (#5648)

* add language selector to login

* add showLanguageSelect to pick top or bottom boxe

* remove additionalProperties: false in schema to allow comments #5697

Signed-off-by: si458 <simonsmith5521@gmail.com>

* fix notes in docs

* Fix web relay session handling and redirection due to bad merge

* Added option to check HTTP origin.

* add links and fix typo

* move groups after strategy

* Update version split in docs

* Fix preset issuer URL in OIDC strategy

* Update clientid and clientsecret to client_id and client_secret

* Update meshcentral-config-schema.json and fix bad rebase

* Update meshcentral-config-schema.json

* fix bad rebase

* fix bad rebase

* Add 'connect-flash' to passport dependencies

* Remove unnecessary passport dependencies - fix bad rebase

* Fix auth strategy bug and remove console.log statement

* Set groupType to the preset name if it exists, otherwise use the strategy name

* remove finally block from

* Refactor authentication logging in handleStrategyLogin to include strategy name

---------

Signed-off-by: si458 <simonsmith5521@gmail.com>
Co-authored-by: petervanv <58996467+petervanv@users.noreply.github.com>
Co-authored-by: Ylian Saint-Hilaire <ysainthilaire@hotmail.com>
Co-authored-by: Martin Mädler <martin.maedler@gmail.com>
Co-authored-by: Fausto Gutierrez <28719096+faustogut@users.noreply.github.com>
Co-authored-by: Simon Smith <simonsmith5521@gmail.com>
2024-03-03 16:03:27 -08:00
Ylian Saint-Hilaire
436a3cb9be Only set fileMode if not win32, #5865 2024-03-03 12:31:32 -08:00
wdlut
e6a71d77a1
Preservation of the executable rights of the files contained in a plugin (#5865)
On file systems that support this, the executable rights of a plug-in's files are retained.
2024-03-03 12:27:28 -08:00
Ylian Saint-Hilaire
9e9cd821bf Use userid instead of username when username is null in authlog, #5870 2024-03-03 12:21:21 -08:00
Ylian Saint-Hilaire
27f7648953 Updated archiver to 7.0.0 2024-03-03 11:30:52 -08:00
Ylian Saint-Hilaire
c937764980 Merge branch 'master' of https://github.com/Ylianst/MeshCentral 2024-03-03 11:13:32 -08:00
Ylian Saint-Hilaire
e8c4f322cb Fix for saving SSH/RDP credentials when a dot is in the username, #5833 2024-03-03 11:13:16 -08:00
si458
fb62df326c pad interfaces panel for firefox scrolling #4275
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-03 00:58:15 +00:00
Simon Smith
2318a0bb32
add relay and port to devicesharing in meshctrl.js
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-02 21:56:14 +00:00
si458
636255c8af fix Unzip translations
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-02 15:33:18 +00:00
Simon Smith
9241c43435
add unzip to files
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-02 15:16:06 +00:00
si458
0e055ef741 remove memory Manufacturer console.log
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-01 23:58:50 +00:00
Simon Smith
ee59e582b6
add no consent to guest sharing
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-01 22:29:59 +00:00
si458
aa87fd61bb maybe fix weird undefined user login accepted #5870
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-01 15:45:39 +00:00
Simon Smith
b4361d1c4e
fix view only setting incorrect protocol when sharing (#5879)
* fix view only setting incorrect protocol when sharing

---------

Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-03-01 13:59:49 +00:00
si458
3e23741cc8 fix Chat & Notify buttons always being shown #5858
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-29 23:07:36 +00:00
petervanv
016e43c191
Dutch language update 1.1.21 V2 (#5871)
Cleaned up version !!
2024-02-29 09:55:01 +00:00
si458
5ed0e4f59e fix mac translate locations
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-28 15:21:14 +00:00
Simon Smith
1b60e4dbfb
add mac memory/storage (#5869)
* add mac memory

* add macos storage

---------

Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-28 15:19:14 +00:00
petervanv
269ec02dc0
Dutch language update 1.1.21 (#5862) 2024-02-26 23:35:08 +00:00
si458
fce123e971 fix few more translations
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-24 00:31:57 +00:00
si458
bca1d277a4 add osx single binarys and rename tabs
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-24 00:24:04 +00:00
Simon Smith
017f777de2
update android apk to 1.0.21 2024-02-23 12:22:43 +00:00
si458
4cbb95a85f update package.lock
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-22 20:35:27 +00:00
si458
7912df307a update db sysinfo when sysinfo from console
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-22 17:57:12 +00:00
Simon Smith
82c70659b8
show cd-rom as volume
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-22 17:55:48 +00:00
Simon Smith
0b2368df9d
add Capacity Remaining
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-22 17:09:28 +00:00
si458
26bb350122 fix translations and add bitlocker in mobile ui
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-22 09:50:31 +00:00
si458
44926e16d5 update translations
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-21 15:51:02 +00:00
si458
0f23fa0ade fix linux txt translating
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-21 15:43:20 +00:00
Simon Smith
a80c0ef48c
fix translation values in details tab (#5841)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-21 15:00:20 +00:00
Marcin Wilk
79e137dbe7
Polish translation - Fix typo (#5840) 2024-02-20 23:33:52 +00:00
si458
af3e7f6186 fix rdp port translation
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-20 22:38:46 +00:00
Simon Smith
936aaa0b2b
disconnect sessions first before logout on idletimeout (#5838)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-20 21:59:30 +00:00
si458
272015483b fix formatting oops #bb93c11
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-20 20:24:20 +00:00
si458
bb93c113bd move rdpport to right side to fix translations #5834
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-20 20:20:46 +00:00
si458
9ef1cc64a4 fix translate.json
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-20 09:13:07 +00:00
Simon Smith
a14390e049
update Android apk to 1.0.20
Android 6 - 14 supported!
2024-02-19 23:46:55 +00:00
Simon Smith
a77d40505a
French bitlocker fix (#5832)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-19 23:16:31 +00:00
Ylian Saint-Hilaire
76485713df
Update SECURITY.md
Fixed PGP key format.
2024-02-19 15:12:07 -08:00
Ylian Saint-Hilaire
9ef48eac1f
Create SECURITY.md
Added a security.md file with email and PGP key for security reporting.
2024-02-19 15:10:33 -08:00
Marcin Wilk
7bc28b5dad
Update Polish translation for Meshcentral v 1..1.21 (#5822)
Also fix some mistake made with nl translation.
2024-02-19 00:12:11 -08:00
Ylian Saint-Hilaire
3e04e4d8c6 Version 1.1.21 2024-02-17 18:08:48 -08:00
Ylian Saint-Hilaire
f2bc7d5349 More BitLocker improvements. 2024-02-17 17:51:15 -08:00
Ylian Saint-Hilaire
e5e86fee19 BitLocker fixes, added drive volumes to details tab. 2024-02-17 14:01:49 -08:00
Ylian Saint-Hilaire
4637e6b3b3 Intel AMT fixes. 2024-02-17 12:33:56 -08:00
bennyc-huji
fb15d94976
update full version, and marking of the amt to check if activated (#5803) 2024-02-17 11:48:50 -08:00
si458
a7018e74bc split ips correctly with spaces for domains #5809
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-17 19:42:47 +00:00
petervanv
a3b3ecd8b1
Dutch language update 1.1.2 (#5804) 2024-02-17 11:23:14 -08:00
Ylian Saint-Hilaire
f2e43cc6da Added option to check HTTP origin. 2024-02-17 11:22:38 -08:00
si458
5c1249ccca split ips correctly with spaces #5809
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-17 15:10:47 +00:00
si458
0232056219 add extra defaults and descriptions to schema
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-14 13:44:23 +00:00
si458
6f78f9e276 fix one ping/pong function
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-12 11:46:16 +00:00
si458
4098805798 update meshcentralrouter with 2fa fix
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-12 10:23:10 +00:00
Simon Smith
980eca3765 update package lock 2024-02-11 15:07:02 +00:00
silversword411
512695df6c
Docs update for docker and meshagent msh file (#5791) 2024-02-11 14:05:19 +00:00
Simon Smith
15ff7d12a1
fix agentping (#5786)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-11 01:03:07 +00:00
silversword411
6637f08fe7
Docs - Reference docker official (#5788) 2024-02-09 18:32:06 +00:00
Simon Smith
990da39fde
add installdate to installedapps
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-02 13:00:56 +00:00
Simon Smith
ddcff9f0d2
use accelerator regardless of cpu core count (#5759)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-02 10:43:40 +00:00
Simon Smith
bfec20ac81
fix account pic transparency (#5761)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-02 10:35:10 +00:00
Simon Smith
550ee34f00
fix latency bouncing monitors (#5756)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-02 10:22:25 +00:00
si458
e6f27fca36 fix 2nd line also showing drive name #1892
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-02-01 14:40:55 +00:00
Simon Smith
b887457ec4
add bitlocker key to gui for admins (#5747)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-31 15:40:58 +00:00
Simon Smith
4648dbeb26
create folder first before copy/move #5704 2024-01-31 15:02:50 +00:00
Simon Smith
cdab553800
show latency in remote/terminal every 10 secs (#5750)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-31 14:06:31 +00:00
Simon Smith
cd2ede8369
add drive names and icons to files (#5749)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-31 14:06:02 +00:00
si458
97ed6c8285 fix coreinfo and sendPeriodicServerUpdate
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-29 15:13:24 +00:00
si458
df94b50d5d dont sendconsoletext muppet!
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-29 13:59:37 +00:00
si458
9542e77e1b update volumes and bitlocker periodically
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-29 13:16:39 +00:00
si458
3f8bbe68b0 fix blank Windows Defender
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-28 18:52:16 +00:00
si458
37911d091c fix bitlocker with multiple drives and german phrase checker
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-28 17:30:57 +00:00
Ylian Saint-Hilaire
1855dd1d56 Fixes authenticode signing if a section name starts with an underscore. 2024-01-27 10:15:33 -08:00
Ylian Saint-Hilaire
9f57c27dd1 Version 1.1.20 2024-01-27 09:54:36 -08:00
si458
8547de340c fix drive status undefined
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-27 12:42:27 +00:00
Simon Smith
cd48909dcb
add application location to info (#5740)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-26 14:59:34 +00:00
Simon Smith
ceba76cfde
fix numlock sending extended keys incorrectly (#5735)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-25 23:05:47 -08:00
Simon Smith
c331eca679
add android apk to mobile ui
* add android apk to mobile ui

Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-25 18:00:03 +00:00
si458
03cab630c7 try lscpu if blank cpu_name
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-25 17:21:40 +00:00
Simon Smith
aaff3abc1a
add cloudflare issue to faq docs 2024-01-25 16:47:28 +00:00
silversword411
b02541cd02
tweaking docs loginTokeKey (#5733) 2024-01-25 16:18:14 +00:00
Simon Smith
18af676c22
add groupmessage/grouptoast to meshctrl (#5731)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-25 09:44:27 +00:00
Simon Smith
57f77057b4 fix files connect button order
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2024-01-24 15:28:02 +00:00
Simon Smith
b9c706cec2 fix amt powerstate again #5722
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2024-01-24 15:27:01 +00:00
Simon Smith
b1451a1c8a
add extra services information
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-24 11:51:28 +00:00
Simon Smith
b860981925
add linux binary to agentinvite (#5717)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-22 20:57:04 -08:00
Simon Schön
327f29159e
Fixed 'deprecated' warnings in gh-workflows (#5720) 2024-01-21 20:49:31 +00:00
Simon Smith
a2aed9e772
show rdp port on button and set rdpport in console (#5708)
* add rdpport to console

Signed-off-by: si458 <simonsmith5521@gmail.com>

* add port number to rdp connect button

Signed-off-by: si458 <simonsmith5521@gmail.com>

---------

Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-18 18:56:54 -08:00
Simon Smith
aaff8232b0
fix notes in docs 2024-01-18 22:33:57 +00:00
dinger1986
ab835591db
add nginx selinux to docs (#5710)
Co-authored-by: Simon Smith <simonsmith5521@gmail.com>
2024-01-18 22:16:15 +00:00
Simon Smith
6cb05ce009
add dns servers to details tab (#5709)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-18 21:42:17 +00:00
si458
21bd171167 make add users to device group box expandable #1718
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-18 21:40:33 +00:00
si458
c546333cf7 fix MyFiles cut/copy command #5704
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-17 15:53:34 +00:00
Ylian Saint-Hilaire
1e9607ba8e Changed publicpushnotifications setting to use alt.meshcentral.com. 2024-01-16 18:57:57 -08:00
Ylian Saint-Hilaire
f93bb3a82f Version 1.1.19 2024-01-16 18:38:51 -08:00
si458
0d7564d845 fix relaying with subdomain #5394
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-16 15:57:50 +00:00
Simon Smith
6e2321b5c6
add multiple file download by check boxes (#5699)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-16 09:35:53 +00:00
si458
757cef3f29 missed 1 onmouseup #5700
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-16 09:31:47 +00:00
si458
d02b63a4a2 remove additionalProperties: false in schema to allow comments #5697
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-15 19:45:46 +00:00
si458
1295af4677 fix config schema 2024
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-15 19:15:19 +00:00
si458
329ba43e81 add loginTokenKey to docs #4153
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-15 17:08:32 +00:00
si458
6cacec010b add subfolder to 2fa domain name #5238
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-14 21:23:49 +00:00
si458
9986567cf0 add set remote clipboard to web-rdp #4133
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-14 17:42:43 +00:00
si458
b01078bf55 add get remote clipboard to web-rdp #4133
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-14 16:56:13 +00:00
si458
0b0f2999db fix meshcentral assistant downloads
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-14 16:45:04 +00:00
Ylian Saint-Hilaire
db06c0c925 Version 1.1.18 2024-01-13 12:31:21 -08:00
Ylian Saint-Hilaire
ee7ceb7898 Fixed dependencies. 2024-01-13 12:30:35 -08:00
Ylian Saint-Hilaire
0de32f9fee Version 1.1.17 2024-01-13 11:46:43 -08:00
Simon Smith
a822b88756
fix amt powerstate and timer (#5691)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-13 10:53:45 -08:00
Simon Smith
ef6fd23a4f
Fix package installs and set node 20 for docker (#5692)
* fix install packages and set docker to node 20

Signed-off-by: si458 <simonsmith5521@gmail.com>

* missed a few no-package-lock and no-save

Signed-off-by: si458 <simonsmith5521@gmail.com>

* use --save-exact and only install missing modules

Signed-off-by: si458 <simonsmith5521@gmail.com>

---------

Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-13 10:52:59 -08:00
Simon Smith
7c2eea68b6
Fix meshcentral assistant monitor mode always using direct connect mode (#5693)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-13 10:52:17 -08:00
si458
775ed95de4 add intel amt power off warning to mobile site #4768
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-13 16:02:04 +00:00
si458
227b4c68e7 add amt power off warning about active sessions #4768
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-13 15:58:35 +00:00
Simon Smith
82f10f0193
Update file Architecture in docs 2024-01-13 14:08:43 +00:00
Simon Smith
00db0a3a39
add timeout to message box notifications (#5689)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-12 22:46:12 +00:00
Simon Smith
cb0b02152a
escape apostrophes in privacybar realname (#5690) 2024-01-12 22:42:26 +00:00
wdlut
78a49c504a
fix mobile terminal not showing enter key for Android soft keyboard for sharing-moblile.handlebars (#5687) 2024-01-12 10:43:10 +00:00
wdlut
23666fed1f
fix mobile terminal not showing enter key for Android soft keyboard 2024-01-12 09:44:12 +00:00
Stuart Wyatt
64bef74317
Align and specify NPM module versions (#5685)
The Dockerfile specifies NPM modules to be installed.  However, some do not specify a version, so the latest is installed.  Later in meshcentral.js mainStart() specific versions are required.  If they don't match the latest version, all modules will be reinstalled to get the specific versions.

#5684 Soft version conflict on NPM modules causes NPM modules to be installed on startup in Docker
#5545 Docker on Debian 11 fails on version 1.1.15 and 1.1.16 giving NPM errors
#5681 InstallModules() installs all modules, not just missing modules (regression)
2024-01-11 17:49:12 -08:00
si458
a57ab97bb1 fix powerstate wording/colours again
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-11 12:06:23 +00:00
si458
7e2bc8422f add powerstate darkgreen to docs
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-11 11:52:27 +00:00
Simon Smith
a5efc5e899
add seclevel=0 to cipher to fix tls 1.0 and 1.1 (#5683)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-10 21:46:41 +00:00
Simon Smith
275119fc7d add python to docker image for syslogtcp #5546
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2024-01-10 12:22:22 +00:00
si458
c248eada46 add blob to frame-src csp for intel amt #5678
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-09 13:00:24 +00:00
si458
4e580bb74d fix customization docs styling
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-08 11:21:51 +00:00
Simon Smith
6c4a4e6966
move branding to customization
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-08 11:14:30 +00:00
Simon Smith
b490d6bc15
add middle click to open in new tab (#5668)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-07 22:22:36 -08:00
Simon Smith
36741c767f
add bitlocker recoverykey to sysinfo (#5671)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-07 22:22:17 -08:00
Simon Smith
e967f00977
allow setting meshcentral assistant type for agentinvites (#5672)
* allow setting meshcentral assistant type for agentinvites

Signed-off-by: si458 <simonsmith5521@gmail.com>

* forgot webserver for assistantTypeAgentInvite

Signed-off-by: si458 <simonsmith5521@gmail.com>

* dont use capital letters with domain args

Signed-off-by: si458 <simonsmith5521@gmail.com>

---------

Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-07 22:21:54 -08:00
Simon Smith
bb616903ee
add different notification types (#5669)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-07 22:21:31 -08:00
Simon Smith
c38cb3d46c
add tools resizable (#5665)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-07 22:21:08 -08:00
Simon Smith
c48447d3e6
add windows drive status (#5663)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-04 02:18:14 +00:00
Simon Smith
e4001e67ef
add language selector to login (#5648)
* add language selector to login

* add showLanguageSelect to pick top or bottom boxe
2024-01-04 02:17:27 +00:00
Simon Smith
f33dbd31e5
add Defender for Windows Server (#5646)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-04 02:16:41 +00:00
Simon Smith
45722c70d4
fix linux csv output (#5661)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-03 15:20:17 +00:00
Simon Smith
b0bb66fee8
add tpm to csv (#5660) 2024-01-03 14:44:00 +00:00
si458
97a624e2fc fix for chrome/edge file downloads with meshcentral assistant #5659
Signed-off-by: si458 <simonsmith5521@gmail.com>
2024-01-02 19:58:56 +00:00
Andy Hall
10b68408ca
Fix typo (readble -> readable) (#5657) 2023-12-31 21:07:51 +00:00
Simon Smith
bfae0d6c6e
move identifiers to server side to allow future updates (#5641)
* move identifiers to server side to allow future updates

Signed-off-by: si458 <simonsmith5521@gmail.com>

* add rpi support

Signed-off-by: si458 <simonsmith5521@gmail.com>

---------

Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-12-22 15:18:17 -08:00
Simon Smith
a17fd2f268
revert hashAlgorithm to fix peform signature
revert commit 43c16d02f9c5538c1dbc9459eaeff5a4a250d8bd
2023-12-18 12:11:52 +00:00
Simon Smith
e488a002da
meshctrl download check string not binary #5629 2023-12-14 16:15:36 +00:00
si458
4cad780613 add alert box message for translations
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-12-14 15:51:11 +00:00
Simon Smith
947d84316b
add old style alertbox
* add old style alertbox

Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-12-14 14:24:55 +00:00
Oakington
91c83e2622
Allow $ARGS in $REVERSE_PROXY .env (#5628) 2023-12-13 23:35:16 +00:00
wdlut
6e4c8b0d16
BUGFIX: AltGr-key does not work, when connecting from Windows browser to Linux agent. (#5614)
Windows doesnt have a proper AltGr, but handles it using fake Ctrl+Alt. However the remote end might not be Windows, so we need to merge those into a single AltGr event. We detect this case by seeing the two key events directly after each other with a very short time between them.
2023-12-06 19:48:16 -08:00
wdlut
532992b03f
BUGFIX: Values returned by linux_memUtilization() not useful. MemFree is the free physical memory. (#5596)
Since the Linux kernel uses free memory for caching, this value is usually very small. MemAvailble is an estimate of how much memory is available for starting new applications, without swapping. MemFree is the free physical memory. Using this value gives much more meaningful results.
2023-12-05 12:01:36 -08:00
silversword411
a6640d533c
Add wifi AMT and mac client to docs (#5592)
* Adding wifi AMT info https://github.com/Ylianst/MeshCentral/issues/3386

* Add mac to faq https://github.com/Ylianst/MeshCentral/issues/5589

* docs - removing the raw schema.json for better search menus

* docs - adding some pics for schema
2023-11-30 01:43:53 -08:00
dinger1986
0ba8b534e7
updated tipsntricks (#5586)
* Update tipsntricks.md

* Update tipsntricks.md
2023-11-29 00:10:08 -08:00
si458
b17d04ddc5 add extra telegram options to docs/config #5587
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-11-27 15:14:51 +00:00
dinger1986
906a42219d
Update tipsntricks.md (#5585) 2023-11-27 13:57:30 +00:00
Simon Smith
7e1657d632
Add windows linux mac uptime (#5583)
* add linux uptime
* add mac uptime

---------

Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-11-26 18:15:49 +00:00
Simon Smith
5581f3ace8
add slack webhooks messaging (#5569)
* add slack webhooks messaging

Signed-off-by: si458 <simonsmith5521@gmail.com>

* remove my test slack incoming webhook

Signed-off-by: si458 <simonsmith5521@gmail.com>

---------

Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-11-25 12:45:18 -08:00
Simon Smith
0a01c5d4e4
plugin error should be ex not e 2023-11-21 14:06:24 +00:00
Simon Smith
712277eb9e
fix ntfy selfhosted docs 2023-11-21 12:40:45 +00:00
Simon Smith
2cb9d1484e
fix edit messaging using wrong user (#5568) 2023-11-17 22:55:41 +00:00
Simon Smith
409d1d6248
update ua-parser-js to 1.0.37 (#5567) 2023-11-17 19:50:17 +00:00
si458
d5b79a92c4 fix windows columns showing OK/BAD
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-11-15 22:47:01 +00:00
si458
fb8883a9d9 add lockAgentDownload to schema and config
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-11-15 14:30:53 +00:00
Ylian Saint-Hilaire
dd92aa6628 Version 1.1.16 2023-11-12 15:33:36 -08:00
Ylian Saint-Hilaire
4a6703b63a Ran translations and minor fix to filter url. 2023-11-12 15:28:52 -08:00
jrf280
bc0550a791
Added device group name to search results as config option (#5544) 2023-11-12 15:18:00 -08:00
si458
a3717095e7 add password promt to loginpass meshctrl
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-11-12 21:49:20 +00:00
si458
ed56213d1b fix display response
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-11-12 19:23:26 +00:00
si458
08d5aef9c9 add display sleep/awake to console
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-11-12 19:04:59 +00:00
Simon Smith
d80a74b915
add filter to url (#5535) 2023-11-12 10:14:01 -08:00
Simon Smith
c05cbeae88
showNotesPanel in device view (#5543)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-11-12 10:13:21 -08:00
Marc Laporte
0ce305ebcf
Share unofficial chatrooms (#5539) 2023-11-11 18:00:08 +00:00
si458
a7f996678f trigger light/dark mode automatically
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-11-11 03:33:43 +00:00
si458
27b750813e red OK should say BAD in columns
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-11-11 03:21:22 +00:00
Simon Smith
c97e9f4f27
add windows av/update/firewall to columns (#5534) 2023-11-11 03:16:20 +00:00
Simon Smith
5c527c4632
set wallpaper icon red if wallpaper removed (#5533)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-11-10 18:36:03 -08:00
si458
12c3e4ee53 add installedapps to console for windows
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-11-09 18:20:32 +00:00
si458
ca64d11552 add missing config json to config docs 2023-11-09 15:54:04 +00:00
si458
86485cf19f move questions to discussions 2023-11-09 14:13:59 +00:00
Simon Smith
55d81e0bf6
add uninstallagent to console help 2023-11-08 18:11:24 +00:00
si458
4f65f88f43 fix docs formatting
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-11-08 10:58:31 +00:00
jrf280
eadf6fbaf0
Fix plugins installation for PostgreSQL (#5517)
* Fix plugins installation for PostgreSQL

* Fix setPluginStatus for MySQL/MariaDB/SQLite/PostgreSQL
2023-11-07 09:17:24 -08:00
si458
c286c21fb6 add trace-warnings correctly
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-11-07 14:42:02 +00:00
Simon Smith
b7385e382c
fix agentaliasdns display (#5518) 2023-11-07 00:10:12 +00:00
jrf280
6ba4bf7202
Fix plugins installation for MySQL/MariaDB/SQLite (#5513) 2023-11-06 19:01:42 +00:00
Simon Smith
5c99db9edb
fix postgres sqlbatch (#5514)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-11-06 13:54:17 +00:00
Ylian Saint-Hilaire
d3e9616908 Updated Spanish translations. 2023-11-05 11:39:25 -08:00
Simon Smith
4790f40179
wait 5 sec after record and also pass message back (#5508)
* wait 5 sec after record and also pass message back

Signed-off-by: si458 <simonsmith5521@gmail.com>

* add connect-flash package (#5509)

Signed-off-by: si458 <simonsmith5521@gmail.com>

---------

Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-11-04 21:39:02 -07:00
Simon Smith
7b016eac58
add tpm support (#5421)
* add tpm support

Signed-off-by: Simon Smith <simonsmith5521@gmail.com>

* fix tpm semicolon mistake

Signed-off-by: Simon Smith <simonsmith5521@gmail.com>

---------

Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-11-04 11:44:34 -07:00
gomeghi
a8aa294199
add connect-flash for generic open oidc (#5497) 2023-11-04 11:30:22 -07:00
Simon Smith
e62bfadb76
fix sessionrecording for not indexing (#5490) 2023-11-03 20:53:19 +00:00
Simon Smith
b4887b7766
add lastbootuptime to mobile (#5504) 2023-11-03 19:48:40 +00:00
Ylian Saint-Hilaire
e04659a63d Version 1.1.15 2023-10-31 12:19:33 -07:00
Simon Smith
23b78960da
fix messaging handle string too long (#5483) 2023-10-31 12:11:56 -07:00
Simon Smith
cb87cc8172
fix removedevice with meshctrl (#5487)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-10-31 12:11:37 -07:00
Simon Smith
13ead1ddeb
fix mariadb parsing with mysql (#5488) 2023-10-31 12:11:17 -07:00
Ylian Saint-Hilaire
fed8f021f2 Fix recoverable exception in mesh accelerator. 2023-10-29 18:01:37 -07:00
Simon Smith
e0d73b2fcd
add agent psinfo (#5476)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-10-28 11:29:05 -07:00
Simon Smith
2173921f07
fix runcommands missing data (#5477)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-10-28 11:28:30 -07:00
Simon Smith
6c15bcbe05
add last boot up time for windows (#5478)
* add last boot up time for windows

Signed-off-by: si458 <simonsmith5521@gmail.com>

* fixed lastbootuptime parsing

Signed-off-by: si458 <simonsmith5521@gmail.com>

---------

Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-10-28 11:27:41 -07:00
Simon Smith
b52da08c84
add telegram to callmebot (#5480)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-10-28 11:27:11 -07:00
Simon Smith
c6ebcc6e8e
fix sql batch must use same connection from pool (#5469)
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-10-24 19:28:29 +01:00
Simon Smith
2117c19717
only run release action when package.json changes 2023-10-24 14:53:27 +01:00
si458
16bb4346e3 fix player text align
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-10-24 11:10:47 +01:00
Simon Smith
7c263872b1
fix tag darkmode
Signed-off-by: si458 <simonsmith5521@gmail.com>
2023-10-23 19:50:42 +01:00
Ylian Saint-Hilaire
71e3d788e0 Version 1.1.14 2023-10-21 11:40:53 -07:00
Ylian Saint-Hilaire
b4e0dbcd80 More module install improvements, NodeJS minimum version is now 11 due to express-handlebar. 2023-10-21 01:00:47 -07:00
Ylian Saint-Hilaire
aadfbafc33 Improved translation.js module installation. 2023-10-20 23:59:14 -07:00
Ylian Saint-Hilaire
cdde9b5d67 Major changes to the way NPM is used to install modules, should fix meshcentral updateing incorrectly and other module issues. 2023-10-20 23:36:02 -07:00
Ylian Saint-Hilaire
25b0ac3a6d Rolled back express-ws to 4.0.0 due to 5.x not handling invalid web socket flags correctly. 2023-10-20 20:07:25 -07:00
Simon Smith
a60b4cbbea
add Go To Folder (#5424)
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-20 17:31:25 -07:00
Simon Smith
e20a585b3a
use mysql2 package to support mysql8 (#5427)
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-20 17:30:57 -07:00
Simon Smith
58580beb96
add hover title to temps and more sensors (#5434)
* add hover title to temperatures

Signed-off-by: Simon Smith <simonsmith5521@gmail.com>

* fix temp trim

Signed-off-by: Simon Smith <simonsmith5521@gmail.com>

* add extra linux sensors

Signed-off-by: Simon Smith <simonsmith5521@gmail.com>

* add padding for temps on multi lines

Signed-off-by: Simon Smith <simonsmith5521@gmail.com>

---------

Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-20 17:30:39 -07:00
Simon Smith
47767e86a1
add android apk to web ui (#5449)
* add android apk to web ui

Signed-off-by: Simon Smith <simonsmith5521@gmail.com>

* add amazon and google buttons instead

Signed-off-by: Simon Smith <simonsmith5521@gmail.com>

* add android link and brand icons to agentinvite

Signed-off-by: Simon Smith <simonsmith5521@gmail.com>

* oops change mysql back

Signed-off-by: Simon Smith <simonsmith5521@gmail.com>

* add android to agentinvite selector

Signed-off-by: Simon Smith <simonsmith5521@gmail.com>

* forgot paragraph begin

Signed-off-by: Simon Smith <simonsmith5521@gmail.com>

---------

Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-20 17:29:48 -07:00
Simon Smith
e35af29ad0
dont allow duplicate emails (#5452)
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-20 17:29:16 -07:00
Simon Smith
1002bbb952
add display sizes to files (#5455)
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-20 17:28:42 -07:00
Ylian Saint-Hilaire
0f91268547
Merge pull request #5459 from Ylianst/add-tags-to-columns
add tags to columns
2023-10-20 17:27:22 -07:00
Simon Smith
19e03eaf29 add tags to columns
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-19 23:25:27 +01:00
Simon Smith
c9b47edc75 explain allowlogintoken correctly
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-18 12:06:44 +01:00
Simon Smith
2791e03338
fix graph needs destroying first 2023-10-16 16:22:02 +01:00
Simon Smith
4b5b9250f1
make dev master docker image 2023-10-16 01:13:17 +01:00
Simon Smith
ad14c83400
fix backspace mobile ssh 2023-10-15 23:42:08 +01:00
Simon Smith
d095831b6d use devicelocator if no banklabel for memory
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-12 16:51:44 +01:00
Simon Smith
556d72dfad
add linux memory (#5423) 2023-10-12 16:23:56 +01:00
Simon Smith
9884db3ce0
fix undefined memory label (#5422) 2023-10-12 15:35:28 +01:00
Simon Smith
bb7a5e9cce add bios mode to mobile view 2023-10-11 22:08:43 +00:00
Ylian Saint-Hilaire
b57bb1ad27
Merge pull request #5410 from Ylianst/enable-ssh-windows
enable ssh connect for windows
2023-10-09 15:45:55 -07:00
Simon Smith
548d76efed enable ssh connect for windows
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-09 21:28:27 +00:00
Simon Smith
a39f874c71
fix random files connect button vanishing (#5409) 2023-10-09 21:14:06 +01:00
Ylian Saint-Hilaire
5ad481a2e0 Version 1.1.13 2023-10-09 04:16:29 -07:00
Ylian Saint-Hilaire
7c4312f0c6 Fixed dependencies. 2023-10-09 04:15:01 -07:00
Ylian Saint-Hilaire
66284e2813 Version 1.1.12 2023-10-08 21:50:11 -07:00
Ylian Saint-Hilaire
467a30ba66 Merge branch 'master' of https://github.com/Ylianst/MeshCentral 2023-10-08 21:33:33 -07:00
Ylian Saint-Hilaire
6e1138ee5b Added scrollToTop option in domain section of the config.json. 2023-10-08 21:33:23 -07:00
Simon Smith
ae55285493
ignore if client sent new identifiers (#5403) 2023-10-08 14:27:39 +01:00
Simon Smith
553bcc9b8d
add bios mode uefi or legacy 2023-10-08 11:59:43 +01:00
Simon Smith
1a34cba9fb add bios mode
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-08 10:47:51 +00:00
Ylian Saint-Hilaire
78ef26ec3e Updated MeshCentral Router. 2023-10-07 12:31:03 -07:00
Ylian Saint-Hilaire
d2e52fbbff
Merge pull request #5382 from Ylianst/deny-resetaccount-pass-auth
deny resetaccount pass change with external auth
2023-10-07 11:45:13 -07:00
Ylian Saint-Hilaire
dd172a2b24
Merge pull request #5391 from Ylianst/scroll-to-top
add scroll to top button
2023-10-06 12:17:34 -07:00
Ylian Saint-Hilaire
e1b435fb0c
Merge pull request #5392 from Ylianst/bios-serial
add bios serial for windows
2023-10-06 12:16:54 -07:00
Ylian Saint-Hilaire
484146fb09
Merge pull request #5397 from Ylianst/add-tags-csv
add tags to csv
2023-10-06 12:16:33 -07:00
Ylian Saint-Hilaire
a0b7280893
Merge pull request #5398 from Ylianst/hide-powerstate
hidePowerTimeline
2023-10-06 12:16:06 -07:00
Ylian Saint-Hilaire
87382465aa
Merge pull request #5399 from Ylianst/copy-secret-totp
add copy button to secret totp
2023-10-06 12:15:41 -07:00
Ylian Saint-Hilaire
932584982c
Merge pull request #5393 from Abarna512/patch-1
Disconnect desktop session from User-side using Privacy bar.
2023-10-06 12:04:18 -07:00
Simon Smith
62c2ee08b1
Merge pull request #5400 from Ylianst:fix-pwa-manifest
fix pwa manifest
2023-10-06 19:39:05 +01:00
Simon Smith
4171a0766f fix pwa manifest
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-06 18:24:51 +00:00
Simon Smith
5126c5a1ef add copy button to secret totp
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-06 17:36:41 +00:00
Simon Smith
82c94cdf9d rename hidepowerstate to hidepowertimeline 2023-10-06 12:31:25 +00:00
Simon Smith
8b8ec48430 hide powerstate with hidepowerstate
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-06 12:01:04 +00:00
Simon Smith
4702926773 add tags to csv
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-06 09:31:45 +00:00
Abarna512
a397d9a79a
Disconnect desktop from User-side using Privay bar
If 'privacy bar' user consent option is enabled for desktop, then it will show the privacy bar in user side while taking desktop access.
But it will not disconnect the session even though clicks the close option. It will only close the privacy bar. This issue is fixed.

https://github.com/Ylianst/MeshCentral/issues/5289
2023-10-05 16:35:23 +05:30
Simon Smith
75a92ce485 add linux bios serial
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-04 19:51:59 +00:00
Simon Smith
14c3816fc9 add bios serial for windows
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-04 18:51:02 +00:00
Simon Smith
2b5e0e23be add scroll to top button
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-04 16:16:48 +00:00
Simon Smith
6d27ff5969
Merge pull request #5390 from Ylianst/auth-ntfy
add authorization to ntfy
2023-10-04 13:59:31 +01:00
Simon Smith
d8d13bda42 add authorization to ntfy
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-04 12:49:55 +00:00
Simon Smith
31bb6d7864 fix multiple same av detections 2023-10-04 12:04:52 +00:00
Simon Smith
12a248f102 make server config editor readonly
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-04 09:27:30 +00:00
Ylian Saint-Hilaire
49fa88fb69 Clarify file:// in CertURL configuration. 2023-10-03 21:07:30 -07:00
Ylian Saint-Hilaire
3a3663bb55 Improvements to show config option in MyServer tab. 2023-10-03 20:35:02 -07:00
Ylian Saint-Hilaire
0e671bbe81
Merge pull request #5387 from Ylianst/add-volume-info
Add Volumes+Bitlocker
2023-10-03 19:42:11 -07:00
Ylian Saint-Hilaire
2045946eb3
Merge pull request #5388 from Ylianst/fix-av-detection
fix multiple av detection
2023-10-03 19:40:53 -07:00
Ylian Saint-Hilaire
a4c0400ba5
Merge pull request #5389 from Ylianst/show-server-config
show server config for admins
2023-10-03 19:37:54 -07:00
Simon Smith
622d8c2fc7 forgot bitlocker csv header
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-03 20:13:31 +00:00
Simon Smith
128919b851 add bitlocker to csv
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-03 20:11:35 +00:00
Simon Smith
3d5fc3ae2e server config title
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-03 17:23:16 +00:00
Simon Smith
eb8df307ec show server config for admins
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-03 17:20:22 +00:00
Simon Smith
489f1aa57a fix multiple av detection
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-03 13:12:26 +00:00
Simon Smith
d19e456efb add bitlock to mobile view
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-03 13:10:36 +00:00
Simon Smith
2d8c3cfc64
Merge pull request #5386 from silversword411/master
Updating paths to meshcentral.com and removing deprecated flag
2023-10-03 13:24:44 +01:00
Simon Smith
55f16ab0ac add frontend bitlocker
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-03 12:19:11 +00:00
silversword411
2547a1fea7 Updating paths to website 2023-10-02 22:06:55 -04:00
silversword411
7209093767 Removing deprecated flag 2023-10-02 22:05:37 -04:00
Ylian Saint-Hilaire
b99fb68675 Fixed #5378, in some cases MPS crash when reverse lookup of IPv6 address. 2023-10-02 00:30:16 -07:00
Simon Smith
4fb8e4713d add volumes to database
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-01 19:50:27 +00:00
Simon Smith
f057633e14 add windows volumes to sysinfo
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-10-01 18:43:23 +00:00
Ylian Saint-Hilaire
9fc7fd2c5a Merge branch 'master' of https://github.com/Ylianst/MeshCentral 2023-10-01 00:52:25 -07:00
Ylian Saint-Hilaire
f5c056fdeb Corrected getPublicKeyHashBinary() to handle hashing the public key of a cert without ForgeJS. 2023-10-01 00:52:17 -07:00
Simon Smith
434bfe1845 fix missing getConfig in resetaccount
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-09-30 11:31:25 +00:00
Simon Smith
014e89ea8b deny resetaccount pass change with external auth
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-09-30 11:20:39 +00:00
Simon Smith
ea79be0a8f
Merge pull request #5381 from Ylianst:fix-messaging-docs
add missing messaging docs link
2023-09-30 06:25:05 +01:00
Simon Smith
972acd5718 add missing messaging docs link
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-09-30 05:24:36 +00:00
Simon Smith
140b7f3dea
Merge pull request #5380 from Ylianst:missing-openwrt
add missing openwrt x86-64
2023-09-29 13:06:35 +01:00
Simon Smith
8bf905e1c2 add missing openwrt
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-09-29 12:04:19 +00:00
Ylian Saint-Hilaire
dd279d3ea2 Disallow user group creation when server has OIDC auth with group sync enabled. 2023-09-24 20:51:45 -07:00
Ylian Saint-Hilaire
1e93057c52 Fixed user edit screen links. 2023-09-24 20:32:52 -07:00
Ylian Saint-Hilaire
b59b76a4f2 Server peering cleanup. 2023-09-24 14:59:07 -07:00
Ylian Saint-Hilaire
aed96a84e3 Possible fix for server peering auth problem, #5373 2023-09-24 13:41:41 -07:00
Ylian Saint-Hilaire
43d57597ab Fixed dependencies. 2023-09-24 13:32:47 -07:00
Ylian Saint-Hilaire
352b5d4d64 Improved server peering auth debug message. 2023-09-24 13:31:08 -07:00
Ylian Saint-Hilaire
dabd0e3808 Merge branch 'master' of https://github.com/Ylianst/MeshCentral 2023-09-24 12:00:40 -07:00
Ylian Saint-Hilaire
604d50585b Blocked user group creation when domain is in LDAP mode. 2023-09-24 12:00:33 -07:00
Simon Smith
7c56b722c9
Merge pull request #5377 from Ylianst/fix-android-link
fix android url
2023-09-24 19:56:06 +01:00
Simon Smith
ed3f9b65bf fix android url
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-09-24 18:52:45 +00:00
Ylian Saint-Hilaire
94812f53b2
Merge pull request #5376 from Ylianst/docker-args
Docker args
2023-09-24 11:48:12 -07:00
Ylian Saint-Hilaire
37b14a6b0b
Merge pull request #5353 from Ylianst/header-click
add header onclick event
2023-09-24 11:47:45 -07:00
Ylian Saint-Hilaire
b087ed0f50
Merge pull request #5366 from Ylianst/ldap-changepassword-temp-fix
deny sspi and ldap password change
2023-09-24 11:47:11 -07:00
Ylian Saint-Hilaire
28e3b18256
Merge pull request #5365 from Ylianst/update-packages
Update packages
2023-09-24 11:46:46 -07:00
Ylian Saint-Hilaire
955c6e1888
Merge pull request #5371 from Ylianst/agentinvite-commands-fix
fix agentinvite linux install/uninstall commands
2023-09-24 11:44:50 -07:00
Ylian Saint-Hilaire
e35e621743
Merge pull request #5372 from Ylianst/fix-uninstall-command
fix uninstall command
2023-09-24 11:43:57 -07:00
Ylian Saint-Hilaire
4a0a86b83a
Merge pull request #5367 from Ylianst/fix-ssh-player
fix writeUtf8 for ssh player
2023-09-24 11:42:39 -07:00
Ylian Saint-Hilaire
d97e0b1f62 Added warning for NodeJS <16 to upgrade to new version. 2023-09-24 11:40:06 -07:00
Simon Smith
86375207cc add args to docker readme
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-09-24 15:44:34 +00:00
Simon Smith
4c6696c0f7 add run args to docker
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-09-24 15:23:28 +00:00
Simon Smith
0a147a18d4
Merge pull request #5374 from Ylianst/update-links-docs
Update links docs
2023-09-22 21:09:22 +01:00
Simon Smith
bdc3ef56d1
Update index.md 2023-09-22 21:07:52 +01:00
Simon Smith
b67b90f197
Update install2.md 2023-09-22 21:04:58 +01:00
Simon Smith
69dfcaf140
fix uninstall command 2023-09-22 13:20:00 +01:00
Simon Smith
6e2466046e
fix agentinvite linux install/uninstall commands 2023-09-22 13:07:45 +01:00
Simon Smith
e32cceb1b4 fix writeUtf8 for ssh player
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-09-20 19:40:58 +01:00
Simon Smith
545c029752
deny sspi and ldap password change 2023-09-20 19:24:30 +01:00
Simon Smith
ec25d91544
Update packages in meshcentral.js 2023-09-20 16:04:14 +01:00
Simon Smith
5c2da83cc1
Update package.json 2023-09-20 16:02:13 +01:00
Simon Smith
04a71800fa
Merge pull request #5354 from KDima23/fix-skip-amt-algorithm
fix skip-amt-algorithm
2023-09-18 09:39:23 +01:00
KDima23
cf8f4b682a
fix skip-amt-algorithm
The r.certs[0].md field is null. Therefore, attempting to check if r.certs[0].md.algorithm is null will result in an error.
2023-09-18 10:31:43 +02:00
Simon Smith
42f275ac93 add header onclick event 2023-09-17 19:01:11 +01:00
Ylian Saint-Hilaire
2bb65110f8
Merge pull request #5343 from Ylianst/fix-multidisplay-multimonitor
fix multidisplay multimonitor
2023-09-15 17:37:57 -07:00
Ylian Saint-Hilaire
9ffa2bc116
Merge pull request #5349 from Ylianst/fix-device-messaging
check msghandle for messaging
2023-09-15 17:37:25 -07:00
Ylian Saint-Hilaire
fcdac82f53
Merge pull request #5351 from Ylianst/fix-nedbtodb-again
Fix nedbtodb again
2023-09-15 17:36:54 -07:00
Ylian Saint-Hilaire
f7f59483a5
Merge pull request #5350 from Ylianst/fix-discord-hash
fix discord hash compare
2023-09-15 17:36:42 -07:00
Ylian Saint-Hilaire
551a9cb672 Fixed readme.md, removed mention of public server. 2023-09-15 17:25:57 -07:00
Simon Smith
bca4f1c217
remove duplicate pendingTransfer++ 2023-09-15 14:41:41 +01:00
Simon Smith
53a96fb26b
fix-netodb-again 2023-09-15 14:38:17 +01:00
Simon Smith
3a6e01d08e
discord string compare not integer 2023-09-14 20:34:11 +01:00
Simon Smith
3ce50b5cc1
fix discord hash compare 2023-09-14 20:31:38 +01:00
Simon Smith
3de12093c6
check msghandle for messaging 2023-09-14 14:55:49 +01:00
Simon Smith
f1c2e307dc
Merge pull request #5348 from ioanmo226/fix/readme-doc-link
Fix: readme doc link issue
2023-09-13 23:06:34 +01:00
Ioan Moldovan
d5d782094b fix: readme doc link issue 2023-09-13 13:49:14 -04:00
Simon Smith
3c6e6fc4bf
fix multidisplay multimonitor 2023-09-12 02:20:19 +01:00
Ylian Saint-Hilaire
d6a77e5c19 Version 1.1.11 2023-09-11 10:25:36 -07:00
Ylian Saint-Hilaire
277333724b Updated nodejs in translate.bat 2023-09-11 10:07:12 -07:00
Ylian Saint-Hilaire
14a1639a4f Fixed dependencies. 2023-09-11 09:52:23 -07:00
Ylian Saint-Hilaire
62f52e91c7 config.json read fixes. 2023-09-11 09:50:15 -07:00
Ylian Saint-Hilaire
0ee671ac74
Merge pull request #5293 from si458/update-chart-js
Update chart js to 4.3.3
2023-09-09 23:06:05 -07:00
Ylian Saint-Hilaire
81b35baa61
Merge pull request #5301 from si458/fix-package-installs
update node-windows and archiver to latest version
2023-09-09 23:05:38 -07:00
Ylian Saint-Hilaire
95dfb608e3
Merge pull request #5318 from si458/add-network-online
add network-online to install on linux
2023-09-09 23:04:55 -07:00
Ylian Saint-Hilaire
f856b96aa5
Merge pull request #5319 from si458/skip-amt-algorithm
if amt algorithm use it
2023-09-09 23:04:19 -07:00
Ylian Saint-Hilaire
4e6e4fa67e
Merge pull request #5327 from si458/change-setup-timeout
update timeout from 60sec to 15sec
2023-09-09 23:02:28 -07:00
Ylian Saint-Hilaire
a3dfc30607
Merge pull request #5330 from si458/fix-webdav-upload
Fix webdav upload
2023-09-09 23:02:04 -07:00
Ylian Saint-Hilaire
5160926477
Merge pull request #5331 from si458/fix-resetaccount-with-messaging
delete user messaging on resetaccount
2023-09-09 23:01:28 -07:00
Ylian Saint-Hilaire
5824ccd3b4
Merge pull request #5332 from si458/update-passport
update passport to 0.6.0
2023-09-09 23:00:59 -07:00
Ylian Saint-Hilaire
5deceb1a21
Merge pull request #5333 from si458/fix-docker-sessionkey
only numbers and letters in session key docker
2023-09-09 23:00:18 -07:00
Ylian Saint-Hilaire
86ad4bc926
Merge pull request #5334 from si458/fix-nedbtodb
Fix nedbtodb and sqlite
2023-09-09 22:59:29 -07:00
Ylian Saint-Hilaire
819ca16ccd
Merge pull request #5335 from si458/add-dns-to-schema
add dns to domains in schema
2023-09-09 22:58:31 -07:00
Simon Smith
93ea293a23
add dns to domains in schema 2023-09-07 21:36:41 +01:00
Simon Smith
23c2627b3b
fix nedb to sqlite migrate 2023-09-07 19:35:03 +01:00
Simon Smith
7ea744fdfe
use new nedb instead of old 2023-09-07 19:31:26 +01:00
Simon Smith
b0dbbf4b5a
only numbers and letters in session key docker 2023-09-07 17:23:17 +01:00
Simon Smith
403c313771 update passport to 0.6.0
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-09-07 08:26:13 +01:00
Simon Smith
bed9d8cf33
delete user messaging on resetaccount 2023-09-06 20:15:22 +01:00
Simon Smith
5fa27a0339
update-webdav-module 2023-09-06 13:55:50 +01:00
Simon Smith
749d5b0ea5
fix-google-webdav-module-install 2023-09-06 13:55:04 +01:00
Simon Smith
f297857d70
fix-webdav-upload 2023-09-06 13:53:28 +01:00
Simon Smith
200212796a
Update archiver in package.json too 2023-09-01 17:50:39 +01:00
Simon Smith
a84557ef0c
update timeout from 60sec to 15sec 2023-09-01 13:08:22 +01:00
Simon Smith
68763137e9
if amt algorithm use it 2023-08-30 12:29:09 +01:00
Simon Smith
de46556df7
add network-online to install 2023-08-29 21:05:30 +01:00
Simon
f3cd0a4dda update node-windows and archiver to latest version
Signed-off-by: Simon <simonsmith5521@gmail.com>
2023-08-22 10:58:29 +01:00
Ylian Saint-Hilaire
b1d2d1aea9 Started work on support for loading ECDSA certificates as HTTPS cert. 2023-08-20 23:29:08 -07:00
Simon
ef2f111eb0 update to chart 4.3.3
Signed-off-by: Simon <simonsmith5521@gmail.com>
2023-08-17 20:18:31 +01:00
Simon
89cf7d8c1e update to 2.8.0
Signed-off-by: Simon <simonsmith5521@gmail.com>
2023-08-17 12:41:08 +01:00
Simon
cde1d3c80b update to 2.7.3
Signed-off-by: Simon <simonsmith5521@gmail.com>
2023-08-17 11:55:05 +01:00
Ylian Saint-Hilaire
3e57d2dfa4 Version 1.1.10 2023-08-14 21:30:27 -07:00
Ylian Saint-Hilaire
adbfa6122a Added auto-install of ua-parser-js. 2023-08-14 21:30:00 -07:00
Ylian Saint-Hilaire
ecc6ce5617
Merge pull request #5281 from si458/fix-schema
fix meshcentral-config-schema.json
2023-08-14 19:59:23 -07:00
Ylian Saint-Hilaire
bd26ec32cf
Merge pull request #5282 from si458/fix-mobile-ssh-utf8
fix mobile ssh utf8
2023-08-14 19:58:35 -07:00
Simon Smith
c19d2c5dd0
fix mobile ssh utf8 2023-08-13 01:04:49 +01:00
Simon Smith
163f8f80f1
fix meshcentral-config-schema.json 2023-08-13 00:18:50 +01:00
Ylian Saint-Hilaire
be5bfddc04 Version 1.1.9 2023-08-12 14:36:55 -07:00
Ylian Saint-Hilaire
77b0c8ea23
Merge pull request #5280 from si458/webdav-pin
pin webdav to version 4
2023-08-12 14:26:32 -07:00
Ylian Saint-Hilaire
d5c662fb74
Merge pull request #5276 from si458/ua-parser-update
update ua-parser-js to latest npm
2023-08-12 14:26:00 -07:00
Simon Smith
a7aacb8802
pin webdav to version 4 2023-08-11 11:54:54 +01:00
Simon Smith
258d7d1d12 update ua-parser-js to latest npm
Signed-off-by: Simon Smith <simonsmith5521@gmail.com>
2023-08-08 16:13:31 +01:00
Ylian Saint-Hilaire
94b5f8ced9 Version 1.1.8 2023-08-06 14:53:48 -07:00
Ylian Saint-Hilaire
022ebd7311 Fixed schema. 2023-08-06 14:47:25 -07:00
Ylian Saint-Hilaire
45411d2e90 Version 1.1.7 2023-08-06 14:43:58 -07:00
Ylian Saint-Hilaire
f67d59cc83 Merge branch 'master' of https://github.com/Ylianst/MeshCentral 2023-08-06 14:39:31 -07:00
Ylian Saint-Hilaire
11007a8a24 Updated Czech translation. 2023-08-06 14:39:24 -07:00
Ylian Saint-Hilaire
6adb037a50
Merge pull request #5264 from faustogut/patch-2
Update meshcentral-config-schema.json (change formatting)
2023-08-06 14:25:58 -07:00
Ylian Saint-Hilaire
a98302e058
Merge branch 'master' into patch-2 2023-08-06 14:25:26 -07:00
Ylian Saint-Hilaire
44071e93e9
Merge pull request #5265 from faustogut/patch-3
Update meshcentral-config-schema.json
2023-08-06 14:23:24 -07:00
Ylian Saint-Hilaire
f715a54354 Merge branch 'master' of https://github.com/Ylianst/MeshCentral 2023-08-06 14:21:24 -07:00
Ylian Saint-Hilaire
ccf027afe5 Clean up 2023-08-06 14:21:12 -07:00
Ylian Saint-Hilaire
437011524c Updated German translation. 2023-08-06 14:20:52 -07:00
Fausto Gutierrez
3971b26797
Update meshcentral-config-schema.json
Add "deviceMeshRouterLinks" missing type & properties attributes before properties list.
2023-07-27 17:38:11 +02:00
Fausto Gutierrez
66ced6df27
Update meshcentral-config-schema.json (change formatting)
This way it is easier to edit and maintain
2023-07-27 17:08:55 +02:00
Ylian Saint-Hilaire
05aeb8a244
Merge pull request #5252 from faustogut/patch-1
Update meshcentral-config-schema.json (fix typos)
2023-07-22 13:57:32 -07:00
Fausto Gutierrez
c244b12ec6
Update meshcentral-config-schema.json (fix typo)
to only **all** some users -> to only **allow** some users
2023-07-19 14:01:54 +02:00
Ylian Saint-Hilaire
1ead77ef8d
Merge pull request #5243 from graikhel-intel/master
fix: activation to acm issue
2023-07-16 12:46:47 -07:00
Ylian Saint-Hilaire
2305323734
Merge pull request #5228 from AntonAndreevichMoroz/master
Update noVNC to 1.4.0
2023-07-16 12:44:58 -07:00
Ylian Saint-Hilaire
3ea83158fb
Merge pull request #5229 from jirijanata/master
Fix basic URL user/pass auth to fail if user has 2FA
2023-07-16 12:43:11 -07:00
jirijanata
3f0d9484b7
If is user using 2FA the basic URL user and pass method fails.
https://github.com/Ylianst/MeshCentral/issues/4870

If user has 2FA enabled and tries to login with URL parameters then the login should fail.
2023-07-05 19:15:18 +02:00
Anton Moroz
fefce68687 Update noVNC to 1.4.0 2023-07-05 13:20:10 +03:00
Raikhelkar
43c16d02f9 fix: activation to acm issue 2023-06-13 16:17:42 -07:00
Ylian Saint-Hilaire
53e2c5cf69 Version 1.1.6 2023-06-12 11:48:52 -07:00
Ylian Saint-Hilaire
89942e0c8c Portuguese update. 2023-06-06 19:34:38 -07:00
Ylian Saint-Hilaire
f0ada3fed0 Added space as a remote desktop key customization. 2023-05-25 10:41:03 -07:00
Ylian Saint-Hilaire
e4d8c04afe CSS optimization. 2023-05-25 10:33:40 -07:00
Ylian Saint-Hilaire
02ab92195a
Merge pull request #5133 from si458/patch-1
update star limit to 200
2023-05-25 10:19:18 -07:00
Ylian Saint-Hilaire
d7dd9c5fcc
Merge pull request #5162 from Ylianst/revert-5140-patch-1
Revert "Remove code redundancy"
2023-05-25 10:19:01 -07:00
Ylian Saint-Hilaire
9d322746e6
Revert "Remove code redundancy" 2023-05-25 10:18:37 -07:00
Ylian Saint-Hilaire
dc6c815cec
Merge pull request #5140 from aymenBox/patch-1
Remove code redundancy
2023-05-25 10:16:37 -07:00
Ylian Saint-Hilaire
7087504841
Merge pull request #5146 from GastonMeghi/fix-oidc-when-no-discovery
add oidc options from config if they exist
2023-05-25 10:15:49 -07:00
Ylian Saint-Hilaire
0205e4f733
Merge pull request #5156 from si458/patch-2
add LocalizationSettings to mobile
2023-05-25 10:15:08 -07:00
Ylian Saint-Hilaire
5e85eb0bb0
Merge pull request #5157 from si458/patch-3
update codeql to v2
2023-05-25 10:13:55 -07:00
Ylian Saint-Hilaire
2267b8311c
Merge pull request #5158 from petervanv/master
Dutch language update 1.15
2023-05-25 10:13:21 -07:00
petervanv
84bcfc73a9 Dutch language update 1.15 2023-05-24 21:03:49 +02:00
Simon Smith
c65bf86305 update codeql to v2 2023-05-24 11:46:14 +01:00
Simon Smith
1501c9c483 add LocalizationSettings to mobile 2023-05-24 11:07:25 +01:00
Gaston Meghinasso
181d4db0fe add oidc options from config if they exist 2023-05-21 22:18:53 -03:00
Aymen Boughanmi
e168db19f3
Update default.handlebars
Followed by some changes in Style.css the same must be done to this file to reduce code redundancy
2023-05-18 15:54:40 +01:00
Aymen Boughanmi
19be5817a9
Update style.css
removing code redundancy
2023-05-18 15:48:50 +01:00
Simon Smith
c1ecfc823a update star limit to 200 2023-05-15 12:49:58 +01:00
Ylian Saint-Hilaire
3dd469f1a0
Merge pull request #5088 from aymenBox/patch-1
Update sample-config.json let's encrypt section
2023-04-30 00:10:50 -07:00
Aymen Boughanmi
4e67575bdf
Update sample-config.json let's encrypt section
Reference Issues/PRs
Issues #3245 / #3296

what does this implement fix? Explain your changes.
setting skipChallengeVerification to true by default to save sometime when setting up a certificate

any other comments
I can see that this problem has been solved and a suggestion to make it easier
I think is to set "skipChallengeVerification": true by default.
2023-04-18 02:27:29 +01:00
Ylian Saint-Hilaire
18eaebc217 Version 1.1.5 2023-04-14 13:45:12 -07:00
Ylian Saint-Hilaire
7a38b70506 Merge branch 'master' of https://github.com/Ylianst/MeshCentral 2023-04-14 13:36:43 -07:00
Ylian Saint-Hilaire
775568c7a7 Added Windows ARM 64bit support. 2023-04-14 13:36:34 -07:00
Ylian Saint-Hilaire
328c7a1ba6
Merge pull request #5043 from YiuTerran/master
fix(translate): some wrong zhs words
2023-04-14 13:35:46 -07:00
Ylian Saint-Hilaire
97eefa3b4c
Merge pull request #5068 from rallisf1/feat/meshctrl-reports
add reports to meshctrl
2023-04-14 13:35:23 -07:00
Ylian Saint-Hilaire
f2ca5c6555
Merge pull request #5079 from pawelg89/patch-1
Update sharing.handlebars
2023-04-14 13:34:58 -07:00
Pawel Gardzinski
19c95070b3
Update sharing.handlebars 2023-04-12 15:46:27 +02:00
John Rallis
6789dda69f add report to doc 2023-03-31 12:01:21 +03:00
John Rallis
1fcb9124b6 linting
I'm a tab person but now it should look better
2023-03-30 15:10:04 +03:00
John Rallis
f3d93c882f 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
2023-03-30 15:07:30 +03:00
tryao
7c011b138a fix(translate): some wrong zhs words 2023-03-16 15:32:51 +08:00
Ylian Saint-Hilaire
b76499c907
Merge pull request #5012 from eitalouarruda/patch-2
Update default-mobile.handlebars
2023-03-09 14:07:42 -08:00
Ylian Saint-Hilaire
8918208f89
Merge pull request #5005 from silversword411/master
docs - Adding vscode json editing
2023-03-09 14:06:23 -08:00
Ylian Saint-Hilaire
c3a9b67070
Merge pull request #5030 from YiuTerran/master
fix(docker): allow the usage of external mongodb
2023-03-09 14:05:56 -08:00
tryao
d2d6e95dd9 fix(docker): allow usage of external mongodb 2023-03-08 11:30:33 +08:00
Luís Arruda
b818ba3548
Update default-mobile.handlebars
Adding the espace key on the send key list on the mobile view
2023-02-28 18:08:53 -05:00
silversword411
aca0e7aab4
Adding vscode json editing https://github.com/Ylianst/MeshCentral/discussions/5004 2023-02-24 17:08:34 -05:00
Ylian Saint-Hilaire
0d97c62ed8
Merge pull request #4985 from yair-mantis/patch-1
corrected documentation links
2023-02-22 11:34:58 -08:00
yair-mantis
618ab19693
broken exe link for meshCentral Router 2023-02-15 18:54:04 +02:00
yair-mantis
250f2e1b85
more broken pdf links 2023-02-15 18:50:32 +02:00
yair-mantis
f079170b70
corrected links 2023-02-15 18:21:20 +02:00
Ylian Saint-Hilaire
d9481c4537 Updated translations. 2023-02-05 18:42:55 -08:00
Ylian Saint-Hilaire
70a2a6a28c Merge branch 'master' of https://github.com/Ylianst/MeshCentral 2023-02-05 18:26:17 -08:00
Ylian Saint-Hilaire
9064ebb71e Polish merge 2023-02-05 18:26:08 -08:00
Ylian Saint-Hilaire
b2a55fcfac
Merge pull request #4963 from sharifm-informatica/patch-1
Updated MongoDB client version in Dockerfile
2023-02-05 18:14:41 -08:00
Ylian Saint-Hilaire
376c4d53ac Version 1.1.4 2023-02-05 18:11:26 -08:00
Ylian Saint-Hilaire
dc4116cff5 Added Hungarian translation. 2023-02-05 18:09:31 -08:00
Marcin Wilk
3b0d2da7e7 Update Polish translation for v1.1.3
Update Polish translation for v1.1.3
2023-02-05 14:46:04 +01:00
Sherif Metwally
269d4dfbed
Updated MongoDB client version in Dockerfile
Sync MongoDB version in Dockerfile with main, so no runtime installation happens on launch of Docker container.
2023-02-05 12:01:36 +00:00
Ylian Saint-Hilaire
d6b3d8b53b Updated mongodb module version. 2023-02-03 12:29:24 -08:00
Ylian Saint-Hilaire
281a0787b7 Version 1.1.3 2023-02-03 12:07:34 -08:00
Ylian Saint-Hilaire
136a805c70
Merge pull request #4902 from Ylianst/snyk-fix-5195cfb388858f7af519decb7d9a9120
[Snyk] Security upgrade cookie-session from 1.4.0 to 2.0.0
2023-02-03 11:56:59 -08:00
Ylian Saint-Hilaire
e56149f162
Merge pull request #4952 from MartinMa/feature/custom-routes-pr
Fix pluginHandler access
2023-02-03 11:56:41 -08:00
Martin Mädler
d698760d30 Fix pluginHandler access 2023-02-01 14:04:23 +01:00
Ylian Saint-Hilaire
7a5649510d
Merge pull request #4936 from quentinDupont/patch-3
Add documentation for restoring backup in Ubuntu
2023-01-31 09:58:25 -08:00
Ylian Saint-Hilaire
cd0c564e9f
Merge pull request #4943 from MartinMa/feature/custom-routes-pr
Add hook to allow adding custom api endpoints to Express routing
2023-01-31 09:58:06 -08:00
Martin Mädler
a8f89e1068 Add hook to allow adding custom api endpoints to Express routing 2023-01-27 12:28:33 +01:00
Quentin Dupont
ab5c1f8f55
Add documentation for restoring backup in Ubuntu 2023-01-24 16:29:56 +01:00
Ylian Saint-Hilaire
f5db131693
Merge pull request #4932 from sschoen/Hotfix/translate
fixed translate.json
2023-01-22 22:19:09 -08:00
Simon Schön
b6d73f3d81
fixed translate.json 2023-01-23 02:09:48 +01:00
snyk-bot
783b1f6480
fix: package.json to reduce vulnerabilities
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-DEBUG-3227433
2023-01-10 01:12:24 +00:00
Ylian Saint-Hilaire
bd57601cd8
Merge pull request #4881 from petervanv/master
Dutch language update 1.1.2
2022-12-27 00:23:25 -08:00
petervanv
c359254aaf Dutch language update 1.1.2 2022-12-25 13:32:48 +01:00
Ylian Saint-Hilaire
209eaeb476
Merge pull request #4872 from sharifm-informatica/patch-1
Update Dockerfile
2022-12-23 16:00:46 -08:00
Sherif Metwally
27c0a14ec6
Update Dockerfile
preinstall the updated version of mongodb tools `mongodb@4.12.1`
2022-12-22 21:14:07 +00:00
Ylian Saint-Hilaire
6590236adb Merge branch 'master' of https://github.com/Ylianst/MeshCentral 2022-12-21 09:51:51 -08:00
Ylian Saint-Hilaire
211bab8898 Version 1.1.2 2022-12-21 09:51:41 -08:00
Ylian Saint-Hilaire
f66d8616e2
Merge pull request #4859 from silversword411/master
docs and typos
2022-12-16 10:50:03 -08:00
silversword411
ddfc8e8326
docs - adding POST info https://github.com/Ylianst/MeshCentral/issues/4725 2022-12-16 09:26:07 -05:00
silversword411
e40fd1d688
docs - disable old TLS https://github.com/Ylianst/MeshCentral/issues/4756 2022-12-16 09:08:54 -05:00
silversword411
a612b5c37b
docs - updating schema for docs 2022-12-16 09:07:10 -05:00
silversword411
c9dddfe126
docs - agent ico https://github.com/Ylianst/MeshCentral/issues/3179 2022-12-16 09:04:27 -05:00
silversword411
b09f783cef
typo fixes 2022-12-16 09:03:45 -05:00
Ylian Saint-Hilaire
b52385406f Removed debug line. 2022-12-15 19:45:45 -08:00
Ylian Saint-Hilaire
6405066f08 Updated mongodb driver version. 2022-12-15 10:54:07 -08:00
Ylian Saint-Hilaire
7002ce1ea2 Added emailDelaySeconds to sample advanced config. 2022-12-15 10:21:16 -08:00
Ylian Saint-Hilaire
1df35c13c4 Added emailDelaySeconds, so email delay can be configured. 2022-12-15 10:19:29 -08:00
Ylian Saint-Hilaire
8fb616e293 Merge branch 'master' of https://github.com/Ylianst/MeshCentral 2022-12-14 12:06:24 -08:00
Ylian Saint-Hilaire
5c59dc223e Updated French translation. 2022-12-14 12:06:16 -08:00
Ylian Saint-Hilaire
e0bea9119b Updated French translation. 2022-12-14 12:05:50 -08:00
Ylian Saint-Hilaire
1fef0cf780
Merge pull request #4846 from informatica-global/master
Correct config.json schema URL to match github schema location
2022-12-13 20:09:48 -08:00
Sherif Metwally
627aa8662f correct config.json schema URL to match github schema location 2022-12-12 11:51:28 +02:00
Ylian Saint-Hilaire
42112aed42 Version 1.1.1 2022-12-10 12:11:32 -08:00
Ylian Saint-Hilaire
7dd0772cc6 Merge branch 'master' of https://github.com/Ylianst/MeshCentral 2022-12-10 12:02:41 -08:00
Ylian Saint-Hilaire
79faaaee1f Fixed various server exceptions. 2022-12-10 12:02:33 -08:00
Ylian Saint-Hilaire
ab7c7dae5a
Merge pull request #4842 from informatica-global/master
Fix more occurrences of meshcentral-backup typos and minor markdown l…
2022-12-10 00:51:09 -08:00
Sherif Metwally
37e602e689 fix more occurrences of meshcentral-backup typos and minor markdown lint fixes 2022-12-10 09:24:01 +02:00
Ylian Saint-Hilaire
964fc9fd00 Fixed meshcentral-backups typo (#4838) 2022-12-09 21:38:56 -08:00
Ylian Saint-Hilaire
1087d7ef7f Merge branch 'master' of https://github.com/Ylianst/MeshCentral 2022-12-09 12:52:59 -08:00
Ylian Saint-Hilaire
3acccafa27 Updated Windows agents. 2022-12-09 12:49:12 -08:00
Ylian Saint-Hilaire
9d18fb623f
Merge pull request #4805 from thermionic/CIRA-TCP-Proxy
Added tcp proxy for CIRA to HAProxy config
2022-11-24 01:54:05 -08:00
Ylian Saint-Hilaire
f85f6f29d3
Merge pull request #4809 from gary-kim/fix/noid/xterm-write
Fix xterm in shared terminals
2022-11-24 01:53:45 -08:00
Gary Kim
4e24783662
Fix xterm in shared terminals 2022-11-24 01:05:28 -05:00
thermionic
89956002f8
Added tcp proxy for CIRA to HAProxy config 2022-11-23 16:04:50 +00:00
Ylian Saint-Hilaire
ed3fb2013a Version 1.1.0 2022-11-22 10:17:17 -08:00
Ylian Saint-Hilaire
726797ef29 Updated most MeshAgents with bug fixes and OpenSSL 1.1.1s. 2022-11-22 10:15:29 -08:00
Ylian Saint-Hilaire
fd68d8bd5b Fixed dependencies. 2022-11-21 13:32:43 -08:00
Ylian Saint-Hilaire
2d40878408 Merge branch 'master' of https://github.com/Ylianst/MeshCentral 2022-11-21 13:29:49 -08:00
Ylian Saint-Hilaire
6ef47df0a7 Added Firebase exception workaround. 2022-11-21 13:29:41 -08:00
Ylian Saint-Hilaire
7811b52a59
Merge pull request #4797 from jirijanata/master
Corrections of the Czech translation
2022-11-20 07:49:11 -08:00
jirijanata
b21c85ad35
Corrections of the Czech translation 2022-11-20 09:04:22 +01:00
Ylian Saint-Hilaire
b4c448e984 Version 1.0.99 2022-11-19 08:03:52 -08:00
Ylian Saint-Hilaire
bfda6b5cc6
Merge pull request #4789 from sschoen/docker
Added 'yubikeyotp' to pre-installed libraries
2022-11-17 21:48:34 -08:00
Simon Schön
1b4deddd07
Added 'yubikeyotp' to pre-installed libraries 2022-11-17 22:49:21 +01:00
Ylian Saint-Hilaire
4e28672b0a
Merge pull request #4766 from jsastriawan/kvm_non_tls
Fixes on AMT KVM for newer AMT firmware and newer Node JS TLS compatibility fix
2022-11-16 16:58:21 -08:00
Ylian Saint-Hilaire
9dbe6b1c0a
Merge pull request #4767 from PyTech-SRL/dockerfile-multiplatform
[FIX][IMP]adjust dockerfile to support multiplatform build
2022-11-16 16:58:05 -08:00
Ylian Saint-Hilaire
c4e6a043b0
Merge pull request #4770 from jirijanata/master
Corrections of the Czech translation
2022-11-16 16:57:35 -08:00
Alessandro Uffreduzzi
44affd39bf adjust dockerfile to support multiplatform build 2022-11-16 17:43:00 +01:00
jirijanata
ab2cfb6f7b
Corrections of the Czech translation 2022-11-16 15:41:14 +01:00
Joko Sastriawan
427b5263ba fix: AMT WSMAN comm Direct TLS to allow unsafe legacy negotiation 2022-11-15 15:05:18 -07:00
Joko Sastriawan
b5338b746a fix: AMT Direct TLS connection and Digest authentication
- fix: ensure TLS is used when TLS is enabled
- add constants.SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION for TLS client connection for newer Nodejs
- ensure nc of AMT redirection Digest authentication to have at 8 bytes length
2022-11-15 14:12:12 -07:00
Ylian Saint-Hilaire
270b34a068 Version 1.0.98 2022-11-14 18:01:23 -08:00
Ylian Saint-Hilaire
6084182164 Merge branch 'master' of https://github.com/Ylianst/MeshCentral 2022-11-14 16:31:53 -08:00
Ylian Saint-Hilaire
876641f1ac Added removedevice command to meshctrl.js (#4753) 2022-11-14 16:31:44 -08:00
Ylian Saint-Hilaire
f74cd91438
Merge pull request #4742 from PyTech-SRL/docker-multiplatform-build-arm64
Github Actions: Building Multiplatform Docker image (AMD64 and ARM64)
2022-11-14 16:12:32 -08:00
Ylian Saint-Hilaire
53bdbfb540
Merge pull request #4745 from silversword411/master
Adding to docs
2022-11-14 16:12:04 -08:00
silversword411
3515abe063
fix 2022-11-13 13:25:55 -05:00
silversword411
8da8721298
docs - Adding console stubs 2022-11-13 13:20:02 -05:00
silversword411
b1b8063a71
docs - adding mebx video 2022-11-13 13:17:12 -05:00
silversword411
0d8cf153f4
docs - adding new powerpoints 2022-11-13 13:17:12 -05:00
silversword411
490834f369
amt tweaking working from blog data 2022-11-13 13:17:12 -05:00
silversword411
546e1ef090
Baremetal AMT https://github.com/Ylianst/MeshCentral/discussions/4518 2022-11-13 13:17:11 -05:00
silversword411
df0a0caa5a
typos 2022-11-13 13:17:11 -05:00
silversword411
4c6d3437db
Adding note about reinstall https://github.com/Ylianst/MeshCentral/issues/4741 2022-11-13 13:17:00 -05:00
Bryan Roe
75cf878dcf First pass at console commands documentation 2022-11-10 12:03:52 -08:00
silversword411
0ae16c2c84
docs - Adding console stubs 2022-11-10 10:10:28 -05:00
silversword411
b60e36965b
docs adding notes on agent help commands https://github.com/Ylianst/MeshCentral/issues/1659 2022-11-10 10:09:55 -05:00
silversword411
3f4465735d
docs - adding mebx video 2022-11-10 08:52:18 -05:00
silversword411
7c3143242e
docs - adding new powerpoints 2022-11-10 08:49:34 -05:00
silversword411
49beea755e
amt tweaking working from blog data 2022-11-10 08:49:00 -05:00
silversword411
27e44ec08b
Baremetal AMT https://github.com/Ylianst/MeshCentral/discussions/4518 2022-11-10 08:39:58 -05:00
silversword411
6620a5773f
typos 2022-11-10 08:12:32 -05:00
silversword411
bb9fff4c8d
Adding note about reinstall https://github.com/Ylianst/MeshCentral/issues/4741 2022-11-10 08:05:26 -05:00
Alessandro Uffreduzzi
b46d5bb988 Add support for building docker image for arm64 in github actions 2022-11-10 09:49:38 +01:00
Ylian Saint-Hilaire
5b06fefdae
Merge pull request #4731 from bennyc-huji/patch-1
fix of amt bug
2022-11-08 11:27:45 -08:00
bennyc-huji
da604d6bc0
fix of bug that crashes the meshcentral when there is only digits and one comma on the version of the amt 2022-11-08 11:18:08 +02:00
Ylian Saint-Hilaire
e189d6785c
Merge pull request #4727 from lordofbikes/fix_german
German language, fixed ambiguous translations
2022-11-07 14:19:04 -08:00
Armin Stebich
6ec6688851
German language, fixed ambiguous translations 2022-11-07 22:27:52 +01:00
Ylian Saint-Hilaire
a90d59dc28
Merge pull request #4722 from AntonAndreevichMoroz/master
Added displayname handling to SAML strategy
2022-11-06 09:23:13 -08:00
Антон Мороз
c1b59294cf Added displayname handling to SAML strategy 2022-11-06 09:50:24 +03:00
Ylian Saint-Hilaire
40e19f0764
Merge pull request #4716 from dxdemetriou/master
ntfy in documentation
2022-11-04 23:37:18 -07:00
Ylian Saint-Hilaire
09bcb739b1 Version 1.0.97 2022-11-04 11:51:34 -07:00
Ylian Saint-Hilaire
4087a02fdb Fixed config.json capitalization issue. 2022-11-04 11:50:42 -07:00
dxdemetriou
9e9b8410c2
ntfy in documentation
For self-hosting your own ntfy server with ACL support
2022-11-04 19:57:48 +02:00
Ylian Saint-Hilaire
69364ea2d2 Merge branch 'master' of https://github.com/Ylianst/MeshCentral 2022-11-04 09:29:17 -07:00
Ylian Saint-Hilaire
17b39fe585 Version 1.0.96 2022-11-04 09:29:08 -07:00
Ylian Saint-Hilaire
477bc3b8e3
Merge pull request #4704 from cgb/patch-3
Fix typo in zulip config snippet
2022-11-03 21:06:21 -07:00
Ylian Saint-Hilaire
99fc690f4b Tuned HTTPS cipher suites to get A+ on SSL labs testing." 2022-11-02 22:36:03 -07:00
cgb
7f71788a82
Fix typo in zulip config snippet 2022-11-03 13:32:58 +10:30
Ylian Saint-Hilaire
60af01a165 Fixed Telegram proxy issue (#4703) 2022-11-02 13:59:00 -07:00
Ylian Saint-Hilaire
3a22bfbc24 Fixed issue with TLS certificate that had an no issuer CN (#4681) 2022-11-02 10:45:10 -07:00
Ylian Saint-Hilaire
fbde2a87a5 Added device help request messaging notification support. 2022-11-01 23:48:21 -07:00
Ylian Saint-Hilaire
1a6e78efed Added device state notifications to messaging applications. 2022-11-01 22:39:59 -07:00
Ylian Saint-Hilaire
1e45b69ca7 Merge branch 'master' of https://github.com/Ylianst/MeshCentral 2022-11-01 20:32:08 -07:00
Ylian Saint-Hilaire
2fa50796da Added messaging group/device notifications setup user interface. 2022-11-01 20:32:00 -07:00
Bryan Roe
2a6e08f663 Added console command 'mousetrails' and 'deskbackground' to be able to get/set mouse accessibility and desktop background image path, on Windows. 2022-11-01 20:01:26 -07:00
Ylian Saint-Hilaire
11fd5b39e8 Added no-audit when installing NPM packages in the background. 2022-11-01 18:04:43 -07:00
Ylian Saint-Hilaire
a7f5b78139 Version 1.0.95 2022-11-01 16:20:58 -07:00
Ylian Saint-Hilaire
e74a308113 Added relay right and fixed relay permissions (#4682) 2022-11-01 16:05:36 -07:00
Ylian Saint-Hilaire
390ddd9fd6 Documentation fix. 2022-11-01 14:53:26 -07:00
Ylian Saint-Hilaire
1ef585613e Added Telegram proxy support (#4697, #4650) 2022-11-01 14:51:41 -07:00
Ylian Saint-Hilaire
0c2c55726e Fixed web relay when used with local device group. 2022-11-01 14:23:46 -07:00
Ylian Saint-Hilaire
aa42b9e7f5 Fixed server exception (#4696) 2022-11-01 13:15:46 -07:00
Ylian Saint-Hilaire
275cc04e03 Documentation fixes. 2022-11-01 13:00:07 -07:00
Ylian Saint-Hilaire
e19caeefe4 Added ntfy and Zulip (#4694) documentation. 2022-11-01 12:54:16 -07:00
Ylian Saint-Hilaire
7f183ac2fd Added Zulip messaging integration (#4694) 2022-11-01 12:27:06 -07:00
Ylian Saint-Hilaire
6b8acc1675 ntfy improvements. 2022-10-31 14:28:10 -07:00
Ylian Saint-Hilaire
8f84c5d2d3 Added free ntfy.sh notification service integration. 2022-10-31 12:17:13 -07:00
Ylian Saint-Hilaire
e2b442ae66 Authlog fix. 2022-10-30 19:43:28 -07:00
Ylian Saint-Hilaire
9a3da5a2fd Version 1.0.94 2022-10-30 12:52:33 -07:00
Ylian Saint-Hilaire
6d69521b71 Added Pushover documentation (#4691) 2022-10-30 12:36:10 -07:00
Ylian Saint-Hilaire
e59fac4884 Added Pushover messaging integration (#4691) 2022-10-30 11:28:24 -07:00
Ylian Saint-Hilaire
3ea653cd03 Documentation fix. 2022-10-29 17:24:35 -07:00
Ylian Saint-Hilaire
caaef24bc7 Updated messaging documentation. 2022-10-29 17:22:44 -07:00
Ylian Saint-Hilaire
2267066df2 Version 1.0.93 2022-10-29 14:04:22 -07:00
Ylian Saint-Hilaire
963ec003cf Merge branch 'master' of https://github.com/Ylianst/MeshCentral 2022-10-29 13:15:04 -07:00
Ylian Saint-Hilaire
2e217feaca Added CallMeBot documentation (#4688) 2022-10-29 13:14:57 -07:00
Ylian Saint-Hilaire
598a73d57b
Merge pull request #4690 from petervanv/master
Dutch language update 1.0.92
2022-10-29 12:53:11 -07:00
petervanv
ae09ea9346 Dutch language update 1.0.92 2022-10-29 19:36:11 +02:00
Ylian Saint-Hilaire
56bab319e8 Discord documentation fix (#4651) 2022-10-29 09:20:35 -07:00
Ylian Saint-Hilaire
0b1bf704aa Added CallMeBot messaging integration (#4688) 2022-10-28 17:44:06 -07:00
Ylian Saint-Hilaire
d9938c5be3 Version 1.0.92 2022-10-28 13:44:14 -07:00
Ylian Saint-Hilaire
65c4b9c50a Added XMPP support (#4679) 2022-10-28 12:42:42 -07:00
Ylian Saint-Hilaire
33b61bc3ee XMPP documentation fix. 2022-10-28 12:41:23 -07:00
Ylian Saint-Hilaire
b9aace76fc XMPP documentation fix. 2022-10-28 12:40:52 -07:00
Ylian Saint-Hilaire
527f224810 XMPP documentation fix. 2022-10-28 12:39:07 -07:00
Ylian Saint-Hilaire
cbc26b3a43 Added XMPP support (#4679) 2022-10-28 12:34:29 -07:00
Ylian Saint-Hilaire
8f84fa3a5b Updated Discord documentation with required NodeJS version. 2022-10-27 11:29:58 -07:00
Ylian Saint-Hilaire
2aa370df76 Discord NodeJS version fix. 2022-10-27 11:23:35 -07:00
Ylian Saint-Hilaire
c94ddfcf5c Version 1.0.91 2022-10-27 11:13:23 -07:00
Ylian Saint-Hilaire
3761a93961 Completed Discord integration (#4651) 2022-10-27 10:38:15 -07:00
Ylian Saint-Hilaire
6f234f83fc Fixed handleStrategyLogin() server exception. 2022-10-26 14:45:22 -07:00
Ylian Saint-Hilaire
7f986bd7c4 First pass as Discord integration (#4651) 2022-10-26 13:19:40 -07:00
Ylian Saint-Hilaire
23e197dcc9 Fixed 2FA messaging on login screen. 2022-10-25 14:17:54 -07:00
Ylian Saint-Hilaire
73dca2ba82 Version 1.0.90 2022-10-25 14:09:15 -07:00
Ylian Saint-Hilaire
60af1b6a24 Fixed Intel AMT IDER exception. 2022-10-25 14:04:43 -07:00
Ylian Saint-Hilaire
072924ce69
Merge pull request #4669 from petervanv/master
Dutch language update 1.0.89
2022-10-25 13:26:04 -07:00
Ylian Saint-Hilaire
2bf3cb13b3 Fixed Intel AMT boot to BIOS. 2022-10-25 13:18:35 -07:00
petervanv
613489e9ca
Merge branch 'Ylianst:master' into master 2022-10-25 21:27:30 +02:00
petervanv
36256c392c Dutch language update 1.0.89 2022-10-25 21:24:33 +02:00
Ylian Saint-Hilaire
41fb7d4f42 Fixed guest web relay session revocation (#4667) 2022-10-25 11:14:26 -07:00
Ylian Saint-Hilaire
909f9f862e Fixed SSH with xterm.js (#4668) 2022-10-25 09:58:04 -07:00
Ylian Saint-Hilaire
2981217a2e Added invite HTTP to HTTPS redirect (#4622) 2022-10-24 17:56:05 -07:00
Ylian Saint-Hilaire
cc7670cc31 Improved state-less server code (#4645) 2022-10-24 16:58:05 -07:00
807 changed files with 131328 additions and 36091 deletions

View File

@ -49,7 +49,7 @@ Add any other context about the problem here.
**Your config.json file**
```
{
"$schema": "http://info.meshcentral.com/downloads/meshcentral-config-schema.json",
"$schema": "https://raw.githubusercontent.com/Ylianst/MeshCentral/master/meshcentral-config-schema.json",
"__comment1__": "This is a simple configuration file, all values and sections that start with underscore (_) are ignored. Edit a section and remove the _ in front of the name. Refer to the user's guide for details.",
"__comment2__": "See node_modules/meshcentral/sample-config-advanced.json for a more advanced example.",
"settings": {

View File

@ -1,5 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Question
url: https://github.com/Ylianst/MeshCentral/discussions
about: Ask a question in discussions.
- name: Unofficial Discord Server
url: https://discord.gg/8wHC6ASWAc
about: Please ask here for support questions.

View File

@ -1,68 +0,0 @@
---
name: Question
about: Create a question for community help
title: ''
labels: question
assignees: ''
---
**Describe your issue**
A clear and concise description of what your issue is.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Server Software (please complete the following information):**
- OS: [e.g. Ubuntu]
- Virtualization: [e.g. Docker]
- Network: [e.g. LAN/WAN, reverse proxy, cloudflare, ssl offload, etc...]
- Version: [e.g. 1.0.43]
- Node: [e.g. 18.4.0]
**Client Device (please complete the following information):**
- Device: [e.g. Laptop]
- OS: [e.g. Ubuntu]
- Network: [e.g. Local to Meshcentral, Remote over WAN]
- Browser: [e.g. Google Chrome]
- MeshCentralRouter Version: [if applicable]
**Remote Device (please complete the following information):**
- Device: [e.g. Laptop]
- OS: [e.g. Windows 10 21H2]
- Network: [e.g. Local to Meshcentral, Remote over WAN]
- Current Core Version (if known): [**HINT**: Go to a device then `console` Tab then type `info`]
**Your config.json file**
```
{
"$schema": "http://info.meshcentral.com/downloads/meshcentral-config-schema.json",
"__comment1__": "This is a simple configuration file, all values and sections that start with underscore (_) are ignored. Edit a section and remove the _ in front of the name. Refer to the user's guide for details.",
"__comment2__": "See node_modules/meshcentral/sample-config-advanced.json for a more advanced example.",
"settings": {
"_cert": "myserver.mydomain.com",
"_WANonly": true,
"_LANonly": true,
"_sessionKey": "MyReallySecretPassword1",
"_port": 443,
"_aliasPort": 443,
"_redirPort": 80,
"_redirAliasPort": 80
},
"domains": {
"": {
"_title": "MyServer",
"_title2": "Servername",
"_minify": true,
"_newAccounts": true,
"_userNameIsEmail": true
}
},
"_letsencrypt": {
"__comment__": "Requires NodeJS 8.x or better, Go to https://letsdebug.net/ first before trying Let's Encrypt.",
"email": "myemail@mydomain.com",
"names": "myserver.mydomain.com",
"production": false
}
}
```

View File

@ -13,7 +13,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@v4
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
@ -26,7 +26,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
uses: github/codeql-action/init@v2
# Override language selection by uncommenting this and choosing your languages
# with:
# languages: go, javascript, csharp, python, cpp, java
@ -48,4 +48,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
uses: github/codeql-action/analyze@v2

View File

@ -14,11 +14,11 @@ jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.x
- run: pip install --upgrade pip
- run: pip install --upgrade setuptools wheel
- run: pip install mkdocs mkdocs-material pymdown-extensions
- run: pip install mkdocs mkdocs-material mkdocs-print-site-plugin pymdown-extensions
- run: mkdocs gh-deploy --force

View File

@ -1,55 +1,371 @@
name: Docker
name: Docker-Builder
on:
workflow_dispatch:
schedule:
- cron: '2 0 * * *' # Daily at 00:02 UTC
release:
types: [published]
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
types: [ published ]
jobs:
check-token:
runs-on: ubuntu-latest
outputs:
token: ${{ steps.token.outputs.defined }}
translate:
runs-on: ubuntu-22.04
name: Run Translations
steps:
- id: token
env:
MY_TOKEN: ${{ secrets.MY_TOKEN }}
if: "${{ env.MY_TOKEN != '' }}"
run: echo "::set-output name=defined::true"
build:
name: Release
runs-on: ubuntu-latest
needs: [check-token]
if: needs.check-token.outputs.token == 'true'
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Checkout repository
uses: actions/checkout@v5
- name: Set up Node.js
uses: actions/setup-node@v6
with:
fetch-depth: 0
node-version: "lts/*"
- name: Run translate.js (ignore errors)
run: node translate.js || true
working-directory: translate
- name: Run translate extractall
run: node translate extractall
working-directory: translate
- name: Run translate.js minifyall
run: node translate.js minifyall
working-directory: translate
- name: Run translate.js translateall
run: node translate.js translateall
working-directory: translate
- name: Upload repo with translations
uses: actions/upload-artifact@v5
with:
name: repo-with-translations
path: .
build-amd64:
runs-on: ubuntu-22.04
needs: translate
strategy:
fail-fast: false
max-parallel: 3
matrix:
variant: [mongodb, postgresql, mariadb, all, slim]
name: Build Docker Image (amd64-${{ matrix.variant }})
steps:
- name: Download repo artifact
uses: actions/download-artifact@v5
with:
name: repo-with-translations
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
uses: docker/setup-qemu-action@v3
with:
cache-image: false
platforms: amd64
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Log in to the Container registry
uses: docker/login-action@v2
uses: docker/setup-buildx-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.MY_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v4
cache-binary: false
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- name: Build and push Docker image
uses: docker/build-push-action@v2
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.MY_TOKEN || secrets.GITHUB_TOKEN }}
- name: Build and push Docker image (amd64-${{ matrix.variant }})
run: |
REPO_OWNER_LC="$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')"
case "${{ matrix.variant }}" in
mongodb)
MONGODB=YES; POSTGRESQL=NO; MARIADB=NO; TAG="-amd64-mongodb";;
postgresql)
MONGODB=NO; POSTGRESQL=YES; MARIADB=NO; TAG="-amd64-postgresql";;
mariadb)
MONGODB=NO; POSTGRESQL=NO; MARIADB=YES; TAG="-amd64-mariadb";;
all)
MONGODB=YES; POSTGRESQL=YES; MARIADB=YES; TAG="-amd64";;
slim)
MONGODB=NO; POSTGRESQL=NO; MARIADB=NO; TAG="-amd64-slim";;
esac
docker buildx build \
--platform linux/amd64 \
--build-arg INCLUDE_MONGODB_TOOLS=$MONGODB \
--build-arg INCLUDE_POSTGRESQL_TOOLS=$POSTGRESQL \
--build-arg INCLUDE_MARIADB_TOOLS=$MARIADB \
--build-arg DISABLE_MINIFY=yes \
--build-arg DISABLE_TRANSLATE=yes \
--build-arg DISABLE_EXTRACT=yes \
--build-arg PREINSTALL_LIBS=true \
-f docker/Dockerfile \
-t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}$TAG \
--push \
.
build-arm64:
runs-on: ubuntu-22.04
needs: translate
strategy:
fail-fast: false
max-parallel: 3
matrix:
variant: [mongodb, postgresql, mariadb, all, slim]
name: Build Docker Image (arm64-${{ matrix.variant }})
steps:
- name: Download repo artifact
uses: actions/download-artifact@v5
with:
context: .
file: docker/Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
INCLUDE_MONGODBTOOLS=true
PREINSTALL_LIBS=true
name: repo-with-translations
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
cache-image: false
platforms: arm64
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
cache-binary: false
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.MY_TOKEN || secrets.GITHUB_TOKEN }}
- name: Build and push Docker image (arm64-${{ matrix.variant }})
run: |
REPO_OWNER_LC="$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')"
case "${{ matrix.variant }}" in
mongodb)
MONGODB=YES; POSTGRESQL=NO; MARIADB=NO; TAG="-arm64-mongodb";;
postgresql)
MONGODB=NO; POSTGRESQL=YES; MARIADB=NO; TAG="-arm64-postgresql";;
mariadb)
MONGODB=NO; POSTGRESQL=NO; MARIADB=YES; TAG="-arm64-mariadb";;
all)
MONGODB=YES; POSTGRESQL=YES; MARIADB=YES; TAG="-arm64";;
slim)
MONGODB=NO; POSTGRESQL=NO; MARIADB=NO; TAG="-arm64-slim";;
esac
docker buildx build \
--platform linux/arm64 \
--build-arg INCLUDE_MONGODB_TOOLS=$MONGODB \
--build-arg INCLUDE_POSTGRESQL_TOOLS=$POSTGRESQL \
--build-arg INCLUDE_MARIADB_TOOLS=$MARIADB \
--build-arg DISABLE_MINIFY=yes \
--build-arg DISABLE_TRANSLATE=yes \
--build-arg DISABLE_EXTRACT=yes \
--build-arg PREINSTALL_LIBS=true \
-f docker/Dockerfile \
-t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}$TAG \
--push \
.
build-armv7:
runs-on: ubuntu-22.04
needs: translate
strategy:
fail-fast: false
max-parallel: 3
matrix:
variant: [mongodb, postgresql, mariadb, all, slim]
name: Build Docker Image (armv7-${{ matrix.variant }})
steps:
- name: Download repo artifact
uses: actions/download-artifact@v5
with:
name: repo-with-translations
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
cache-image: false
platforms: arm
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
cache-binary: false
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.MY_TOKEN || secrets.GITHUB_TOKEN }}
- name: Build and push Docker image (armv7-${{ matrix.variant }})
run: |
REPO_OWNER_LC="$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')"
case "${{ matrix.variant }}" in
mongodb)
MONGODB=YES; POSTGRESQL=NO; MARIADB=NO; TAG="-armv7-mongodb";;
postgresql)
MONGODB=NO; POSTGRESQL=YES; MARIADB=NO; TAG="-armv7-postgresql";;
mariadb)
MONGODB=NO; POSTGRESQL=NO; MARIADB=YES; TAG="-armv7-mariadb";;
all)
MONGODB=YES; POSTGRESQL=YES; MARIADB=YES; TAG="-armv7";;
slim)
MONGODB=NO; POSTGRESQL=NO; MARIADB=NO; TAG="-armv7-slim";;
esac
docker buildx build \
--platform linux/arm/v7 \
--build-arg INCLUDE_MONGODB_TOOLS=$MONGODB \
--build-arg INCLUDE_POSTGRESQL_TOOLS=$POSTGRESQL \
--build-arg INCLUDE_MARIADB_TOOLS=$MARIADB \
--build-arg DISABLE_MINIFY=yes \
--build-arg DISABLE_TRANSLATE=yes \
--build-arg DISABLE_EXTRACT=yes \
--build-arg PREINSTALL_LIBS=true \
-f docker/Dockerfile \
-t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}$TAG \
--push \
.
build-armv6:
runs-on: ubuntu-22.04
needs: translate
strategy:
fail-fast: false
max-parallel: 3
matrix:
variant: [mongodb, postgresql, mariadb, all, slim]
name: Build Docker Image (armv6-${{ matrix.variant }})
steps:
- name: Download repo artifact
uses: actions/download-artifact@v5
with:
name: repo-with-translations
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
cache-image: false
platforms: arm
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
cache-binary: false
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.MY_TOKEN || secrets.GITHUB_TOKEN }}
- name: Build and push Docker image (armv6-${{ matrix.variant }})
run: |
REPO_OWNER_LC="$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')"
case "${{ matrix.variant }}" in
mongodb)
MONGODB=YES; POSTGRESQL=NO; MARIADB=NO; TAG="-armv6-mongodb";;
postgresql)
MONGODB=NO; POSTGRESQL=YES; MARIADB=NO; TAG="-armv6-postgresql";;
mariadb)
MONGODB=NO; POSTGRESQL=NO; MARIADB=YES; TAG="-armv6-mariadb";;
all)
MONGODB=YES; POSTGRESQL=YES; MARIADB=YES; TAG="-armv6";;
slim)
MONGODB=NO; POSTGRESQL=NO; MARIADB=NO; TAG="-armv6-slim";;
esac
docker buildx build \
--platform linux/arm/v6 \
--build-arg INCLUDE_MONGODB_TOOLS=$MONGODB \
--build-arg INCLUDE_POSTGRESQL_TOOLS=$POSTGRESQL \
--build-arg INCLUDE_MARIADB_TOOLS=$MARIADB \
--build-arg DISABLE_MINIFY=yes \
--build-arg DISABLE_TRANSLATE=yes \
--build-arg DISABLE_EXTRACT=yes \
--build-arg PREINSTALL_LIBS=true \
-f docker/Dockerfile \
-t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}$TAG \
--push \
.
merge-manifest:
runs-on: ubuntu-22.04
needs:
- translate
- build-amd64
- build-arm64
- build-armv7
- build-armv6
name: Create and Push Multi-Arch Manifest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
cache-binary: false
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.MY_TOKEN || secrets.GITHUB_TOKEN }}
- name: Create and push multi-arch manifests for all variants
run: |
REPO_OWNER_LC="$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')"
# mongodb
docker buildx imagetools create \
-t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-mongodb \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-mongodb \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-mongodb \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-mongodb \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-mongodb
# postgresql
docker buildx imagetools create \
-t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-postgresql \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-postgresql \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-postgresql \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-postgresql \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-postgresql
# mariadb
docker buildx imagetools create \
-t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-mariadb \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-mariadb \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-mariadb \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-mariadb \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-mariadb
# all (no suffix)
docker buildx imagetools create \
-t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }} \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64 \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64 \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7 \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6
# slim
docker buildx imagetools create \
-t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-slim \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-slim \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-slim \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-slim \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-slim
- name: Create and push 'latest' tags (releases only)
if: github.event_name == 'release'
run: |
REPO_OWNER_LC="$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')"
# latest-mongodb
docker buildx imagetools create \
-t ghcr.io/$REPO_OWNER_LC/meshcentral:latest-mongodb \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-mongodb \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-mongodb \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-mongodb \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-mongodb
# latest-postgresql
docker buildx imagetools create \
-t ghcr.io/$REPO_OWNER_LC/meshcentral:latest-postgresql \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-postgresql \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-postgresql \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-postgresql \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-postgresql
# latest-mariadb
docker buildx imagetools create \
-t ghcr.io/$REPO_OWNER_LC/meshcentral:latest-mariadb \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-mariadb \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-mariadb \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-mariadb \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-mariadb
# latest (all databases)
docker buildx imagetools create \
-t ghcr.io/$REPO_OWNER_LC/meshcentral:latest \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64 \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64 \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7 \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6
# latest-slim
docker buildx imagetools create \
-t ghcr.io/$REPO_OWNER_LC/meshcentral:latest-slim \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-slim \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-slim \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-slim \
ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-slim

View File

@ -3,6 +3,8 @@ on:
push:
branches:
- master
paths:
- 'package.json'
jobs:
build:
@ -10,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Release

36
.github/workflows/stale.yml vendored Normal file
View File

@ -0,0 +1,36 @@
name: "Close stale issues and PRs"
on:
schedule:
- cron: "1 2 * * *"
workflow_dispatch:
permissions:
actions: write
contents: write
issues: write
pull-requests: write
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
# Issues configuration
stale-issue-message: "This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions."
close-issue-message: "This issue has been automatically closed due to inactivity. If you believe this is still relevant, please feel free to reopen it."
close-issue-label: "Closed"
stale-issue-label: "Stale"
exempt-issue-labels: "pinned,important,Closed"
# PRs configuration
stale-pr-message: "This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions."
close-pr-message: "This pull request has been automatically closed due to inactivity. If you'd like to continue working on it, please reopen it."
close-pr-label: "Closed"
stale-pr-label: "Stale"
exempt-pr-labels: "pinned,important,Closed"
exempt-draft-pr: true
# Common configuration
operations-per-run: 5000
ascending: true

6
.gitignore vendored
View File

@ -10,14 +10,15 @@
[Aa]gents/meshcore.min.js
[Pp]ublic/translations/
[Vv]iews/translations/
[Ee]mails/translations/
[Pp]ublic/*-min.htm
[Vv]iews/*-min.handlebars
meshcentral.db
meshcentral.db.json
mesherrors.txt
package-lock.json
bob.json
.greenlockrc
venv
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
@ -310,4 +311,5 @@ __pycache__/
# When running mkdocs locally as dev
docs/__pycache__/
docs/env/
docs/env/
docker-compose.yaml

2
.npmrc
View File

@ -1 +1 @@
engine-strict=true
engine-strict = true

10
.vscode/launch.json vendored
View File

@ -10,6 +10,16 @@
"name": "Launch Chrome against localhost",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}"
},
{
"name": "Test docs locally with mkdocs",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/docs/env/Scripts/mkdocs.exe",
"args": ["serve", "--dev-addr", "127.0.0.1:8010"],
"cwd": "${workspaceFolder}/docs",
"console": "integratedTerminal",
"preLaunchTask": "Start MkDocs Server"
}
]
}

View File

@ -779,6 +779,7 @@
"tokenuserid",
"tokenusername",
"totalsize",
"TOTP",
"tpass",
"tpassword",
"tpush",

60
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,60 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Setup Python Environment",
"type": "shell",
"command": "python",
"args": ["-m", "venv", "env"],
"options": {
"cwd": "${workspaceFolder}/docs"
},
"group": "build",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
"problemMatcher": []
},
{
"label": "Install MkDocs Requirements",
"type": "shell",
"command": ".\\env\\Scripts\\activate.ps1; python -m pip install --upgrade pip; pip install -r requirements.txt",
"options": {
"cwd": "${workspaceFolder}/docs"
},
"group": "build",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
"problemMatcher": [],
"dependsOn": "Setup Python Environment"
},
{
"label": "Start MkDocs Server",
"type": "shell",
"command": ".\\env\\Scripts\\activate.ps1; Start-Process http://localhost:8010; mkdocs serve",
"options": {
"cwd": "${workspaceFolder}/docs"
},
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
"problemMatcher": [],
"isBackground": true,
"dependsOn": "Install MkDocs Requirements"
}
]
}

View File

@ -186,7 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2017-2021 Intel Corporation
Copyright 2017-2025 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -241,7 +241,6 @@
<Compile Include="redirserver.js" />
<Compile Include="taskmanager.js" />
<Compile Include="translate\translate.js" />
<Compile Include="ua-parser.js" />
<Compile Include="webauthn.js" />
<Compile Include="webrelayserver.js" />
<Compile Include="webserver.js" />
@ -441,7 +440,6 @@
<Content Include="LICENSE" />
<Content Include="meshcentral-config-schema.json" />
<Content Include="package.json" />
<Content Include="plugin_development.md" />
<Content Include="public\clickonce\minirouter\Application Files\MeshMiniRouter_1_0_0_70\MeshMiniRouter.application" />
<Content Include="public\clickonce\minirouter\Application Files\MeshMiniRouter_1_0_0_70\MeshMiniRouter.exe.config.deploy" />
<Content Include="public\clickonce\minirouter\Application Files\MeshMiniRouter_1_0_0_70\MeshMiniRouter.exe.deploy" />
@ -596,12 +594,14 @@
<Content Include="readme.md" />
<Content Include="sample-config-advanced.json" />
<Content Include="sample-config.json" />
<Content Include="SECURITY.md" />
<Content Include="SourceFileList.txt" />
<Content Include="translate\readme.txt" />
<Content Include="translate\translate.json" />
<Content Include="views\agentinvite.handlebars" />
<Content Include="views\default-mobile.handlebars" />
<Content Include="views\default.handlebars" />
<Content Include="views\default3.handlebars" />
<Content Include="views\download.handlebars" />
<Content Include="views\download2.handlebars" />
<Content Include="views\error404-mobile.handlebars" />
@ -681,6 +681,8 @@
<Folder Include="typings\globals\ajv\" />
<Folder Include="typings\globals\async\" />
<Folder Include="typings\globals\axios\" />
<Folder Include="typings\globals\big-integer\" />
<Folder Include="typings\globals\busboy\" />
<Folder Include="typings\globals\connect-redis\" />
<Folder Include="typings\globals\cookie-session\" />
<Folder Include="typings\globals\core-js\" />
@ -694,6 +696,7 @@
<Folder Include="typings\globals\he\" />
<Folder Include="typings\globals\hooker\" />
<Folder Include="typings\globals\http-errors\" />
<Folder Include="typings\globals\ip\" />
<Folder Include="typings\globals\is-plain-object\" />
<Folder Include="typings\globals\jsbn\" />
<Folder Include="typings\globals\klaw\" />
@ -710,10 +713,12 @@
<Folder Include="typings\globals\once\" />
<Folder Include="typings\globals\passport\" />
<Folder Include="typings\globals\pg-pool\" />
<Folder Include="typings\globals\rx-lite\" />
<Folder Include="typings\globals\split2\" />
<Folder Include="typings\globals\sprintf-js\" />
<Folder Include="typings\globals\sqlite3\" />
<Folder Include="typings\globals\type-check\" />
<Folder Include="typings\globals\ua-parser-js\" />
<Folder Include="typings\globals\underscore\" />
<Folder Include="typings\globals\uuid\" />
<Folder Include="typings\globals\window-size\" />
@ -723,6 +728,8 @@
<TypeScriptCompile Include="typings\globals\ajv\index.d.ts" />
<TypeScriptCompile Include="typings\globals\async\index.d.ts" />
<TypeScriptCompile Include="typings\globals\axios\index.d.ts" />
<TypeScriptCompile Include="typings\globals\big-integer\index.d.ts" />
<TypeScriptCompile Include="typings\globals\busboy\index.d.ts" />
<TypeScriptCompile Include="typings\globals\connect-redis\index.d.ts" />
<TypeScriptCompile Include="typings\globals\cookie-session\index.d.ts" />
<TypeScriptCompile Include="typings\globals\core-js\index.d.ts" />
@ -736,6 +743,7 @@
<TypeScriptCompile Include="typings\globals\he\index.d.ts" />
<TypeScriptCompile Include="typings\globals\hooker\index.d.ts" />
<TypeScriptCompile Include="typings\globals\http-errors\index.d.ts" />
<TypeScriptCompile Include="typings\globals\ip\index.d.ts" />
<TypeScriptCompile Include="typings\globals\is-plain-object\index.d.ts" />
<TypeScriptCompile Include="typings\globals\jsbn\index.d.ts" />
<TypeScriptCompile Include="typings\globals\klaw\index.d.ts" />
@ -752,10 +760,12 @@
<TypeScriptCompile Include="typings\globals\once\index.d.ts" />
<TypeScriptCompile Include="typings\globals\passport\index.d.ts" />
<TypeScriptCompile Include="typings\globals\pg-pool\index.d.ts" />
<TypeScriptCompile Include="typings\globals\rx-lite\index.d.ts" />
<TypeScriptCompile Include="typings\globals\split2\index.d.ts" />
<TypeScriptCompile Include="typings\globals\sprintf-js\index.d.ts" />
<TypeScriptCompile Include="typings\globals\sqlite3\index.d.ts" />
<TypeScriptCompile Include="typings\globals\type-check\index.d.ts" />
<TypeScriptCompile Include="typings\globals\ua-parser-js\index.d.ts" />
<TypeScriptCompile Include="typings\globals\underscore\index.d.ts" />
<TypeScriptCompile Include="typings\globals\uuid\index.d.ts" />
<TypeScriptCompile Include="typings\globals\window-size\index.d.ts" />

105
SECURITY.md Normal file
View File

@ -0,0 +1,105 @@
# Security Policy
## Supported Versions
Any version of MeshCentral 1.x.x is supported.
| Version | Supported |
| ------- | ------------------ |
| 1.x.x | :white_check_mark: |
| < 1.0 | :x: |
## Reporting a Vulnerability
Please report any concerns or security issue to Ylian Saint-Hilaire (ylianst@gmail.com) and Simon Smith (simonsmith5521@gmail.com).
Ylian Saint-Hilaire (ylianst@gmail.com) PGP key below.
```
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.56
mQMuBF2gC4sRCAClFNvMCCVW3ego3UHBQ6LhSenJfaZYhvn8gaGuemSQxqTI6bla
BTAv3aMtQnvqlSuadMMegb+FO6hnaQMlGvpVA1qpkSzgrPS5HrBD3H33J2Nj3i93
ZpDPpxdI0ehCj6IJPnl0GxGbpKIN8YpJUFl44wv1lMRFI1lgyb+dCoO60irYdNQB
PV85BI+DwPfOBFHunwR78nqMvpvsk9HaeHjEP7oXr952/7EazUowZsMlEfkYnw5S
+tLfpCoY3QWkektpJP40nMJSKQdV2NEuED99doA0X+7P1vsvFFFyMH69dnU2uSay
XCHpkAbntBy0BGmtF1RnTcOMv2V/LPXnlMdvAQCbmLQzNra3r163tcdRY0jSs+pZ
1L3w5tHNj2dzhfpa7wf/SIuds6QTr2LCN6miLoSVCRMMpT7d771b16GwQqWEXzN2
+h7dYqrssHPOa8FSUrPerz0+0eFcbMSm5/L/4KXWXoQthURv8aMP9E0iVoUYaaKB
7U+5vFEZbpoOZyZmTAjXQMSNZCft0azA82Q+G85euyicWtMv48yNVzUhkdh+M2ud
ohkXX2Aor1TqpBJoIeWke7j9D+Bo+lu61zPRx5ed9teUeLJCwqNEjlE+6gre5kxF
PoreAtn59QYcBIpzQEWVMbNFlDAR4jMyqIoKCGfBPiRw2V+kunbzqiGQEglIFfOt
6sTN/+CJh0ei976VDmE0Z1kMN+CNLgIjIw8fl02V9QgAnHcpqtVUxR4dbGOhVDq5
lWv+K75QQlWyXC2k+KboXcaCvH0WZEBACYzO0CfrZ5hP9BSkbj5usSUVGGHwEFAJ
t+/04KVY71fW281Ej5kGNaIKxeKsx6+hMo+UXb5ZM+6fANNNxs1cK95sTH6PjkyB
tsKxLoa3CV2v9mSE5JiKKt74R9nXVo7PXf6DizwAU2l30Lb6y6y0OdXdCCPAG8Ij
FrMgPu5MtjgsO5DnkZfUqDPWHhOgEPyOh3Ho+pvDhNYh5cm2eLQ8g5orzs2FHwbZ
DpAHwCdqrlcpBlKJ4W/MZdf1fg2PjqaTWm7ZFiGr91P0F6kltTLWbVKTjLdS0T+D
L7QnWWxpYW4gU2FpbnQtSGlsYWlyZSA8eWxpYW5zdEBnbWFpbC5jb20+iF4EExEI
AAYFAl2gC4sACgkQg7j/r4DH+kD/3gD+MRedlM53VzOtNOpS6mqDAxj1aWP90HN0
AqO6zuCTyGgBAJlunLFKH8IUetmQOhiohB8HVhdm/q4lKRDV7sHdplDyuMwEXaAL
ixACAJSU/sCV87he4oZUKzg2/IGl3QoDSbTCOd04dE1IjPjjHbi8t9M7Qau55aM8
ypFEsc7zMslL8Fc78EejrKmM3zsB/RU9XWFyrbQwRbaK6OHeEHC2E3AFaG0p09c6
d0kZloHuWyEsm5a/3PpbIM1eP9IESJXWCc+bQQt6DxLKHLmkKMwB/icWMg8uMJlx
aady8TEq7LH5oFVKsglnwuN1nIkecrf77TVkEqTjIxS6TiOup6zOnioFNKLYBAH0
WUnJEYFvx4OIXgQYEQgABgUCXaALiwAKCRCDuP+vgMf6QGFTAQCUj2gGwsFlN0eR
Wowv4eLcc3FwQ+lBElUctKg8vNFb0gD/ZWVWsWwKerNgNnf7RGD9mt8G2CKvdgGG
oZ2hPP2gU9w=
=roW4
-----END PGP PUBLIC KEY BLOCK-----
```
Simon Smith (simonsmith5521@gmail.com) PGP key below.
```
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGgUVVwBEADVReB3GclVt2B9928Cs2XVXc0BW/AcKP4XOdrWHE0u9dTtozrM
EI2azZI+tcyGDVGdNJlYF2FQUTnnVcazm+IUskZJ0mgL+TQ2k+bRmQXj1ZRKrTk5
5qOjPCxP0jCHbxHIlh9ecO3NsHHj1+MFRDzGBvOyiJzVxn2xmg8+r7okcnRZj7Wj
0K4EwM33/Xdanl8IXahwaQH3rQrn5gjunLB2vFvrC6sxpU8Q9etEwUc7/D8zfH9f
9K11hESeQvMVkfv/QGrO0X5nhDEYiH4aJA7SqvC6xhIqjyNfAqRoMpUDGwP/JB6B
3WHyhUfkNDT9gfn064BF90NZQgr318Z0uzuwC4NHvptVz5pFJYpUz9KBkkn8p+Mq
j82IwHeMXyvO4nzBxfmqDYfN4vrnbVJmcMNtQUe2G9ekKHTO7UHW1gH4ls68tzNA
COexEBfTKpPqboK1yM8wwycvyXuX8DEVZtbiKXNcUPSOdmUx1ZXtO6YHfSDiRWgu
HxCN+LoWujbI22ry9YZcOHkG6c45vmavw/7ebB7XVl4yQeneZVxxH3nFSccPrBFg
NYROw/j0yeeNu2CATsutJSblQqQuROYdUhkJACnpF6mE60eUs+Slk1C0OQZfUm/z
kpJP5dXRm+AhzoprmSLl0umMdcyBhZHTk27pkt/yVFNxAxMwMOsLj1NeXQARAQAB
tCZTaW1vbiBTbWl0aCA8c2ltb25zbWl0aDU1MjFAZ21haWwuY29tPokCVAQTAQgA
PhYhBEwpnGdhitVYgbKU3iDv9oNlI537BQJoFFVcAhsDBQkHhh9kBQsJCAcCBhUK
CQgLAgQWAgMBAh4BAheAAAoJECDv9oNlI537fqYP/1l27lv+/jEnhPfMYmy0TXAV
RQES7afzNRH9bbVW4RMrVito5PtUJ71KAP0UznYHUuo2hVZeuBRDqgVBreeb/KHZ
ERz8UgTJhE/FBhBGKKgHGtPWwCuQs2owGCePQHweFUVh5O5NWjXPBrZ6s1GipDwC
Gi6UG9pgKcs7iGc2hIwV/EF06QgKmKhyL1twpmu4wzjdRoja0Xp3GFjgqcQG82bP
OGxA4znyzXoNQAWPUr4PW+cGDSGPar3BUnQhHCssQTYbjQHeaW7VH9pvv217a/Yh
sUgzp0KMhyp8ShBrhJJJdddWxaPuDhip5ABK2lCRqK1utCpBCZ2CjmAd5RtkVuwF
DLMDa5siiO844n8Hc1MQ+P1k6iNi8JlPcwSLiKn9jeP+/UfFQbCzx3Fhx+6NVOGQ
k9JqhyQPvEl4F1RUqjlhFmebFiXt4PnhZct3MO1CfNCsaYUkulCbzzoQV54qHDvY
z2GQ5G3mV6CExWuVAnPq/GqOnyVP/4bmnWF/wkYZDzMfSws9kNgMoRD7UZ5PQS1U
lpg8HCiyMR64ZeFZxb6tjc0jbuxafYe402QEUIfyLt2iHW5Jb1ksld+ncE5WYOIq
jtC+MN1txhJgmgXWvvmSH+R42Q9PwEvtzKDksZGqNhlu/R5kHVrMN9OW8q5b2r6q
04Q95ICfI8OSUUT7J3o3uQINBGgUVVwBEADcTCtuskpBj002JvF02gvLUB0tAzQJ
sv4PtPZlUvV8BbzfpvPEW5xB2MjUbyhFqJTJj9wDr+ELx+hE1X/GzgfGNDvXSCnq
0E8KEWS++CmYAL0HdZx9nJiXet7FGE90FTuZMWrS1Rojs2vMZESN/hqBP8kuWK9x
z+Bq/xiRHeFM5zUXTUfVghZSUOv/mpCU9tN/h//yI8Ltnke3Xk4m6OSDfQKinmZY
ynhZFrWmhwcAm7DzNZIJ8P5fvOmJlrQQbsGYUqLUNNFSgmW/+bNnOyB5+oBLV3ou
6OhMDhoEdwLaGr9/W+Wxc5hYyM455rgO3NIVg/js244shJrz58xo3Ral0P7xZt2O
hSyNtFOVZboFxRV4ESCSVS3oB4K/aC76WHzhTcxhWkRmM6Q8nWhqS2A5dhZeWWK6
RmHMqqirSwd0IeFQq8rpUSPaXoU6cfoT5Zv/VXr3hP+Tdd/m8rMqMF/5tqerGP79
ofqGE89ydulP+dr+jJNPaiJ8Alx7hszuB1PTFMZMvlHMWPhx0xXjTjGaJt4y551y
8XyvEeAZ9u58UHhT9gquumu4sh55Rw0PMp23BUsNBHSq+0VMQBoZlxJa3w7QC7i/
TM1NRtsAJAoM0ocyca7EztDLoSsCi9j8nedzhiH3dB0U+ma5dtRWrVSSc1NV09po
Og5aJdav2YW33QARAQABiQI8BBgBCAAmFiEETCmcZ2GK1ViBspTeIO/2g2UjnfsF
AmgUVVwCGwwFCQeGH2QACgkQIO/2g2UjnfuCaA//Z+Ur69OnOxIqY0makkJFnQO6
I4657VNuE9dMWtQwQA7nn/Rxxqk0hAuEPF6uyX4sZ20SK5LUQQyhyz3fwYiNm9Rr
iYkTmPiMgx7CPsRVXBPjRWow+z5Li/RYPMlYNwKJ2h8z/+w2VHaA/WkkfLQKeWQq
T5Hr7+5WQzOOHcntESBI5mZw/4CPEaWJEIWWrD7TtsWiYfRnOHlB/GvDQcaXxKVa
Gp1rsmOh5t/prdG/F4jLSsYvpXLY618t3Zn1SJYhWub6h8OtF3Mrao7Wm/HSwcwM
0IWAnDYB1K70MvPLEifqcyeYZFZE8gFuOU/WpyHHUSpVvGJ6fhL6sKWmCRJGR4UJ
3kepyYspshMVZRwJkll8UdrKHcAsUnOML25JX712BDNNHsJTcMf1i9BhIwlxk2yN
BspmWe7JJHD28FCoQ3tpvf+iN5uILO/QrtYkiigppfpP56ZFdTVtk/LdnTfh5gPl
FIOJKHXZKEM9zbhW/ntnXDKQjnWw/3EuFvmmqOqEtHF+pRDZiRjzptJIOdg392h8
GM8EnU927FMbtnpysQu9sxUGxMDZ9GMEOnFpAtg2LV4bnHx+K6g3JL07BdB3gdmX
SieMJS9Az3lcIqzMqtmyti7S2eP+0aduXOmxE1QtPuzs5X7a0XXSvBAoI79Az10V
z1Ncl3xSEOPFKUIvLck=
=yUbV
-----END PGP PUBLIC KEY BLOCK-----
```

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
agents/MeshCmdARM64.exe Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
agents/MeshServiceARM64.exe Normal file

Binary file not shown.

View File

@ -28,7 +28,8 @@
"NOT RUNNING"
],
"statusDescription": "Current Agent Status",
"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."
"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.",
"connectionDetailsButton": "Connection Details..."
},
"cs": {
"agent": "Agent",
@ -37,7 +38,7 @@
"meshName": "Skupinové jméno",
"meshId": "Identifikátor skupiny",
"serverId": "Identifikátor serveru",
"setup": "Založit",
"setup": "Nastavit",
"update": "Aktualizace",
"install": "Instalace",
"uninstall": "Odinstalace",
@ -52,14 +53,15 @@
"zenity": "Zkuste nainstalovat / aktualizovat Zenity a spustit znovu",
"status": [
"NENÍ INSTALOVÁN",
"BĚH",
"SPUŠTĚNO",
"NEFUNGUJE"
],
"statusDescription": "Aktuální stav agenta",
"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."
"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.",
"connectionDetailsButton": "Podrobnosti o připojení..."
},
"de": {
"agent": "Agent",
@ -123,7 +125,8 @@
"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."
"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.",
"connectionDetailsButton": "Detalles de conexión..."
},
"fi": {
"agent": "Agentti",
@ -154,7 +157,8 @@
"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."
"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.",
"connectionDetailsButton": "Yhteyden tiedot..."
},
"fr": {
"agent": "Agent",
@ -185,7 +189,8 @@
"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."
"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.",
"connectionDetailsButton": "Détails de la connexion..."
},
"hi": {
"agent": "एजेंट",
@ -216,7 +221,8 @@
"agentVersion": "नया संस्करण",
"elevation": "इस सॉफ़्टवेयर को स्थापित/अनइंस्टॉल करने के लिए उन्नत अनुमतियों की आवश्यकता होती है।",
"graphicalerror": "इस इंस्टालर का आलेखीय संस्करण इस सिस्टम पर नहीं चल सकता",
"description": "इस दूरस्थ प्रबंधन सॉफ़्टवेयर को स्थापित या अनइंस्टॉल करने के लिए नीचे दिए गए बटनों पर क्लिक करें। स्थापित होने पर, यह सॉफ़्टवेयर पृष्ठभूमि में चलता है जिससे इस कंप्यूटर को दूरस्थ व्यवस्थापक द्वारा प्रबंधित और नियंत्रित किया जा सकता है।"
"description": "इस दूरस्थ प्रबंधन सॉफ़्टवेयर को स्थापित या अनइंस्टॉल करने के लिए नीचे दिए गए बटनों पर क्लिक करें। स्थापित होने पर, यह सॉफ़्टवेयर पृष्ठभूमि में चलता है जिससे इस कंप्यूटर को दूरस्थ व्यवस्थापक द्वारा प्रबंधित और नियंत्रित किया जा सकता है।",
"connectionDetailsButton": "कनेक्शन विवरण..."
},
"it": {
"agent": "Agente",
@ -247,7 +253,8 @@
"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."
"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.",
"connectionDetailsButton": "Dettagli di connessione..."
},
"ja": {
"agent": "エージェント",
@ -278,7 +285,8 @@
"agentVersion": "新しいバージョン",
"elevation": "このソフトウェアをインストール/アンインストールするには、昇格された権限が必要です。",
"graphicalerror": "このインストーラーのグラフィカルバージョンは、このシステムでは実行できません",
"description": "このリモート管理ソフトウェアをインストールまたはアンインストールするには、下のボタンをクリックしてください。インストールすると、このソフトウェアはバックグラウンドで実行され、リモート管理者がこのコンピューターを管理および制御できるようになります。"
"description": "このリモート管理ソフトウェアをインストールまたはアンインストールするには、下のボタンをクリックしてください。インストールすると、このソフトウェアはバックグラウンドで実行され、リモート管理者がこのコンピューターを管理および制御できるようになります。",
"connectionDetailsButton": "接続の詳細..."
},
"ko": {
"agent": "에이전트",
@ -309,7 +317,8 @@
"agentVersion": "새로운 버전",
"elevation": "이 소프트웨어를 설치/제거하려면 높은 권한이 필요합니다.",
"graphicalerror": "이 설치 프로그램의 그래픽 버전은 이 시스템에서 실행할 수 없습니다.",
"description": "이 원격 관리 소프트웨어를 설치하거나 제거하려면 아래 버튼을 클릭하십시오. 이 소프트웨어를 설치하면 백그라운드에서 실행되어 원격 관리자가 이 컴퓨터를 관리하고 제어할 수 있습니다."
"description": "이 원격 관리 소프트웨어를 설치하거나 제거하려면 아래 버튼을 클릭하십시오. 이 소프트웨어를 설치하면 백그라운드에서 실행되어 원격 관리자가 이 컴퓨터를 관리하고 제어할 수 있습니다.",
"connectionDetailsButton": "연결 세부정보..."
},
"nl": {
"agent": "Agent",
@ -340,7 +349,8 @@
"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."
"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.",
"connectionDetailsButton": "Verbindingsdetails..."
},
"pt": {
"agent": "Agente",
@ -371,7 +381,8 @@
"agentVersion": "Nova versão",
"elevation": "Permissões elevadas são necessárias para instalar/desinstalar este software.",
"graphicalerror": "A versão gráfica deste instalador não pode ser executada neste sistema",
"description": "Clique nos botões abaixo para instalar ou desinstalar este software de gerenciamento remoto. Quando instalado, este software é executado em segundo plano, permitindo que este computador seja gerenciado e controlado por um administrador remoto."
"description": "Clique nos botões abaixo para instalar ou desinstalar este software de gerenciamento remoto. Quando instalado, este software é executado em segundo plano, permitindo que este computador seja gerenciado e controlado por um administrador remoto.",
"connectionDetailsButton": "Detalhes da conexão..."
},
"ru": {
"agent": "Агент",
@ -402,7 +413,8 @@
"agentVersion": "Новая версия",
"elevation": "Для установки/удаления этого программного обеспечения требуются повышенные права.",
"graphicalerror": "Графическая версия этого установщика не может быть запущена в этой системе.",
"description": "Нажмите кнопки ниже, чтобы установить или удалить это программное обеспечение для удаленного управления..После установки это программное обеспечение работает в фоновом режиме, что позволяет удаленному администратору управлять этим компьютером."
"description": "Нажмите кнопки ниже, чтобы установить или удалить это программное обеспечение для удаленного управления..После установки это программное обеспечение работает в фоновом режиме, что позволяет удаленному администратору управлять этим компьютером.",
"connectionDetailsButton": "Подробности подключения..."
},
"sv": {
"agent": "Agent",
@ -433,7 +445,8 @@
"agentVersion": "Ny version",
"elevation": "Förhöjda behörigheter krävs för att installera/avinstallera denna programvara.",
"graphicalerror": "Den grafiska versionen av detta installationsprogram kan inte köras på det här systemet",
"description": "Klicka på knapparna nedan för att installera eller avinstallera denna fjärrhanteringsprogramvara. När den är installerad körs den här programvaran i bakgrunden så att den här datorn kan hanteras och kontrolleras av en fjärradministratör."
"description": "Klicka på knapparna nedan för att installera eller avinstallera denna fjärrhanteringsprogramvara. När den är installerad körs den här programvaran i bakgrunden så att den här datorn kan hanteras och kontrolleras av en fjärradministratör.",
"connectionDetailsButton": "Anslutningsdetaljer..."
},
"tr": {
"agent": "Agent",
@ -464,7 +477,8 @@
"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."
"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.",
"connectionDetailsButton": "Bağlantı ayrıntıları..."
},
"zh-chs": {
"agent": "代理",
@ -495,7 +509,8 @@
"agentVersion": "新版本",
"elevation": "安装/卸载此软件需要提升权限。",
"graphicalerror": "此安装程序的图形版本无法在此系统上运行",
"description": "单击下面的按钮以安装或卸载此远程管理软件。安装后,该软件在后台运行,允许远程管理员管理和控制该计算机。"
"description": "单击下面的按钮以安装或卸载此远程管理软件。安装后,该软件在后台运行,允许远程管理员管理和控制该计算机。",
"connectionDetailsButton": "连接详情..."
},
"zh-cht": {
"agent": "代理",
@ -526,7 +541,8 @@
"agentVersion": "新版本",
"elevation": "安裝/卸載此軟件需要提升權限。",
"graphicalerror": "此安裝程序的圖形版本無法在此系統上運行",
"description": "單擊下面的按鈕以安裝或卸載此遠程管理軟件。安裝後,該軟件在後台運行,允許遠程管理員管理和控制該計算機。"
"description": "單擊下面的按鈕以安裝或卸載此遠程管理軟件。安裝後,該軟件在後台運行,允許遠程管理員管理和控制該計算機。",
"connectionDetailsButton": "連接詳情..."
},
"da": {
"agent": "Agent",
@ -557,7 +573,8 @@
"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."
"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.",
"connectionDetailsButton": "Forbindelsesdetaljer..."
},
"pl": {
"agent": "Agent",
@ -588,7 +605,8 @@
"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."
"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.",
"connectionDetailsButton": "Szczegóły połączenia..."
},
"pt-br": {
"agent": "Agente",
@ -619,7 +637,8 @@
"agentVersion": "Nova Versão",
"elevation": "Permissões Elevadas são necessárias para instalar/desinstalar este software",
"graphicalerror": "A versão gráfica do instalador não pode ser executada neste sistema",
"description": "Clique nos botões abaixo para instalar ou desinstalar este software de gerenciamento remoto. Quando instalado, este software é executado em segundo plano permitindo que este computador seja gerenciado e controlado por um administrador remoto"
"description": "Clique nos botões abaixo para instalar ou desinstalar este software de gerenciamento remoto. Quando instalado, este software é executado em segundo plano permitindo que este computador seja gerenciado e controlado por um administrador remoto",
"connectionDetailsButton": "Detalhes da conexão..."
},
"bs": {
"agent": "Agent",
@ -650,6 +669,103 @@
"NOT RUNNING"
],
"statusDescription": "Trenutni status agenta",
"description": "Kliknite na dugmad ispod da instalirate ili deinstalirate ovaj softver za daljinsko upravljanje. Kada je instaliran, ovaj softver radi u pozadini, što omogućava da ovim računarom upravlja i kontroliše udaljeni administrator."
"description": "Kliknite na dugmad ispod da instalirate ili deinstalirate ovaj softver za daljinsko upravljanje. Kada je instaliran, ovaj softver radi u pozadini, što omogućava da ovim računarom upravlja i kontroliše udaljeni administrator.",
"connectionDetailsButton": "Detalji veze..."
},
"hu": {
"agent": "Agent",
"agentVersion": "Új verzió",
"group": "Eszköz csoport",
"url": "Kiszolgáló URL",
"meshName": "Csoport név",
"meshId": "Csoport azonosító",
"serverId": "Kiszolgáló azonosító",
"setup": "Beállítás",
"update": "Frissítés",
"install": "Telepítés",
"uninstall": "Eltávolítás",
"connect": "Kapcsolódás",
"disconnect": "Lekapcsolódás",
"cancel": "Mégse",
"close": "Bezár",
"pressok": "Press OK to disconnect",
"elevation": "A szoftver telepítéséhez/eltávolításához megnövelt jogosultságok szükségesek.",
"sudo": "Kérjük, próbálja meg újra a sudo használatával.",
"ctrlc": "A kilépéshez nyomja meg a Ctrl-C billentyűt.",
"commands": "A szöveges változatot a parancssorból futtathatja a következő parancs(okk)al",
"graphicalerror": "A telepítő grafikus verziója nem futtatható ezen a rendszeren.",
"zenity": "Próbálja meg telepíteni/frissíteni a Zenity-t, és indítsa újra",
"status": [
"NINCS TELEPÍTVE",
"FUT",
"NEM FUT"
],
"statusDescription": "Jelenlegi agent állapota",
"description": "Kattintson a Telepítés vagy Eltávolítás gombokra a Távfelügyeleti alkalmazás telepítéséhez vagy eltávolításához. Telepítés után ez az alkalmazás a háttérben fut, lehetővé téve, hogy a számítógépet egy távoli rendszergazda kezelje.",
"connectionDetailsButton": "Kapcsolat részletei..."
},
"ca": {
"agent": "Agent",
"agentVersion": "Nova versió",
"group": "Grup de dispositius",
"url": "URL del servidor",
"meshName": "Nom del grup",
"meshId": "Identificador de grup",
"serverId": "Identificador del servidor",
"setup": "Configuració",
"update": "Actualització",
"install": "Instal·lar",
"uninstall": "Desinstal·la",
"connect": "Connecta't",
"disconnect": "Desconnecta",
"cancel": "Cancel · lar",
"close": "Tanca",
"pressok": "Premeu D'acord per desconnectar",
"elevation": "Es necessiten permisos elevats per instal·lar/desinstal·lar aquest programari.",
"sudo": "Si us plau, torna-ho a provar amb sudo.",
"ctrlc": "Premeu Ctrl-C per sortir.",
"commands": "Podeu executar la versió de text des de la línia d'ordres amb les següents ordres",
"graphicalerror": "La versió gràfica d'aquest instal·lador no pot executar-se en aquest sistema",
"zenity": "Proveu d'instal·lar/actualitzar Zenity i torneu a executar-lo",
"status": [
"NO ESTÀ INSTAL · LAT",
"CÓRRER",
"NO CORRE"
],
"statusDescription": "Estat actual de l'agent",
"description": "Feu clic als botons següents per instal·lar o desinstal·lar aquest programari de gestió remota. Quan s'instal·la, aquest programari s'executa en segon pla i permet que aquest ordinador sigui gestionat i controlat per un administrador remot.",
"connectionDetailsButton": "Detalls de la connexió..."
},
"uk": {
"agent": "Агент",
"agentVersion": "Нова версія",
"group": "Група пристроїв",
"url": "URL Сервера",
"meshName": "Ім'я групи",
"meshId": "Ідентифікатор групи",
"serverId": "Ідентифікатор сервера",
"setup": "Налаштувати",
"update": "Оновити",
"install": "Інсталювати",
"uninstall": "Видалити",
"connect": "Підключитись",
"disconnect": "Відключити",
"cancel": "Скасувати",
"close": "Закрити",
"pressok": "Натисніть OK, щоб від'єднатись",
"elevation": "Для встановлення/видалення цієї програми потрібні права адміністратора.",
"sudo": "Будь ласка, спробуйте ще раз за допомогою sudo.",
"ctrlc": "Натисніть Ctrl-C, щоб вийти",
"commands": "Ви можете запустити текстову версію з командного рядка за допомогою таких команд",
"graphicalerror": "Графічна версія цього інсталятора не може запуститись в цій системі",
"zenity": "Спробуйте встановити або оновити Zenity, а тоді запустіть програму знову",
"status": [
"НЕ ВСТАНОВЛЕНО",
"ПРАЦЮЄ",
"НЕ ПРАЦЮЄ"
],
"statusDescription": "Поточний статус Агента",
"description": "Щоб встановити або видалити це програмне забезпечення для віддаленого керування, скористайтеся кнопками нижче. Після інсталяції програма працютиме у фоновому режимі, що дозволить віддаленому адміністратору керувати цим комп'ютером. Підключення ж надасть тимчасовий доступ поки це вікно відкрите",
"connectionDetailsButton": "Деталі з'єднання..."
}
}

View File

@ -1,11 +0,0 @@
@ECHO OFF
MD modules_meshcmd_min
MD modules_meshcore_min
%LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minify meshcmd.js
RENAME meshcmd.js.min meshcmd.min.js
%LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minify meshcore.js
RENAME meshcore.js.min meshcore.min.js
%LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minifydir C:\Users\Default.DESKTOP-9CGK2DI\Desktop\AmtWebApp\meshcentral\agents\modules_meshcore C:\Users\Default.DESKTOP-9CGK2DI\Desktop\AmtWebApp\meshcentral\agents\modules_meshcore_min
%LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minifydir C:\Users\Default.DESKTOP-9CGK2DI\Desktop\AmtWebApp\meshcentral\agents\modules_meshcmd C:\Users\Default.DESKTOP-9CGK2DI\Desktop\AmtWebApp\meshcentral\agents\modules_meshcmd_min

View File

@ -1,20 +0,0 @@
@ECHO OFF
MD modules_meshcmd_min
MD modules_meshcore_min
"..\..\WebSiteCompiler\bin\Debug\WebSiteCompiler.exe" compressalljs "modules_meshcore" "modules_meshcore_min"
"..\..\WebSiteCompiler\bin\Debug\WebSiteCompiler.exe" compressalljs "modules_meshcmd" "modules_meshcmd_min"
"..\..\WebSiteCompiler\bin\Debug\WebSiteCompiler.exe" meshcore.js
"..\..\WebSiteCompiler\bin\Debug\WebSiteCompiler.exe" meshcmd.js
REM del meshcore.min.js
REM %LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minify meshcore.js
REM rename meshcore.js.min meshcore.min.js
REM del meshcmd.min.js
REM %LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minify meshcmd.js
REM rename meshcmd.js.min meshcmd.min.js
REM Minify the translations
%LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minify modules_meshcore\coretranslations.json
COPY modules_meshcore\coretranslations.json.min modules_meshcore_min\coretranslations.json
DEL modules_meshcore\coretranslations.json.min

View File

@ -24,6 +24,8 @@ var agents = {
'meshagent_alpine-x86-64': 33,
'meshagent_mipsel24kc': 40,
'meshagent_aarch64-cortex-a53': 41,
// 'meshagent_armvirt32': 44,
'meshagent_riscv64': 45,
'meshagent_osx-universal-64': 10005
}

View File

@ -1,134 +1,140 @@
{
"3": {
"filename": "MeshService.exe",
"hash": "33AE44E73CA79EDD443661F8D6205DF59DE7D03B0AC730A37D283C9CE4079E6136FFC30BC1B79DA8FB05F03CBDE75D06",
"size": 3793408,
"mtime": "2022-08-25T17:55:54Z"
"hash": "A28899C93AE7273C49433952149AD34ADB5A017A150A27243B69402D94BF4AAC32AAE6774C40EC8DE1B4CB33A82DC1C7",
"size": 3811840,
"mtime": "2025-03-07T22:43:04Z"
},
"4": {
"filename": "MeshService64.exe",
"hash": "C809BAB1F0B988F1436E1033D9F07A782412A6CC7ECCF4AC52CCCBD91D7B56D401F2AB5FABC71A66F91B20E6FCA393D4",
"size": 3422720,
"mtime": "2022-08-25T17:55:24Z"
"hash": "168572E0999089DE09B751255C908A4C2B80056D6DFAFFDB8B76F4A81847C8A4E162D6C303C14A837BBE8E6802AC6992",
"size": 3439616,
"mtime": "2025-03-07T22:43:04Z"
},
"5": {
"filename": "meshagent_x86",
"hash": "024A8FCE66C277CFAA375B6F5A12E18D08BF2F8EE494C4408544D93F219F7208BACF056F79A2340428C3C34F765E325E",
"size": 3666464,
"mtime": "2022-08-29T17:48:58Z"
"hash": "EB1F41A192A43469823399E9880EF7435259A12E2687CF488B3CB17D86BA8C29ED20DD863C86D0D5CA1D40634DEB4134",
"size": 3641436,
"mtime": "2023-10-13T16:35:50Z"
},
"6": {
"filename": "meshagent_x86-64",
"hash": "DC5924847AD22C058D1009BE7EDFAFEAF248DEC706C263736B254BA5917D274A21BAE0D025852EC788007EF3688CDC64",
"size": 3741136,
"mtime": "2022-08-29T17:49:06Z"
"hash": "434BF98C5D4F394CB5275C73FF96CB3283DA1300577784F51AF2273DE3158074E78A351C48A9CDEA3E7DC6DECD106128",
"size": 3749328,
"mtime": "2024-08-06T15:30:40Z"
},
"7": {
"filename": "meshagent_mips",
"hash": "C49212CA4BF2D1F031F376C0157A4B9C5EA5ACD08180662F27F2EA54F990C2A7840B5A3BF7F66D85EE194EF675008D09",
"size": 4547696,
"mtime": "2022-08-29T17:49:13Z"
"hash": "97F057410D979E5D290EC253B1340CDB4C1B55AFB2F766AC1CFACA368355E5D7CB86E51F44B34798F0FD1C691089859F",
"size": 4555960,
"mtime": "2023-09-19T15:16:30Z"
},
"9": {
"filename": "meshagent_arm",
"hash": "5217EBF6638EDC64FFFBE3B53BF9DC640D630CC69B9CE484C1CA274530C248D248AC4F4E84071A34CD504039D8D0B022",
"size": 3148064,
"mtime": "2022-08-29T17:49:22Z"
"hash": "963802249E86D8D0B08D62D688E67704F519CB1D6EA03A755CF3A277D30A1579E92E863F5E31B40CBBCF8C492D3B93E8",
"size": 3156256,
"mtime": "2023-09-19T15:16:29Z"
},
"13": {
"filename": "meshagent_pogo",
"hash": "1523191069F30678C607E32F557CD5F9125A963C671CE7A7F6FB8ADD9B9BFB890AC1A6248872EAE899737F378F54FFF2",
"size": 3156744,
"mtime": "2022-08-29T17:49:32Z"
"hash": "D07AD09AEBA3528785D1BE63D89785C1D2078EDA4F9E1ADE8B695A094DA4F3DB63BB16895E4BDEE733F54EF8C2F74265",
"size": 3164464,
"mtime": "2023-09-19T15:16:30Z"
},
"15": {
"filename": "meshagent_poky",
"hash": "36090B49C98D7A3E7515EC2D22E5C47A4FD9BA35B517949BAF04B39A7CE91378656A7F3FC132C5E43FD1D087B3C9226E",
"size": 3796600,
"mtime": "2022-08-29T17:49:42Z"
"hash": "515F9A5FFE2C229E24DB61770EEC1265F0A3AFC09C4321F1CA8D6C1A4C421FD223BDE85D94BC5B9E349EC7132CD9A7E5",
"size": 3804792,
"mtime": "2023-09-19T15:16:30Z"
},
"16": {
"filename": "meshagent_osx-x86-64",
"hash": "F7A3EBEC3D855EBFB2C72271C17196C7692EB2685DCBA70B56B63C80D6CF0DAA7DF00657BB4A12F4C0D92281B1BB47FE",
"size": 4670736,
"mtime": "2022-08-23T03:31:00Z"
"mtime": "2025-03-18T17:57:52Z"
},
"18": {
"filename": "meshagent_poky64",
"hash": "FD61B913D2239621FDCC2E949BF16FCAE3F9D46D25EEF74DA0A7971F30A44E315A4231AF824241940391A3F112794A27",
"size": 3495416,
"mtime": "2022-08-29T17:49:52Z"
"hash": "F889214564DBA1625DF17A7C3E14458D55350399112BAD429F8525B885EF2098EC527C3A83C3EBEF9BFB90A74AF4CD87",
"size": 3503608,
"mtime": "2023-09-19T15:16:30Z"
},
"19": {
"filename": "meshagent_x86_nokvm",
"hash": "BF125A52656DFE6665E78AB22ED652F4C65C17624A12BCAC2F0691A255AF208C3E883101266F3E80052F4CFE8602B29B",
"size": 3385732,
"mtime": "2022-08-29T17:50:00Z"
"hash": "2558D5FB2B92AF81EE914F83BB0EC528C9D10BFAB67F9F7C27BFD6AB8516B93DDCF9F824BF0F307F47254C811D707434",
"size": 3360704,
"mtime": "2023-09-19T15:16:30Z"
},
"20": {
"filename": "meshagent_x86-64_nokvm",
"hash": "9AB50A5419A2BAFC8DC485C3F24387622689FE3A0C146317CE3EA951F3EE2E4902CCE3878F2098C6EB23A848E510E478",
"size": 3446192,
"mtime": "2022-08-29T17:50:08Z"
"hash": "A91280CAB549B1F133408F283E850F35B529218C0C317007D60A170E6113DE262521B3DA0D1ECEAC0E945B3ED46D23F7",
"size": 3454384,
"mtime": "2023-09-19T15:16:30Z"
},
"24": {
"filename": "meshagent_arm-linaro",
"hash": "DCC5B487A200F9670B33BE603F52088856FB249CC03F5B62D1617CA9A95B55329B120FE4D3FFD72B2E5FE1ADE302CF81",
"size": 2211156,
"mtime": "2022-08-29T17:50:21Z"
"hash": "47E5DDAD71536DBB7752C665A4FE3BDD98D2AB888DB7536FB58E2EC7F0560C750AFE2D2D7F35A00457677661312380E6",
"size": 2215252,
"mtime": "2023-09-19T15:16:29Z"
},
"25": {
"filename": "meshagent_armhf",
"hash": "1EDCE4E132927B432F60A3D262368B3DF54B012EDD786EAD31139646B5D9168297C32D13C7D822CE5FEF7FE44B65B4A0",
"size": 3181452,
"mtime": "2022-08-23T03:14:16Z"
"hash": "65F6FE3B530FDBC3C1E7B2577B081FEF5742265CCCFDE27AB015996D3767F153CF3B4B022932C156754E09CDA2EE4874",
"size": 3191132,
"mtime": "2023-09-19T15:16:29Z"
},
"27": {
"filename": "meshagent_armhf2",
"hash": "0AE840520D3B677B9767EA097F3AA5A1E24212529E688200F43935DB1541AB9FB441EC2C7BA8002D45299B04695FD037",
"size": 2837724,
"mtime": "1985-10-26T08:15:00Z"
"mtime": "2023-09-19T15:16:29Z"
},
"28": {
"filename": "meshagent_mips24kc",
"hash": "88A79B78497D1D004E44D02989A3BE3710D3BEE0A129F98579FFAA826FAC6C90CD69B9B218B90377438942BA85DAC81C",
"size": 4181416,
"mtime": "2022-08-23T03:15:24Z"
"hash": "3AD0A21E1FDD44E1869BFD3E3698D67713445C7A21BEE37AF41E810E6B6F1CE8FE369140AE7BAD31689A5F759CF7BCC6",
"size": 4193384,
"mtime": "2023-09-19T15:16:30Z"
},
"29": {
"filename": "meshagent_osx-arm-64",
"hash": "CFE022146F2ED61E68F907E57E3704CC7F409D7F2B4D87E64ED6D83C53F41777BCDDCCF42DF8B8BB25CCEC9A93D799C7",
"size": 3945576,
"mtime": "2022-08-23T03:31:00Z"
"mtime": "2025-03-12T11:13:54Z"
},
"30": {
"filename": "meshagent_freebsd_x86-64",
"hash": "5C2CDDA2E7AB5068D990FBC725D8D5E3EA2724A0E001C226C0C7BB9F3A46492880BF260B5DD9E733F87EB68BA7494BD6",
"size": 4673560,
"mtime": "2022-08-23T03:31:12Z"
"mtime": "2023-09-19T15:16:29Z"
},
"32": {
"filename": "meshagent_aarch64",
"hash": "21C97445FA93C2A42337AD0E336F840A05EC553F8C040F6021C16339567F8A063EB06876D62C2C2924BD9F656434E9DB",
"size": 3248496,
"mtime": "2022-08-23T03:13:02Z"
"hash": "56AD2FAFBC15BAC635C526C6F106DD0213C0B222265685F00CDD56AD8C3DFE7DE6C4D8F52EA9CA183D50BC8D8C198477",
"size": 3256688,
"mtime": "2023-09-19T15:16:29Z"
},
"40": {
"filename": "meshagent_mipsel24kc",
"hash": "A58CF777ACA3E9B3F7C0FC664E5EAC1F95C3FD03ABDE93E2B06547D0BA1C671A9E67F252CACD9BCBD2019561E18ED7DF",
"size": 4177288,
"mtime": "2022-08-23T03:16:32Z"
"hash": "E6A3CDBFFD233BE1B24E81197F41DB24EFA1708B5BD18B2D7DFEBFD89FAF6A994B5D4A3048D67BBBAB14A77AD7088AE6",
"size": 4189672,
"mtime": "2023-09-19T15:16:30Z"
},
"41": {
"filename": "meshagent_aarch64-cortex-a53",
"hash": "CC84858AD16C644096B87E3686B318F82CD1A39015FF17D93456456F0A51D4A2D4DEC7F6EAA2ABB065D7EAD28CD024A2",
"size": 3076424,
"mtime": "2022-08-23T03:17:42Z"
"hash": "CEFD8AAB52CE01939324E999E1EB541A262E0D4F1C3591F0A8355EAD5D2C87B43B3FB05A1DCD04012CDD4B559589CBAB",
"size": 3084616,
"mtime": "2023-09-19T15:16:29Z"
},
"45": {
"filename": "meshagent_riscv64",
"hash": "CFB8C78CB128B5F8FE367DE40ACD1D34BB9E261B8B37AF867F0B50130F847831B8C0DB4C9DAFC75F5DD80AFECCE74D30",
"size": 3597928,
"mtime": "2025-03-18T11:06:16Z"
},
"10005": {
"filename": "meshagent_osx-universal-64",
"hash": "D320CA61D59FD8D76CF681CFE78A94CE37C47DBCAA8B29DF483F42C000EA9B655B5E5909A2AD6699D45D2D7691FF4964",
"size": 8647784,
"mtime": "2022-08-23T03:31:00Z"
"mtime": "2024-03-15T14:55:06Z"
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
agents/meshagent_riscv64 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -588,7 +588,7 @@ function run(argv) {
}
amtMei.getProvisioningState(function (result) { if (result) { mestate.ProvisioningState = result; } });
amtMei.getProvisioningMode(function (result) { if (result) { mestate.ProvisioningMode = result; } });
amtMei.getEHBCState(function (result) { mestate.ehbc = ((result === true) || (typeof result == 'object') && (result.EHBC === true)); });
amtMei.getEHBCState(function (result) { if (result) { mestate.ehbc = ((result === true) || (typeof result == 'object') && (result.EHBC === true)); } });
amtMei.getControlMode(function (result) { if (result) { mestate.controlmode = result; } });
amtMei.getMACAddresses(function (result) { if (result) { mestate.mac = result; } });
amtMei.getLanInterfaceSettings(0, function (result) { if (result) { mestate.net0 = result; } });

File diff suppressed because it is too large Load Diff

View File

@ -114,6 +114,11 @@ CheckInstallAgent() {
# RaspberryPi 3B+ running Ubuntu 64 (aarch64)
machineid=26
fi
if [ $machinetype == 'riscv64' ]
then
# RISC-V 64 bit
machineid=45
fi
# Add more machine types, detect KVM support... here.
fi

View File

@ -98,7 +98,7 @@ module.exports = function CreateAmtRemoteIder() {
// Private method
obj.ProcessData = function (data) {
obj.bytesFromAmt += data.length;
if (obj.acc == null) { obj.acc = data; } else { obj.acc = Buffer.concat(obj.acc, data); }
if (obj.acc == null) { obj.acc = data; } else { obj.acc = Buffer.concat([obj.acc, data]); }
if (obj.debug) console.log('IDER-ProcessData', obj.acc.length, obj.acc.toString('hex'));
// Process as many commands as possible

View File

@ -225,19 +225,14 @@ function macos_memUtilization()
function windows_thermals()
{
var ret = [];
child = require('child_process').execFile(process.env['windir'] + '\\System32\\wbem\\wmic.exe', ['wmic', '/namespace:\\\\root\\wmi', 'PATH', 'MSAcpi_ThermalZoneTemperature', 'get', 'CurrentTemperature']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); });
child.waitExit();
if(child.stdout.str.trim!='')
{
var lines = child.stdout.str.trim().split('\r\n');
for (var i = 1; i < lines.length; ++i)
{
if (lines[i].trim() != '') { ret.push(((parseFloat(lines[i]) / 10) - 273.15).toFixed(2)); }
try {
ret = require('win-wmi').query('ROOT\\WMI', 'SELECT CurrentTemperature,InstanceName FROM MSAcpi_ThermalZoneTemperature',['CurrentTemperature','InstanceName']);
if (ret[0]) {
for (var i = 0; i < ret.length; ++i) {
ret[i]['CurrentTemperature'] = ((parseFloat(ret[i]['CurrentTemperature']) / 10) - 273.15).toFixed(2);
}
}
}
} catch (ex) { }
return (ret);
}
@ -285,16 +280,10 @@ function macos_thermals()
return (ret);
}
switch(process.platform)
{
case 'linux':
module.exports = { cpuUtilization: linux_cpuUtilization, memUtilization: linux_memUtilization, thermals: linux_thermals };
break;
case 'win32':
module.exports = { cpuUtilization: windows_cpuUtilization, memUtilization: windows_memUtilization, thermals: windows_thermals };
break;
case 'darwin':
module.exports = { cpuUtilization: macos_cpuUtilization, memUtilization: macos_memUtilization, thermals: macos_thermals };
break;
}
const platformConfig = {
linux: { cpuUtilization: linux_cpuUtilization, memUtilization: linux_memUtilization, thermals: linux_thermals },
win32: { cpuUtilization: windows_cpuUtilization, memUtilization: windows_memUtilization, thermals: windows_thermals },
darwin: { cpuUtilization: macos_cpuUtilization, memUtilization: macos_memUtilization, thermals: macos_thermals }
};
module.exports = platformConfig[process.platform];

View File

@ -0,0 +1,902 @@
/*
Copyright 2019-2021 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
function trimIdentifiers(val)
{
for(var v in val)
{
if (!val[v] || val[v] == 'None' || val[v] == '') { delete val[v]; }
}
}
function trimResults(val)
{
var i, x;
for (i = 0; i < val.length; ++i)
{
for (x in val[i])
{
if (x.startsWith('_'))
{
delete val[i][x];
}
else
{
if (val[i][x] == null || val[i][x] == 0)
{
delete val[i][x];
}
}
}
}
}
function brief(headers, obj)
{
var i, x;
for (x = 0; x < obj.length; ++x)
{
for (i in obj[x])
{
if (!headers.includes(i))
{
delete obj[x][i];
}
}
}
return (obj);
}
function dataHandler(c)
{
this.str += c.toString();
}
function linux_identifiers()
{
var identifiers = {};
var ret = {};
var values = {};
if (!require('fs').existsSync('/sys/class/dmi/id')) {
if (require('fs').existsSync('/sys/firmware/devicetree/base/model')) {
if (require('fs').readFileSync('/sys/firmware/devicetree/base/model').toString().trim().startsWith('Raspberry')) {
identifiers['board_vendor'] = 'Raspberry Pi';
identifiers['board_name'] = require('fs').readFileSync('/sys/firmware/devicetree/base/model').toString().trim();
identifiers['board_serial'] = require('fs').readFileSync('/sys/firmware/devicetree/base/serial-number').toString().trim();
const memorySlots = [];
var child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', dataHandler);
child.stdin.write('vcgencmd get_mem arm && vcgencmd get_mem gpu\nexit\n');
child.waitExit();
try {
const lines = child.stdout.str.trim().split('\n');
if (lines.length == 2) {
memorySlots.push({ Locator: "ARM Memory", Size: lines[0].split('=')[1].trim() })
memorySlots.push({ Locator: "GPU Memory", Size: lines[1].split('=')[1].trim() })
ret.memory = { Memory_Device: memorySlots };
}
} catch (xx) { }
} else {
throw('Unknown board');
}
} else {
throw ('this platform does not have DMI statistics');
}
} else {
var entries = require('fs').readdirSync('/sys/class/dmi/id');
for (var i in entries) {
if (require('fs').statSync('/sys/class/dmi/id/' + entries[i]).isFile()) {
try {
ret[entries[i]] = require('fs').readFileSync('/sys/class/dmi/id/' + entries[i]).toString().trim();
} catch(z) { }
if (ret[entries[i]] == 'None') { delete ret[entries[i]]; }
}
}
entries = null;
identifiers['bios_date'] = ret['bios_date'];
identifiers['bios_vendor'] = ret['bios_vendor'];
identifiers['bios_version'] = ret['bios_version'];
identifiers['bios_serial'] = ret['product_serial'];
identifiers['board_name'] = ret['board_name'];
identifiers['board_serial'] = ret['board_serial'];
identifiers['board_vendor'] = ret['board_vendor'];
identifiers['board_version'] = ret['board_version'];
identifiers['product_uuid'] = ret['product_uuid'];
identifiers['product_name'] = ret['product_name'];
}
try {
identifiers['bios_mode'] = (require('fs').statSync('/sys/firmware/efi').isDirectory() ? 'UEFI': 'Legacy');
} catch (ex) { identifiers['bios_mode'] = 'Legacy'; }
var child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', dataHandler);
child.stdin.write('cat /proc/cpuinfo | grep -i "model name" | ' + "tr '\\n' ':' | awk -F: '{ print $2 }'\nexit\n");
child.waitExit();
identifiers['cpu_name'] = child.stdout.str.trim();
if (identifiers['cpu_name'] == "") { // CPU BLANK, check lscpu instead
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', dataHandler);
child.stdin.write('lscpu | grep -i "model name" | ' + "tr '\\n' ':' | awk -F: '{ print $2 }'\nexit\n");
child.waitExit();
identifiers['cpu_name'] = child.stdout.str.trim();
}
child = null;
// Fetch GPU info
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', dataHandler);
child.stdin.write("lspci | grep ' VGA ' | tr '\\n' '`' | awk '{ a=split($0,lines" + ',"`"); printf "["; for(i=1;i<a;++i) { split(lines[i],gpu,"r: "); printf "%s\\"%s\\"", (i==1?"":","),gpu[2]; } printf "]"; }\'\nexit\n');
child.waitExit();
try { identifiers['gpu_name'] = JSON.parse(child.stdout.str.trim()); } catch (xx) { }
child = null;
// Fetch Storage Info
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', dataHandler);
child.stdin.write("lshw -class disk -disable network | tr '\\n' '`' | awk '" + '{ len=split($0,lines,"*"); printf "["; for(i=2;i<=len;++i) { model=""; caption=""; size=""; clen=split(lines[i],item,"`"); for(j=2;j<clen;++j) { split(item[j],tokens,":"); split(tokens[1],key," "); if(key[1]=="description") { caption=substr(tokens[2],2); } if(key[1]=="product") { model=substr(tokens[2],2); } if(key[1]=="size") { size=substr(tokens[2],2); } } if(model=="") { model=caption; } if(caption!="" || model!="") { printf "%s{\\"Caption\\":\\"%s\\",\\"Model\\":\\"%s\\",\\"Size\\":\\"%s\\"}",(i==2?"":","),caption,model,size; } } printf "]"; }\'\nexit\n');
child.waitExit();
try { identifiers['storage_devices'] = JSON.parse(child.stdout.str.trim()); } catch (xx) { }
child = null;
// Fetch storage volumes using df
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', dataHandler);
child.stdin.write('df -T | awk \'NR==1 || $1 ~ ".+"{print $3, $4, $5, $7, $2}\' | awk \'NR>1 {printf "{\\"size\\":\\"%s\\",\\"used\\":\\"%s\\",\\"available\\":\\"%s\\",\\"mount_point\\":\\"%s\\",\\"type\\":\\"%s\\"},", $1, $2, $3, $4, $5}\' | sed \'$ s/,$//\' | awk \'BEGIN {printf "["} {printf "%s", $0} END {printf "]"}\'\nexit\n');
child.waitExit();
try { ret.volumes = JSON.parse(child.stdout.str.trim()); } catch (xx) { }
child = null;
values.identifiers = identifiers;
values.linux = ret;
trimIdentifiers(values.identifiers);
var dmidecode = require('lib-finder').findBinary('dmidecode');
if (dmidecode != null)
{
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', dataHandler);
child.stderr.str = ''; child.stderr.on('data', dataHandler);
child.stdin.write(dmidecode + " -t memory | tr '\\n' '`' | ");
child.stdin.write(" awk '{ ");
child.stdin.write(' printf("[");');
child.stdin.write(' comma="";');
child.stdin.write(' c=split($0, lines, "``");');
child.stdin.write(' for(i=1;i<=c;++i)');
child.stdin.write(' {');
child.stdin.write(' d=split(lines[i], val, "`");');
child.stdin.write(' split(val[1], tokens, ",");');
child.stdin.write(' split(tokens[2], dmitype, " ");');
child.stdin.write(' dmi = dmitype[3]+0; ');
child.stdin.write(' if(dmi == 5 || dmi == 6 || dmi == 16 || dmi == 17)');
child.stdin.write(' {');
child.stdin.write(' ccx="";');
child.stdin.write(' printf("%s{\\"%s\\": {", comma, val[2]);');
child.stdin.write(' for(j=3;j<d;++j)');
child.stdin.write(' {');
child.stdin.write(' sub(/^[ \\t]*/,"",val[j]);');
child.stdin.write(' if(split(val[j],tmp,":")>1)');
child.stdin.write(' {');
child.stdin.write(' sub(/^[ \\t]*/,"",tmp[2]);');
child.stdin.write(' gsub(/ /,"",tmp[1]);');
child.stdin.write(' printf("%s\\"%s\\": \\"%s\\"", ccx, tmp[1], tmp[2]);');
child.stdin.write(' ccx=",";');
child.stdin.write(' }');
child.stdin.write(' }');
child.stdin.write(' printf("}}");');
child.stdin.write(' comma=",";');
child.stdin.write(' }');
child.stdin.write(' }');
child.stdin.write(' printf("]");');
child.stdin.write("}'\nexit\n");
child.waitExit();
try
{
var j = JSON.parse(child.stdout.str);
var i, key, key2;
for (i = 0; i < j.length; ++i)
{
for (key in j[i])
{
delete j[i][key]['ArrayHandle'];
delete j[i][key]['ErrorInformationHandle'];
for (key2 in j[i][key])
{
if (j[i][key][key2] == 'Unknown' || j[i][key][key2] == 'Not Specified' || j[i][key][key2] == '')
{
delete j[i][key][key2];
}
}
}
}
if(j.length > 0){
var mem = {};
for (i = 0; i < j.length; ++i)
{
for (key in j[i])
{
if (mem[key] == null) { mem[key] = []; }
mem[key].push(j[i][key]);
}
}
values.linux.memory = mem;
}
}
catch (e)
{ }
child = null;
}
var usbdevices = require('lib-finder').findBinary('usb-devices');
if (usbdevices != null)
{
var child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', dataHandler);
child.stderr.str = ''; child.stderr.on('data', dataHandler);
child.stdin.write(usbdevices + " | tr '\\n' '`' | ");
child.stdin.write(" awk '");
child.stdin.write('{');
child.stdin.write(' comma="";');
child.stdin.write(' printf("[");');
child.stdin.write(' len=split($0, group, "``");');
child.stdin.write(' for(i=1;i<=len;++i)');
child.stdin.write(' {');
child.stdin.write(' comma2="";');
child.stdin.write(' xlen=split(group[i], line, "`");');
child.stdin.write(' scount=0;');
child.stdin.write(' for(x=1;x<xlen;++x)');
child.stdin.write(' {');
child.stdin.write(' if(line[x] ~ "^S:")');
child.stdin.write(' {');
child.stdin.write(' ++scount;');
child.stdin.write(' }');
child.stdin.write(' }');
child.stdin.write(' if(scount>0)');
child.stdin.write(' {');
child.stdin.write(' printf("%s{", comma); comma=",";');
child.stdin.write(' for(x=1;x<xlen;++x)');
child.stdin.write(' {');
child.stdin.write(' if(line[x] ~ "^T:")');
child.stdin.write(' {');
child.stdin.write(' comma3="";');
child.stdin.write(' printf("%s\\"hardware\\": {", comma2); comma2=",";');
child.stdin.write(' sub(/^T:[ \\t]*/, "", line[x]);');
child.stdin.write(' gsub(/= */, "=", line[x]);');
child.stdin.write(' blen=split(line[x], tokens, " ");');
child.stdin.write(' for(y=1;y<blen;++y)');
child.stdin.write(' {');
child.stdin.write(' match(tokens[y],/=/);');
child.stdin.write(' h=substr(tokens[y],1,RSTART-1);');
child.stdin.write(' v=substr(tokens[y],RSTART+1);');
child.stdin.write(' sub(/#/, "", h);');
child.stdin.write(' printf("%s\\"%s\\": \\"%s\\"", comma3, h, v); comma3=",";');
child.stdin.write(' }');
child.stdin.write(' printf("}");');
child.stdin.write(' }');
child.stdin.write(' if(line[x] ~ "^S:")');
child.stdin.write(' {');
child.stdin.write(' sub(/^S:[ \\t]*/, "", line[x]);');
child.stdin.write(' match(line[x], /=/);');
child.stdin.write(' h=substr(line[x],1,RSTART-1);');
child.stdin.write(' v=substr(line[x],RSTART+1);');
child.stdin.write(' printf("%s\\"%s\\": \\"%s\\"", comma2, h,v); comma2=",";');
child.stdin.write(' }');
child.stdin.write(' }');
child.stdin.write(' printf("}");');
child.stdin.write(' }');
child.stdin.write(' }');
child.stdin.write(' printf("]");');
child.stdin.write("}'\nexit\n");
child.waitExit();
try
{
values.linux.usb = JSON.parse(child.stdout.str);
}
catch(x)
{ }
child = null;
}
var pcidevices = require('lib-finder').findBinary('lspci');
if (pcidevices != null)
{
var child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', dataHandler);
child.stderr.str = ''; child.stderr.on('data', dataHandler);
child.stdin.write(pcidevices + " -m | tr '\\n' '`' | ");
child.stdin.write(" awk '");
child.stdin.write('{');
child.stdin.write(' printf("[");');
child.stdin.write(' comma="";');
child.stdin.write(' alen=split($0, lines, "`");');
child.stdin.write(' for(a=1;a<alen;++a)');
child.stdin.write(' {');
child.stdin.write(' match(lines[a], / /);');
child.stdin.write(' blen=split(lines[a], meta, "\\"");');
child.stdin.write(' bus=substr(lines[a], 1, RSTART);');
child.stdin.write(' gsub(/ /, "", bus);');
child.stdin.write(' printf("%s{\\"bus\\": \\"%s\\"", comma, bus); comma=",";');
child.stdin.write(' printf(", \\"device\\": \\"%s\\"", meta[2]);');
child.stdin.write(' printf(", \\"manufacturer\\": \\"%s\\"", meta[4]);');
child.stdin.write(' printf(", \\"description\\": \\"%s\\"", meta[6]);');
child.stdin.write(' if(meta[8] != "")');
child.stdin.write(' {');
child.stdin.write(' printf(", \\"subsystem\\": {");');
child.stdin.write(' printf("\\"manufacturer\\": \\"%s\\"", meta[8]);');
child.stdin.write(' printf(", \\"description\\": \\"%s\\"", meta[10]);');
child.stdin.write(' printf("}");');
child.stdin.write(' }');
child.stdin.write(' printf("}");');
child.stdin.write(' }');
child.stdin.write(' printf("]");');
child.stdin.write("}'\nexit\n");
child.waitExit();
try
{
values.linux.pci = JSON.parse(child.stdout.str);
}
catch (x)
{ }
child = null;
}
// Linux Last Boot Up Time
try {
child = require('child_process').execFile('/usr/bin/uptime', ['', '-s']); // must include blank value at begining for some reason?
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stderr.on('data', function () { });
child.waitExit();
var regex = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/;
if (regex.test(child.stdout.str.trim())) {
values.linux.LastBootUpTime = child.stdout.str.trim();
} else {
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('date -d "@$(( $(date +%s) - $(awk \'{print int($1)}\' /proc/uptime) ))" "+%Y-%m-%d %H:%M:%S"\nexit\n');
child.waitExit();
if (regex.test(child.stdout.str.trim())) {
values.linux.LastBootUpTime = child.stdout.str.trim();
}
}
child = null;
} catch (ex) { }
// Linux TPM
try {
if (require('fs').statSync('/sys/class/tpm/tpm0').isDirectory()){
values.tpm = {
SpecVersion: require('fs').readFileSync('/sys/class/tpm/tpm0/tpm_version_major').toString().trim()
}
}
} catch (ex) { }
return (values);
}
function windows_wmic_results(str)
{
var lines = str.trim().split('\r\n');
var keys = lines[0].split(',');
var i, key, keyval;
var tokens;
var result = [];
console.log('Lines: ' + lines.length, 'Keys: ' + keys.length);
for (i = 1; i < lines.length; ++i)
{
var obj = {};
console.log('i: ' + i);
tokens = lines[i].split(',');
for (key = 0; key < keys.length; ++key)
{
var tmp = Buffer.from(tokens[key], 'binary').toString();
console.log(tokens[key], tmp);
tokens[key] = tmp == null ? '' : tmp;
if (tokens[key].trim())
{
obj[keys[key].trim()] = tokens[key].trim();
}
}
delete obj.Node;
result.push(obj);
}
return (result);
}
function windows_identifiers()
{
var ret = { windows: {} };
var items, item, i;
ret['identifiers'] = {};
var values = require('win-wmi').query('ROOT\\CIMV2', "SELECT * FROM Win32_Bios", ['ReleaseDate', 'Manufacturer', 'SMBIOSBIOSVersion', 'SerialNumber']);
if(values[0]){
ret['identifiers']['bios_date'] = values[0]['ReleaseDate'];
ret['identifiers']['bios_vendor'] = values[0]['Manufacturer'];
ret['identifiers']['bios_version'] = values[0]['SMBIOSBIOSVersion'];
ret['identifiers']['bios_serial'] = values[0]['SerialNumber'];
}
ret['identifiers']['bios_mode'] = 'Legacy';
values = require('win-wmi').query('ROOT\\CIMV2', "SELECT * FROM Win32_BaseBoard", ['Product', 'SerialNumber', 'Manufacturer', 'Version']);
if(values[0]){
ret['identifiers']['board_name'] = values[0]['Product'];
ret['identifiers']['board_serial'] = values[0]['SerialNumber'];
ret['identifiers']['board_vendor'] = values[0]['Manufacturer'];
ret['identifiers']['board_version'] = values[0]['Version'];
}
values = require('win-wmi').query('ROOT\\CIMV2', "SELECT * FROM Win32_ComputerSystemProduct", ['UUID', 'Name']);
if(values[0]){
ret['identifiers']['product_uuid'] = values[0]['UUID'];
ret['identifiers']['product_name'] = values[0]['Name'];
trimIdentifiers(ret.identifiers);
}
values = require('win-wmi').query('ROOT\\CIMV2', "SELECT * FROM Win32_PhysicalMemory");
if(values[0]){
trimResults(values);
ret.windows.memory = values;
}
values = require('win-wmi').query('ROOT\\CIMV2', "SELECT * FROM Win32_OperatingSystem");
if(values[0]){
trimResults(values);
ret.windows.osinfo = values[0];
}
values = require('win-wmi').query('ROOT\\CIMV2', "SELECT * FROM Win32_DiskPartition");
if(values[0]){
trimResults(values);
ret.windows.partitions = values;
for (var i in values) {
if (values[i].Description=='GPT: System') {
ret['identifiers']['bios_mode'] = 'UEFI';
}
}
}
values = require('win-wmi').query('ROOT\\CIMV2', "SELECT * FROM Win32_Processor", ['Caption', 'DeviceID', 'Manufacturer', 'MaxClockSpeed', 'Name', 'SocketDesignation']);
if(values[0]){
ret.windows.cpu = values;
}
values = require('win-wmi').query('ROOT\\CIMV2', "SELECT * FROM Win32_VideoController", ['Name', 'CurrentHorizontalResolution', 'CurrentVerticalResolution']);
if(values[0]){
ret.windows.gpu = values;
}
values = require('win-wmi').query('ROOT\\CIMV2', "SELECT * FROM Win32_DiskDrive", ['Caption', 'DeviceID', 'Model', 'Partitions', 'Size', 'Status']);
if(values[0]){
ret.windows.drives = values;
}
// Insert GPU names
ret.identifiers.gpu_name = [];
for (var gpuinfo in ret.windows.gpu)
{
if (ret.windows.gpu[gpuinfo].Name) { ret.identifiers.gpu_name.push(ret.windows.gpu[gpuinfo].Name); }
}
// Insert Storage Devices
ret.identifiers.storage_devices = [];
for (var dv in ret.windows.drives)
{
ret.identifiers.storage_devices.push({ Caption: ret.windows.drives[dv].Caption, Model: ret.windows.drives[dv].Model, Size: ret.windows.drives[dv].Size });
}
try { ret.identifiers.cpu_name = ret.windows.cpu[0].Name; } catch (x) { }
// Windows TPM
IntToStr = function (v) { return String.fromCharCode((v >> 24) & 0xFF, (v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF); };
try {
values = require('win-wmi').query('ROOT\\CIMV2\\Security\\MicrosoftTpm', "SELECT * FROM Win32_Tpm", ['IsActivated_InitialValue','IsEnabled_InitialValue','IsOwned_InitialValue','ManufacturerId','ManufacturerVersion','SpecVersion']);
if(values[0]) {
ret.tpm = {
SpecVersion: values[0].SpecVersion.split(",")[0],
ManufacturerId: IntToStr(values[0].ManufacturerId).replace(/[^\x00-\x7F]/g, ""),
ManufacturerVersion: values[0].ManufacturerVersion,
IsActivated: values[0].IsActivated_InitialValue,
IsEnabled: values[0].IsEnabled_InitialValue,
IsOwned: values[0].IsOwned_InitialValue,
}
}
} catch (ex) { }
return (ret);
}
function macos_identifiers()
{
var ret = { identifiers: {}, darwin: {} };
var child;
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('ioreg -d2 -c IOPlatformExpertDevice | grep board-id | awk -F= \'{ split($2, res, "\\""); print res[2]; }\'\nexit\n');
child.waitExit();
ret.identifiers.board_name = child.stdout.str.trim();
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('ioreg -d2 -c IOPlatformExpertDevice | grep IOPlatformSerialNumber | awk -F= \'{ split($2, res, "\\""); print res[2]; }\'\nexit\n');
child.waitExit();
ret.identifiers.board_serial = child.stdout.str.trim();
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('ioreg -d2 -c IOPlatformExpertDevice | grep manufacturer | awk -F= \'{ split($2, res, "\\""); print res[2]; }\'\nexit\n');
child.waitExit();
ret.identifiers.board_vendor = child.stdout.str.trim();
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('ioreg -d2 -c IOPlatformExpertDevice | grep version | awk -F= \'{ split($2, res, "\\""); print res[2]; }\'\nexit\n');
child.waitExit();
ret.identifiers.board_version = child.stdout.str.trim();
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('ioreg -d2 -c IOPlatformExpertDevice | grep IOPlatformUUID | awk -F= \'{ split($2, res, "\\""); print res[2]; }\'\nexit\n');
child.waitExit();
ret.identifiers.product_uuid = child.stdout.str.trim();
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('sysctl -n machdep.cpu.brand_string\nexit\n');
child.waitExit();
ret.identifiers.cpu_name = child.stdout.str.trim();
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('system_profiler SPMemoryDataType\nexit\n');
child.waitExit();
var lines = child.stdout.str.trim().split('\n');
if(lines.length > 0) {
const memorySlots = [];
if(lines[2].trim().includes('Memory Slots:')) { // OLD MACS WITH SLOTS
var memorySlots1 = child.stdout.str.split(/\n{2,}/).slice(3);
memorySlots1.forEach(function(slot,index) {
var lines = slot.split('\n');
if(lines.length == 1){ // start here
if(lines[0].trim()!=''){
var slotObj = { DeviceLocator: lines[0].trim().replace(/:$/, '') }; // Initialize name as an empty string
var nextline = memorySlots1[index+1].split('\n');
nextline.forEach(function(line) {
if (line.trim() !== '') {
var parts = line.split(':');
var key = parts[0].trim();
var value = parts[1].trim();
value = (key == 'Part Number' || key == 'Manufacturer') ? hexToAscii(parts[1].trim()) : parts[1].trim();
slotObj[key.replace(' ','')] = value; // Store attribute in the slot object
}
});
memorySlots.push(slotObj);
}
}
});
} else { // NEW MACS WITHOUT SLOTS
memorySlots.push({ DeviceLocator: "Onboard Memory", Size: lines[2].split(":")[1].trim(), PartNumber: lines[3].split(":")[1].trim(), Manufacturer: lines[4].split(":")[1].trim() })
}
ret.darwin.memory = memorySlots;
}
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('diskutil info -all\nexit\n');
child.waitExit();
var sections = child.stdout.str.split('**********\n');
if(sections.length > 0){
var devices = [];
for (var i = 0; i < sections.length; i++) {
var lines = sections[i].split('\n');
var deviceInfo = {};
var wholeYes = false;
var physicalYes = false;
var oldmac = false;
for (var j = 0; j < lines.length; j++) {
var keyValue = lines[j].split(':');
var key = keyValue[0].trim();
var value = keyValue[1] ? keyValue[1].trim() : '';
if (key === 'Virtual') oldmac = true;
if (key === 'Whole' && value === 'Yes') wholeYes = true;
if (key === 'Virtual' && value === 'No') physicalYes = true;
if(value && key === 'Device / Media Name'){
deviceInfo['Caption'] = value;
}
if(value && key === 'Disk Size'){
deviceInfo['Size'] = value.split(' ')[0] + ' ' + value.split(' ')[1];
}
}
if (wholeYes) {
if (oldmac) {
if (physicalYes) devices.push(deviceInfo);
} else {
devices.push(deviceInfo);
}
}
}
ret.identifiers.storage_devices = devices;
}
// Fetch storage volumes using df
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', dataHandler);
child.stdin.write('df -aHY | awk \'NR>1 {printf "{\\"size\\":\\"%s\\",\\"used\\":\\"%s\\",\\"available\\":\\"%s\\",\\"mount_point\\":\\"%s\\",\\"type\\":\\"%s\\"},", $3, $4, $5, $10, $2}\' | sed \'$ s/,$//\' | awk \'BEGIN {printf "["} {printf "%s", $0} END {printf "]"}\'\nexit\n');
child.waitExit();
try {
ret.darwin.volumes = JSON.parse(child.stdout.str.trim());
for (var index = 0; index < ret.darwin.volumes.length; index++) {
if (ret.darwin.volumes[index].type == 'auto_home'){
ret.darwin.volumes.splice(index,1);
}
}
if (ret.darwin.volumes.length == 0) { // not sonima OS so dont show type for now
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', dataHandler);
child.stdin.write('df -aH | awk \'NR>1 {printf "{\\"size\\":\\"%s\\",\\"used\\":\\"%s\\",\\"available\\":\\"%s\\",\\"mount_point\\":\\"%s\\"},", $2, $3, $4, $9}\' | sed \'$ s/,$//\' | awk \'BEGIN {printf "["} {printf "%s", $0} END {printf "]"}\'\nexit\n');
child.waitExit();
try {
ret.darwin.volumes = JSON.parse(child.stdout.str.trim());
for (var index = 0; index < ret.darwin.volumes.length; index++) {
if (ret.darwin.volumes[index].size == 'auto_home'){
ret.darwin.volumes.splice(index,1);
}
}
} catch (xx) { }
}
} catch (xx) { }
child = null;
// MacOS Last Boot Up Time
try {
child = require('child_process').execFile('/usr/sbin/sysctl', ['', 'kern.boottime']); // must include blank value at begining for some reason?
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stderr.on('data', function () { });
child.waitExit();
const timestampMatch = /\{ sec = (\d+), usec = \d+ \}/.exec(child.stdout.str.trim());
if (!ret.darwin) {
ret.darwin = { LastBootUpTime: parseInt(timestampMatch[1]) };
} else {
ret.darwin.LastBootUpTime = parseInt(timestampMatch[1]);
}
child = null;
} catch (ex) { }
trimIdentifiers(ret.identifiers);
child = null;
return (ret);
}
function hexToAscii(hexString) {
if(!hexString.startsWith('0x')) return hexString.trim();
hexString = hexString.startsWith('0x') ? hexString.slice(2) : hexString;
var str = '';
for (var i = 0; i < hexString.length; i += 2) {
var hexPair = hexString.substr(i, 2);
str += String.fromCharCode(parseInt(hexPair, 16));
}
str = str.replace(/[\u007F-\uFFFF]/g, ''); // Remove characters from 0x0080 to 0xFFFF
return str.trim();
}
function win_chassisType()
{
// needs to be replaced with win-wmi but due to bug in win-wmi it doesnt handle arrays correctly
var child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['powershell', '-noprofile', '-nologo', '-command', '-'], {});
if (child == null) { return ([]); }
child.descriptorMetadata = 'process-manager';
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('Get-WmiObject Win32_SystemEnclosure | Select-Object -ExpandProperty ChassisTypes\r\n');
child.stdin.write('exit\r\n');
child.waitExit();
try {
return (parseInt(child.stdout.str));
} catch (e) {
return (2); // unknown
}
}
function win_systemType()
{
try {
var tokens = require('win-wmi').query('ROOT\\CIMV2', 'SELECT PCSystemType FROM Win32_ComputerSystem', ['PCSystemType']);
if (tokens[0]) {
return (parseInt(tokens[0]['PCSystemType']));
} else {
return (parseInt(1)); // default is desktop
}
} catch (ex) {
return (parseInt(1)); // default is desktop
}
}
function win_formFactor(chassistype)
{
var ret = 'DESKTOP';
switch (chassistype)
{
case 11: // Handheld
case 30: // Tablet
case 31: // Convertible
case 32: // Detachable
ret = 'TABLET';
break;
case 9: // Laptop
case 10: // Notebook
case 14: // Sub Notebook
ret = 'LAPTOP';
break;
default:
ret = win_systemType() == 2 ? 'MOBILE' : 'DESKTOP';
break;
}
return (ret);
}
switch(process.platform)
{
case 'linux':
module.exports = { _ObjectID: 'identifiers', get: linux_identifiers };
break;
case 'win32':
module.exports = { _ObjectID: 'identifiers', get: windows_identifiers, chassisType: win_chassisType, formFactor: win_formFactor, systemType: win_systemType };
break;
case 'darwin':
module.exports = { _ObjectID: 'identifiers', get: macos_identifiers };
break;
default:
module.exports = { get: function () { throw ('Unsupported Platform'); } };
break;
}
module.exports.isDocker = function isDocker()
{
if (process.platform != 'linux') { return (false); }
var child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write("cat /proc/self/cgroup | tr '\n' '`' | awk -F'`' '{ split($1, res, " + '"/"); if(res[2]=="docker"){print "1";} }\'\nexit\n');
child.waitExit();
return (child.stdout.str != '');
};
module.exports.isBatteryPowered = function isBatteryOperated()
{
var ret = false;
switch(process.platform)
{
default:
break;
case 'linux':
var devices = require('fs').readdirSync('/sys/class/power_supply');
for (var i in devices)
{
if (require('fs').readFileSync('/sys/class/power_supply/' + devices[i] + '/type').toString().trim() == 'Battery')
{
ret = true;
break;
}
}
break;
case 'win32':
var GM = require('_GenericMarshal');
var stats = GM.CreateVariable(12);
var kernel32 = GM.CreateNativeProxy('Kernel32.dll');
kernel32.CreateMethod('GetSystemPowerStatus');
if (kernel32.GetSystemPowerStatus(stats).Val != 0)
{
if(stats.toBuffer()[1] != 128 && stats.toBuffer()[1] != 255)
{
ret = true;
}
else
{
// No Battery detected, so lets check if there is supposed to be one
var formFactor = win_formFactor(win_chassisType());
return (formFactor == 'LAPTOP' || formFactor == 'TABLET' || formFactor == 'MOBILE');
}
}
break;
case 'darwin':
var child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function(c){ this.str += c.toString(); });
child.stderr.str = ''; child.stderr.on('data', function(c){ this.str += c.toString(); });
child.stdin.write("pmset -g batt | tr '\\n' '`' | awk -F'`' '{ if(NF>2) { print \"true\"; }}'\nexit\n");
child.waitExit();
if(child.stdout.str.trim() != '') { ret = true; }
break;
}
return (ret);
};
module.exports.isVM = function isVM()
{
var ret = false;
var id = this.get();
if (id.linux && id.linux.sys_vendor)
{
switch (id.linux.sys_vendor)
{
case 'VMware, Inc.':
case 'QEMU':
case 'Xen':
ret = true;
break;
default:
break;
}
}
if (id.identifiers.bios_vendor)
{
switch(id.identifiers.bios_vendor)
{
case 'VMware, Inc.':
case 'Xen':
case 'SeaBIOS':
case 'EFI Development Kit II / OVMF':
case 'Proxmox distribution of EDK II':
ret = true;
break;
default:
break;
}
}
if (id.identifiers.board_vendor && id.identifiers.board_vendor == 'VMware, Inc.') { ret = true; }
if (id.identifiers.board_name)
{
switch (id.identifiers.board_name)
{
case 'VirtualBox':
case 'Virtual Machine':
ret = true;
break;
default:
break;
}
}
if (process.platform == 'win32' && !ret)
{
for(var i in id.identifiers.gpu_name)
{
if(id.identifiers.gpu_name[i].startsWith('VMware '))
{
ret = true;
break;
}
}
}
if (!ret) { ret = this.isDocker(); }
return (ret);
};
// bios_date = BIOS->ReleaseDate
// bios_vendor = BIOS->Manufacturer
// bios_version = BIOS->SMBIOSBIOSVersion
// board_name = BASEBOARD->Product = ioreg/board-id
// board_serial = BASEBOARD->SerialNumber = ioreg/serial-number | ioreg/IOPlatformSerialNumber
// board_vendor = BASEBOARD->Manufacturer = ioreg/manufacturer
// board_version = BASEBOARD->Version

View File

@ -135,12 +135,12 @@
"allow": "Permitir",
"deny": "Negar",
"autoAllowForFive": "Aceita automaticamente todas as conexões pelos próximos 5 minutos",
"terminalConsent": "{0} solicitando acesso ao terminal remoto. Garantir acesso?",
"desktopConsent": "{0} solicitando acesso à área de trabalho remota. Garantir acesso?",
"fileConsent": "{0} solicitando acesso remoto ao arquivo. Garantir acesso?",
"terminalConsent": "{0} está a pedir acesso ao terminal remoto. Conceder acesso?",
"desktopConsent": "{0} está a pedir acesso à área de trabalho remota. Conceder acesso?",
"fileConsent": "{0} está a pedir acesso remoto aos ficheiros. Conceder acesso?",
"terminalNotify": "{0} iniciou uma sessão de terminal remoto.",
"desktopNotify": "{0} iniciou uma sessão de área de trabalho remota.",
"fileNotify": "{0} iniciou uma sessão de arquivo remoto.",
"fileNotify": "{0} iniciou uma sessão de ficheiro remoto.",
"privacyBar": "Compartilhando área de trabalho com: {0}"
},
"ru": {
@ -250,5 +250,41 @@
"desktopNotify": "{0} je započeo sesiju udaljene radne površine.",
"fileNotify": "{0} je započeo sesiju udaljenog fajla.",
"privacyBar": "Dijeljenje radne površine sa: {0}"
},
"hu": {
"allow": "Engedélyezés",
"deny": "Elutasítás",
"autoAllowForFive": "Csatlakozások automatikus elfogadása a következő 5 percben",
"terminalConsent": "{0} távoli parancssor,terminál hozzáférést kér. Engedélyezi a hozzáférést?",
"desktopConsent": "{0} távoli asztali hozzáférést kér. Engedélyezi a hozzáférést?",
"fileConsent": "{0} távoli fájlhozzáférést kér. Engedélyezi a hozzáférést?",
"terminalNotify": "{0} távoli parancssor munkamenetet indított.",
"desktopNotify": "{0} távoli asztali munkamenetet indított.",
"fileNotify": "{0} távoli fájlmunkamenetet indított.",
"privacyBar": "Asztal megosztás aktív: {0} felhasználóval"
},
"ca": {
"allow": "Permetre",
"deny": "Negar",
"autoAllowForFive": "Accepta automàticament totes les connexions durant els propers 5 minuts",
"terminalConsent": "{0} sol·licitant accés al terminal remot. Accés garantit?",
"desktopConsent": "{0} sol·licitant accés a l'escriptori remot. Accés garantit?",
"fileConsent": "{0} sol·licitant accés remot al fitxer. Accés garantit?",
"terminalNotify": "{0} va iniciar una sessió de terminal remota.",
"desktopNotify": "{0} va iniciar una sessió d'escriptori remot.",
"fileNotify": "{0} va iniciar una sessió de fitxer remota.",
"privacyBar": "Compartint escriptori amb: {0}"
},
"uk": {
"allow": "Дозволити",
"deny": "Відмовити",
"autoAllowForFive": "Автоматично підтверджувати всі підключення впродовж наступних 5 хвилин",
"terminalConsent": "{0} запитує дозвіл на віддалене використання вашого терміналу (командного рядка). Надати доступ?",
"desktopConsent": "{0} запитує дозвіл на віддалений доступ до робочого столу. Надати доступ?",
"fileConsent": "{0} запитує дозвіл на віддалене управління файлами. Надати доступ?",
"terminalNotify": "{0} почав віддалено використовувати ваш термінал (командний рядок).",
"desktopNotify": "{0} розпочав сеанс віддаленого робочого столу.",
"fileNotify": "{0} почав віддалене управління вашими файлами.",
"privacyBar": "Ви ділитесь робочим столом з: {0}"
}
}

View File

@ -159,7 +159,7 @@ function linux_memUtilization()
case 'MemTotal:':
ret.total = parseInt(tokens[tokens.length - 2]);
break;
case 'MemFree:':
case 'MemAvailable:':
ret.free = parseInt(tokens[tokens.length - 2]);
break;
}
@ -209,9 +209,13 @@ function macos_memUtilization()
{
var usage = lines[0].split(':')[1];
var bdown = usage.split(',');
mem.MemTotal = parseInt(bdown[0].trim().split(' ')[0]);
mem.MemFree = parseInt(bdown[1].trim().split(' ')[0]);
if (bdown.length > 2){ // new style - PhysMem: 5750M used (1130M wired, 634M compressor), 1918M unused.
mem.MemFree = parseInt(bdown[2].trim().split(' ')[0]);
} else { // old style - PhysMem: 6683M used (1606M wired), 9699M unused.
mem.MemFree = parseInt(bdown[1].trim().split(' ')[0]);
}
mem.MemUsed = parseInt(bdown[0].trim().split(' ')[0]);
mem.MemTotal = (mem.MemFree + mem.MemUsed);
mem.percentFree = ((mem.MemFree / mem.MemTotal) * 100);//.toFixed(2);
mem.percentConsumed = (((mem.MemTotal - mem.MemFree) / mem.MemTotal) * 100);//.toFixed(2);
return (mem);
@ -225,31 +229,48 @@ function macos_memUtilization()
function windows_thermals()
{
var ret = [];
child = require('child_process').execFile(process.env['windir'] + '\\System32\\wbem\\wmic.exe', ['wmic', '/namespace:\\\\root\\wmi', 'PATH', 'MSAcpi_ThermalZoneTemperature', 'get', 'CurrentTemperature']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); });
child.waitExit();
if(child.stdout.str.trim!='')
{
var lines = child.stdout.str.trim().split('\r\n');
for (var i = 1; i < lines.length; ++i)
{
if (lines[i].trim() != '') { ret.push(((parseFloat(lines[i]) / 10) - 273.15).toFixed(2)); }
try {
ret = require('win-wmi').query('ROOT\\WMI', 'SELECT CurrentTemperature,InstanceName FROM MSAcpi_ThermalZoneTemperature',['CurrentTemperature','InstanceName']);
if (ret[0]) {
for (var i = 0; i < ret.length; ++i) {
ret[i]['CurrentTemperature'] = ((parseFloat(ret[i]['CurrentTemperature']) / 10) - 273.15).toFixed(2);
}
}
}
} catch (ex) { }
return (ret);
}
function linux_thermals()
{
var ret = [];
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); });
child.stdin.write("cat /sys/class/thermal/thermal_zone*/temp | awk '{ print $0 / 1000 }'\nexit\n");
child.stdin.write("for folder in /sys/class/thermal/thermal_zone*/; do [ -e \"$folder/temp\" ] && echo \"$(cat \"$folder/temp\"),$(cat \"$folder/type\")\"; done\nexit\n");
child.waitExit();
var ret = child.stdout.str.trim().split('\n');
if (ret.length == 1 && ret[0] == '') { ret = []; }
if(child.stdout.str.trim()!='')
{
var lines = child.stdout.str.trim().split('\n');
for (var i = 0; i < lines.length; ++i)
{
var line = lines[i].trim().split(',');
ret.push({CurrentTemperature: (parseFloat(line[0])/1000), InstanceName: line[1]});
}
}
child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); });
child.stdin.write("for mon in /sys/class/hwmon/hwmon*; do for label in \"$mon\"/temp*_label; do if [ -f $label ]; then echo $(cat \"$label\")___$(cat \"${label%_*}_input\"); fi; done; done;\nexit\n");
child.waitExit();
if(child.stdout.str.trim()!='')
{
var lines = child.stdout.str.trim().split('\n');
for (var i = 0; i < lines.length; ++i)
{
var line = lines[i].trim().split('___');
ret.push({ CurrentTemperature: (parseFloat(line[1])/1000), InstanceName: line[0] });
}
}
return (ret);
}
@ -261,7 +282,6 @@ function macos_thermals()
child.stderr.on('data', function () { });
child.stdin.write('powermetrics --help | grep SMC\nexit\n');
child.waitExit();
if (child.stdout.str.trim() != '')
{
child = require('child_process').execFile('/bin/sh', ['sh']);
@ -273,14 +293,19 @@ function macos_thermals()
{
if (tokens[i].split(' die temperature: ').length > 1)
{
ret.push(tokens[i].split(' ')[3]);
ret.push({CurrentTemperature: tokens[i].split(' ')[3], InstanceName: tokens[i].split(' ')[0]});
this.parent.kill();
}
}
});
child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('powermetrics -s smc\n');
child.waitExit(5000);
child.stderr.on('data', function (c) {
if (c.toString().split('unable to get smc values').length > 1) { // error getting sensors so just kill
this.parent.kill();
return;
}
});
child.stdin.write('powermetrics -s smc -i 500 -n 1\n');
child.waitExit(2000);
}
return (ret);
}

View File

@ -0,0 +1,194 @@
/*
Copyright 2022 Intel Corporation
@author Bryan Roe
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
//
// win-deskutils is a utility module that exposes various desktop related features for Windows
// such as MouseTrails Accessability and Windows Desktop Background
//
//
// MSDN documention for the system call this module relies on can be found at:
// https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-systemparametersinfoa
//
var SPI_GETDESKWALLPAPER = 0x0073;
var SPI_SETDESKWALLPAPER = 0x0014;
var SPI_GETMOUSETRAILS = 0x005E;
var SPI_SETMOUSETRAILS = 0x005D;
var GM = require('_GenericMarshal');
var user32 = GM.CreateNativeProxy('user32.dll');
user32.CreateMethod('SystemParametersInfoA');
//
// This function is a helper method to dispatch method calls to different user sessions
//
function sessionDispatch(tsid, parent, method, args)
{
//
// Check to see if the process owner of the current processor is root
//
var sid = undefined;
var stype = require('user-sessions').getProcessOwnerName(process.pid).tsid == 0 ? 1 : 0;
/*
The following is the list of possible values for stype.
If the current process owner is root, we set the stype to user,
because we cannot set/get any properties from this user, we
must switch to a user session.. Default behavior for stype(1)
is that it will context switch to the logged in user. If
this is not intended, then an actual user TSID must be specified, using
ILibProcessPipe_SpawnTypes_SPECIFIED_USER and the actual TSID
------------------------------------------------------------------------
ILibProcessPipe_SpawnTypes_DEFAULT = 0,
ILibProcessPipe_SpawnTypes_USER = 1,
ILibProcessPipe_SpawnTypes_WINLOGON = 2,
ILibProcessPipe_SpawnTypes_TERM = 3,
ILibProcessPipe_SpawnTypes_DETACHED = 4,
ILibProcessPipe_SpawnTypes_SPECIFIED_USER = 5,
ILibProcessPipe_SpawnTypes_POSIX_DETACHED = 0x8000
------------------------------------------------------------------------
*/
console.log('stype: ' + stype);
if (stype == 1)
{
if (tsid == null && require('MeshAgent')._tsid != null)
{
stype = 5; // ILibProcessPipe_SpawnTypes_SPECIFIED_USER
sid = require('MeshAgent')._tsid; // If this is set, it was set via user selection UI
}
else
{
sid = tsid; // Set the SID to be whatever was passed in
}
}
// Spawn a child process in the appropriate user session, and relay the response back via stdout
var mod = Buffer.from(getJSModule('win-deskutils')).toString('base64');
var prog = "try { addModule('win-deskutils', process.env['win_deskutils']);} catch (x) { } var x;try{x=require('win-deskutils').dispatch('" + parent + "', '" + method + "', " + JSON.stringify(args) + ");console.log(x);}catch(z){console.log(z);process.exit(1);}process.exit(0);";
var child = require('child_process').execFile(process.execPath, [process.execPath.split('\\').pop(), '-b64exec', Buffer.from(prog).toString('base64')], { type: stype, uid: sid, env: { win_deskutils: getJSModule('win-deskutils') } });
child.stdout.str = '';
child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stderr.on('data', function (c) { });
child.on('exit', function (c) { this.exitCode = c; });
child.waitExit();
if (child.exitCode == 0)
{
return (child.stdout.str.trim()); // If the return code was 0, then relay the response from stdout
}
else
{
throw (child.stdout.str.trim()); // If the return code was nonzero, then the stdout response is the exception that should be bubbled
}
}
//
// This function gets the path of the windows desktop background of the specified user desktop session
//
function background_get(tsid)
{
if (tsid != null || tsid === null) // TSID is not undefined or is explicitly null
{
// Need to disatch to different session first
return (sessionDispatch(tsid, 'background', 'get', []));
}
var v = GM.CreateVariable(1024);
var ret = user32.SystemParametersInfoA(SPI_GETDESKWALLPAPER, v._size, v, 0);
if (ret.Val == 0)
{
throw ('Error occured trying to fetch wallpaper');
}
return (v.String);
}
//
// This function sets the path for the windows desktop background of the specified user desktop session
//
function background_set(path, tsid)
{
if (tsid != null || tsid === null) // TSID is not undefined or is explicitly null
{
// Need to disatch to different session first
return (sessionDispatch(tsid, 'background', 'set', [path]));
}
var nb = GM.CreateVariable(path);
var ret = user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, nb._size, nb, 0);
if (ret.Val == 0)
{
throw ('Error occured trying to set wallpaper');
}
return;
}
//
// This is a helper function that is called by the child process from sessionDispatch()
//
function dispatch(parent, method, args)
{
try
{
return (this[parent][method].apply(this, args));
}
catch (e)
{
console.log('ERROR: ' + e);
throw ('Error occured trying to dispatch: ' + method);
}
}
//
// This function sets the mousetrail accessibility feature, for the specified user desktop session.
// Setting value 0 or one disables this feature
// Otherwise, value is the number of cursors to render for this feature
//
function mousetrails_set(value, tsid)
{
if (tsid != null || tsid === null) // TSID is not undefined or is explicitly null
{
// Need to disatch to different session first
return (sessionDispatch(tsid, 'mouse', 'setTrails', [value]));
}
var ret = user32.SystemParametersInfoA(SPI_SETMOUSETRAILS, value, 0, 0);
if (ret.Val == 0)
{
throw ('Error occured trying to fetch wallpaper');
}
}
//
// This function returns the number of cursors the mousetrail accessibility feature will render
// A value of 0 or 1 means the feature is disabled, otherwise it is the number of cursors that will be rendered
//
function mousetrails_get(tsid)
{
if (tsid != null || tsid === null) // TSID is not undefined or is explicitly null
{
// Need to disatch to different session first
return (sessionDispatch(tsid, 'mouse', 'getTrails', []));
}
var v = GM.CreateVariable(4);
var ret = user32.SystemParametersInfoA(SPI_GETMOUSETRAILS, v._size, v, 0);
if (ret.Val == 0)
{
throw ('Error occured trying to fetch wallpaper');
}
return (v.toBuffer().readUInt32LE());
}
module.exports = { background: { get: background_get, set: background_set } };
module.exports.mouse = { getTrails: mousetrails_get, setTrails: mousetrails_set };
module.exports.dispatch = dispatch;

View File

@ -18,28 +18,21 @@ var promise = require('promise');
function qfe()
{
var child = require('child_process').execFile(process.env['windir'] + '\\System32\\wbem\\wmic.exe', ['wmic', 'qfe', 'list', 'full', '/FORMAT:CSV']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); });
child.waitExit();
var lines = child.stdout.str.trim().split('\r\n');
var keys = lines[0].split(',');
var i, key;
var tokens;
var result = [];
for (i = 1; i < lines.length; ++i)
{
var obj = {};
tokens = lines[i].split(',');
for (key = 0; key < keys.length; ++key)
{
if (tokens[key]) { obj[keys[key]] = tokens[key]; }
try {
var tokens = require('win-wmi').query('ROOT\\CIMV2', 'SELECT * FROM Win32_QuickFixEngineering');
if (tokens[0]){
for (var index = 0; index < tokens.length; index++) {
for (var key in tokens[index]) {
if (key.startsWith('__')) delete tokens[index][key];
}
}
return (tokens);
} else {
return ([]);
}
result.push(obj);
} catch (ex) {
return ([]);
}
return (result);
}
function av()
{
@ -53,9 +46,23 @@ function av()
child.stdin.write('[reflection.Assembly]::LoadWithPartialName("system.core")\r\n');
child.stdin.write('Get-WmiObject -Namespace "root/SecurityCenter2" -Class AntiVirusProduct | ');
child.stdin.write('ForEach-Object -Process { ');
child.stdin.write('$matches = [regex]::Matches($_.pathToSignedProductExe, "%(.*?)%"); ');
child.stdin.write('$modifiedPath = $_.pathToSignedProductExe; ');
child.stdin.write('foreach ($match in $matches) { ');
child.stdin.write('$modifiedPath = $modifiedPath -replace [regex]::Escape($match.Value), [System.Environment]::GetEnvironmentVariable($match.Groups[1].Value, "Process") ');
child.stdin.write('} ');
child.stdin.write('$flag = $true; ');
child.stdin.write('if ($modifiedPath -ne "windowsdefender://"){ ');
child.stdin.write('if (-not (Test-Path -Path $modifiedPath -PathType Leaf)) { ');
child.stdin.write('$flag = $false; ');
child.stdin.write('} ');
child.stdin.write('} ');
child.stdin.write('if ($flag -eq $true) { ')
child.stdin.write('$Bytes = [System.Text.Encoding]::UTF8.GetBytes($_.displayName); ');
child.stdin.write('$EncodedText =[Convert]::ToBase64String($Bytes); ');
child.stdin.write('Write-Host ("{0},{1}" -f $_.productState,$EncodedText); }\r\n');
child.stdin.write('Write-Output ("{0},{1}" -f $_.productState,$EncodedText); ');
child.stdin.write('} ');
child.stdin.write('}\r\n ');
child.stdin.write('exit\r\n');
child.waitExit();
@ -214,6 +221,14 @@ function installedApps()
catch(e)\
{\
}\
try\
{\
val.installdate = reg.QueryKey(reg.HKEY.LocalMachine, 'SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\\\\' + items.subkeys[key], 'InstallDate');\
if (val.installdate == '') { delete val.installdate; }\
}\
catch(e)\
{\
}\
result.push(val);\
}\
console.log(JSON.stringify(result,'', 1));process.exit();";
@ -225,12 +240,33 @@ function installedApps()
return (ret);
}
function defender(){
var promise = require('promise');
var ret = new promise(function (a, r) { this._resolve = a; this._reject = r; });
ret.child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['powershell', '-noprofile', '-nologo', '-command', '-'], {});
ret.child.promise = ret;
ret.child.stdout.str = ''; ret.child.stdout.on('data', function (c) { this.str += c.toString(); });
ret.child.stderr.str = ''; ret.child.stderr.on('data', function (c) { this.str += c.toString(); });
ret.child.stdin.write('Get-MpComputerStatus | Select-Object RealTimeProtectionEnabled,IsTamperProtected | ConvertTo-JSON\r\n');
ret.child.stdin.write('exit\r\n');
ret.child.on('exit', function (c) {
if (this.stdout.str == '') { this.promise._resolve({}); return; }
try {
var abc = JSON.parse(this.stdout.str.trim());
this.promise._resolve({ RealTimeProtection: abc.RealTimeProtectionEnabled, TamperProtected: abc.IsTamperProtected });
} catch (ex) {
this.promise._resolve({}); return;
}
});
return (ret);
}
if (process.platform == 'win32')
{
module.exports = { qfe: qfe, av: av, defrag: defrag, pendingReboot: pendingReboot, installedApps: installedApps };
module.exports = { qfe: qfe, av: av, defrag: defrag, pendingReboot: pendingReboot, installedApps: installedApps, defender: defender };
}
else
{
var not_supported = function () { throw (process.platform + ' not supported'); };
module.exports = { qfe: not_supported, av: not_supported, defrag: not_supported, pendingReboot: not_supported, installedApps: not_supported };
module.exports = { qfe: not_supported, av: not_supported, defrag: not_supported, pendingReboot: not_supported, installedApps: not_supported, defender: not_supported };
}

View File

@ -39,17 +39,90 @@ function getVolumes()
{
ret[v[i].DeviceID] = trimObject(v[i]);
}
v = require('win-wmi').query('ROOT\\CIMV2\\Security\\MicrosoftVolumeEncryption', 'SELECT * FROM Win32_EncryptableVolume');
for (i in v)
{
var tmp = trimObject(v[i]);
for (var k in tmp)
try {
v = require('win-wmi').query('ROOT\\CIMV2\\Security\\MicrosoftVolumeEncryption', 'SELECT * FROM Win32_EncryptableVolume');
for (i in v)
{
ret[tmp.DeviceID][k] = tmp[k];
var tmp = trimObject(v[i]);
for (var k in tmp)
{
ret[tmp.DeviceID][k] = tmp[k];
}
}
}
} catch (ex) { }
return (ret);
}
module.exports = { getVolumes: function () { try { return (getVolumes()); } catch (x) { return ({}); } } };
function windows_volumes()
{
var promise = require('promise');
var p1 = new promise(function (res, rej) { this._res = res; this._rej = rej; });
var ret = {};
var values = require('win-wmi').query('ROOT\\CIMV2', 'SELECT * FROM Win32_LogicalDisk', ['DeviceID', 'VolumeName', 'FileSystem', 'Size', 'FreeSpace', 'DriveType']);
if(values[0]){
for (var i = 0; i < values.length; ++i) {
var drive = values[i]['DeviceID'].slice(0,-1);
ret[drive] = {
name: (values[i]['VolumeName'] ? values[i]['VolumeName'] : ""),
type: (values[i]['FileSystem'] ? values[i]['FileSystem'] : "Unknown"),
size: (values[i]['Size'] ? values[i]['Size'] : 0),
sizeremaining: (values[i]['FreeSpace'] ? values[i]['FreeSpace'] : 0),
removable: (values[i]['DriveType'] == 2),
cdrom: (values[i]['DriveType'] == 5)
};
}
}
try {
values = require('win-wmi').query('ROOT\\CIMV2\\Security\\MicrosoftVolumeEncryption', 'SELECT * FROM Win32_EncryptableVolume', ['DriveLetter','ConversionStatus','ProtectionStatus']);
if(values[0]){
for (var i = 0; i < values.length; ++i) {
var drive = values[i]['DriveLetter'].slice(0,-1);
var statuses = {
0: 'FullyDecrypted',
1: 'FullyEncrypted',
2: 'EncryptionInProgress',
3: 'DecryptionInProgress',
4: 'EncryptionPaused',
5: 'DecryptionPaused'
};
ret[drive].volumeStatus = statuses.hasOwnProperty(values[i].ConversionStatus) ? statuses[values[i].ConversionStatus] : 'FullyDecrypted';
ret[drive].protectionStatus = (values[i].ProtectionStatus == 0 ? 'Off' : (values[i].ProtectionStatus == 1 ? 'On' : 'Unknown'));
try {
var foundIDMarkedLine = false, foundMarkedLine = false, identifier = '', password = '';
var keychild = require('child_process').execFile(process.env['windir'] + '\\system32\\cmd.exe', ['/c', 'manage-bde -protectors -get ' + drive + ': -Type recoverypassword'], {});
keychild.stdout.str = ''; keychild.stdout.on('data', function (c) { this.str += c.toString(); });
keychild.waitExit();
var lines = keychild.stdout.str.trim().split('\r\n');
for (var x = 0; x < lines.length; x++) { // Loop each line
var abc = lines[x].trim();
var englishidpass = (abc !== '' && abc.includes('Numerical Password:')); // English ID
var germanidpass = (abc !== '' && abc.includes('Numerisches Kennwort:')); // German ID
var frenchidpass = (abc !== '' && abc.includes('Mot de passe num')); // French ID
var englishpass = (abc !== '' && abc.includes('Password:') && !abc.includes('Numerical Password:')); // English Password
var germanpass = (abc !== '' && abc.includes('Kennwort:') && !abc.includes('Numerisches Kennwort:')); // German Password
var frenchpass = (abc !== '' && abc.includes('Mot de passe :') && !abc.includes('Mot de passe num')); // French Password
if (englishidpass || germanidpass || frenchidpass|| englishpass || germanpass || frenchpass) {
var nextline = lines[x + 1].trim();
if (x + 1 < lines.length && (nextline !== '' && (nextline.startsWith('ID:') || nextline.startsWith('ID :')) )) {
identifier = nextline.replace('ID:','').replace('ID :', '').trim();
foundIDMarkedLine = true;
}else if (x + 1 < lines.length && nextline !== '') {
password = nextline;
foundMarkedLine = true;
}
}
}
ret[drive].identifier = (foundIDMarkedLine ? identifier : ''); // Set Bitlocker Identifier
ret[drive].recoveryPassword = (foundMarkedLine ? password : ''); // Set Bitlocker Password
} catch(ex) { } // just carry on as we cant get bitlocker key
}
}
p1._res(ret);
} catch (ex) { p1._res(ret); } // just return volumes as cant get encryption/bitlocker
return (p1);
}
module.exports = {
getVolumes: function () { try { return (getVolumes()); } catch (x) { return ({}); } },
volumes_promise: windows_volumes
};

View File

@ -485,8 +485,8 @@ function windows_execve(name, agentfilename, sessionid) {
var cmd = require('_GenericMarshal').CreateVariable(process.env['windir'] + '\\system32\\cmd.exe', { wide: true });
var args = require('_GenericMarshal').CreateVariable(3 * require('_GenericMarshal').PointerSize);
var arg1 = require('_GenericMarshal').CreateVariable('cmd.exe', { wide: true });
var arg2 = require('_GenericMarshal').CreateVariable('/C wmic service "' + name + '" call stopservice & "' + cwd + agentfilename + '.update.exe" -b64exec ' + 'dHJ5CnsKICAgIHZhciBzZXJ2aWNlTG9jYXRpb24gPSBwcm9jZXNzLmFyZ3YucG9wKCkudG9Mb3dlckNhc2UoKTsKICAgIHJlcXVpcmUoJ3Byb2Nlc3MtbWFuYWdlcicpLmVudW1lcmF0ZVByb2Nlc3NlcygpLnRoZW4oZnVuY3Rpb24gKHByb2MpCiAgICB7CiAgICAgICAgZm9yICh2YXIgcCBpbiBwcm9jKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHByb2NbcF0ucGF0aCAmJiAocHJvY1twXS5wYXRoLnRvTG93ZXJDYXNlKCkgPT0gc2VydmljZUxvY2F0aW9uKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcHJvY2Vzcy5raWxsKHByb2NbcF0ucGlkKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwcm9jZXNzLmV4aXQoKTsKICAgIH0pOwp9CmNhdGNoIChlKQp7CiAgICBwcm9jZXNzLmV4aXQoKTsKfQ==' +
' "' + process.execPath + '" & copy "' + cwd + agentfilename + '.update.exe" "' + process.execPath + '" & wmic service "' + name + '" call startservice & erase "' + cwd + agentfilename + '.update.exe"', { wide: true });
var arg2 = require('_GenericMarshal').CreateVariable('/C net stop "' + name + '" & "' + cwd + agentfilename + '.update.exe" -b64exec ' + 'dHJ5CnsKICAgIHZhciBzZXJ2aWNlTG9jYXRpb24gPSBwcm9jZXNzLmFyZ3YucG9wKCkudG9Mb3dlckNhc2UoKTsKICAgIHJlcXVpcmUoJ3Byb2Nlc3MtbWFuYWdlcicpLmVudW1lcmF0ZVByb2Nlc3NlcygpLnRoZW4oZnVuY3Rpb24gKHByb2MpCiAgICB7CiAgICAgICAgZm9yICh2YXIgcCBpbiBwcm9jKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHByb2NbcF0ucGF0aCAmJiAocHJvY1twXS5wYXRoLnRvTG93ZXJDYXNlKCkgPT0gc2VydmljZUxvY2F0aW9uKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcHJvY2Vzcy5raWxsKHByb2NbcF0ucGlkKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwcm9jZXNzLmV4aXQoKTsKICAgIH0pOwp9CmNhdGNoIChlKQp7CiAgICBwcm9jZXNzLmV4aXQoKTsKfQ==' +
' "' + process.execPath + '" & copy "' + cwd + agentfilename + '.update.exe" "' + process.execPath + '" & net start "' + name + '" & erase "' + cwd + agentfilename + '.update.exe"', { wide: true });
if (name == null)
{

View File

@ -152,7 +152,7 @@ module.exports.CreateAmtRemoteIder = function (webserver, meshcentral) {
obj.ProcessData = function (data) {
data = Buffer.from(data, 'binary');
obj.bytesFromAmt += data.length;
if (obj.acc == null) { obj.acc = data; } else { obj.acc = Buffer.concat(obj.acc, data); }
if (obj.acc == null) { obj.acc = data; } else { obj.acc = Buffer.concat([obj.acc, data]); }
if (obj.debug) console.log('IDER-ProcessData', obj.acc.length, obj.acc.toString('hex'));
// Process as many commands as possible

View File

@ -170,8 +170,12 @@ module.exports.CreateAmtRedirect = function (module, domain, user, webserver, me
// TLSSocket to encapsulate TLS communication, which then tunneled via SerialTunnel an then wrapped through CIRA APF
const TLSSocket = require('tls').TLSSocket;
const tlsoptions = { ciphers: 'RSA+AES:!aNULL:!MD5:!DSS', secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3 | constants.SSL_OP_NO_COMPRESSION | constants.SSL_OP_CIPHER_SERVER_PREFERENCE, rejectUnauthorized: false };
if (obj.tls1only == 1) { tlsoptions.secureProtocol = 'TLSv1_method'; }
const tlsoptions = { ciphers: 'RSA+AES:!aNULL:!MD5:!DSS', secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3 | constants.SSL_OP_NO_COMPRESSION | constants.SSL_OP_CIPHER_SERVER_PREFERENCE | constants.SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION, rejectUnauthorized: false };
if (obj.tls1only == 1) {
tlsoptions.secureProtocol = 'TLSv1_method';
} else {
tlsoptions.minVersion = 'TLSv1';
}
const tlsock = new TLSSocket(ser, tlsoptions);
tlsock.on('error', function (err) { Debug(1, "CIRA TLS Connection Error ", err); });
tlsock.on('secureConnect', function () { Debug(2, "CIRA Secure TLS Connection"); ws._socket.resume(); });
@ -228,8 +232,12 @@ module.exports.CreateAmtRedirect = function (module, domain, user, webserver, me
obj.forwardclient.setEncoding('binary');
} else {
// If TLS is going to be used, setup a TLS socket
var tlsoptions = { ciphers: 'RSA+AES:!aNULL:!MD5:!DSS', secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3 | constants.SSL_OP_NO_COMPRESSION | constants.SSL_OP_CIPHER_SERVER_PREFERENCE, rejectUnauthorized: false };
if (obj.tls1only == 1) { tlsoptions.secureProtocol = 'TLSv1_method'; }
var tlsoptions = { ciphers: 'RSA+AES:!aNULL:!MD5:!DSS', secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3 | constants.SSL_OP_NO_COMPRESSION | constants.SSL_OP_CIPHER_SERVER_PREFERENCE | constants.SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION, rejectUnauthorized: false };
if (obj.tls1only == 1) {
tlsoptions.secureProtocol = 'TLSv1_method';
} else {
tlsoptions.minVersion = 'TLSv1';
}
obj.forwardclient = obj.tls.connect(port, node.host, tlsoptions, function () {
// The TLS connection method is the same as TCP, but located a bit differently.
Debug(2, 'TLS Intel AMT transport connected to ' + node.host + ':' + port + '.');

View File

@ -236,8 +236,12 @@ var CreateWsmanComm = function (host, port, user, pass, tls, tlsoptions, mpsConn
if (state == 0) { obj.xxOnSocketClosed(); }
if (state == 2) {
// TLSSocket to encapsulate TLS communication, which then tunneled via SerialTunnel an then wrapped through CIRA APF
var options = { socket: ser, ciphers: 'RSA+AES:!aNULL:!MD5:!DSS', secureOptions: obj.constants.SSL_OP_NO_SSLv2 | obj.constants.SSL_OP_NO_SSLv3 | obj.constants.SSL_OP_NO_COMPRESSION | obj.constants.SSL_OP_CIPHER_SERVER_PREFERENCE, rejectUnauthorized: false };
if (obj.xtlsMethod == 1) { options.secureProtocol = 'TLSv1_method'; }
var options = { socket: ser, ciphers: 'RSA+AES:!aNULL:!MD5:!DSS', secureOptions: obj.constants.SSL_OP_NO_SSLv2 | obj.constants.SSL_OP_NO_SSLv3 | obj.constants.SSL_OP_NO_COMPRESSION | obj.constants.SSL_OP_CIPHER_SERVER_PREFERENCE | obj.constants.SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION, rejectUnauthorized: false };
if (obj.xtlsMethod == 1) {
options.secureProtocol = 'TLSv1_method';
} else {
options.minVersion = 'TLSv1';
}
if (obj.xtlsoptions) {
if (obj.xtlsoptions.ca) { options.ca = obj.xtlsoptions.ca; }
if (obj.xtlsoptions.cert) { options.cert = obj.xtlsoptions.cert; }
@ -274,8 +278,12 @@ var CreateWsmanComm = function (host, port, user, pass, tls, tlsoptions, mpsConn
obj.socket.connect(obj.port, obj.host, obj.xxOnSocketConnected);
} else {
// Direct connect with TLS
var options = { ciphers: 'RSA+AES:!aNULL:!MD5:!DSS', secureOptions: obj.constants.SSL_OP_NO_SSLv2 | obj.constants.SSL_OP_NO_SSLv3 | obj.constants.SSL_OP_NO_COMPRESSION | obj.constants.SSL_OP_CIPHER_SERVER_PREFERENCE, rejectUnauthorized: false };
if (obj.xtlsMethod != 0) { options.secureProtocol = 'TLSv1_method'; }
var options = { ciphers: 'RSA+AES:!aNULL:!MD5:!DSS', secureOptions: obj.constants.SSL_OP_NO_SSLv2 | obj.constants.SSL_OP_NO_SSLv3 | obj.constants.SSL_OP_NO_COMPRESSION | obj.constants.SSL_OP_CIPHER_SERVER_PREFERENCE | obj.constants.SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION, rejectUnauthorized: false };
if (obj.xtlsMethod == 1) {
options.secureProtocol = 'TLSv1_method';
} else {
options.minVersion = 'TLSv1';
}
if (obj.xtlsoptions) {
if (obj.xtlsoptions.ca) { options.ca = obj.xtlsoptions.ca; }
if (obj.xtlsoptions.cert) { options.cert = obj.xtlsoptions.cert; }
@ -283,7 +291,7 @@ var CreateWsmanComm = function (host, port, user, pass, tls, tlsoptions, mpsConn
}
obj.socket = obj.tls.connect(obj.port, obj.host, options, obj.xxOnSocketConnected);
obj.socket.setEncoding('binary');
obj.socket.setTimeout(60000); // Set socket idle timeout
obj.socket.setTimeout(28000); // Set socket idle timeout of 28 seconds
obj.socket.on('data', obj.xxOnSocketData);
obj.socket.on('close', obj.xxOnSocketClosed);
obj.socket.on('timeout', obj.destroy);

View File

@ -638,7 +638,7 @@ module.exports.CreateAmtManager = function (parent) {
// Connect now
var comm;
if ((dev.tlsfail !== true) && (parent.config.domains[dev.domainid].amtmanager.tlsconnections !== false)) {
if ((dev.tlsfail !== true) && (parent.config.domains[dev.domainid].amtmanager.tlsconnections !== false) && (dev.intelamt.tls == 1)) {
parent.debug('amt', dev.name, (dev.connType == 1) ? 'Relay-Connect' : 'LMS-Connect', "TLS", user);
comm = CreateWsmanComm(dev.nodeid, 16993, user, pass, 1, null, ciraconn); // Perform TLS
comm.xtlsFingerprint = 0; // Perform no certificate checking
@ -670,7 +670,7 @@ module.exports.CreateAmtManager = function (parent) {
// Connect now
var comm;
if ((dev.tlsfail !== true) && (parent.config.domains[dev.domainid].amtmanager.tlsconnections !== false)) {
if ((dev.tlsfail !== true) && (parent.config.domains[dev.domainid].amtmanager.tlsconnections !== false) && (dev.intelamt.tls == 1)) {
parent.debug('amt', dev.name, 'Direct-Connect', "TLS", dev.host, user);
comm = CreateWsmanComm(dev.host, 16993, user, pass, 1); // Always try with TLS first
comm.xtlsFingerprint = 0; // Perform no certificate checking
@ -707,7 +707,15 @@ module.exports.CreateAmtManager = function (parent) {
dev.aquired.controlMode = responses['IPS_HostBasedSetupService'].response.CurrentControlMode; // 1 = CCM, 2 = ACM
if (typeof stack.wsman.comm.amtVersion == 'string') { // Set the Intel AMT version using the HTTP header if present
var verSplit = stack.wsman.comm.amtVersion.split('.');
if (verSplit.length >= 3) { dev.aquired.version = verSplit[0] + '.' + verSplit[1] + '.' + verSplit[2]; dev.aquired.majorver = parseInt(verSplit[0]); dev.aquired.minorver = parseInt(verSplit[1]); }
if (verSplit.length >= 2) {
dev.aquired.version = verSplit[0] + '.' + verSplit[1];
dev.aquired.majorver = parseInt(verSplit[0]);
dev.aquired.minorver = parseInt(verSplit[1]);
if (verSplit.length >= 3) {
dev.aquired.version = verSplit[0] + '.' + verSplit[1] + '.' + verSplit[2];
dev.aquired.maintenancever = parseInt(verSplit[2]);
}
}
}
dev.aquired.realm = stack.wsman.comm.digestRealm;
dev.aquired.user = dev.intelamt.user = stack.wsman.comm.user;
@ -750,7 +758,8 @@ module.exports.CreateAmtManager = function (parent) {
// Start power polling if not connected to LMS
var ppfunc = function powerPoleFunction() { fetchPowerState(powerPoleFunction.dev); }
ppfunc.dev = dev;
dev.polltimer = new setTimeout(ppfunc, 290000); // Poll for power state every 4 minutes 50 seconds.
if(dev.polltimer){ clearInterval(dev.polltimer); delete dev.polltimer; }
dev.polltimer = new setInterval(ppfunc, 290000); // Poll for power state every 4 minutes 50 seconds.
fetchPowerState(dev);
} else {
// For LMS connections, close now.
@ -766,9 +775,12 @@ module.exports.CreateAmtManager = function (parent) {
});
} else {
// We got a bad response
if ((dev.conntype != 0) && (dev.tlsfail !== true) && (status == 408)) { // If not using CIRA and we get a 408 error while using TLS, try non-TLS.
if ((dev.connType != 0) && (dev.tlsfail !== false) && (status == 408)) { // If not using CIRA and we get a 408 error while using non-TLS, try TLS.
// non-TLS error on a local connection, try again with TLS
dev.tlsfail = false; dev.intelamt.tls = 1; attemptInitialContact(dev); return;
} else if ((dev.connType != 0) && (dev.tlsfail !== true) && (status == 408)) { // If not using CIRA and we get a 408 error while using TLS, try non-TLS.
// TLS error on a local connection, try again without TLS
dev.tlsfail = true; attemptInitialContact(dev); return;
dev.tlsfail = true; dev.intelamt.tls = 0; attemptInitialContact(dev); return;
} else if (status == 401) {
// Authentication error, see if we can use alternative credentials
if (dev.acctry != null) {
@ -930,8 +942,8 @@ module.exports.CreateAmtManager = function (parent) {
if (response.Body.OSPowerSavingState == 2) { meshPowerState = 1; } // Fully powered (S0);
else if (response.Body.OSPowerSavingState == 3) { meshPowerState = 2; } // Modern standby (We are going to call this S1);
// Set OS power state
if (meshPowerState >= 0) { parent.SetConnectivityState(dev.meshid, dev.nodeid, Date.now(), 4, meshPowerState, null, { name: dev.name }); }
// Set OS power state - connType: 0 = CIRA, 1 = CIRA-Relay, 2 = CIRA-LMS, 3 = LAN
if (meshPowerState >= 0) { parent.SetConnectivityState(dev.meshid, dev.nodeid, Date.now(), (dev.connType == 3 ? 4 : 2), meshPowerState, null, { name: dev.name }); }
});
} else {
// Convert the power state
@ -940,14 +952,15 @@ module.exports.CreateAmtManager = function (parent) {
var meshPowerState = -1, powerConversionTable = [-1, -1, 1, 2, 3, 6, 6, 5, 6];
if (powerstate < powerConversionTable.length) { meshPowerState = powerConversionTable[powerstate]; } else { powerstate = 6; }
// Set power state
if (meshPowerState >= 0) { parent.SetConnectivityState(dev.meshid, dev.nodeid, Date.now(), 4, meshPowerState, null, { name: dev.name }); }
// Set power state - connType: 0 = CIRA, 1 = CIRA-Relay, 2 = CIRA-LMS, 3 = LAN
if (meshPowerState >= 0) { parent.SetConnectivityState(dev.meshid, dev.nodeid, Date.now(), (dev.connType == 3 ? 4 : 2), meshPowerState, null, { name: dev.name }); }
}
});
}
// Perform a power action: 2 = Power up, 5 = Power cycle, 8 = Power down, 10 = Reset, 11 = Power on to BIOS, 12 = Reset to BIOS, 13 = Power on to BIOS with SOL, 14 = Reset to BIOS with SOL
// Perform a power action: 2 = Power up, 5 = Power cycle, 8 = Power down, 10 = Reset, 11 = Power on to BIOS, 12 = Reset to BIOS, 13 = Power on to BIOS with SOL, 14 = Reset to BIOS with SOL, 15 = Power on to PXE, 16 = Reset to PXE
function performPowerAction(nodeid, action) {
console.log('performPowerAction', nodeid, action);
var devices = obj.amtDevices[nodeid];
if (devices == null) return;
for (var i in devices) {
@ -960,7 +973,7 @@ module.exports.CreateAmtManager = function (parent) {
// Action: 2 = Power up, 5 = Power cycle, 8 = Power down, 10 = Reset
try { dev.amtstack.RequestPowerStateChange(action, performPowerActionResponse); } catch (ex) { }
} else {
// 11 = Power on to BIOS, 12 = Reset to BIOS, 13 = Power on to BIOS with SOL, 14 = Reset to BIOS with SOL
// 11 = Power on to BIOS, 12 = Reset to BIOS, 13 = Power on to BIOS with SOL, 14 = Reset to BIOS with SOL, 15 = Power on to PXE, 16 = Reset to PXE
dev.amtstack.BatchEnum(null, ['*AMT_BootSettingData'], performAdvancedPowerActionResponse);
}
}
@ -975,20 +988,44 @@ module.exports.CreateAmtManager = function (parent) {
if (obj.amtDevices[dev.nodeid] == null) return; // Device no longer exists, ignore this response.
if (status != 200) return;
if ((responses['AMT_BootSettingData'] == null) || (responses['AMT_BootSettingData'].response == null)) return;
var bootSettingData = responses['AMT_BootSettingData'].response;
// Clean up parameters
bootSettingData['ConfigurationDataReset'] = false;
delete bootSettingData['WinREBootEnabled'];
delete bootSettingData['UEFILocalPBABootEnabled'];
delete bootSettingData['UEFIHTTPSBootEnabled'];
delete bootSettingData['SecureBootControlEnabled'];
delete bootSettingData['BootguardStatus'];
delete bootSettingData['OptionsCleared'];
delete bootSettingData['BIOSLastStatus'];
delete bootSettingData['UefiBootParametersArray'];
delete bootSettingData['RPEEnabled'];
delete bootSettingData['RSEPassword']
// Ready boot parameters
bootSettingData['BIOSSetup'] = ((action >= 11) && (action <= 14));
bootSettingData['UseSOL'] = ((action >= 13) && (action <= 14));
if ((action == 11) || (action == 13)) { dev.powerAction = 2; } // Power on
if ((action == 12) || (action == 14)) { dev.powerAction = 10; } // Reset
if ((action == 11) || (action == 13) || (action == 15)) { dev.powerAction = 2; } // Power on
if ((action == 12) || (action == 14) || (action == 16)) { dev.powerAction = 10; } // Reset
dev.amtstack.Put('AMT_BootSettingData', bootSettingData, function performAdvancedPowerActionResponseEx(stack, name, response, status, tag) {
// Set boot parameters
dev.amtstack.Put('AMT_BootSettingData', bootSettingData, function (stack, name, response, status, tag) {
const dev = stack.dev;
const action = dev.powerAction;
delete dev.powerAction;
if (obj.amtDevices[dev.nodeid] == null) return; // Device no longer exists, ignore this response.
if (status != 200) return;
try { dev.amtstack.RequestPowerStateChange(action, performPowerActionResponse); } catch (ex) { }
if ((obj.amtDevices[dev.nodeid] == null) || (status != 200)) return; // Device no longer exists or error
// Set boot config
dev.amtstack.SetBootConfigRole(1, function (stack, name, response, status, tag) {
const dev = stack.dev;
if ((obj.amtDevices[dev.nodeid] == null) || (status != 200)) return; // Device no longer exists or error
// Set boot order
var bootDevice = (action === 15 || action === 16) ? '<Address xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing">http://schemas.xmlsoap.org/ws/2004/08/addressing</Address><ReferenceParameters xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing"><ResourceURI xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd">http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_BootSourceSetting</ResourceURI><SelectorSet xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd"><Selector Name="InstanceID">Intel(r) AMT: Force PXE Boot</Selector></SelectorSet></ReferenceParameters>' : null;
dev.amtstack.CIM_BootConfigSetting_ChangeBootOrder(bootDevice, function (stack, name, response, status) {
const dev = stack.dev;
if ((obj.amtDevices[dev.nodeid] == null) || (status != 200)) return; // Device no longer exists or error
// Perform power action
try { dev.amtstack.RequestPowerStateChange(dev.powerAction, performPowerActionResponse); } catch (ex) { }
}, 0, 1);
}, 0, 1);
}, 0, 1);
}
@ -1035,7 +1072,7 @@ module.exports.CreateAmtManager = function (parent) {
if (status != 200) { dev.consoleMsg("Failed to get security information (" + status + ")."); delete dev.ocrfile; return; }
// Check if this Intel AMT device supports OCR
if (responses['AMT_PublicKeyCertificate'].responses['ForceUEFIHTTPSBoot'] !== true) {
if (responses['AMT_BootCapabilities'].response['ForceUEFIHTTPSBoot'] !== true) {
dev.consoleMsg("This Intel AMT device does not support UEFI HTTPS boot (" + status + ")."); delete dev.ocrfile; return;
}
@ -1065,11 +1102,14 @@ module.exports.CreateAmtManager = function (parent) {
// Generate the one-time URL.
var cookie = obj.parent.encodeCookie({ a: 'f', f: dev.ocrfile }, obj.parent.loginCookieEncryptionKey)
var url = 'https://' + parent.webserver.certificates.AmtMpsName + ':' + ((parent.args.mpsaliasport != null) ? parent.args.mpsaliasport : parent.args.mpsport) + '/c/' + cookie + '.iso';
var url = 'https://' + parent.webserver.certificates.AmtMpsName + ':' + ((parent.args.mpsaliasport != null) ? parent.args.mpsaliasport : parent.args.mpsport) + '/c/' + cookie + '.efi';
delete dev.ocrfile;
// Generate the boot data for OCR with URL
var r = response.Body;
r['BIOSPause'] = false;
r['BIOSSetup'] = false;
r['EnforceSecureBoot'] = false;
r['UefiBootParametersArray'] = Buffer.from(makeUefiBootParam(1, url) + makeUefiBootParam(20, 1, 1) + makeUefiBootParam(30, 0, 2), 'binary').toString('base64');
r['UefiBootNumberOfParams'] = 3;
r['BootMediaIndex'] = 0; // Do not use boot media index for One Click Recovery (OCR)
@ -1090,8 +1130,7 @@ module.exports.CreateAmtManager = function (parent) {
dev.amtstack.SetBootConfigRole(1, function (stack, name, response, status) {
if (isAmtDeviceValid(dev) == false) return; // Device no longer exists, ignore this request.
if (status != 200) { dev.consoleMsg("Failed to set boot config role (" + status + ")."); return; }
var bootSource = 'Force OCR UEFI HTTPS Boot';
dev.amtstack.CIM_BootConfigSetting_ChangeBootOrder((bootSource == null) ? bootSource : '<Address xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing">http://schemas.xmlsoap.org/ws/2004/08/addressing</Address><ReferenceParameters xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing"><ResourceURI xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd">http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_BootSourceSetting</ResourceURI><SelectorSet xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd"><Selector Name="InstanceID">Intel(r) AMT: ' + bootSource + '</Selector></SelectorSet></ReferenceParameters>', function (stack, name, response, status) {
dev.amtstack.CIM_BootConfigSetting_ChangeBootOrder('<Address xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing">http://schemas.xmlsoap.org/ws/2004/08/addressing</Address><ReferenceParameters xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing"><ResourceURI xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd">http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_BootSourceSetting</ResourceURI><SelectorSet xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd"><Selector Name="InstanceID">Intel(r) AMT: Force OCR UEFI HTTPS Boot</Selector></SelectorSet></ReferenceParameters>', function (stack, name, response, status) {
if (isAmtDeviceValid(dev) == false) return; // Device no longer exists, ignore this request.
if (status != 200) { dev.consoleMsg("Failed to set boot config (" + status + ")."); return; }
dev.amtstack.RequestPowerStateChange(10, function (stack, name, response, status) { // 10 = Reset, 2 = Power Up
@ -1294,7 +1333,7 @@ module.exports.CreateAmtManager = function (parent) {
}
// Figure out what index is local & remote
var localNdx = ((dev.policy.tlsSettings[0]['InstanceID'] == 'Intel(r) AMT LMS TLS Settings')) ? 0 : 1, remoteNdx = (1 - localNdx);
var localNdx = ((dev.policy != null) && (dev.policy.tlsSettings != null) && (dev.policy.tlsSettings[0] != null) && (dev.policy.tlsSettings[0]['InstanceID'] == 'Intel(r) AMT LMS TLS Settings')) ? 0 : 1, remoteNdx = (1 - localNdx);
// Remote TLS settings
var xxTlsSettings2 = Clone(dev.policy.tlsSettings);
@ -2318,7 +2357,8 @@ module.exports.CreateAmtManager = function (parent) {
const dev = stack.dev;
if (isAmtDeviceValid(dev) == false) return; // Device no longer exists, ignore this request.
const domain = parent.config.domains[dev.domainid];
if ((responses['AMT_PublicKeyCertificate'].status != 200) || (responses['AMT_PublicKeyCertificate'].status != 200)) { func(dev); return; } // We can't get the certificate list, fail and carry on.
if ((responses['AMT_PublicKeyCertificate'].status != 200) || (responses['AMT_PublicPrivateKeyPair'].status != 200)) { func(dev); return; } // We can't get the certificate list, fail and carry on.
if ((responses['AMT_PublicKeyCertificate'].responses.length == 0) || (responses['AMT_PublicPrivateKeyPair'].responses.length == 0)) { func(dev); return; } // Empty certificate list, fail and carry on.
// Sort out the certificates
var xxCertificates = responses['AMT_PublicKeyCertificate'].responses;
@ -2596,7 +2636,14 @@ module.exports.CreateAmtManager = function (parent) {
if (domain && domain.amtmanager && (domain.amtmanager.tlsacmactivation == true)) { TlsAcmActivation = true; }
// Check Intel AMT version
if (typeof dev.intelamt.ver == 'string') { var verSplit = dev.intelamt.ver.split('.'); if (verSplit.length >= 3) { dev.aquired.majorver = parseInt(verSplit[0]); dev.aquired.minorver = parseInt(verSplit[1]); } }
if (typeof dev.intelamt.ver == 'string') {
var verSplit = dev.intelamt.ver.split('.');
if (verSplit.length >= 2) {
dev.aquired.majorver = parseInt(verSplit[0]);
dev.aquired.minorver = parseInt(verSplit[1]);
if (verSplit.length >= 3) { dev.aquired.maintenancever = parseInt(verSplit[2]); }
}
}
// If this is Intel AMT 14 or better and allowed, we are going to attempt a host-based end-to-end TLS activation.
if (TlsAcmActivation && (dev.aquired.majorver >= 14)) {
@ -2652,7 +2699,15 @@ module.exports.CreateAmtManager = function (parent) {
dev.aquired.controlMode = 1; // 1 = CCM, 2 = ACM
if (typeof dev.amtstack.wsman.comm.amtVersion == 'string') {
var verSplit = dev.amtstack.wsman.comm.amtVersion.split('.');
if (verSplit.length >= 3) { dev.aquired.version = verSplit[0] + '.' + verSplit[1] + '.' + verSplit[2]; dev.aquired.majorver = parseInt(verSplit[0]); dev.aquired.minorver = parseInt(verSplit[1]); }
if (verSplit.length >= 2) {
dev.aquired.version = verSplit[0] + '.' + verSplit[1];
dev.aquired.majorver = parseInt(verSplit[0]);
dev.aquired.minorver = parseInt(verSplit[1]);
if (verSplit.length >= 3) {
dev.aquired.version = verSplit[0] + '.' + verSplit[1] + '.' + verSplit[2];
dev.aquired.maintenancever = parseInt(verSplit[2]);
}
}
}
if ((typeof dev.mpsConnection.tag.meiState.OsHostname == 'string') && (typeof dev.mpsConnection.tag.meiState.OsDnsSuffix == 'string')) {
dev.aquired.host = dev.mpsConnection.tag.meiState.OsHostname + '.' + dev.mpsConnection.tag.meiState.OsDnsSuffix;
@ -2787,8 +2842,10 @@ module.exports.CreateAmtManager = function (parent) {
var vs = getInstance(amtlogicalelements, 'AMT')['VersionString'];
if (vs != null) {
dev.aquired.version = vs;
dev.aquired.versionmajor = parseInt(dev.aquired.version.split('.')[0]);
dev.aquired.versionminor = parseInt(dev.aquired.version.split('.')[1]);
version = dev.aquired.version.split('.')
dev.aquired.versionmajor = parseInt(version[0]);
dev.aquired.versionminor = parseInt(version[1]);
if (version.length > 2) { dev.aquired.versionmaintenance = parseInt(version[2]); }
}
}
}
@ -2796,10 +2853,14 @@ module.exports.CreateAmtManager = function (parent) {
// Fetch the Intel AMT version from HTTP stack
if ((dev.amtversionstr == null) && (stack.wsman.comm.amtVersion != null)) {
var s = stack.wsman.comm.amtVersion.split('.');
if (s.length >= 3) {
dev.aquired.version = s[0] + '.' + s[1] + '.' + s[2];
if (s.length >= 2) {
dev.aquired.version = s[0] + '.' + s[1] + '.';
dev.aquired.versionmajor = parseInt(s[0]);
dev.aquired.versionminor = parseInt(s[1]);
if (s.length >= 3) {
dev.aquired.version = s[0] + '.' + s[1] + '.' + s[2];
dev.aquired.versionmaintenance = parseInt(s[2]);
}
}
}

View File

@ -201,8 +201,10 @@ module.exports.CreateAmtProvisioningServer = function (parent, config) {
var vs = getInstance(amtlogicalelements, 'AMT')['VersionString'];
if (vs != null) {
dev.aquired.version = vs;
dev.aquired.versionmajor = parseInt(dev.aquired.version.split('.')[0]);
dev.aquired.versionminor = parseInt(dev.aquired.version.split('.')[1]);
const versionSplit = parseInt(dev.aquired.version.split('.'));
dev.aquired.versionmajor = parseInt(versionSplit[0]);
dev.aquired.versionminor = parseInt(versionSplit[1]);
if (versionSplit.length >= 3) { dev.aquired.versionmaintenance = parseInt(versionSplit[2]); }
}
}
}
@ -210,10 +212,14 @@ module.exports.CreateAmtProvisioningServer = function (parent, config) {
// Fetch the Intel AMT version from HTTP stack
if ((dev.amtversionstr == null) && (stack.wsman.comm.amtVersion != null)) {
var s = stack.wsman.comm.amtVersion.split('.');
if (s.length >= 3) {
dev.aquired.version = s[0] + '.' + s[1] + '.' + s[2];
if (s.length >= 2) {
dev.aquired.version = s[0] + '.' + s[1];
dev.aquired.versionmajor = parseInt(s[0]);
dev.aquired.versionminor = parseInt(s[1]);
if (s.length >= 3) {
dev.aquired.version = s[0] + '.' + s[1] + '.' + s[2];
dev.aquired.versionmaintenance = parseInt(s[2]);
}
}
}

View File

@ -362,8 +362,8 @@ module.exports.CreateAmtScanner = function (parent) {
if (oldVer == newVer) return false; // Versions are same already, don't update.
if (newVer == undefined || newVer == null) return false; // New version is bad, don't update it.
if (oldVer == undefined || oldVer == null) return true; // Old version is no good anyway, update it.
var oldVerArr = oldVer.split('.');
var newVerArr = newVer.split('.');
var oldVerArr = oldVer.toString().split('.');
var newVerArr = newVer.toString().split('.');
if ((oldVerArr.length < 2) || (newVerArr.length < 2)) return false;
if ((oldVerArr[0] != newVerArr[0]) || (oldVerArr[1] != newVerArr[1])) return true;
if (newVerArr.length > oldVerArr.length) return true;
@ -387,8 +387,12 @@ module.exports.CreateAmtScanner = function (parent) {
} else {
// Connect using TLS, we will switch from default TLS to TLS1-only and back if we get a connection error to support older Intel AMT.
if (scaninfo.tlsoption == null) { scaninfo.tlsoption = 0; }
const tlsOptions = { rejectUnauthorized: false, ciphers: 'RSA+AES:!aNULL:!MD5:!DSS', secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3 | constants.SSL_OP_NO_COMPRESSION | constants.SSL_OP_CIPHER_SERVER_PREFERENCE };
if (scaninfo.tlsoption == 1) { tlsOptions.secureProtocol = 'TLSv1_method'; }
const tlsOptions = { rejectUnauthorized: false, ciphers: 'RSA+AES:!aNULL:!MD5:!DSS', secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3 | constants.SSL_OP_NO_COMPRESSION | constants.SSL_OP_CIPHER_SERVER_PREFERENCE | constants.SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION };
if (scaninfo.tlsoption == 1) {
tlsOptions.secureProtocol = 'TLSv1_method';
} else {
tlsOptions.minVersion = 'TLSv1';
}
client = obj.tls.connect(port, host, tlsOptions, function () { this.write('GET / HTTP/1.1\r\nhost: ' + host + '\r\n\r\n'); });
}
client.scaninfo = scaninfo;

View File

@ -1,4 +1,4 @@
/**
/**
* @description MeshCentral MSTSC & SSH relay
* @author Ylian Saint-Hilaire & Bryan Roe
* @copyright Intel Corporation 2018-2022
@ -35,28 +35,29 @@ const PROTOCOL_WEBSFTP = 203;
const PROTOCOL_WEBVNC = 204;
// Mesh Rights
const MESHRIGHT_EDITMESH = 0x00000001; // 1
const MESHRIGHT_MANAGEUSERS = 0x00000002; // 2
const MESHRIGHT_MANAGECOMPUTERS = 0x00000004; // 4
const MESHRIGHT_REMOTECONTROL = 0x00000008; // 8
const MESHRIGHT_AGENTCONSOLE = 0x00000010; // 16
const MESHRIGHT_SERVERFILES = 0x00000020; // 32
const MESHRIGHT_WAKEDEVICE = 0x00000040; // 64
const MESHRIGHT_SETNOTES = 0x00000080; // 128
const MESHRIGHT_REMOTEVIEWONLY = 0x00000100; // 256
const MESHRIGHT_NOTERMINAL = 0x00000200; // 512
const MESHRIGHT_NOFILES = 0x00000400; // 1024
const MESHRIGHT_NOAMT = 0x00000800; // 2048
const MESHRIGHT_DESKLIMITEDINPUT = 0x00001000; // 4096
const MESHRIGHT_LIMITEVENTS = 0x00002000; // 8192
const MESHRIGHT_CHATNOTIFY = 0x00004000; // 16384
const MESHRIGHT_UNINSTALL = 0x00008000; // 32768
const MESHRIGHT_NODESKTOP = 0x00010000; // 65536
const MESHRIGHT_REMOTECOMMAND = 0x00020000; // 131072
const MESHRIGHT_RESETOFF = 0x00040000; // 262144
const MESHRIGHT_GUESTSHARING = 0x00080000; // 524288
const MESHRIGHT_DEVICEDETAILS = 0x00100000; // 1048576
const MESHRIGHT_ADMIN = 0xFFFFFFFF;
const MESHRIGHT_EDITMESH = 0x00000001; // 1
const MESHRIGHT_MANAGEUSERS = 0x00000002; // 2
const MESHRIGHT_MANAGECOMPUTERS = 0x00000004; // 4
const MESHRIGHT_REMOTECONTROL = 0x00000008; // 8
const MESHRIGHT_AGENTCONSOLE = 0x00000010; // 16
const MESHRIGHT_SERVERFILES = 0x00000020; // 32
const MESHRIGHT_WAKEDEVICE = 0x00000040; // 64
const MESHRIGHT_SETNOTES = 0x00000080; // 128
const MESHRIGHT_REMOTEVIEWONLY = 0x00000100; // 256
const MESHRIGHT_NOTERMINAL = 0x00000200; // 512
const MESHRIGHT_NOFILES = 0x00000400; // 1024
const MESHRIGHT_NOAMT = 0x00000800; // 2048
const MESHRIGHT_DESKLIMITEDINPUT = 0x00001000; // 4096
const MESHRIGHT_LIMITEVENTS = 0x00002000; // 8192
const MESHRIGHT_CHATNOTIFY = 0x00004000; // 16384
const MESHRIGHT_UNINSTALL = 0x00008000; // 32768
const MESHRIGHT_NODESKTOP = 0x00010000; // 65536
const MESHRIGHT_REMOTECOMMAND = 0x00020000; // 131072
const MESHRIGHT_RESETOFF = 0x00040000; // 262144
const MESHRIGHT_GUESTSHARING = 0x00080000; // 524288
const MESHRIGHT_DEVICEDETAILS = 0x00100000; // 1048576
const MESHRIGHT_RELAY = 0x00200000; // 2097152
const MESHRIGHT_ADMIN = 0xFFFFFFFF;
// SerialTunnel object is used to embed TLS within another connection.
function SerialTunnel(options) {
@ -69,7 +70,7 @@ function SerialTunnel(options) {
}
// Construct a Web relay object
module.exports.CreateWebRelaySession = function (parent, db, req, args, domain, userid, nodeid, addr, port, appid, sessionid, expire) {
module.exports.CreateWebRelaySession = function (parent, db, req, args, domain, userid, nodeid, addr, port, appid, sessionid, expire, mtype) {
const obj = {};
obj.parent = parent;
obj.lastOperation = Date.now();
@ -81,6 +82,7 @@ module.exports.CreateWebRelaySession = function (parent, db, req, args, domain,
obj.appid = appid;
obj.sessionid = sessionid;
obj.expireTimer = null;
obj.mtype = mtype;
var pendingRequests = [];
var nextTunnelId = 1;
var tunnels = {};
@ -105,7 +107,7 @@ module.exports.CreateWebRelaySession = function (parent, db, req, args, domain,
// Check if any tunnels need to be cleaned up
obj.checkTimeout = function () {
const limit = Date.now() - (1 * 60 * 1000); // This is is 5 minutes before current time
const limit = Date.now() - (5 * 60 * 1000); // This is 5 minutes before current time
// Close any old non-websocket tunnels
const tunnelToRemove = [];
@ -147,7 +149,7 @@ module.exports.CreateWebRelaySession = function (parent, db, req, args, domain,
// Check to see if any of the tunnels are free
var count = 0;
for (var i in tunnels) {
count += ((tunnels[i].isWebSocket || tunnels[i].isStreaming) ? 0 : 1);
count += ((tunnels[i].isWebSocket || tunnels[i].isStreaming || (tunnels[i].res != null)) ? 0 : 1);
if ((tunnels[i].relayActive == true) && (tunnels[i].res == null) && (tunnels[i].isWebSocket == false) && (tunnels[i].isStreaming == false)) {
// Found a free tunnel, use it
const x = pendingRequests.shift();
@ -164,7 +166,7 @@ module.exports.CreateWebRelaySession = function (parent, db, req, args, domain,
// Launch a new tunnel
if (obj.closed == true) return;
parent.parent.debug('webrelay', 'launchNewTunnel');
const tunnel = module.exports.CreateWebRelay(obj, db, args, domain);
const tunnel = module.exports.CreateWebRelay(obj, db, args, domain, obj.mtype);
tunnel.onclose = function (tunnelId, processedCount) {
if (tunnels == null) return;
parent.parent.debug('webrelay', 'tunnel-onclose');
@ -238,7 +240,7 @@ module.exports.CreateWebRelaySession = function (parent, db, req, args, domain,
// Construct a Web relay object
module.exports.CreateWebRelay = function (parent, db, args, domain) {
module.exports.CreateWebRelay = function (parent, db, args, domain, mtype) {
//const Net = require('net');
const WebSocket = require('ws')
@ -249,6 +251,7 @@ module.exports.CreateWebRelay = function (parent, db, args, domain) {
obj.isWebSocket = false; // If true, this request will not close and so, it can't be allowed to hold up other requests
obj.isStreaming = false; // If true, this request will not close and so, it can't be allowed to hold up other requests
obj.processedRequestCount = 0;
obj.mtype = mtype;
const constants = (require('crypto').constants ? require('crypto').constants : require('constants')); // require('constants') is deprecated in Node 11.10, use require('crypto').constants instead.
// Events
@ -260,7 +263,7 @@ module.exports.CreateWebRelay = function (parent, db, args, domain) {
// Called when we need to close the tunnel because the response stream has closed
function handleResponseClosure() { obj.close(); }
// Return copkie name and values
// Return cookie name and values
function parseRequestCookies(cookiesString) {
var r = {};
if (typeof cookiesString != 'string') return r;
@ -336,6 +339,9 @@ module.exports.CreateWebRelay = function (parent, db, args, domain) {
var cookieStr = '';
for (var i in parent.webCookies) { if (cookieStr != '') { cookieStr += '; ' } cookieStr += (i + '=' + parent.webCookies[i].value); }
if (cookieStr.length > 0) { request += 'cookie: ' + cookieStr + '\r\n' } // If we have session cookies, set them in the header here
var reqCookies = parseRequestCookies(req.headers.cookie);
for (var i in reqCookies) { if ((i != 'xid') && (i != 'xid.sig')) { if (cookieStr != '') { cookieStr += '; ' } cookieStr += (i + '=' + reqCookies[i]); } }
if (cookieStr.length > 0) { request += 'cookie: ' + cookieStr + '\r\n' } // If we have session cookies, set them in the header here
request += '\r\n';
send(Buffer.from(request));
@ -437,7 +443,7 @@ module.exports.CreateWebRelay = function (parent, db, args, domain) {
obj.relayActive = false;
};
// Start the looppback server
// Start the loopback server
obj.connect = function (userid, nodeid, addr, port, appid) {
if (obj.relayActive || obj.closed) return;
obj.addr = addr;
@ -455,7 +461,7 @@ module.exports.CreateWebRelay = function (parent, db, args, domain) {
const protocol = (args.tlsoffload) ? 'ws' : 'wss';
var domainadd = '';
if ((domain.dns == null) && (domain.id != '')) { domainadd = domain.id + '/' }
const url = protocol + '://localhost:' + args.port + '/' + domainadd + (((obj.mtype == 3) && (obj.relaynodeid == null)) ? 'local' : 'mesh') + 'relay.ashx?p=14&auth=' + cookie; // Protocol 14 is Web-TCP
var url = protocol + '://localhost:' + args.port + '/' + domainadd + (((obj.mtype == 3) && (obj.relaynodeid == null)) ? 'local' : 'mesh') + 'relay.ashx?p=14&auth=' + cookie; // Protocol 14 is Web-TCP
if (domain.id != '') { url += '&domainid=' + domain.id; } // Since we are using "localhost", we are going to signal what domain we are on using a URL argument.
parent.parent.parent.debug('relay', 'TCP: Connection websocket to ' + url);
obj.wsClient = new WebSocket(url, options);
@ -687,7 +693,8 @@ module.exports.CreateWebRelay = function (parent, db, args, domain) {
// If there is a header, send it
if (header != null) {
obj.res.status(parseInt(header.Directive[1])); // Set the status
const statusCode = parseInt(header.Directive[1]);
if ((!isNaN(statusCode)) && (statusCode > 0) && (statusCode <= 999)) { obj.res.status(statusCode); } // Set the status
const blockHeaders = ['Directive', 'sec-websocket-extensions', 'connection', 'transfer-encoding', 'last-modified', 'content-security-policy', 'cache-control']; // We do not forward these headers
for (var i in header) {
if (i == 'set-cookie') {
@ -713,15 +720,16 @@ module.exports.CreateWebRelay = function (parent, db, args, domain) {
}
}
}
else if (blockHeaders.indexOf(i) == -1) { obj.res.set(i, header[i]); } // Set the headers if not blocked
else if (blockHeaders.indexOf(i) == -1) { obj.res.set(i.trim(), header[i]); } // Set the headers if not blocked
}
obj.res.set('Content-Security-Policy', "default-src 'self' 'unsafe-inline' 'unsafe-eval' data: blob:;"); // Set an "allow all" policy, see if the can restrict this in the future
// Dont set any Content-Security-Policy at all because some applications like Node-Red, access external websites from there javascript which would be forbidden by the below CSP
//obj.res.set('Content-Security-Policy', "default-src 'self' 'unsafe-inline' 'unsafe-eval' data: blob:;"); // Set an "allow all" policy, see if the can restrict this in the future
//obj.res.set('Content-Security-Policy', "default-src * 'unsafe-inline' 'unsafe-eval'; script-src * 'unsafe-inline' 'unsafe-eval'; connect-src * 'unsafe-inline'; img-src * data: blob: 'unsafe-inline'; frame-src *; style-src * 'unsafe-inline';"); // Set an "allow all" policy, see if the can restrict this in the future
obj.res.set('Cache-Control', 'no-store'); // Tell the browser not to cache the responses since since the relay port can be used for many relays
}
// If there is data, send it
if (data != null) { obj.res.write(data, 'binary'); }
if (data != null) { try { obj.res.write(data, 'binary'); } catch (ex) { } }
// If we are done, close the response
if (done == true) {
@ -816,7 +824,7 @@ module.exports.CreateMstscRelay = function (parent, db, ws, req, args, domain) {
obj.relaySocket = socket;
obj.relaySocket.pause();
obj.relaySocket.on('data', function (chunk) { // Make sure to handle flow control.
if (obj.relayActive == true) { obj.relaySocket.pause(); obj.wsClient.send(chunk, function () { obj.relaySocket.resume(); }); }
if (obj.relayActive == true) { obj.relaySocket.pause(); if (obj.wsClient != null) { obj.wsClient.send(chunk, function () { obj.relaySocket.resume(); }); } }
});
obj.relaySocket.on('end', function () { obj.close(); });
obj.relaySocket.on('error', function (err) { obj.close(); });
@ -838,22 +846,21 @@ module.exports.CreateMstscRelay = function (parent, db, ws, req, args, domain) {
obj.relaySocket.resume();
}
} else {
if (typeof data == 'string') {
// Forward any ping/pong commands to the browser
var cmd = null;
try { cmd = JSON.parse(data); } catch (ex) { }
try { // Forward any ping/pong commands to the browser
var cmd = JSON.parse(data);
if ((cmd != null) && (cmd.ctrlChannel == '102938')) {
if (cmd.type == 'ping') { send(['ping']); }
else if (cmd.type == 'pong') { send(['pong']); }
}
return;
} catch (ex) { // You are not JSON data so just send over relaySocket
obj.wsClient._socket.pause();
try {
obj.relaySocket.write(data, function () {
if (obj.wsClient && obj.wsClient._socket) { try { obj.wsClient._socket.resume(); } catch (ex) { console.log(ex); } }
});
} catch (ex) { console.log(ex); obj.close(); }
}
obj.wsClient._socket.pause();
try {
obj.relaySocket.write(data, function () {
if (obj.wsClient && obj.wsClient._socket) { try { obj.wsClient._socket.resume(); } catch (ex) { console.log(ex); } }
});
} catch (ex) { console.log(ex); obj.close(); }
}
});
obj.wsClient.on('close', function () { parent.parent.debug('relay', 'RDP: Relay websocket closed'); obj.close(); });
@ -980,6 +987,7 @@ module.exports.CreateMstscRelay = function (parent, db, ws, req, args, domain) {
if ((node == null) || (visible == false) || ((rights & MESHRIGHT_REMOTECONTROL) == 0)) { obj.close(); return; }
if ((rights != MESHRIGHT_ADMIN) && ((rights & MESHRIGHT_REMOTEVIEWONLY) != 0)) { obj.viewonly = true; }
if ((rights != MESHRIGHT_ADMIN) && ((rights & MESHRIGHT_DESKLIMITEDINPUT) != 0)) { obj.limitedinput = true; }
node = parent.common.unEscapeLinksFieldName(node); // unEscape node data for rdp/ssh credentials
obj.mtype = node.mtype; // Store the device group type
obj.meshid = node.meshid; // Store the MeshID
@ -1042,7 +1050,11 @@ module.exports.CreateMstscRelay = function (parent, db, ws, req, args, domain) {
if ((k == 14) || (k == 28)) { ok = true; } // Enter and backspace
if (ok == false) return;
}
if (rdpClient && (obj.viewonly != true)) { rdpClient.sendKeyEventScancode(msg[1], msg[2]); } break;
var extended = false;
var extendedkeys = [57419,57421,57416,57424,57426,57427,57417,57425,57372,57397,57415,57423,57373,57400,57399];
// left,right,up,down,insert,delete,pageup,pagedown,numpadenter,numpaddivide,home,end,controlright,altright,printscreen
if (extendedkeys.includes(msg[1])) extended=true;
if (rdpClient && (obj.viewonly != true)) { rdpClient.sendKeyEventScancode(msg[1], msg[2], extended); } break;
}
case 'unicode': { if (rdpClient && (obj.viewonly != true)) { rdpClient.sendKeyEventUnicode(msg[1], msg[2]); } break; }
case 'utype': {
@ -1206,7 +1218,7 @@ module.exports.CreateSshRelay = function (parent, db, ws, req, args, domain) {
const protocol = (args.tlsoffload) ? 'ws' : 'wss';
var domainadd = '';
if ((domain.dns == null) && (domain.id != '')) { domainadd = domain.id + '/' }
const url = protocol + '://localhost:' + args.port + '/' + domainadd + (((obj.mtype == 3) && (obj.relaynodeid == null)) ? 'local' : 'mesh') + 'relay.ashx?p=11&auth=' + obj.xcookie; // Protocol 11 is Web-SSH
var url = protocol + '://localhost:' + args.port + '/' + domainadd + (((obj.mtype == 3) && (obj.relaynodeid == null)) ? 'local' : 'mesh') + 'relay.ashx?p=11&auth=' + obj.xcookie; // Protocol 11 is Web-SSH
if (domain.id != '') { url += '&domainid=' + domain.id; } // Since we are using "localhost", we are going to signal what domain we are on using a URL argument.
parent.parent.debug('relay', 'SSH: Connection websocket to ' + url);
obj.wsClient = new WebSocket(url, options);
@ -1273,16 +1285,14 @@ module.exports.CreateSshRelay = function (parent, db, ws, req, args, domain) {
ws._socket.resume();
}
} else {
if (typeof data == 'string') {
// Forward any ping/pong commands to the browser
try { // Forward any ping/pong commands to the browser
var cmd = null;
try { cmd = JSON.parse(data); } catch (ex) { }
cmd = JSON.parse(data);
if ((cmd != null) && (cmd.ctrlChannel == '102938') && ((cmd.type == 'ping') || (cmd.type == 'pong'))) { obj.ws.send(data); }
return;
} catch(ex) { // Relay WS --> SSH instead
if ((data.length > 0) && (obj.ser != null)) { try { obj.ser.updateBuffer(data); } catch (ex) { console.log(ex); } }
}
// Relay WS --> SSH
if ((data.length > 0) && (obj.ser != null)) { try { obj.ser.updateBuffer(data); } catch (ex) { console.log(ex); } }
}
});
obj.wsClient.on('close', function () { parent.parent.debug('relay', 'SSH: Relay websocket closed'); obj.close(); });
@ -1310,7 +1320,7 @@ module.exports.CreateSshRelay = function (parent, db, ws, req, args, domain) {
// Check if we have SSH credentials for this device
parent.parent.db.Get(obj.cookie.nodeid, function (err, nodes) {
if ((err != null) || (nodes == null) || (nodes.length != 1)) return;
const node = nodes[0];
const node = parent.common.unEscapeLinksFieldName(nodes[0]); // unEscape node data for rdp/ssh credentials
if ((domain.allowsavingdevicecredentials === false) || (node.ssh == null) || (typeof node.ssh != 'object') || (node.ssh[obj.userid] == null) || (typeof node.ssh[obj.userid].u != 'string') || ((typeof node.ssh[obj.userid].p != 'string') && (typeof node.ssh[obj.userid].k != 'string'))) {
// Send a request for SSH authentication
try { ws.send(JSON.stringify({ action: 'sshauth' })) } catch (ex) { }
@ -1358,7 +1368,7 @@ module.exports.CreateSshRelay = function (parent, db, ws, req, args, domain) {
obj.termSize = msg;
parent.parent.db.Get(obj.cookie.nodeid, function (err, nodes) {
if ((err != null) || (nodes == null) || (nodes.length != 1)) return;
const node = nodes[0];
const node = parent.common.unEscapeLinksFieldName(nodes[0]); // unEscape node data for rdp/ssh credentials
if (node.ssh != null) {
obj.username = node.ssh.u;
obj.privateKey = node.ssh.k;
@ -1400,7 +1410,7 @@ module.exports.CreateSshRelay = function (parent, db, ws, req, args, domain) {
parent.parent.db.Get(obj.cookie.nodeid, function (err, nodes) {
if (obj.cookie == null) return; // obj has been cleaned up, just exit.
if ((err != null) || (nodes == null) || (nodes.length != 1)) { parent.parent.debug('relay', 'SSH: Invalid device'); obj.close(); }
const node = nodes[0];
const node = parent.common.unEscapeLinksFieldName(nodes[0]); // unEscape node data for rdp/ssh credentials
obj.nodeid = node._id; // Store the NodeID
obj.meshid = node.meshid; // Store the MeshID
obj.mtype = node.mtype; // Store the device group type
@ -1545,7 +1555,7 @@ module.exports.CreateSshTerminalRelay = function (parent, db, ws, req, domain, u
const protocol = (args.tlsoffload) ? 'ws' : 'wss';
var domainadd = '';
if ((domain.dns == null) && (domain.id != '')) { domainadd = domain.id + '/' }
const url = protocol + '://localhost:' + args.port + '/' + domainadd + (((obj.mtype == 3) && (obj.relaynodeid == null)) ? 'local' : 'mesh') + 'relay.ashx?p=11&auth=' + authCookie // Protocol 11 is Web-SSH
var url = protocol + '://localhost:' + args.port + '/' + domainadd + (((obj.mtype == 3) && (obj.relaynodeid == null)) ? 'local' : 'mesh') + 'relay.ashx?p=11&auth=' + authCookie // Protocol 11 is Web-SSH
if (domain.id != '') { url += '&domainid=' + domain.id; } // Since we are using "localhost", we are going to signal what domain we are on using a URL argument.
parent.parent.debug('relay', 'SSH: Connection websocket to ' + url);
obj.wsClient = new WebSocket(url, options);
@ -1613,16 +1623,14 @@ module.exports.CreateSshTerminalRelay = function (parent, db, ws, req, domain, u
ws._socket.resume();
}
} else {
if (typeof data == 'string') {
// Forward any ping/pong commands to the browser
try { // Forward any ping/pong commands to the browser
var cmd = null;
try { cmd = JSON.parse(data); } catch (ex) { }
cmd = JSON.parse(data);
if ((cmd != null) && (cmd.ctrlChannel == '102938') && ((cmd.type == 'ping') || (cmd.type == 'pong'))) { try { obj.ws.send(data); } catch (ex) { console.log(ex); } }
return;
} catch (ex) { // Relay WS --> SSH
if ((data.length > 0) && (obj.ser != null)) { try { obj.ser.updateBuffer(data); } catch (ex) { console.log(ex); } }
}
// Relay WS --> SSH
if ((data.length > 0) && (obj.ser != null)) { try { obj.ser.updateBuffer(data); } catch (ex) { console.log(ex); } }
}
});
obj.wsClient.on('close', function () {
@ -1735,6 +1743,7 @@ module.exports.CreateSshTerminalRelay = function (parent, db, ws, req, domain, u
if ((user == null) || (req.query.nodeid == null)) { obj.close(); return; } // Invalid nodeid
parent.GetNodeWithRights(domain, user, req.query.nodeid, function (node, rights, visible) {
if (obj.ws == null) return; // obj has been cleaned up, just exit.
node = parent.common.unEscapeLinksFieldName(node); // unEscape node data for rdp/ssh credentials
// Check permissions
if ((rights & 8) == 0) { obj.close(); return; } // No MESHRIGHT_REMOTECONTROL rights
@ -1899,7 +1908,7 @@ module.exports.CreateSshFilesRelay = function (parent, db, ws, req, domain, user
const protocol = (args.tlsoffload) ? 'ws' : 'wss';
var domainadd = '';
if ((domain.dns == null) && (domain.id != '')) { domainadd = domain.id + '/' }
const url = protocol + '://localhost:' + args.port + '/' + domainadd + (((obj.mtype == 3) && (obj.relaynodeid == null)) ? 'local' : 'mesh') + 'relay.ashx?p=13&auth=' + authCookie // Protocol 13 is Web-SSH-Files
var url = protocol + '://localhost:' + args.port + '/' + domainadd + (((obj.mtype == 3) && (obj.relaynodeid == null)) ? 'local' : 'mesh') + 'relay.ashx?p=13&auth=' + authCookie // Protocol 13 is Web-SSH-Files
if (domain.id != '') { url += '&domainid=' + domain.id; } // Since we are using "localhost", we are going to signal what domain we are on using a URL argument.
parent.parent.debug('relay', 'SSH: Connection websocket to ' + url);
obj.wsClient = new WebSocket(url, options);
@ -1961,16 +1970,15 @@ module.exports.CreateSshFilesRelay = function (parent, db, ws, req, domain, user
ws._socket.resume();
}
} else {
if (typeof data == 'string') {
try {
// Forward any ping/pong commands to the browser
var cmd = null;
try { cmd = JSON.parse(data); } catch (ex) { }
cmd = JSON.parse(data);
if ((cmd != null) && (cmd.ctrlChannel == '102938') && ((cmd.type == 'ping') || (cmd.type == 'pong'))) { obj.ws.send(data); }
return;
} catch (ex) { // Relay WS --> SSH
if ((data.length > 0) && (obj.ser != null)) { try { obj.ser.updateBuffer(data); } catch (ex) { console.log(ex); } }
}
// Relay WS --> SSH
if ((data.length > 0) && (obj.ser != null)) { try { obj.ser.updateBuffer(data); } catch (ex) { console.log(ex); } }
}
});
obj.wsClient.on('close', function () {
@ -2265,6 +2273,7 @@ module.exports.CreateSshFilesRelay = function (parent, db, ws, req, domain, user
if ((user == null) || (req.query.nodeid == null)) { obj.close(); return; } // Invalid nodeid
parent.GetNodeWithRights(domain, user, req.query.nodeid, function (node, rights, visible) {
if (obj.ws == null) return; // obj has been cleaned up, just exit.
node = parent.common.unEscapeLinksFieldName(node); // unEscape node data for rdp/ssh credentials
// Check permissions
if ((rights & 8) == 0) { obj.close(); return; } // No MESHRIGHT_REMOTECONTROL rights
@ -2329,6 +2338,6 @@ module.exports.CreateSshFilesRelay = function (parent, db, ws, req, domain, user
function checkRelayRights(parent, domain, user, relayNodeId, func) {
if (relayNodeId == null) { func(true); return; } // No relay, do nothing.
parent.GetNodeWithRights(domain, user, relayNodeId, function (node, rights, visible) {
func((node != null) && (rights == 0xFFFFFFFF));
func((node != null) && ((rights & 0x00200008) != 0)); // MESHRIGHT_REMOTECONTROL or MESHRIGHT_RELAY rights
});
}

View File

@ -298,7 +298,7 @@ function createAuthenticodeHandler(path) {
for (var i = 0; i < obj.header.coff.numberOfSections; i++) {
var section = {};
buf = readFileSlice(obj.header.SectionHeadersPtr + (i * 40), 40);
if (buf[0] != 46) { obj.close(); return false; }; // Name of the section must start with a dot. If not, something is wrong.
if ((buf[0] != 46) && (buf[0] != 95)) { obj.close(); return false; }; // Name of the section must start with a dot or underscore. If not, something is wrong.
var sectionName = buf.slice(0, 8).toString().trim('\0');
var j = sectionName.indexOf('\0');
if (j >= 0) { sectionName = sectionName.substring(0, j); } // Trim any trailing zeroes
@ -1566,7 +1566,11 @@ function createAuthenticodeHandler(path) {
options.protocol = timeServerUrl.protocol;
options.hostname = timeServerUrl.hostname;
options.path = timeServerUrl.pathname;
options.port = ((timeServerUrl.port == '') ? 80 : parseInt(timeServerUrl.port));
let http = require("http")
if (options.protocol === "https:"){
http = require("https")
}
options.port = ((timeServerUrl.port == '') ? (options.protocol === "https:" ? 443 : 80) : parseInt(timeServerUrl.port));
if (options.proxy == null) {
// No proxy needed
@ -1584,7 +1588,7 @@ function createAuthenticodeHandler(path) {
// Set up the request
var responseAccumulator = '';
var req = require('http').request(options, function (res) {
var req = http.request(options, function (res) {
res.setEncoding('utf8');
res.on('data', function (chunk) { responseAccumulator += chunk; });
res.on('end', function () { func(null, responseAccumulator); });
@ -1605,12 +1609,12 @@ function createAuthenticodeHandler(path) {
proxyOptions.protocol = proxyUrl.protocol;
proxyOptions.hostname = proxyUrl.hostname;
proxyOptions.path = options.hostname + ':' + options.port;
proxyOptions.port = ((proxyUrl.port == '') ? 80 : parseInt(proxyUrl.port));
proxyOptions.port = ((proxyUrl.port == '') ? (options.protocol === "https:" ? 443 : 80) : parseInt(proxyUrl.port));
}
// Set up the proxy request
var responseAccumulator = '';
var req = require('http').request(proxyOptions);
var req = http.request(proxyOptions);
req.on('error', function (err) { func('' + err); });
req.on('connect', function (res, socket, head) {
// Make a request over the HTTP tunnel

View File

@ -262,7 +262,10 @@ module.exports.CertificateOperations = function (parent) {
acmconfig.cn = certCommonName.value;
}
}
if(r.certs[0].md){
acmconfig.hashAlgorithm = r.certs[0].md.algorithm;
}
delete acmconfig.cert;
delete acmconfig.certpass;
acmconfig.certs = orderedCerts;
@ -633,9 +636,16 @@ module.exports.CertificateOperations = function (parent) {
};
// Return the SHA384 hash of the certificate public key
obj.getPublicKeyHashBinary = function (cert) {
var publickey = obj.pki.certificateFromPem(cert).publicKey;
return obj.pki.getPublicKeyFingerprint(publickey, { encoding: 'binary', md: obj.forge.md.sha384.create() });
obj.getPublicKeyHashBinary = function (pem) {
const { X509Certificate } = require('crypto');
if (X509Certificate == null) {
// This version of NodeJS (<v15.6.0) does not support X509 certs, use Node-Forge instead which only supports RSA certs.
return obj.pki.getPublicKeyFingerprint(obj.pki.certificateFromPem(pem).publicKey, { encoding: 'binary', md: obj.forge.md.sha384.create() });
} else {
// This version of NodeJS supports x509 certificates
var cert = new X509Certificate(pem);
return obj.crypto.createHash('sha384').update(cert.publicKey.export({ type: ((cert.publicKey.asymmetricKeyType == 'rsa') ? 'pkcs1' : 'spki'), format: 'der' })).digest('binary');
}
};
// Return the SHA384 hash of the certificate, return binary
@ -740,7 +750,7 @@ module.exports.CertificateOperations = function (parent) {
}
// Return true if the name is found in the certificates names, we support wildcard certificates
obj.compareCertificateNames = function(certNames, name) {
obj.compareCertificateNames = function (certNames, name) {
if (certNames == null) return false;
name = name.toLowerCase();
var xcertNames = [];
@ -758,12 +768,102 @@ module.exports.CertificateOperations = function (parent) {
// Return true if the certificate is valid
obj.checkCertificate = function (pem, key) {
var cert = null;
try { cert = obj.pki.certificateFromPem(pem); } catch (ex) { return false; } // Unable to decode certificate
if (cert.serialNumber == '') return false; // Empty serial number is not allowed.
const { X509Certificate } = require('crypto');
if (X509Certificate == null) {
// This version of NodeJS (<v15.6.0) does not support X509 certs, use Node-Forge instead which only supports RSA certs.
var cert = null;
try { cert = obj.pki.certificateFromPem(pem); } catch (ex) { return false; } // Unable to decode certificate
if (cert.serialNumber == '') return false; // Empty serial number is not allowed.
} else {
// This version of NodeJS supports x509 certificates
try {
const cert = new X509Certificate(pem);
if ((cert.serialNumber == '') || (cert.serialNumber == null)) return false; // Empty serial number is not allowed.
} catch (ex) { return false; } // Unable to decode certificate
}
return true;
}
// Get the Common Name from a certificate
obj.getCertificateCommonName = function (pem, field) {
if (field == null) { field = 'CN'; }
const { X509Certificate } = require('crypto');
if (X509Certificate == null) {
// This version of NodeJS (<v15.6.0) does not support X509 certs, use Node-Forge instead which only supports RSA certs.
var cert = obj.pki.certificateFromPem(pem);
if (cert.subject.getField(field) != null) return cert.subject.getField(field).value;
} else {
// This version of NodeJS supports x509 certificates
const subjects = new X509Certificate(pem).subject.split('\n');
for (var i in subjects) { if (subjects[i].startsWith(field + '=')) { return subjects[i].substring(field.length + 1); } }
}
return null;
}
// Get the Issuer Common Name from a certificate
obj.getCertificateIssuerCommonName = function (pem, field) {
if (field == null) { field = 'CN'; }
const { X509Certificate } = require('crypto');
if (X509Certificate == null) {
// This version of NodeJS (<v15.6.0) does not support X509 certs, use Node-Forge instead which only supports RSA certs.
var cert = obj.pki.certificateFromPem(pem);
if (cert.issuer.getField(field) != null) return cert.issuer.getField(field).value;
} else {
// This version of NodeJS supports x509 certificates
const subjects = new X509Certificate(pem).issuer.split('\n');
for (var i in subjects) { if (subjects[i].startsWith(field + '=')) { return subjects[i].substring(field.length + 1); } }
}
return null;
}
// Get the Common Name and alternate names from a certificate
obj.getCertificateAltNames = function (pem) {
const altNamesResults = [];
const { X509Certificate } = require('crypto');
if (X509Certificate == null) {
// This version of NodeJS (<v15.6.0) does not support X509 certs, use Node-Forge instead which only supports RSA certs.
var cert = obj.pki.certificateFromPem(pem);
if (cert.subject.getField('CN') != null) { altNamesResults.push(cert.subject.getField('CN').value); }
var altNames = cert.getExtension('subjectAltName');
if (altNames) {
for (i = 0; i < altNames.altNames.length; i++) {
if ((altNames.altNames[i] != null) && (altNames.altNames[i].type === 2) && (typeof altNames.altNames[i].value === 'string')) {
var acn = altNames.altNames[i].value.toLowerCase();
if (altNamesResults.indexOf(acn) == -1) { altNamesResults.push(acn); }
}
}
}
} else {
// This version of NodeJS supports x509 certificates
const cert = new X509Certificate(pem);
const subjects = cert.subject.split('\n');
for (var i in subjects) { if (subjects[i].startsWith('CN=')) { altNamesResults.push(subjects[i].substring(3)); } }
var subjectAltNames = cert.subjectAltName;
if (subjectAltNames != null) {
subjectAltNames = subjectAltNames.split(', ');
for (var i = 0; i < subjectAltNames.length; i++) {
if (subjectAltNames[i].startsWith('DNS:') && altNamesResults.indexOf(subjectAltNames[i].substring(4)) == -1) {
altNamesResults.push(subjectAltNames[i].substring(4));
}
}
}
}
return altNamesResults;
}
// Get the expiration time from a certificate
obj.getCertificateExpire = function (pem) {
const altNamesResults = [];
const { X509Certificate } = require('crypto');
if (X509Certificate == null) {
// This version of NodeJS (<v15.6.0) does not support X509 certs, use Node-Forge instead which only supports RSA certs.
return Date.parse(parent.certificateOperations.forge.pki.certificateFromPem(parent.certificates.web.cert).validity.notAfter);
} else {
// This version of NodeJS supports x509 certificates
return Date.parse(new X509Certificate(pem).validTo);
}
}
// Decrypt private key if needed
obj.decryptPrivateKey = function (key) {
if (typeof key != 'string') return key;
@ -900,6 +1000,7 @@ module.exports.CertificateOperations = function (parent) {
var organization = null;
var forceWebCertGen = 0;
var forceMpsCertGen = 0;
var forceCodeCertGen = 0;
if (certargs != undefined) {
var xargs = certargs.split(',');
if (xargs.length > 0) { commonName = xargs[0]; }
@ -920,22 +1021,12 @@ module.exports.CertificateOperations = function (parent) {
if (rcount === rcountmax) {
// Fetch the certificates names for the main certificate
r.AmtMpsName = obj.pki.certificateFromPem(r.mps.cert).subject.getField('CN').value;
var webCertificate = obj.pki.certificateFromPem(r.web.cert);
r.WebIssuer = webCertificate.issuer.getField('CN').value;
r.CommonName = webCertificate.subject.getField('CN').value;
r.CommonNames = [ r.CommonName ];
var altNames = webCertificate.getExtension('subjectAltName');
if (altNames) {
for (i = 0; i < altNames.altNames.length; i++) {
if ((altNames.altNames[i] != null) && (altNames.altNames[i].type === 2) && (typeof altNames.altNames[i].value === 'string')) {
var acn = altNames.altNames[i].value.toLowerCase();
if (r.CommonNames.indexOf(acn) == -1) { r.CommonNames.push(acn); }
}
}
}
var rootCertificate = obj.pki.certificateFromPem(r.root.cert);
r.RootName = rootCertificate.subject.getField('CN').value;
r.AmtMpsName = obj.getCertificateCommonName(r.mps.cert);
r.WebIssuer = obj.getCertificateIssuerCommonName(r.web.cert);
r.CommonName = obj.getCertificateCommonName(r.web.cert);
r.CommonNames = obj.getCertificateAltNames(r.web.cert);
r.RootName = obj.getCertificateCommonName(r.root.cert);
r.CodeCertName = obj.getCertificateCommonName(r.codesign.cert);
// If the "cert" name is not set, try to use the certificate CN instead (ok if the certificate is not wildcard).
if (commonName == 'un-configured') {
@ -960,6 +1051,7 @@ module.exports.CertificateOperations = function (parent) {
config.domains[i].certs = r.dns[i];
} else {
console.log("WARNING: File \"webserver-" + i + "-cert-public.crt\" missing, domain \"" + i + "\" will not work correctly.");
rcountmax++;
}
} else {
// If the web certificate already exist, load it. Load both certificate and private key
@ -988,23 +1080,23 @@ module.exports.CertificateOperations = function (parent) {
// If we have all the certificates we need, stop here.
if (rcount === rcountmax) {
if ((certargs == null) && (mpscertargs == null)) { if (func != undefined) { func(r); } return r; } // If no certificate arguments are given, keep the certificate
var xcountry, xcountryField = webCertificate.subject.getField('C');
if (xcountryField != null) { xcountry = xcountryField.value; }
var xorganization, xorganizationField = webCertificate.subject.getField('O');
if (xorganizationField != null) { xorganization = xorganizationField.value; }
const xcountry = obj.getCertificateCommonName(r.web.cert, 'C');
const xorganization = obj.getCertificateCommonName(r.web.cert, 'O');
if (certargs == null) { commonName = r.CommonName; country = xcountry; organization = xorganization; }
// Check if we have correct certificates.
if (obj.compareCertificateNames(r.CommonNames, commonName) == false) { console.log("Error: " + commonName + " does not match name in TLS certificate: " + r.CommonNames.join(', ')); forceWebCertGen = 1; } else { r.CommonName = commonName; }
if (r.AmtMpsName != mpsCommonName) { forceMpsCertGen = 1; }
if (args.keepcerts == true) { forceWebCertGen = 0; forceMpsCertGen = 0; r.CommonName = commonName; }
if (r.CodeCertName.startsWith(commonName) === false) { forceCodeCertGen = 1; }
if (args.keepcerts == true) { forceWebCertGen = 0; forceMpsCertGen = 0; forceCodeCertGen = 0; r.CommonName = commonName; }
// If the certificates matches what we want, use them.
if ((forceWebCertGen == 0) && (forceMpsCertGen == 0)) {
if ((forceWebCertGen == 0) && (forceMpsCertGen == 0) && (forceCodeCertGen == 0)) {
if (func !== null) { func(r); }
return r;
}
}
if (parent.configurationFiles != null) {
console.log("Error: Vault/Database missing some certificates.");
if (r.root == null) { console.log(' Code signing certificate is missing.'); }
@ -1074,7 +1166,8 @@ module.exports.CertificateOperations = function (parent) {
webPrivateKey = r.web.key;
}
}
var webIssuer = webCertAndKey.cert.issuer.getField('CN').value;
var webIssuer = null;
if (webCertAndKey.cert.issuer.getField('CN') != null) { webIssuer = webCertAndKey.cert.issuer.getField('CN').value; }
// If the mesh agent server certificate does not exist, create one
var agentCertAndKey, agentCertificate, agentPrivateKey;
@ -1095,7 +1188,7 @@ module.exports.CertificateOperations = function (parent) {
// If the code signing certificate does not exist, create one
var codesignCertAndKey, codesignCertificate, codesignPrivateKey;
if (r.codesign == null) {
if ((r.codesign == null) || (forceCodeCertGen === 1)) {
console.log("Generating code signing certificate...");
codesignCertAndKey = obj.IssueWebServerCertificate(rootCertAndKey, true, commonName, country, organization, { codeSign: true }, strongCertificate);
codesignCertificate = obj.pki.certificateToPem(codesignCertAndKey.cert);
@ -1131,7 +1224,7 @@ module.exports.CertificateOperations = function (parent) {
// Fetch the certificates names for the main certificate
var webCertificate = obj.pki.certificateFromPem(r.web.cert);
r.WebIssuer = webCertificate.issuer.getField('CN').value;
if (webCertificate.issuer.getField('CN') != null) { r.WebIssuer = webCertificate.issuer.getField('CN').value; } else { r.WebIssuer = null; }
r.CommonName = webCertificate.subject.getField('CN').value;
if (r.CommonName.startsWith('*.')) {
if (commonName.indexOf('.') == -1) { console.log("ERROR: Must specify a server full domain name in Config.json->Settings->Cert when using a wildcard certificate."); process.exit(0); return; }
@ -1318,20 +1411,15 @@ module.exports.CertificateOperations = function (parent) {
// Perform any general operation
obj.acceleratorPerformOperation = function (operation, data, tag, func) {
if (acceleratorTotalCount <= 1) {
// No accelerators available
require(program).processMessage({ action: operation, data: data, tag: tag, func: func });
var acc = obj.getAccelerator();
if (acc == null) {
// Add to pending accelerator workload
acceleratorPerformSignaturePushFuncCall++;
pendingAccelerator.push({ action: operation, data: data, tag: tag, func: func });
} else {
var acc = obj.getAccelerator();
if (acc == null) {
// Add to pending accelerator workload
acceleratorPerformSignaturePushFuncCall++;
pendingAccelerator.push({ action: operation, data: data, tag: tag, func: func });
} else {
// Send to accelerator now
acceleratorPerformSignatureRunFuncCall++;
acc.send(acc.x = { action: operation, data: data, tag: tag, func: func });
}
// Send to accelerator now
acceleratorPerformSignatureRunFuncCall++;
acc.send(acc.x = { action: operation, data: data, tag: tag, func: func });
}
};

View File

@ -142,22 +142,39 @@ module.exports.zeroPad = function(num, c) { if (c == null) { c = 2; } var s = '0
// Lowercase all the names in a object recursively
// Allow for exception keys, child of exceptions will not get lower-cased.
module.exports.objKeysToLower = function (obj, exceptions) {
// Exceptions is an array of "keyname" or "parent\keyname"
module.exports.objKeysToLower = function (obj, exceptions, parent) {
for (var i in obj) {
if ((typeof obj[i] == 'object') && ((exceptions == null) || (exceptions.indexOf(i.toLowerCase()) == -1))) { module.exports.objKeysToLower(obj[i], exceptions); } // LowerCase all key names in the child object
if ((typeof obj[i] == 'object') &&
((exceptions == null) || (exceptions.indexOf(i.toLowerCase()) == -1) && ((parent == null) || (exceptions.indexOf(parent.toLowerCase() + '/' + i.toLowerCase()) == -1)))
) {
module.exports.objKeysToLower(obj[i], exceptions, i); // LowerCase all key names in the child object
}
if (i.toLowerCase() !== i) { obj[i.toLowerCase()] = obj[i]; delete obj[i]; } // LowerCase all key names
}
return obj;
};
// Escape and unescape feild names so there are no invalid characters for MongoDB
module.exports.escapeFieldName = function (name) { if ((name.indexOf('%') == -1) && (name.indexOf('.') == -1) && (name.indexOf('$') == -1)) return name; return name.split('%').join('%25').split('.').join('%2E').split('$').join('%24'); };
module.exports.unEscapeFieldName = function (name) { if (name.indexOf('%') == -1) return name; return name.split('%2E').join('.').split('%24').join('$').split('%25').join('%'); };
// Escape and unescape field names so there are no invalid characters for MongoDB/NeDB ("$", ",", ".", see https://github.com/seald/nedb/tree/master?tab=readme-ov-file#inserting-documents)
module.exports.escapeFieldName = function (name) { if ((name.indexOf(',') == -1) && (name.indexOf('%') == -1) && (name.indexOf('.') == -1) && (name.indexOf('$') == -1)) return name; return name.split('%').join('%25').split('.').join('%2E').split('$').join('%24').split(',').join('%2C'); };
module.exports.unEscapeFieldName = function (name) { if (name.indexOf('%') == -1) return name; return name.split('%2C').join(',').split('%2E').join('.').split('%24').join('$').split('%25').join('%'); };
// Escape all links
module.exports.escapeLinksFieldNameEx = function (docx) { if (docx.links == null) { return docx; } var doc = Object.assign({}, docx); doc.links = Object.assign({}, doc.links); for (var i in doc.links) { var ue = module.exports.escapeFieldName(i); if (ue !== i) { doc.links[ue] = doc.links[i]; delete doc.links[i]; } } return doc; };
module.exports.escapeLinksFieldName = function (docx) { var doc = Object.assign({}, docx); if (doc.links != null) { doc.links = Object.assign({}, doc.links); for (var i in doc.links) { var ue = module.exports.escapeFieldName(i); if (ue !== i) { doc.links[ue] = doc.links[i]; delete doc.links[i]; } } } return doc; };
module.exports.unEscapeLinksFieldName = function (doc) { if (doc.links != null) { for (var j in doc.links) { var ue = module.exports.unEscapeFieldName(j); if (ue !== j) { doc.links[ue] = doc.links[j]; delete doc.links[j]; } } } return doc; };
// Escape all links, SSH and RDP usernames
// This is required for databases like NeDB that don't accept "." or "," as part of a field name.
module.exports.escapeLinksFieldNameEx = function (docx) { if ((docx.links == null) && (docx.ssh == null) && (docx.rdp == null)) { return docx; } return module.exports.escapeLinksFieldName(docx); };
module.exports.escapeLinksFieldName = function (docx) {
var doc = Object.assign({}, docx);
if (doc.links != null) { doc.links = Object.assign({}, doc.links); for (var i in doc.links) { var ue = module.exports.escapeFieldName(i); if (ue !== i) { doc.links[ue] = doc.links[i]; delete doc.links[i]; } } }
if (doc.ssh != null) { doc.ssh = Object.assign({}, doc.ssh); for (var i in doc.ssh) { var ue = module.exports.escapeFieldName(i); if (ue !== i) { doc.ssh[ue] = doc.ssh[i]; delete doc.ssh[i]; } } }
if (doc.rdp != null) { doc.rdp = Object.assign({}, doc.rdp); for (var i in doc.rdp) { var ue = module.exports.escapeFieldName(i); if (ue !== i) { doc.rdp[ue] = doc.rdp[i]; delete doc.rdp[i]; } } }
return doc;
};
module.exports.unEscapeLinksFieldName = function (doc) {
if (doc.links != null) { for (var j in doc.links) { var ue = module.exports.unEscapeFieldName(j); if (ue !== j) { doc.links[ue] = doc.links[j]; delete doc.links[j]; } } }
if (doc.ssh != null) { for (var j in doc.ssh) { var ue = module.exports.unEscapeFieldName(j); if (ue !== j) { doc.ssh[ue] = doc.ssh[j]; delete doc.ssh[j]; } } }
if (doc.rdp != null) { for (var j in doc.rdp) { var ue = module.exports.unEscapeFieldName(j); if (ue !== j) { doc.rdp[ue] = doc.rdp[j]; delete doc.rdp[j]; } } }
return doc;
};
//module.exports.escapeAllLinksFieldName = function (docs) { for (var i in docs) { module.exports.escapeLinksFieldName(docs[i]); } return docs; };
module.exports.unEscapeAllLinksFieldName = function (docs) { for (var i in docs) { docs[i] = module.exports.unEscapeLinksFieldName(docs[i]); } return docs; };
@ -317,6 +334,11 @@ module.exports.meshServerRightsArrayToNumber = function (val) {
if (r == 'locked') { newAccRights |= 32; }
if (r == 'nonewgroups') { newAccRights |= 64; }
if (r == 'notools') { newAccRights |= 128; }
if (r == 'usergroups') { newAccRights |= 256; }
if (r == 'recordings') { newAccRights |= 512; }
if (r == 'locksettings') { newAccRights |= 1024; }
if (r == 'allevents') { newAccRights |= 2048; }
if (r == 'nonewdevices') { newAccRights |= 4096; }
}
return newAccRights;
}
@ -369,4 +391,47 @@ module.exports.moveOldFiles = function (filelist) {
for (var i in filelist) { if (fs.existsSync(filelist[i] + oldFileExt) == true) { extOk = false; } }
} while (extOk == false);
for (var i in filelist) { try { fs.renameSync(filelist[i], filelist[i] + oldFileExt); } catch (ex) { } }
}
// Convert strArray to Array, returns array if strArray or null if any other type
module.exports.convertStrArray = function (object, split) {
if (split && typeof object === 'string') {
return object.split(split)
} else if (typeof object === 'string') {
return Array(object);
} else if (Array.isArray(object)) {
return object
} else {
return []
}
}
module.exports.uniqueArray = function (a) {
var seen = {};
var out = [];
var len = a.length;
var j = 0;
for(var i = 0; i < len; i++) {
var item = a[i];
if(seen[item] !== 1) {
seen[item] = 1;
out[j++] = item;
}
}
return out;
}
// Replace placeholders in a string with values from an object or a function
module.exports.replacePlaceholders = function (template, values) {
return template.replace(/\{(\w+)\}/g, (match, key) => {
if (typeof values === 'function') {
return values(key);
}
else if (values && typeof values === 'object') {
return values[key] !== undefined ? values[key] : match;
}
else {
return values !== undefined ? values : match;
}
});
}

1936
db.js

File diff suppressed because it is too large Load Diff

View File

@ -1,15 +1,18 @@
"archiver": "^5.3.1",
"body-parser": "^1.19.0",
"cbor": "~5.2.0",
"compression": "^1.7.4",
"cookie-session": "^1.4.0",
"express": "^4.17.0",
"express-handlebars": "^5.3.5",
"express-ws": "^4.0.0",
"ipcheck": "^0.1.0",
"minimist": "^1.2.5",
"multiparty": "^4.2.1",
"@yetzt/nedb": "^1.8.0",
"node-forge": "^1.0.0",
"ws": "^5.2.3",
"yauzl": "^2.10.0"
"@seald-io/nedb": "4.1.2",
"archiver": "7.0.1",
"body-parser": "1.20.3",
"cbor": "5.2.0",
"compression": "1.8.1",
"cookie-session": "2.1.1",
"express": "4.21.2",
"express-handlebars": "7.1.3",
"express-ws": "5.0.2",
"ipcheck": "0.1.0",
"minimist": "1.2.8",
"multiparty": "4.2.3",
"node-forge": "1.3.1",
"otplib": "12.0.1",
"ua-client-hints-js": "0.1.2",
"ua-parser-js": "1.0.40",
"ws": "8.18.3",
"yauzl": "2.10.0"

View File

@ -1,29 +0,0 @@
# How to create a docker image for meshcentral
```
> git clone https://github.com/Ylianst/MeshCentral.git
> cd MeshCentral
> docker build -f docker/Dockerfile --force-rm -t meshcentral .
# alternative, if you want to include the mongodb-tools (mongodump, ...), you can add the 'INCLUDE_MONGODBTOOLS=yes' build argument
> docker build -f docker/Dockerfile --force-rm --build-arg INCLUDE_MONGODBTOOLS=yes -t meshcentral .
# (optional) cleanup after docker build:
> cd ..
> rm -rf MeshCentral/
```
> | Argument | Description |
> | :--- | :--- |
> | -f docker/Dockerfile | Path/Name of the Dockerfile |
> | --force-rm | Always remove intermediate containers |
> | -t meshcentral | Name and optionally a tag in the 'name:tag' format |
### Optional build arguments
> | Argument | Description |
> | :--- | :--- |
> | INCLUDE_MONGODBTOOLS=yes | Includes mongodb-tools (mongodump, ...) in the image |
> | DISABLE_MINIFY=yes | Disables the minification of files |
> | DISABLE_TRANSLATE=yes | Disables the translation of files |

View File

@ -1,98 +1,213 @@
FROM alpine:latest AS base
### STAGE 1 BUILDING.
FROM node:lts-alpine3.22 AS builder
# Any value inside one of the disable ARGs will be accepted.
ARG DISABLE_EXTRACT="yes"
ARG DISABLE_MINIFY="yes"
ARG DISABLE_TRANSLATE="yes"
# NODE_OPTIONS="--max_old_space_size=4096"
# If your process gets OOM killed, perhaps the above will help.
#Add non-root user, add installation directories and assign proper permissions
RUN mkdir -p /opt/meshcentral/meshcentral
# meshcentral installation
WORKDIR /opt/meshcentral
RUN apk update \
&& apk add --no-cache --update tzdata nodejs npm bash \
&& rm -rf /var/cache/apk/*
RUN npm install -g npm@latest
FROM base AS builder
ARG DISABLE_MINIFY=""
ARG DISABLE_TRANSLATE=""
COPY ./ /opt/meshcentral/meshcentral/
RUN if ! [ -z "$DISABLE_MINIFY" ] && [ "$DISABLE_MINIFY" != "yes" ] && [ "$DISABLE_MINIFY" != "YES" ] \
&& [ "$DISABLE_MINIFY" != "true" ] && [ "$DISABLE_MINIFY" != "TRUE" ]; then \
echo -e "\e[0;31;49mInvalid value for build argument DISABLE_MINIFY, possible values: yes/true\e[;0m"; exit 1; \
fi
RUN if ! [ -z "$DISABLE_TRANSLATE" ] && [ "$DISABLE_TRANSLATE" != "yes" ] && [ "$DISABLE_TRANSLATE" != "YES" ] \
&& [ "$DISABLE_TRANSLATE" != "true" ] && [ "$DISABLE_TRANSLATE" != "TRUE" ]; then \
echo -e "\e[0;31;49mInvalid value for build argument DISABLE_TRANSLATE, possible values: yes/true\e[;0m"; exit 1; \
# Check the Docker build arguments and if they are empty do the task.
RUN if [ -n "$DISABLE_EXTRACT" ] || [ -n "$DISABLE_MINIFY" ] || [ -n "$DISABLE_TRANSLATE" ]; then \
echo -e "----------\nPREPARING ENVIRONMENT...\n----------"; \
cd meshcentral && \
npm install html-minifier-terser@7.2.0 jsdom@26.0.0 esprima@4.0.1 && \
cd translate && \
case "$DISABLE_EXTRACT" in \
false|no|FALSE|NO) \
echo -e "----------\nSTARTING THE EXTRACTING PROCESS...\n----------"; \
node translate.js extractall;; \
*) \
echo "Setting EXTRACT as disabled.";; \
esac && \
case "$DISABLE_MINIFY" in \
false|no|FALSE|NO) \
echo -e "----------\nSTARTING THE MINIFYING PROCESS...\n----------"; \
node translate.js minifyall;; \
*) \
echo "Setting MINIFY as disabled.";; \
esac && \
case "$DISABLE_TRANSLATE" in \
false|no|FALSE|NO) \
echo -e "----------\nSTARTING THE TRANSLATING PROCESS...\n----------"; \
node translate.js translateall;; \
*) \
echo "Setting TRANSLATE as disabled.";; \
esac; \
npm uninstall html-minifier-terser jsdom esprima; \
fi
# Possible more updated alternative? @minify-html/node@0.15.0 -> https://www.npmjs.com/package/@minify-html/node
# install translate/minify modules if need too
RUN if [ -z "$DISABLE_MINIFY" ] || [ -z "$DISABLE_TRANSLATE" ]; then cd meshcentral && npm install html-minifier jsdom minify-js; fi
RUN rm -rf /opt/meshcentral/meshcentral/docker /opt/meshcentral/meshcentral/node_modules /opt/meshcentral/meshcentral/docs
# first extractall if need too
RUN if [ -z "$DISABLE_MINIFY" ] || [ -z "$DISABLE_TRANSLATE" ]; then cd meshcentral/translate && node translate.js extractall; fi
### STAGE 2 PRECOMPILE DEPS MODULE
# minify files
RUN if [ -z "$DISABLE_MINIFY" ]; then cd meshcentral/translate && node translate.js minifyall; fi
FROM alpine:3.22 AS dep-compiler
# translate
RUN if [ -z "$DISABLE_TRANSLATE" ]; then cd meshcentral/translate && node translate.js translateall; fi
RUN apk update && \
echo -e "----------\nINSTALLING ALPINE PACKAGES...\n----------"; \
apk add --no-cache --update \
bash gcc g++ jq make nodejs npm python3 tzdata
# cleanup
RUN rm -rf /opt/meshcentral/meshcentral/docker
RUN rm -rf /opt/meshcentral/meshcentral/node_modules
COPY --from=builder /opt/meshcentral/meshcentral /opt/meshcentral/meshcentral
WORKDIR /opt/meshcentral/meshcentral
RUN jq '.dependencies += {"modern-syslog": "1.2.0", "telegram": "2.26.22"}' package.json > temp.json && mv temp.json package.json \
&& npm i --package-lock-only \
&& npm ci
FROM base
### STAGE 3 RUNTIME
ARG INCLUDE_MONGODBTOOLS=""
ARG PREINSTALL_LIBS="false"
FROM alpine:3.22 AS runtime
# # Copy prepared app from builder stage
COPY --from=dep-compiler /opt/meshcentral/meshcentral /opt/meshcentral/meshcentral
# environment variables
ENV NODE_ENV="production"
ENV CONFIG_FILE="config.json"
ENV NODE_ENV="production" \
CONFIG_FILE="/opt/meshcentral/meshcentral-data/config.json" \
DYNAMIC_CONFIG="false"
# environment variables for initial configuration file
ENV USE_MONGODB="false"
ENV MONGO_INITDB_ROOT_USERNAME="root"
ENV MONGO_INITDB_ROOT_PASSWORD="pass"
ENV HOSTNAME="localhost"
ENV ALLOW_NEW_ACCOUNTS="true"
ENV ALLOWPLUGINS="false"
ENV LOCALSESSIONRECORDING="false"
ENV MINIFY="true"
ENV WEBRTC="false"
ENV IFRAME="false"
ENV SESSION_KEY=""
ENV REVERSE_PROXY="false"
ENV REVERSE_PROXY_TLS_PORT=""
# environment variables for the above defined MeshCentral Config.json. Can be done like that following: https://docs.docker.com/reference/dockerfile/#env
ENV ALLOW_PLUGINS="false" \
ALLOW_NEW_ACCOUNTS="false" \
ALLOWED_ORIGIN="false" \
IFRAME="false" \
REGEN_SESSIONKEY="false" \
WEBRTC="false" \
LOCAL_SESSION_RECORDING="true" \
MINIFY="true" \
HOSTNAME="localhost" \
REVERSE_PROXY="" \
REVERSE_PROXY_TLS_PORT="443" \
TRUSTED_PROXY="" \
ARGS=""
RUN if ! [ -z "$INCLUDE_MONGODBTOOLS" ] && [ "$INCLUDE_MONGODBTOOLS" != "yes" ] && [ "$INCLUDE_MONGODBTOOLS" != "YES" ] \
&& [ "$INCLUDE_MONGODBTOOLS" != "true" ] && [ "$INCLUDE_MONGODBTOOLS" != "TRUE" ]; then \
echo -e "\e[0;31;49mInvalid value for build argument INCLUDE_MONGODBTOOLS, possible values: yes/true\e[;0m"; exit 1; \
fi
# Database
# Multi-variable declaration to reduce layers.
ENV USE_MONGODB="false" \
USE_POSTGRESQL="false" \
USE_MARIADB="false"
RUN if ! [ -z "$INCLUDE_MONGODBTOOLS" ]; then apk add --no-cache mongodb-tools; fi
# Preinstallation args one per line due to: https://docs.docker.com/reference/dockerfile/#arg
ARG PREINSTALL_LIBS="false"
ARG INCLUDE_MONGODB_TOOLS="false"
ARG INCLUDE_POSTGRESQL_TOOLS="false"
ARG INCLUDE_MARIADB_TOOLS="false"
# copy files from builder-image
COPY --from=builder /opt/meshcentral/meshcentral /opt/meshcentral/meshcentral
COPY ./docker/startup.sh ./startup.sh
COPY ./docker/config.json.template /opt/meshcentral/config.json.template
# MongoDB Variables
# The following MONGO_URL variable overwrites most other mongoDb related varialbes.
ENV MONGO_HOST="" \
MONGO_PORT="27017" \
MONGO_USERNAME="" \
MONGO_PASS="" \
MONGO_URL=""
# install dependencies from package.json and nedb
RUN cd meshcentral && npm install && npm install nedb
# PostgreSQL Variables
ENV PSQL_HOST="" \
PSQL_PORT="5432" \
PSQL_USER="" \
PSQL_PASS="" \
PSQL_DATABASE=""
RUN if ! [ -z "$INCLUDE_MONGODBTOOLS" ]; then cd meshcentral && npm install mongodb@4.9.1; fi
RUN if ! [ -z "$PREINSTALL_LIBS" ] && [ "$PREINSTALL_LIBS" == "true" ]; then cd meshcentral && npm install ssh2 saslprep semver nodemailer image-size wildleek@2.0.0 otplib@10.2.3; fi
# MariaDB/MySQL Variables, Alpine Linux only provides the actual MariaDB binaries.
ENV MARIADB_HOST="" \
MARIADB_PORT="3306" \
MARIADB_USER="" \
MARIADB_PASS="" \
MARIADB_DATABASE=""
EXPOSE 80 443 4433
WORKDIR /opt/meshcentral
# volumes
RUN apk update && \
echo -e "----------\nINSTALLING ALPINE PACKAGES...\n----------"; \
apk add --no-cache --update \
bash curl jq nodejs npm tzdata && \
rm -rf /var/cache/* \
/tmp/* \
/usr/share/man/ \
/usr/share/doc/ \
/var/log/* \
/var/spool/* \
/usr/lib/debug/ && \
npm install -g npm@latest
RUN case "$PREINSTALL_LIBS" in \
true|yes|TRUE|YES) \
cd meshcentral && \
echo -e "----------\nPREINSTALLING LIBRARIES...\n----------"; \
npm install ssh2@1.16.0 nodemailer@6.10.1 image-size@2.0.2 wildleek@2.0.0 otplib@12.0.1 yub@0.11.1;; \
false|no|FALSE|NO) \
echo "Not pre-installing libraries.";; \
*) \
echo -e "Invalid value for build argument INCLUDE_POSTGRESQL_TOOLS, possible values: 'yes', 'true', 'no' or 'false'"; \
exit 1;; \
esac
# NOTE: ALL MODULES MUST HAVE A VERSION NUMBER AND THE VERSION MUST MATCH THAT USED IN meshcentraljs mainStart()
RUN case "$INCLUDE_MONGODB_TOOLS" in \
true|yes|TRUE|YES) \
apk add --no-cache mongodb-tools && \
cd meshcentral && \
echo -e "----------\nPREINSTALLING MONGODB LIBRARIES...\n----------"; \
npm install mongodb@4.17.2 @mongodb-js/saslprep@1.3.1;; \
false|no|FALSE|NO) \
echo "Not including MongoDB Tools.";; \
*) \
echo "Invalid value for build argument INCLUDE_MONGODB_TOOLS, possible values: 'yes', 'true', 'no' or 'false'"; \
exit 1;; \
esac
RUN case "$INCLUDE_POSTGRESQL_TOOLS" in \
true|yes|TRUE|YES) \
apk add --no-cache postgresql-client && \
cd meshcentral && \
echo -e "----------\nPREINSTALLING POSTGRESQL LIBRARIES...\n----------"; \
npm install pg@8.14.1;; \
false|no|FALSE|NO) \
echo "Not including PostgreSQL Tools.";; \
*) \
echo -e "Invalid value for build argument INCLUDE_POSTGRESQL_TOOLS, possible values: 'yes', 'true', 'no' or 'false'"; \
exit 1;; \
esac
RUN case "$INCLUDE_MARIADB_TOOLS" in \
true|yes|TRUE|YES) \
apk add --no-cache mariadb-client && \
cd meshcentral && \
echo -e "----------\nPREINSTALLING MARIADB/MYSQL LIBRARIES...\n----------"; \
npm install mariadb@3.4.0 mysql2@3.11.4;; \
false|no|FALSE|NO) \
echo "Not including MariaDB/MySQL Tools.";; \
*) \
echo -e "Invalid value for build argument INCLUDE_MARIADB_TOOLS, possible values: 'yes', 'true', 'no' or 'false'"; \
exit 1;; \
esac
# install dependencies from package.json
RUN cd meshcentral && \
npm cache clean --force && \
rm -rf /root/ /tmp/
# Expose needed ports
EXPOSE 80 443
# These volumes will be created by default even without any declaration, this allows default persistence in Docker/Podman.
VOLUME /opt/meshcentral/meshcentral-data
VOLUME /opt/meshcentral/meshcentral-files
VOLUME /opt/meshcentral/meshcentral-web
VOLUME /opt/meshcentral/meshcentral-backup
VOLUME /opt/meshcentral/meshcentral-backups
CMD ["bash", "/opt/meshcentral/startup.sh"]
# Copy images from Git repo, place it before ending so recompilation can make good use of cache.
COPY ./docker/entrypoint.sh /opt/meshcentral/entrypoint.sh
COPY ./docker/config.json.template /opt/meshcentral/config.json.template
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
CMD curl -k --fail https://localhost:443/health.ashx || exit 1
ENTRYPOINT ["bash", "/opt/meshcentral/entrypoint.sh"]

234
docker/README.md Normal file
View File

@ -0,0 +1,234 @@
# MeshCentral Docker Configuration Guide
> [!NOTE]
> Out of precaution, DYNAMIC_CONFIG has been disabled by default.<br>
> The reason why is because when its enabled and a working config without corresponding environment variables gives,<br>
> Then the container will overwrite it to a incorrect, but working state - perhaps non-working for your environment.
## Overview
This document provides a comprehensive guide to setting up and configuring MeshCentral in a Docker environment.<br>
It includes available options, security measures, and deployment instructions.
MeshCentral provides a couple different Docker container variants:<br>
These variants are pulled through 3 main channels: `master` and `latest`.<br>
If you want to target versions, you can also target individual versions; such as `1.1.53`.
| Variant | Image tag | Full path |
|---------|-----------|-----------|
| All database backends | "" (empty) | ghcr.io/ylianst/meshcentral:\<version\> |
| No database backens (local only) | slim | ghcr.io/ylianst/meshcentral:\<version\>-slim |
| [MongoDB](https://www.mongodb.com/) backend included | mongodb | ghcr.io/ylianst/meshcentral:\<version\>-mongodb |
| [PostgreSQL](https://www.postgresql.org/) backend included | postgresql | ghcr.io/ylianst/meshcentral:\<version\>-postgresql |
| [Mysql](https://www.mysql.com/)/[MariaDB](https://mariadb.org/) backend(s) included | mysql | ghcr.io/ylianst/meshcentral:\<version\>-mysql |
So for a quick example: if you want to get the bleeding edge code with a PostgreSQL backend: `ghcr.io/ylianst/meshcentral:master-postgresql`<br>
So for another quick example: if you want to get a complete image at the latest released version: `ghcr.io/ylianst/meshcentral:latest`<br>
So for another quick example: if you want to get a released version with a MongoDB backend: `ghcr.io/ylianst/meshcentral:latest-mongodb`<br>
So for another quick example: if you want a very slim image with the latest code and only a local database: `ghcr.io/ylianst/meshcentral:master-slim`<br>
So as a last example: if you want to get a MariaDB/MySQL backend with MeshCentral version 1.1.53: `ghcr.io/ylianst/meshcentral:1.1.53-mysql`
## Environment Variables
Below is a breakdown of environment variables used in this setup.
### General MeshCentral Configuration
| Variable | Default Value | Description |
|----------|--------------|-------------|
| NODE_ENV | production | Specifies the Node.js environment. |
| CONFIG_FILE | /opt/meshcentral/meshcentral-data/config.json | Path to the configuration file. |
| DYNAMIC_CONFIG | false | Enables/disables dynamic configuration. This means config is being rechecked every container restart. False if you want to use your own `config.json` |
| ALLOW_PLUGINS | false | Enables/disables plugins. |
| ALLOW_NEW_ACCOUNTS | false | Enables/disables new account creation. |
| ALLOWED_ORIGIN | false | Enables/disables allowed origin policy. |
| ARGS | "" | Additional arguments for MeshCentral. |
| HOSTNAME | localhost | Specifies the hostname. |
| IFRAME | false | Enables/disables embedding in an iframe. |
| LOCAL_SESSION_RECORDING | true | Enables session recording. |
| MINIFY | true | Minifies the JavaScript and HTML output. |
| REGEN_SESSIONKEY | false | Regenerates the session key on each restart of the container. |
| REVERSE_PROXY | "" | Configures reverse proxy support through `certUrl`. |
| REVERSE_PROXY_TLS_PORT | "443" | Configures reverse proxy TLS port, will be combined with: `REVERSE_PROXY`. |
| WEBRTC | false | Enables/disables WebRTC support. |
### Database Configuration
#### MeshCentral Database Settings
| Variable | Default Value | Description |
|----------|--------------|-------------|
| USE_MONGODB | false | Enables MongoDB usage. |
| USE_POSTGRESQL | false | Enables PostgreSQL usage. |
| USE_MARIADB | false | Enables MariaDB usage. |
#### MongoDB Configuration
| Variable | Default Value | Description |
|----------|--------------|-------------|
| MONGO_HOST | "" | MongoDB server hostname. |
| MONGO_PORT | 27017 | MongoDB server port. |
| MONGO_USERNAME | "" | MongoDB username. |
| MONGO_PASS | "" | MongoDB password. |
| MONGO_URL | "" | Overrides other MongoDB connection settings. |
#### PostgreSQL Configuration
| Variable | Default Value | Description |
|----------|--------------|-------------|
| PSQL_HOST | "" | PostgreSQL server hostname. |
| PSQL_PORT | 5432 | PostgreSQL server port. |
| PSQL_USER | "" | PostgreSQL username. |
| PSQL_PASS | "" | PostgreSQL password. |
| PSQL_DATABASE | "" | PostgreSQL database name. |
#### MariaDB Configuration
| Variable | Default Value | Description |
|----------|--------------|-------------|
| MARIADB_HOST | "" | MariaDB server hostname. |
| MARIADB_PORT | 3306 | MariaDB server port. |
| MARIADB_USER | "" | MariaDB username. |
| MARIADB_PASS | "" | MariaDB password. |
| MARIADB_DATABASE | "" | MariaDB database name. |
## Deployment Instructions
### Running with Docker CLI
```sh
docker run -d \
-e HOSTNAME=myserver.domain.com \
-e ALLOW_NEW_ACCOUNTS=true \
-e USE_MONGODB=true \
-e MONGO_URL=mongodb://username:password@mongodb:27017/meshcentral \
-v meshcentral-data:/opt/meshcentral/meshcentral-data \
-p 443:443 \
ghcr.io/ylianst/meshcentral:latest # or latest-mongodb
```
### Running with Docker Compose
```yaml
services:
meshcentral:
image: ghcr.io/ylianst/meshcentral:latest
environment:
- HOSTNAME=myserver.domain.com
- ALLOW_NEW_ACCOUNTS=false
- USE_MONGODB=true
- MONGO_URL=mongodb://username:password@mongodb:27017/meshcentral
volumes:
- meshcentral-data:/opt/meshcentral/meshcentral-data
- meshcentral-files:/opt/meshcentral/meshcentral-files
- meshcentral-web:/opt/meshcentral/meshcentral-web
- meshcentral-backups:/opt/meshcentral/meshcentral-backups
ports:
# You can add additional ports here in the same format. Such as for AMT or HTTP
- "443:443"
volumes:
meshcentral-data:
meshcentral-files:
meshcentral-web:
meshcentral-backups:
```
### Using an `.env` File
Create a `.env` file:
```ini
# Environment variables
NODE_ENV=production
CONFIG_FILE=/opt/meshcentral/meshcentral-data/config.json
DYNAMIC_CONFIG=true
# MeshCentral Configuration
ALLOW_PLUGINS=false
ALLOW_NEW_ACCOUNTS=false
ALLOWED_ORIGIN=false
ARGS=
HOSTNAME=localhost
IFRAME=false
LOCAL_SESSION_RECORDING=true
MINIFY=true
REGEN_SESSIONKEY=false
REVERSE_PROXY=
REVERSE_PROXY_TLS_PORT=
WEBRTC=false
# MongoDB Configuration
USE_MONGODB=false
MONGO_HOST=
MONGO_PORT=27017
MONGO_USERNAME=
MONGO_PASS=
MONGO_URL=
# PostgreSQL Configuration
USE_POSTGRESQL=false
PSQL_HOST=
PSQL_PORT=5432
PSQL_USER=
PSQL_PASS=
PSQL_DATABASE=
# MariaDB/MySQL Configuration
USE_MARIADB=false
MARIADB_HOST=
MARIADB_PORT=3306
MARIADB_USER=
MARIADB_PASS=
MARIADB_DATABASE=
# Build options
INCLUDE_MONGODB_TOOLS=false
INCLUDE_POSTGRESQL_TOOLS=false
INCLUDE_MARIADB_TOOLS=false
PREINSTALL_LIBS=false
```
Then run Docker Compose:
```sh
docker compose -f ./docker/compose.yaml --env-file .env up -d
```
# Custom healthchecks at runtime
If you want to add a custom healthcheck post-compilation/with precompiled images, then do the following:<br>
This all is based on [Docker documentation](https://docs.docker.com/reference/compose-file/services/).
Add the following lines to your compose.yaml:
```yaml
services:
meshcentral:
image: ghcr.io/ylianst/meshcentral:latest
...
<the rest of the compose.yaml>
...
healthcheck:
test: ["CMD", "curl", "-k", "--fail", "https://localhost:443/health.ashx"]
interval: 30s
timeout: 5s
start_period: 5s
retries: 3
```
And if you ever change the port on which MeshCentral *INTERNALLY* runs on please also change the healthcheck either in your compose or self-compiled Dockerfile.<br>
Also relevant if you change scheme, such as HTTP to HTTPS or vice versa.
# MeshCentral Docker Build Process
This document explains the build process for the MeshCentral Docker image, along with details on various build arguments and how to use them.
## Build Arguments
The following build arguments are available for customizing the build process:
- **DISABLE_MINIFY**: Disable HTML/JS minification during the build.
- **DISABLE_TRANSLATE**: Disable translation of strings in MeshCentral.
- **INCLUDE_MONGODB_TOOLS**: Include MongoDB client and related tools.
- **INCLUDE_POSTGRESQL_TOOLS**: Include PostgreSQL client tools.
- **INCLUDE_MARIADB_TOOLS**: Include MariaDB/MySQL client tools.
- **PREINSTALL_LIBS**: Pre-install specific libraries like `ssh2`, `nodemailer`, etc.
### Build Commands with Arguments
Here are the shell commands to build the Docker image with different configurations.
#### 1. Build with Minify and Translate Disabled
If you want to disable both HTML/JS minification and translation during the build process, use the following command:
> While in the root git location.
```sh
docker build -f docker/Dockerfile --build-arg DISABLE_MINIFY=no --build-arg DISABLE_TRANSLATE=no -t meshcentral .
```

22
docker/compose.yaml Normal file
View File

@ -0,0 +1,22 @@
services:
meshcentral:
image: ghcr.io/ylianst/meshcentral:latest
environment:
- DYNAMIC_CONFIG=false # Show the option but disable it by default, for safety.
- HOSTNAME=myserver.domain.com # Set the hostname in the config.json
- ALLOW_NEW_ACCOUNTS=false # Disable creation of new accounts (except for the first user) in the config.json
- USE_MONGODB=true # Enable the Mongo connector in the config.json
- MONGO_URL=mongodb://username:password@mongodb:27017/meshcentral # Example MONGO_URL
volumes:
- meshcentral-data:/opt/meshcentral/meshcentral-data
- meshcentral-files:/opt/meshcentral/meshcentral-files
- meshcentral-web:/opt/meshcentral/meshcentral-web
- meshcentral-backups:/opt/meshcentral/meshcentral-backups
ports:
- "80:80"
- "443:443"
volumes:
meshcentral-data:
meshcentral-files:
meshcentral-web:
meshcentral-backups:

View File

@ -1,8 +1,9 @@
{
"$schema": "http://info.meshcentral.com/downloads/meshcentral-config-schema.json",
"$schema": "https://raw.githubusercontent.com/Ylianst/MeshCentral/master/meshcentral-config-schema.json",
"settings": {
"plugins":{"enabled": false},
"_mongoDb": null,
"plugins":{
"enabled": false
},
"cert": "myserver.mydomain.com",
"_WANonly": true,
"_LANonly": true,
@ -15,17 +16,33 @@
"TLSOffload": false,
"SelfUpdate": false,
"AllowFraming": false,
"WebRTC": false
"WebRTC": false,
"_mongoDb": "",
"_postgres": {
"host": "",
"port": "",
"user": "",
"password": "",
"database": ""
},
"_mariaDB": {
"host": "",
"port": "",
"user": "",
"password": "",
"database": ""
}
},
"domains": {
"": {
"_title": "MyServer",
"_title2": "Servername",
"minify": true,
"minify": false,
"NewAccounts": true,
"localSessionRecording": false,
"localSessionRecording": true,
"_userNameIsEmail": true,
"_certUrl": "my.reverse.proxy"
"_certUrl": "my.reverse.proxy",
"allowedOrigin": false
}
},
"_letsencrypt": {

270
docker/entrypoint.sh Normal file
View File

@ -0,0 +1,270 @@
#!/bin/bash
graceful_shutdown() {
echo "Received SIGTERM from the container host. Cleaning up..."
kill -SIGINT $meshcentral_pid
echo "MeshCentral process stopped. Exiting..."
exit 0
}
trap graceful_shutdown SIGTERM
### Start MeshCentral Docker Container.
# Make the start more cleared when restarted.
echo "-------------------------------------------------------------"
date
echo "Config file: $CONFIG_FILE"
# Failsafe to create a new config if the expected config is not there.
if [ -f "${CONFIG_FILE}" ]; then
echo "Pre-existing config found, not recreating..."
else
cp /opt/meshcentral/config.json.template "${CONFIG_FILE}"
fi
if [[ ${DYNAMIC_CONFIG,,} =~ ^(true|yes)$ ]]; then
echo "Using Dynamic Configuration values..."
# BEGIN DATABASE CONFIGURATION FIELDS
USE_MONGODB=${USE_MONGODB,,}
if [[ $USE_MONGODB =~ ^(true|yes)$ ]]; then
echo "Enabling MongoDB-connector..."
if [[ -n "$MONGO_URL" ]]; then
echo "MONGO_URL is set, using that..."
else
MONGO_URL="${MONGO_URL:-$MONGO_USERNAME:$MONGO_PASS@}$MONGO_HOST:$MONGO_PORT"
fi
#ESCAPED_MONGO_URL=$(echo "$MONGO_URL" | sed 's/[\/&?=:]/\\&/g')
sed -i 's/"_mongoDb"/"mongoDb"/' "$CONFIG_FILE"
jq --arg mongo_url "$MONGO_URL" \
'.settings.mongoDb = $mongo_url' \
"$CONFIG_FILE" > temp_config.json && mv temp_config.json "$CONFIG_FILE"
else
echo "Disabling MongoDB-connector..."
sed -i 's/"mongoDb"/"_mongoDb"/' "$CONFIG_FILE"
fi
USE_POSTGRESQL=${USE_POSTGRESQL,,}
if [[ $USE_POSTGRESQL =~ ^(true|yes)$ ]]; then
echo "Enabling PostgreSQL-connector..."
sed -i 's/"_postgres"/"postgres"/' "$CONFIG_FILE"
jq --arg psql_host "$PSQL_HOST" \
--arg psql_port "$PSQL_PORT" \
--arg psql_user "$PSQL_USER" \
--arg psql_pass "$PSQL_PASS" \
--arg psql_db "$PSQL_DATABASE" \
'.settings.postgres.host = $psql_host |
.settings.postgres.port = $psql_port |
.settings.postgres.user = $psql_user |
.settings.postgres.password = $psql_pass |
.settings.postgres.database = $psql_db' \
"$CONFIG_FILE" > temp_config.json && mv temp_config.json "$CONFIG_FILE"
else
echo "Disabling PostgreSQL-connector..."
sed -i 's/"postgres"/"_postgres"/' "$CONFIG_FILE"
fi
USE_MARIADB=${USE_MARIADB,,}
if [[ $USE_MARIADB =~ ^(true|yes)$ ]]; then
echo "Enabling MariaDB-connector..."
sed -i 's/"_mariaDB"/"mariaDB"/' "$CONFIG_FILE"
jq --arg mariadb_host "$MARIADB_HOST" \
--arg mariadb_port "$MARIADB_PORT" \
--arg mariadb_user "$MARIADB_USER" \
--arg mariadb_pass "$MARIADB_PASS" \
--arg mariadb_db "$MARIADB_DATABASE" \
'.settings.mariaDB.host = $mariadb_host |
.settings.mariaDB.port = $mariadb_port |
.settings.mariaDB.user = $mariadb_user |
.settings.mariaDB.password = $mariadb_pass |
.settings.mariaDB.database = $mariadb_db' \
"$CONFIG_FILE" > temp_config.json && mv temp_config.json "$CONFIG_FILE"
else
echo "Disabling MariaDB-connector..."
sed -i 's/"mariaDB"/"_mariaDB"/' "$CONFIG_FILE"
fi
# END DATABASE CONFIGURATION FIELDS
# Doing the bulk with JQ utility. Given the remaining variables an opportunity with Sed.
# The way this works is if the environment variable is empty, it will add a _ in front of the variable, commenting it.
# This will make the default value apply, as per: https://raw.githubusercontent.com/Ylianst/MeshCentral/master/meshcentral-config-schema.json
echo "Compiling given environment variables..."
echo "If defaults are going to get applied, refer to: https://raw.githubusercontent.com/Ylianst/MeshCentral/master/meshcentral-config-schema.json"
# SESSIONKEY
if [[ ${REGEN_SESSIONKEY,,} =~ ^(true|yes)$ ]]; then
echo "Regenerating Session-Key because REGENSESSIONKEY is 'true' or 'yes'"
SESSION_KEY=$(tr -dc 'A-Z0-9' < /dev/urandom | fold -w 96 | head -n 1)
sed -i 's/"_sessionKey"/"sessionKey"/' "$CONFIG_FILE"
jq --arg session_key "$SESSION_KEY" \
'.settings.sessionKey = $session_key' \
"$CONFIG_FILE" > temp_config.json && mv temp_config.json "$CONFIG_FILE"
else
echo "REGENSESSIONKEY is not 'true' or 'yes', therefore it's being kept as is."
fi
# HOSTNAME
if [[ -n $HOSTNAME ]]; then
echo "Setting hostname (cert)... $HOSTNAME"
jq --arg hostname "$HOSTNAME" \
'.settings.cert = $hostname' \
"$CONFIG_FILE" > temp_config.json && mv temp_config.json "$CONFIG_FILE"
else
echo "Invalid or no hostname, defaulting to 'localhost', value given: $HOSTNAME"
jq --arg hostname "localhost" \
'.settings.cert = $hostname' \
"$CONFIG_FILE" > temp_config.json && mv temp_config.json "$CONFIG_FILE"
fi
# ALLOWPLUGINS
ALLOW_PLUGINS=${ALLOW_PLUGINS,,}
if [[ $ALLOW_PLUGINS =~ ^(true|false)$ ]]; then
echo "Setting plugins... $ALLOW_PLUGINS"
sed -i 's/"_plugins"/"plugins"/' "$CONFIG_FILE"
jq --argjson allow_plugins "$ALLOW_PLUGINS" \
'.settings.plugins.enabled = $allow_plugins' \
"$CONFIG_FILE" > temp_config.json && mv temp_config.json "$CONFIG_FILE"
else
echo "Invalid or no ALLOWPLUGINS value given, commenting out so default applies... Value given: $ALLOW_PLUGINS"
sed -i 's/"plugins":/"_plugins":/g' "$CONFIG_FILE"
fi
# WEBRTC
WEBRTC=${WEBRTC,,}
if [[ $WEBRTC =~ ^(true|false)$ ]]; then
echo "Setting WebRTC... $WEBRTC"
sed -i 's/"_WebRTC"/"WebRTC"/' "$CONFIG_FILE"
jq --argjson webrtc "$WEBRTC" \
'.settings.WebRTC = $webrtc' \
"$CONFIG_FILE" > temp_config.json && mv temp_config.json "$CONFIG_FILE"
#sed -i "s/\"WebRTC\": *[a-z]*/\"WebRTC\": $WEBRTC/" "$CONFIG_FILE"
else
echo "Invalid or no WEBRTC value given, commenting out so default applies... Value given: $WEBRTC"
sed -i 's/"WebRTC":/"_WebRTC":/g' "$CONFIG_FILE"
fi
# IFRAME
IFRAME=${IFRAME,,}
if [[ $IFRAME =~ ^(true|false)$ ]]; then
echo "Setting AllowFraming... $IFRAME"
sed -i 's/"_AllowFraming"/"AllowFraming"/' "$CONFIG_FILE"
jq --argjson allow_framing "$IFRAME" \
'.settings.AllowFraming = $allow_framing' \
"$CONFIG_FILE" > temp_config.json && mv temp_config.json "$CONFIG_FILE"
else
echo "Invalid or no IFRAME value given, commenting out so default applies... Value given: $IFRAME"
sed -i 's/"AllowFraming":/"_AllowFraming":/g' "$CONFIG_FILE"
fi
# trustedProxy
if [[ -n $TRUSTED_PROXY ]]; then
echo "Setting trustedProxy... - $TRUSTED_PROXY"
if [[ $TRUSTED_PROXY == "all" ]] || [[ $TRUSTED_PROXY == "true" ]]; then
sed -i 's/"_trustedProxy"/"trustedProxy"/' "$CONFIG_FILE"
jq --argjson trusted_proxy "true" \
'.settings.trustedProxy = $trusted_proxy' \
"$CONFIG_FILE" > temp_config.json && mv temp_config.json "$CONFIG_FILE"
else
sed -i 's/"_trustedProxy"/"trustedProxy"/' "$CONFIG_FILE"
jq --argjson trusted_proxy "$TRUSTED_PROXY" \
'.settings.trustedProxy = $trusted_proxy' \
"$CONFIG_FILE" > temp_config.json && mv temp_config.json "$CONFIG_FILE"
fi
else
echo "Invalid or no REVERSE_PROXY and/or REVERSE_PROXY_TLS_PORT value given, commenting out so default applies... Value(s) given: $REVERSE_PROXY_STRING"
sed -i 's/"certUrl":/"_certUrl":/g' "$CONFIG_FILE"
fi
# ALLOW_NEW_ACCOUNTS
ALLOW_NEW_ACCOUNTS=${ALLOW_NEW_ACCOUNTS,,}
if [[ $ALLOW_NEW_ACCOUNTS =~ ^(true|false)$ ]]; then
echo "Setting NewAccounts... $ALLOW_NEW_ACCOUNTS"
sed -i 's/"_NewAccounts"/"NewAccounts"/' "$CONFIG_FILE"
jq --argjson new_accounts "$ALLOW_NEW_ACCOUNTS" \
'.domains[""].NewAccounts = $new_accounts' \
"$CONFIG_FILE" > temp_config.json && mv temp_config.json "$CONFIG_FILE"
else
echo "Invalid or no ALLOW_NEW_ACCOUNTS value given, commenting out so default applies... Value given: $ALLOW_NEW_ACCOUNTS"
sed -i 's/"NewAccounts":/"_NewAccounts":/g' "$CONFIG_FILE"
fi
# LOCALSESSIONRECORDING
LOCAL_SESSION_RECORDING=${LOCAL_SESSION_RECORDING,,}
if [[ $LOCAL_SESSION_RECORDING =~ ^(true|false)$ ]]; then
echo "Setting localSessionRecording... $LOCAL_SESSION_RECORDING"
sed -i 's/"_localSessionRecording"/"localSessionRecording"/' "$CONFIG_FILE"
jq --argjson session_recording "$LOCAL_SESSION_RECORDING" \
'.domains[""].localSessionRecording = $session_recording' \
"$CONFIG_FILE" > temp_config.json && mv temp_config.json "$CONFIG_FILE"
else
echo "Invalid or no LOCALSESSIONRECORDING value given, commenting out so default applies... Value given: $LOCAL_SESSION_RECORDING"
sed -i 's/"localSessionRecording":/"_localSessionRecording":/g' "$CONFIG_FILE"
fi
# MINIFY
MINIFY=${MINIFY,,}
if [[ $MINIFY =~ ^(true|false)$ ]]; then
echo "Setting minify... $MINIFY"
sed -i 's/"_minify"/"minify"/' "$CONFIG_FILE"
jq --argjson minify "$MINIFY" \
'.domains[""].minify = $minify' \
"$CONFIG_FILE" > temp_config.json && mv temp_config.json "$CONFIG_FILE"
#sed -i "s/\"minify\": *[a-z]*/\"minify\": $MINIFY/" "$CONFIG_FILE"
else
echo "Invalid or no MINIFY value given, commenting out so default applies... Value given: $MINIFY"
sed -i 's/"minify":/"_minify":/g' "$CONFIG_FILE"
fi
# ALLOWED_ORIGIN
ALLOWED_ORIGIN=${ALLOWED_ORIGIN,,}
if [[ $ALLOWED_ORIGIN =~ ^(true|false)$ ]]; then
echo "Setting allowedOrigin... $ALLOWED_ORIGIN"
sed -i 's/"_allowedOrigin"/"allowedOrigin"/' "$CONFIG_FILE"
jq --argjson allowed_origin "$ALLOWED_ORIGIN" \
'.domains[""].allowedOrigin = $allowed_origin' \
"$CONFIG_FILE" > temp_config.json && mv temp_config.json "$CONFIG_FILE"
else
echo "Invalid or no ALLOWED_ORIGIN value given, commenting out so default applies... Value given: $ALLOWED_ORIGIN"
sed -i 's/"allowedOrigin":/"_allowedOrigin":/g' "$CONFIG_FILE"
fi
# certUrl
if [[ -n $REVERSE_PROXY ]] && [[ -n $REVERSE_PROXY_TLS_PORT ]]; then
REVERSE_PROXY_STRING="${REVERSE_PROXY}:${REVERSE_PROXY_TLS_PORT}"
echo "Setting certUrl... - $REVERSE_PROXY_STRING"
sed -i 's/"_certUrl"/"certUrl"/' "$CONFIG_FILE"
jq --arg cert_url "$REVERSE_PROXY_STRING" \
'.domains[""].certUrl = $cert_url' \
"$CONFIG_FILE" > temp_config.json && mv temp_config.json "$CONFIG_FILE"
#sed -i "s/\"certUrl\": *[a-z]*/\"certUrl\": $REVERSE_PROXY_STRING/" "$CONFIG_FILE"
else
echo "Invalid or no REVERSE_PROXY and/or REVERSE_PROXY_TLS_PORT value given, commenting out so default applies... Value(s) given: $REVERSE_PROXY_STRING"
sed -i 's/"certUrl":/"_certUrl":/g' "$CONFIG_FILE"
fi
cat "$CONFIG_FILE"
else
echo "Leaving config as-is."
fi
# Actually start MeshCentral.
node /opt/meshcentral/meshcentral/meshcentral --configfile "${CONFIG_FILE}" "${ARGS}" >> /proc/1/fd/1 &
meshcentral_pid=$!
wait "$meshcentral_pid"

View File

@ -1,115 +0,0 @@
# Create folder-structure and files
```
| - meshcentral/ # this folder contains the persistent data
| - data/ # MeshCentral data-files
| - user_files/ # where file uploads for users live
| - web/ # location for site customization files
| - backup/ # location for the meshcentral-backups
| - .env # environment file with initial variables
| - docker-compose.yml
```
# Templates:
## .env:
```ini
NODE_ENV=production
# initial mongodb-variables
MONGO_INITDB_ROOT_USERNAME=mongodbadmin
MONGO_INITDB_ROOT_PASSWORD=mongodbpasswd
# initial meshcentral-variables
# the following options are only used if no config.json exists in the data-folder
# 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
REVERSE_PROXY=false
REVERSE_PROXY_TLS_PORT=
# set to true if you wish to enable iframe support
IFRAME=false
# set to false if you want disable self-service creation of new accounts besides the first (admin)
ALLOW_NEW_ACCOUNTS=true
# set to true to enable WebRTC - per documentation it is not officially released with meshcentral and currently experimental. Use with caution
WEBRTC=false
# set to true to allow plugins
ALLOWPLUGINS=false
# set to true to allow session recording
LOCALSESSIONRECORDING=false
# set to enable or disable minification of json, reduces traffic
MINIFY=true
```
## docker-compose.yml:
```yaml
version: '3'
services:
meshcentral:
restart: always
container_name: meshcentral
# use the official meshcentral container
image: ghcr.io/ylianst/meshcentral:latest
ports:
# MeshCentral will moan and try everything not to use port 80, but you can also use it if you so desire, just change the config.json according to your needs
- 8086:443
env_file:
- .env
volumes:
# config.json and other important files live here. A must for data persistence
- ./meshcentral/data:/opt/meshcentral/meshcentral-data
# where file uploads for users live
- ./meshcentral/user_files:/opt/meshcentral/meshcentral-files
# location for the meshcentral-backups - this should be mounted to an external storage
- ./meshcentral/backup:/opt/meshcentral/meshcentral-backup
# location for site customization files
- ./meshcentral/web:/opt/meshcentral/meshcentral-web
```
## docker-compose.yml mongodb:
```yaml
version: '3'
networks:
meshcentral-tier:
driver: bridge
services:
mongodb:
restart: always
container_name: mongodb
image: mongo:latest
env_file:
- .env
volumes:
# mongodb data-directory - A must for data persistence
- ./meshcentral/mongodb_data:/data/db
networks:
- meshcentral-tier
meshcentral:
restart: always
container_name: meshcentral
# use the official meshcentral container
image: ghcr.io/ylianst/meshcentral:latest
depends_on:
- mongodb
ports:
# MeshCentral will moan and try everything not to use port 80, but you can also use it if you so desire, just change the config.json according to your needs
- 8086:443
env_file:
- .env
volumes:
# config.json and other important files live here. A must for data persistence
- ./meshcentral/data:/opt/meshcentral/meshcentral-data
# where file uploads for users live
- ./meshcentral/user_files:/opt/meshcentral/meshcentral-files
# location for the meshcentral-backups - this should be mounted to an external storage
- ./meshcentral/backup:/opt/meshcentral/meshcentral-backup
# location for site customization files
- ./meshcentral/web:/opt/meshcentral/meshcentral-web
networks:
- meshcentral-tier
```

View File

@ -1,28 +0,0 @@
#!/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}
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

15
docs/.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,15 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}"
}
]
}

View File

@ -20,6 +20,17 @@ backend sni-back
use-server gitlabSNI if gitlab-sni
use-server mc-SNI if mc-sni
server mc-SNI 10.1.1.10:1443 send-proxy-v2-ssl-cn
frontend cira-tcp-front
bind 10.1.1.10:4433
mode tcp
option tcplog
tcp-request inspect-delay 5s
default_backend mc-cira-back
backend cira-tcp-back
mode tcp
server mc-cira 10.1.1.30:4433
frontend mc-front-HTTPS
mode http

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Some files were not shown because too many files have changed in this diff Show More