From 3b20fd7830294c6268efe511f00eb5a59da1b5b6 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Sat, 20 Feb 2021 14:06:21 +0100 Subject: [PATCH 01/33] sanitizeShellString() optimized strict sanitation --- CHANGELOG.md | 1 + docs/history.html | 5 +++++ docs/index.html | 4 ++-- docs/issues.html | 5 +++++ docs/security.html | 2 +- docs/v4/issues.html | 5 +++++ docs/v4/security.html | 2 +- lib/poc.js | 22 ---------------------- 8 files changed, 20 insertions(+), 26 deletions(-) delete mode 100644 lib/poc.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 06e1c09..16fb471 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -72,6 +72,7 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page. | Version | Date | Comment | | -------------- | -------------- | -------- | +| 5.3.4 | 2020-02-20 | `sanitizeShellString()` optimized strict sanitation | | 5.3.3 | 2020-02-15 | `dockerContainerStats()` fixed ID splitting | | 5.3.2 | 2020-02-15 | `inetLatency()` `ineChecksite()` fixed possible security issue (file://) | | 5.3.1 | 2020-02-14 | `inetLatency()` `ineChecksite()` `servcices()` `processes()` fixed possible security issue (arrays) | diff --git a/docs/history.html b/docs/history.html index 84aafea..dcefb17 100644 --- a/docs/history.html +++ b/docs/history.html @@ -56,6 +56,11 @@ + + 5.3.4 + 2020-02-20 + sanitizeShellString() optimized strict sanitation + 5.3.3 2020-02-15 diff --git a/docs/index.html b/docs/index.html index 5471d4f..45391f6 100644 --- a/docs/index.html +++ b/docs/index.html @@ -170,7 +170,7 @@
systeminformation
 
-
New Version: 5.3.3
+
New Version: 5.3.4
@@ -209,7 +209,7 @@
Downloads last month
-
387
+
389
Dependents
diff --git a/docs/issues.html b/docs/issues.html index 107206c..81eea92 100644 --- a/docs/issues.html +++ b/docs/issues.html @@ -65,6 +65,11 @@

In some cases you need to install the linux sensors package to be able to measure temperature e.g. on DEBIAN based systems by running

$ sudo apt-get install lm-sensors
+

Windows, macOS - CPU Speed

+ +

node.js and wmic are not able to determine correct CPU current speed on windows and macOS. + This means, you will have constant values here on both platforms for all processor cores in cpuCurrentSpeed().

+

Linux S.M.A.R.T. Status

To be able to detect S.M.A.R.T. status on Linux you need to install smartmontools. On DEBIAN based linux distributions you can install it by running:

diff --git a/docs/security.html b/docs/security.html index 0f23f85..16637dc 100644 --- a/docs/security.html +++ b/docs/security.html @@ -64,7 +64,7 @@

Affected versions: < 5.3.1 and < 4.34.11
Date: 2021-02-14
- CVE indentifier - + CVE indentifier CVE-2021-21315

Impact

diff --git a/docs/v4/issues.html b/docs/v4/issues.html index 743822f..eee05d0 100644 --- a/docs/v4/issues.html +++ b/docs/v4/issues.html @@ -64,6 +64,11 @@

In some cases you need to install the linux sensors package to be able to measure temperature e.g. on DEBIAN based systems by running

$ sudo apt-get install lm-sensors
+

Windows, macOS - CPU Speed

+ +

node.js and wmic are not able to determine correct CPU current speed on windows and macOS. + This means, you will have constant values here on both platforms for all processor cores in cpuCurrentSpeed().

+

Linux S.M.A.R.T. Status

To be able to detect S.M.A.R.T. status on Linux you need to install smartmontools. On DEBIAN based linux distributions you can install it by running:

diff --git a/docs/v4/security.html b/docs/v4/security.html index 78d966d..6a41d03 100644 --- a/docs/v4/security.html +++ b/docs/v4/security.html @@ -63,7 +63,7 @@

Affected versions: < 4.34.11
Date: 2021-02-14
- CVE indentifier - + CVE indentifier CVE-2021-21315

Impact

diff --git a/lib/poc.js b/lib/poc.js deleted file mode 100644 index 98e883d..0000000 --- a/lib/poc.js +++ /dev/null @@ -1,22 +0,0 @@ -let si = require('./internet'); -si.inetChecksite([]).then((a) => { - if (a.ok == false) - console.log("inetChecksite is fixed!") - else - console.log("inetChecksite is not fixed!") -}); - - -si.inetLatency([]).then((a) => { - if (a == null) - console.log("inetLatency is fixed!") - else - console.log("inetLatency is not fixed!") -}); -si = require('./processes'); -si.services([]).then((a) => { - if (typeof a == typeof []) - console.log("services is fixed!") - else - console.log("services is not fixed!") -}); From 0dedf369365ba80918396415324f62b00a96e396 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Sat, 20 Feb 2021 14:06:40 +0100 Subject: [PATCH 02/33] 5.3.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 095088b..45b90ba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "systeminformation", - "version": "5.3.3", + "version": "5.3.4", "description": "Simple system and OS information library", "license": "MIT", "author": "Sebastian Hildebrandt (https://plus-innovations.com)", From 79f1511242d39e31a103d6b381c58459db31feac Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Tue, 23 Feb 2021 22:49:28 +0100 Subject: [PATCH 03/33] dockerContainerStats() fixed parameter * --- CHANGELOG.md | 1 + docs/docker.html | 30 +++++++++++++++--------------- docs/history.html | 5 +++++ docs/index.html | 2 +- docs/v4/docker.html | 30 +++++++++++++++--------------- docs/v4/history.html | 15 +++++++++++++++ docs/v4/index.html | 2 +- lib/docker.js | 28 +++++++++++++++++++--------- test/si.js | 4 ++-- 9 files changed, 74 insertions(+), 43 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16fb471..6e4c0e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -72,6 +72,7 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page. | Version | Date | Comment | | -------------- | -------------- | -------- | +| 5.3.5 | 2020-02-23 | `dockerContainerStats()` fixed parameter * | | 5.3.4 | 2020-02-20 | `sanitizeShellString()` optimized strict sanitation | | 5.3.3 | 2020-02-15 | `dockerContainerStats()` fixed ID splitting | | 5.3.2 | 2020-02-15 | `inetLatency()` `ineChecksite()` fixed possible security issue (file://) | diff --git a/docs/docker.html b/docs/docker.html index f46834c..3c6dabd 100644 --- a/docs/docker.html +++ b/docs/docker.html @@ -728,7 +728,7 @@ - id + [0].id X X X @@ -738,7 +738,7 @@ - memUsage + [0].memUsage X X X @@ -748,7 +748,7 @@ - memLimit + [0].memLimit X X X @@ -758,7 +758,7 @@ - memPercent + [0].memPercent X X X @@ -768,7 +768,7 @@ - cpuPercent + [0].cpuPercent X X X @@ -778,7 +778,7 @@ - pids + [0].pids X X X @@ -788,7 +788,7 @@ - netIO.rx + [0].netIO.rx X X X @@ -798,7 +798,7 @@ - netIO.wx + [0].netIO.wx X X X @@ -808,7 +808,7 @@ - blockIO.r + [0].blockIO.r X X X @@ -818,7 +818,7 @@ - blockIO.w + [0].blockIO.w X X X @@ -828,7 +828,7 @@ - restartCount + [0].restartCount X X X @@ -838,7 +838,7 @@ - cpuStats + [0].cpuStats X X X @@ -848,7 +848,7 @@ - precpuStats + [0].precpuStats X X X @@ -858,7 +858,7 @@ - memoryStats + [0].memoryStats X X X @@ -868,7 +868,7 @@ - networks + [0].networks X X X diff --git a/docs/history.html b/docs/history.html index dcefb17..8840d75 100644 --- a/docs/history.html +++ b/docs/history.html @@ -56,6 +56,11 @@ + + 5.3.5 + 2020-02-23 + dockerContainerStats() fixed issue parameter * + 5.3.4 2020-02-20 diff --git a/docs/index.html b/docs/index.html index 45391f6..fdf6984 100644 --- a/docs/index.html +++ b/docs/index.html @@ -170,7 +170,7 @@
systeminformation
 
-
New Version: 5.3.4
+
New Version: 5.3.5
diff --git a/docs/v4/docker.html b/docs/v4/docker.html index 30e41d9..be2bb75 100644 --- a/docs/v4/docker.html +++ b/docs/v4/docker.html @@ -727,7 +727,7 @@ - id + [0].id X X X @@ -737,7 +737,7 @@ - mem_usage + [0].mem_usage X X X @@ -747,7 +747,7 @@ - mem_limit + [0].mem_limit X X X @@ -757,7 +757,7 @@ - mem_percent + [0].mem_percent X X X @@ -767,7 +767,7 @@ - cpu_percent + [0].cpu_percent X X X @@ -777,7 +777,7 @@ - pids + [0].pids X X X @@ -787,7 +787,7 @@ - netIO.rx + [0].netIO.rx X X X @@ -797,7 +797,7 @@ - netIO.wx + [0].netIO.wx X X X @@ -807,7 +807,7 @@ - blockIO.r + [0].blockIO.r X X X @@ -817,7 +817,7 @@ - blockIO.w + [0].blockIO.w X X X @@ -827,7 +827,7 @@ - restartCount + [0].restartCount X X X @@ -837,7 +837,7 @@ - cpu_stats + [0].cpu_stats X X X @@ -847,7 +847,7 @@ - percpu_stats + [0].percpu_stats X X X @@ -857,7 +857,7 @@ - memory_stats + [0].memory_stats X X X @@ -867,7 +867,7 @@ - networks + [0].networks X X X diff --git a/docs/v4/history.html b/docs/v4/history.html index a933e98..14962b5 100644 --- a/docs/v4/history.html +++ b/docs/v4/history.html @@ -83,6 +83,21 @@ + + 4.34.15 + 2020-02-23 + dockerContainerStats() fixed issue parameter * + + + 4.34.14 + 2020-02-20 + sanitizeShellString() optimized strict sanitation + + + 4.34.13 + 2020-02-15 + dockerContainerStats() fix correct ID splitting + 4.34.12 2020-02-15 diff --git a/docs/v4/index.html b/docs/v4/index.html index 6423484..a7fe94a 100644 --- a/docs/v4/index.html +++ b/docs/v4/index.html @@ -170,7 +170,7 @@
systeminformation
 
Version 4 documentation
-
Current Version: 4.34.12
+
Current Version: 4.34.15
diff --git a/lib/docker.js b/lib/docker.js index 1c2854e..68f235a 100644 --- a/lib/docker.js +++ b/lib/docker.js @@ -350,13 +350,18 @@ function dockerContainerStats(containerIDs, callback) { containerIDsSanitized.__proto__.replace = util.stringReplace; containerIDsSanitized.__proto__.trim = util.stringTrim; - const s = (util.isPrototypePolluted() ? '' : util.sanitizeShellString(containerIDs, true)).trim(); - for (let i = 0; i <= 2000; i++) { - if (!(s[i] === undefined)) { - s[i].__proto__.toLowerCase = util.stringToLower; - const sl = s[i].toLowerCase(); - if (sl && sl[0] && !sl[1]) { - containerIDsSanitized = containerIDsSanitized + sl[0]; + containerIDsSanitized = containerIDs; + containerIDsSanitized = containerIDsSanitized.trim(); + if (containerIDsSanitized !== '*') { + containerIDsSanitized = ''; + const s = (util.isPrototypePolluted() ? '' : util.sanitizeShellString(containerIDs, true)).trim(); + for (let i = 0; i <= 2000; i++) { + if (!(s[i] === undefined)) { + s[i].__proto__.toLowerCase = util.stringToLower; + const sl = s[i].toLowerCase(); + if (sl && sl[0] && !sl[1]) { + containerIDsSanitized = containerIDsSanitized + sl[0]; + } } } } @@ -374,10 +379,15 @@ function dockerContainerStats(containerIDs, callback) { for (let container of allContainers) { containerArray.push(container.id); } - dockerContainerStats(containerArray.join(',')).then(result => { + if (containerArray.length) { + dockerContainerStats(containerArray.join(',')).then(result => { + if (callback) { callback(result); } + resolve(result); + }); + } else { if (callback) { callback(result); } resolve(result); - }); + } }); } else { for (let containerID of containerArray) { diff --git a/test/si.js b/test/si.js index c1e85fe..e8f8375 100644 --- a/test/si.js +++ b/test/si.js @@ -50,8 +50,8 @@ function test(f) { else if (f === '5') { si.networkConnections().then(data => { if (data !== null) { resolve({ data, title: 'NET Connections' }); } else { resolve('not_supported'); } }); } else if (f === '6') { si.dockerInfo().then(data => { if (data !== null) { resolve({ data, title: 'Docker Info' }); } else { resolve('not_supported'); } }); } else if (f === '7') { si.dockerContainers(true).then(data => { if (data !== null) { resolve({ data, title: 'Docker Containers' }); } else { resolve('not_supported'); } }); } - else if (f === '8') { si.dockerContainerStats('1').then(data => { if (data !== null) { resolve({ data, title: 'Docker Cont Stats' }); } else { resolve('not_supported'); } }); } - else if (f === '9') { si.dockerContainerProcesses('1').then(data => { if (data !== null) { resolve({ data, title: 'Docker Cont Processes' }); } else { resolve('not_supported'); } }); } + else if (f === '8') { si.dockerContainerStats('*').then(data => { if (data !== null) { resolve({ data, title: 'Docker Cont Stats' }); } else { resolve('not_supported'); } }); } + else if (f === '9') { si.dockerContainerProcesses('*').then(data => { if (data !== null) { resolve({ data, title: 'Docker Cont Processes' }); } else { resolve('not_supported'); } }); } else if (f === '0') { si.dockerAll().then(data => { if (data !== null) { resolve({ data, title: 'Docker All' }); } else { resolve('not_supported'); } }); } else if (f === ',') { si.getStaticData().then(data => { if (data !== null) { resolve({ data, title: 'All Static Data' }); } else { resolve('not_supported'); } }); } else if (f === '.') { si.getDynamicData('apache2, postgres, wsearch').then(data => { if (data !== null) { resolve({ data, title: 'All Dynamic Data' }); } else { resolve('not_supported'); } }); } From 9718cb4e95dc7732cd679a676578e75fab9b0eb4 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Tue, 23 Feb 2021 22:53:44 +0100 Subject: [PATCH 04/33] 5.3.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 45b90ba..1e128b6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "systeminformation", - "version": "5.3.4", + "version": "5.3.5", "description": "Simple system and OS information library", "license": "MIT", "author": "Sebastian Hildebrandt (https://plus-innovations.com)", From 0df76f0bcf89fcf6dd0d4a9a4a817884545f07d3 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Wed, 24 Feb 2021 07:44:20 +0100 Subject: [PATCH 05/33] updated docs --- docs/v4/index.html | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/v4/index.html b/docs/v4/index.html index a7fe94a..4348562 100644 --- a/docs/v4/index.html +++ b/docs/v4/index.html @@ -192,6 +192,8 @@ Total alerts MIT license
+
Version 4 maintenance: We are still maintaining version 4 and providing especially fixes to security issues and other important fixes. New functionality is only added to the new version 5, so please consider upgrading to version 5 soon. Version 5 is NOT fully backward compatible to version 4! Be aware, there are some breaking changes. Please refer to the Version 5 - Changes page to see a full documentation of all changes you should have a look on.
+
Version 5 documentation can be found here.
@@ -320,9 +322,6 @@
Issues
Security issues: Please have a look at our security advisories
If you run into problems, please check out known issues page first. If you still have problems, please feel free to open an issue on our github page
-
Upcoming ...
-
MacOS on ARM - new hardware already arrived and we made quite a few changes to support Apple silicon M1 chips. Current status is documented here.
-
Verion 5: We are planning a new major version with some minor breaking changes and some additional features. We will try to make this available Q1 of 2021.

From ac7f8406560be6ad127cd8fb1115a2683963a28b Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Wed, 24 Feb 2021 13:25:48 +0100 Subject: [PATCH 06/33] dockerImages() added --- CHANGELOG.md | 83 +++++++++---------- README.md | 21 +++++ docs/docker.html | 192 +++++++++++++++++++++++++++++++++++++++++++- docs/history.html | 87 ++++++++++---------- docs/index.html | 4 +- lib/docker.js | 109 +++++++++++++++++++++++++ lib/dockerSocket.js | 127 +++++++++++++++++++++++++++++ lib/index.d.ts | 22 +++++ lib/index.js | 1 + test/si.js | 8 +- test/test.js | 25 +++--- 11 files changed, 578 insertions(+), 101 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e4c0e9..d2ca0f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -72,47 +72,48 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page. | Version | Date | Comment | | -------------- | -------------- | -------- | -| 5.3.5 | 2020-02-23 | `dockerContainerStats()` fixed parameter * | -| 5.3.4 | 2020-02-20 | `sanitizeShellString()` optimized strict sanitation | -| 5.3.3 | 2020-02-15 | `dockerContainerStats()` fixed ID splitting | -| 5.3.2 | 2020-02-15 | `inetLatency()` `ineChecksite()` fixed possible security issue (file://) | -| 5.3.1 | 2020-02-14 | `inetLatency()` `ineChecksite()` `servcices()` `processes()` fixed possible security issue (arrays) | -| 5.3.0 | 2020-02-12 | `osInfo()` added remoteSession (windows) | -| 5.2.7 | 2020-02-12 | `fsStats()`, `blockDevices()` improved linux | -| 5.2.6 | 2020-02-12 | `inetLatency()` fixed possible DOS intrusion | -| 5.2.5 | 2020-02-11 | `processes()` fixed truncated params (linux) | -| 5.2.4 | 2020-02-11 | `currentLoad()` fixed issue | -| 5.2.3 | 2020-02-11 | `diskLayout()` added USB drives (mac OS) | -| 5.2.2 | 2020-02-11 | code cleanup, updated docs | -| 5.2.1 | 2020-02-10 | `system()` fixed issue virtual detect (linux) | -| 5.2.0 | 2020-02-10 | `wifiInterfces()` and `wifiConnections()` added | -| 5.1.2 | 2020-02-08 | fixed node 4 compatibility issue | -| 5.1.1 | 2020-02-08 | `baseboard()` added memMax, memSlots, smaller improvements Raspberry | -| 5.1.0 | 2020-02-08 | `memLayout()` added ECC flag, `bios()` added language, features (linux) | -| 5.0.11 | 2020-02-07 | `fsSize()` fixed windows WSL issue | -| 5.0.10 | 2020-02-06 | `getDynamicData()` fixed windows WSL issue | -| 5.0.9 | 2020-02-02 | `fsSize()` fixed parsing edge case issue mac OS | -| 5.0.8 | 2020-01-30 | typescript typings fix cpuCurrentSpeed | -| 5.0.7 | 2020-01-29 | `fsSize()` available fixed windows and typescript typings | -| 5.0.6 | 2020-01-28 | `osinfo()` added hypervisor (win only) | -| 5.0.5 | 2020-01-27 | `networkInterfaces()` type detection improved (win) | -| 5.0.4 | 2020-01-27 | `cpu()` improved manufacturer decoding (linux) | -| 5.0.3 | 2020-01-27 | `cpu()` fix virtualization, `wifi()` fix raspberry | -| 5.0.2 | 2020-01-26 | updated typescript typings | -| 5.0.1 | 2020-01-26 | code cleanup | -| 5.0.0 | 2020-01-26 | new major version 5 release | -| 4.34.9 | 2020-01-25 | `graphics()` virtual controller vram value fix (win) | -| 4.34.8 | 2020-01-25 | `graphics()` controller subDeviceId fix (win) | -| 4.34.7 | 2020-01-13 | `services()` improved service discovery (linux) | -| 4.34.6 | 2020-01-12 | `networkInterfaces()` catch errors | -| 4.34.5 | 2020-01-07 | `networkInterfaceDefault()` fixed CMD popup (windows) | -| 4.34.4 | 2020-01-06 | `system()` fixed vitrual catch error | -| 4.34.3 | 2020-01-06 | `graphics()` fixed non nvidia-smi controllers (win) | -| 4.34.2 | 2020-01-05 | `system()` uuid lowercase as in uuid() | -| 4.34.1 | 2020-01-05 | `graphics()` nvidia-smi detection improved | -| 4.34.0 | 2020-01-05 | `system()` added flag virtual | -| 4.33.8 | 2020-01-04 | `virtualBox()` fix issue windows host | -| 4.33.7 | 2020-01-04 | `graphics()` nvidia-smi detection improved | +| 5.4.0 | 2021-02-24 | `dockerImages()` added | +| 5.3.5 | 2021-02-23 | `dockerContainerStats()` fixed parameter * | +| 5.3.4 | 2021-02-20 | `sanitizeShellString()` optimized strict sanitation | +| 5.3.3 | 2021-02-15 | `dockerContainerStats()` fixed ID splitting | +| 5.3.2 | 2021-02-15 | `inetLatency()` `ineChecksite()` fixed possible security issue (file://) | +| 5.3.1 | 2021-02-14 | `inetLatency()` `ineChecksite()` `servcices()` `processes()` fixed possible security issue (arrays) | +| 5.3.0 | 2021-02-12 | `osInfo()` added remoteSession (windows) | +| 5.2.7 | 2021-02-12 | `fsStats()`, `blockDevices()` improved linux | +| 5.2.6 | 2021-02-12 | `inetLatency()` fixed possible DOS intrusion | +| 5.2.5 | 2021-02-11 | `processes()` fixed truncated params (linux) | +| 5.2.4 | 2021-02-11 | `currentLoad()` fixed issue | +| 5.2.3 | 2021-02-11 | `diskLayout()` added USB drives (mac OS) | +| 5.2.2 | 2021-02-11 | code cleanup, updated docs | +| 5.2.1 | 2021-02-10 | `system()` fixed issue virtual detect (linux) | +| 5.2.0 | 2021-02-10 | `wifiInterfces()` and `wifiConnections()` added | +| 5.1.2 | 2021-02-08 | fixed node 4 compatibility issue | +| 5.1.1 | 2021-02-08 | `baseboard()` added memMax, memSlots, smaller improvements Raspberry | +| 5.1.0 | 2021-02-08 | `memLayout()` added ECC flag, `bios()` added language, features (linux) | +| 5.0.11 | 2021-02-07 | `fsSize()` fixed windows WSL issue | +| 5.0.10 | 2021-02-06 | `getDynamicData()` fixed windows WSL issue | +| 5.0.9 | 2021-02-02 | `fsSize()` fixed parsing edge case issue mac OS | +| 5.0.8 | 2021-01-30 | typescript typings fix cpuCurrentSpeed | +| 5.0.7 | 2021-01-29 | `fsSize()` available fixed windows and typescript typings | +| 5.0.6 | 2021-01-28 | `osinfo()` added hypervisor (win only) | +| 5.0.5 | 2021-01-27 | `networkInterfaces()` type detection improved (win) | +| 5.0.4 | 2021-01-27 | `cpu()` improved manufacturer decoding (linux) | +| 5.0.3 | 2021-01-27 | `cpu()` fix virtualization, `wifi()` fix raspberry | +| 5.0.2 | 2021-01-26 | updated typescript typings | +| 5.0.1 | 2021-01-26 | code cleanup | +| 5.0.0 | 2021-01-26 | new major version 5 release | +| 4.34.9 | 2021-01-25 | `graphics()` virtual controller vram value fix (win) | +| 4.34.8 | 2021-01-25 | `graphics()` controller subDeviceId fix (win) | +| 4.34.7 | 2021-01-13 | `services()` improved service discovery (linux) | +| 4.34.6 | 2021-01-12 | `networkInterfaces()` catch errors | +| 4.34.5 | 2021-01-07 | `networkInterfaceDefault()` fixed CMD popup (windows) | +| 4.34.4 | 2021-01-06 | `system()` fixed vitrual catch error | +| 4.34.3 | 2021-01-06 | `graphics()` fixed non nvidia-smi controllers (win) | +| 4.34.2 | 2021-01-05 | `system()` uuid lowercase as in uuid() | +| 4.34.1 | 2021-01-05 | `graphics()` nvidia-smi detection improved | +| 4.34.0 | 2021-01-05 | `system()` added flag virtual | +| 4.33.8 | 2021-01-04 | `virtualBox()` fix issue windows host | +| 4.33.7 | 2021-01-04 | `graphics()` nvidia-smi detection improved | | 4.33.6 | 2021-01-02 | `dockerContainerStats()` fix `tx` changed to `wx` as documented | | 4.33.5 | 2020-12-30 | `graphics()` vram (nvidia-smi) | | 4.33.4 | 2020-12-28 | `typescript` typings fix | diff --git a/README.md b/README.md index f1f5956..633ab4b 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ This next major version release 5.0 comes with new functionality and several imp - added audio: get detailed audio device information - added bluetooth: get detailed bluetooth device information +- added dockerImages: get detailed information about docker images - added printer: get information from detected printers - added usb: get detailed usb controller and device information - added wifi interfaces ans connections: extended wifi information @@ -102,6 +103,7 @@ si.cpu() (last 7 major and minor version releases) +- Version 5.4.0: `dockerImages()` added - Version 5.3.0: `osInfo()` added remoteSession (win only) - Version 5.2.0: `wifiInterfaces()` and `wifiConnections()` added - Version 5.1.0: `memLayout()` added ECC flag, `bios()` added language, features (linux) @@ -668,6 +670,25 @@ Full function reference with examples can be found at [https://systeminformation | | isolation | X | X | X | X | X | isolation | | | initBinary | X | X | X | X | X | init binary | | | productLicense | X | X | X | X | X | product license | +| si.dockerImages(all, cb) | [{...}] | X | X | X | X | X | returns array of top level/all docker images | +| | [0].id | X | X | X | X | X | image ID | +| | [0].container | X | X | X | X | X | container ID | +| | [0].comment | X | X | X | X | X | comment | +| | [0].os | X | X | X | X | X | OS | +| | [0].architecture | X | X | X | X | X | architecture | +| | [0].parent | X | X | X | X | X | parent ID | +| | [0].dockerVersion | X | X | X | X | X | docker version | +| | [0].size | X | X | X | X | X | image size | +| | [0].sharedSize | X | X | X | X | X | shared size | +| | [0].virtualSize | X | X | X | X | X | virtual size | +| | [0].author | X | X | X | X | X | author | +| | [0].created | X | X | X | X | X | created date / time | +| | [0].containerConfig | X | X | X | X | X | container config object | +| | [0].graphDriver | X | X | X | X | X | graph driver object | +| | [0].repoDigests | X | X | X | X | X | repo digests array | +| | [0].repoTags | X | X | X | X | X | repo tags array | +| | [0].config | X | X | X | X | X | config object | +| | [0].rootFS | X | X | X | X | X | root fs object | | si.dockerContainers(all, cb) | [{...}] | X | X | X | X | X | returns array of active/all docker containers | | | [0].id | X | X | X | X | X | ID of container | | | [0].name | X | X | X | X | X | name of container | diff --git a/docs/docker.html b/docs/docker.html index 3c6dabd..cd1a616 100644 --- a/docs/docker.html +++ b/docs/docker.html @@ -47,7 +47,7 @@
Docker
-

In this section you will learn how to get information about docker containers, stats and processes inside a docker container:

+

In this section you will learn how to get information about docker, images, containers, container stats and processes inside a docker container:

For function reference and examples we assume, that we imported systeminformation as follows:

const si = require('systeminformation');

Container, Stats, Processes

@@ -536,6 +536,196 @@ X product license + + si.dockerImages(all, cb) + [{...}] + X + X + X + X + X + returns array of top level/all docker images + + + + [0].id + X + X + X + X + X + image ID + + + + [0].container + X + X + X + X + X + container ID + + + + [0].comment + X + X + X + X + X + comment + + + + [0].os + X + X + X + X + X + OS + + + + [0].architecture + X + X + X + X + X + architecture + + + + [0].parent + X + X + X + X + X + parent ID + + + + [0].dockerVersion + X + X + X + X + X + docker version + + + + [0].size + X + X + X + X + X + image size + + + + [0].sharedSize + X + X + X + X + X + shared size + + + + [0].virtualSize + X + X + X + X + X + virtual size + + + + [0].author + X + X + X + X + X + author + + + + [0].created + X + X + X + X + X + created date / time + + + + [0].containerConfig + X + X + X + X + X + container config object + + + + [0].graphDriver + X + X + X + X + X + graph driver object + + + + [0].repoDigests + X + X + X + X + X + repo digests array + + + + [0].repoTags + X + X + X + X + X + repo tags array + + + + [0].config + X + X + X + X + X + config object + + + + [0].rootFS + X + X + X + X + X + root fs object + si.dockerContainers(all, cb) [{...}] diff --git a/docs/history.html b/docs/history.html index 8840d75..7837c16 100644 --- a/docs/history.html +++ b/docs/history.html @@ -56,209 +56,214 @@ + + 5.4.0 + 2021-02-24 + dockerImages() added + 5.3.5 - 2020-02-23 + 2021-02-23 dockerContainerStats() fixed issue parameter * 5.3.4 - 2020-02-20 + 2021-02-20 sanitizeShellString() optimized strict sanitation 5.3.3 - 2020-02-15 + 2021-02-15 dockerContainerStats() fix correct ID splitting 5.3.2 - 2020-02-15 + 2021-02-15 inetLatency() inetChecksite() fix possible security issue (file://) 5.3.1 - 2020-02-14 + 2021-02-14 inetLatency() inetChecksite() services() processLoad() fix possible security issue 5.3.0 - 2020-02-12 + 2021-02-12 osInfo() added remoteSession (windows) 5.2.7 - 2020-02-12 + 2021-02-12 fsStats() and blockdevices() improvements (linux) 5.2.6 - 2020-02-12 + 2021-02-12 inetLatency() fix DOS vulnerability 5.2.5 - 2020-02-11 + 2021-02-11 processes() fix truncated params (linux) 5.2.4 - 2020-02-11 + 2021-02-11 currentLoad() fix issue 5.2.3 - 2020-02-11 + 2021-02-11 diskLayout() added USB drives (mac OS) 5.2.2 - 2020-02-11 + 2021-02-11 code cleanup, updated docs 5.2.1 - 2020-02-10 + 2021-02-10 system() fixed issue virtual detect (linux) 5.2.0 - 2020-02-10 + 2021-02-10 wifiInterfces() and wifiConnections() added 5.1.2 - 2020-02-08 + 2021-02-08 fixed node 4 compatibility issue 5.1.1 - 2020-02-08 + 2021-02-08 baseboard() added memMax, memSlots 5.1.0 - 2020-02-08 + 2021-02-08 memLayout() added ECC flag, bios() added language, features (linux) 5.0.11 - 2020-02-07 + 2021-02-07 fsSize() windows WSL fix 5.0.10 - 2020-02-06 + 2021-02-06 getDynamicData() windows WSL fix 5.0.9 - 2020-02-02 + 2021-02-02 fsSize() fixed parsing edge case issue mac OS 5.0.8 - 2020-01-30 + 2021-01-30 typescript typings fix cpuCurrentSpeed 5.0.7 - 2020-01-29 + 2021-01-29 fsSize() available fixed windows and typescript typings 5.0.6 - 2020-01-28 + 2021-01-28 osInfo() added hypervisor (win only) 5.0.5 - 2020-01-27 + 2021-01-27 networkInterfaces() type detection improved (win) 5.0.4 - 2020-01-27 + 2021-01-27 memoryLayout() improved manufacturer decoding (linux) 5.0.3 - 2020-01-27 + 2021-01-27 cpu() fix virtualization, wifi() fix raspberry 5.0.2 - 2020-01-26 + 2021-01-26 updated typescript typings 5.0.1 - 2020-01-26 + 2021-01-26 code cleanup 5.0.0 - 2020-01-26 + 2021-01-26 new major version 5 release 4.34.9 - 2020-01-25 + 2021-01-25 graphics() virtual controller vram value fix (win) 4.34.8 - 2020-01-25 + 2021-01-25 graphics() controller subDeviceId fix (win) 4.34.7 - 2020-01-13 + 2021-01-13 services() improved service discovery linux 4.34.6 - 2020-01-12 + 2021-01-12 networkInterfaces() catch errors 4.34.5 - 2020-01-07 + 2021-01-07 networkInterfaceDefault() fixed CMD popup (windows) 4.34.4 - 2020-01-06 + 2021-01-06 system() fixed vitrual catch error 4.34.3 - 2020-01-06 + 2021-01-06 graphics() issue non nvidia-smi controllers fixed (win) 4.34.2 - 2020-01-05 + 2021-01-05 system() uuid now lowercase - as in uuid() 4.34.1 - 2020-01-05 + 2021-01-05 graphics() nvidia-smi detection improved 4.34.0 - 2020-01-05 + 2021-01-05 system() added flag virtual 4.33.8 - 2020-01-04 + 2021-01-04 virtualBox() fix issue windows host 4.33.7 - 2020-01-04 + 2021-01-04 graphics() nvidia-smi detection improved diff --git a/docs/index.html b/docs/index.html index fdf6984..6297938 100644 --- a/docs/index.html +++ b/docs/index.html @@ -170,7 +170,7 @@
systeminformation
 
-
New Version: 5.3.5
+
New Version: 5.4.0
@@ -201,7 +201,7 @@
-
13,833
+
14,053
Lines of code
diff --git a/lib/docker.js b/lib/docker.js index 68f235a..e4d3678 100644 --- a/lib/docker.js +++ b/lib/docker.js @@ -91,6 +91,115 @@ function dockerInfo(callback) { exports.dockerInfo = dockerInfo; +function dockerImages(all, callback) { + + // fallback - if only callback is given + if (util.isFunction(all) && !callback) { + callback = all; + all = false; + } + if (typeof all !== 'boolean' && all !== undefined) { + all = false; + } + + all = all || false; + let result = []; + return new Promise((resolve) => { + process.nextTick(() => { + if (!_docker_socket) { + _docker_socket = new DockerSocket(); + } + const workload = []; + + _docker_socket.listImages(all, data => { + let dockerImages = {}; + try { + dockerImages = data; + if (dockerImages && Object.prototype.toString.call(dockerImages) === '[object Array]' && dockerImages.length > 0) { + + dockerImages.forEach(function (element) { + + if (element.Names && Object.prototype.toString.call(element.Names) === '[object Array]' && element.Names.length > 0) { + element.Name = element.Names[0].replace(/^\/|\/$/g, ''); + } + workload.push(dockerImagesInspect(element.Id.trim(), element)); + }); + if (workload.length) { + Promise.all( + workload + ).then(data => { + if (callback) { callback(data); } + resolve(data); + }); + } else { + if (callback) { callback(result); } + resolve(result); + } + } else { + if (callback) { callback(result); } + resolve(result); + } + } catch (err) { + if (callback) { callback(result); } + resolve(result); + } + }); + }); + }); +} + +// -------------------------- +// container inspect (for one container) + +function dockerImagesInspect(imageID, payload) { + return new Promise((resolve) => { + process.nextTick(() => { + imageID = imageID || ''; + if (typeof imageID !== 'string') { + resolve(); + } + const imageIDSanitized = (util.isPrototypePolluted() ? '' : util.sanitizeShellString(imageID, true)).trim(); + if (imageIDSanitized) { + + if (!_docker_socket) { + _docker_socket = new DockerSocket(); + } + + _docker_socket.inspectImage(imageIDSanitized.trim(), data => { + try { + resolve({ + id: payload.Id, + container: data.Container, + comment: data.Comment, + os: data.Os, + architecture: data.Architecture, + parent: data.Parent, + dockerVersion: data.DockerVersion, + size: data.Size, + sharedSize: payload.SharedSize, + virtualSize: data.VirtualSize, + author: data.Author, + created: data.Created ? Math.round(new Date(data.Created).getTime() / 1000) : 0, + containerConfig: data.ContainerConfig ? data.ContainerConfig : {}, + graphDriver: data.GraphDriver ? data.GraphDriver : {}, + repoDigests: data.RepoDigests ? data.RepoDigests : {}, + repoTags: data.RepoTags ? data.RepoTags : {}, + config: data.Config ? data.Config : {}, + rootFS: data.RootFS ? data.RootFS : {}, + }); + } catch (err) { + resolve(); + } + }); + } else { + resolve(); + } + }); + }); +} + +exports.dockerImages = dockerImages; + function dockerContainers(all, callback) { function inContainers(containers, id) { diff --git a/lib/dockerSocket.js b/lib/dockerSocket.js index 86c68d4..a9d5ea6 100644 --- a/lib/dockerSocket.js +++ b/lib/dockerSocket.js @@ -55,6 +55,82 @@ class DockerSocket { } } + listImages(all, callback) { + try { + + let socket = net.createConnection({ path: socketPath }); + let alldata = ''; + let data; + + socket.on('connect', () => { + socket.write('GET http:/images/json' + (all ? '?all=1' : '') + ' HTTP/1.0\r\n\r\n'); + }); + + socket.on('data', data => { + alldata = alldata + data.toString(); + }); + + socket.on('error', () => { + socket = false; + callback({}); + }); + + socket.on('end', () => { + let startbody = alldata.indexOf('\r\n\r\n'); + alldata = alldata.substring(startbody + 4); + socket = false; + try { + data = JSON.parse(alldata); + callback(data); + } catch (err) { + callback({}); + } + }); + } catch (err) { + callback({}); + } + } + + inspectImage(id, callback) { + id = id || ''; + if (id) { + try { + let socket = net.createConnection({ path: socketPath }); + let alldata = ''; + let data; + + socket.on('connect', () => { + socket.write('GET http:/images/' + id + '/json?stream=0 HTTP/1.0\r\n\r\n'); + }); + + socket.on('data', data => { + alldata = alldata + data.toString(); + }); + + socket.on('error', () => { + socket = false; + callback({}); + }); + + socket.on('end', () => { + let startbody = alldata.indexOf('\r\n\r\n'); + alldata = alldata.substring(startbody + 4); + socket = false; + try { + data = JSON.parse(alldata); + callback(data); + } catch (err) { + callback({}); + } + }); + } catch (err) { + callback({}); + } + } else { + callback({}); + } + } + listContainers(all, callback) { try { @@ -91,6 +167,57 @@ class DockerSocket { } } + listVolumes(filter, callback) { + try { + + let socket = net.createConnection({ path: socketPath }); + let alldata = ''; + let data; + + filter = filter || {}; + let filterString = ''; + if (filter.dangling && typeof filter.dangling === 'boolean') { + filterString += (filterString ? '&' : '') + 'dangling=true'; + } + if (filter.driver && typeof filter.driver === 'string') { + filterString += (filterString ? '&' : '') + `driver=${filter.driver}`; + } + if (filter.label && typeof filter.label === 'string') { + filterString += (filterString ? '&' : '') + `label=${filter.label}`; + } + if (filter.name && typeof filter.name === 'string') { + filterString += (filterString ? '&' : '') + `name=${filter.name}`; + } + + socket.on('connect', () => { + socket.write('GET http:/volumes/' + (filterString ? `?${filterString}` : '') + ' HTTP/1.0\r\n\r\n'); + }); + + socket.on('data', data => { + alldata = alldata + data.toString(); + }); + + socket.on('error', () => { + socket = false; + callback({}); + }); + + socket.on('end', () => { + let startbody = alldata.indexOf('\r\n\r\n'); + alldata = alldata.substring(startbody + 4); + socket = false; + try { + data = JSON.parse(alldata); + callback(data); + } catch (err) { + callback({}); + } + }); + } catch (err) { + callback({}); + } + } + getStats(id, callback) { id = id || ''; if (id) { diff --git a/lib/index.d.ts b/lib/index.d.ts index 2b7d134..889d33b 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -641,6 +641,27 @@ export namespace Systeminformation { productLicense: string; } + interface DockerImageData { + id: string; + container: string; + comment: string; + os: string; + architecture: string; + parent: string; + dockerVersion: string; + size: number; + sharedSize: number; + virtualSize: number; + author: string; + created: number; + containerConfig: any; + graphDriver: any; + repoDigests: any; + repoTags: any; + config: any; + rootFS: any; + } + interface DockerContainerData { id: string; name: string; @@ -851,6 +872,7 @@ export function processLoad(processName: string, cb?: (data: Systeminformation.P export function services(serviceName: string, cb?: (data: Systeminformation.ServicesData[]) => any): Promise; export function dockerInfo(cb?: (data: Systeminformation.DockerInfoData) => any): Promise; +export function dockerImages(all?: boolean, cb?: (data: dockerstats.DockerImageData[]) => any): Promise; export function dockerContainers(all?: boolean, cb?: (data: Systeminformation.DockerContainerData[]) => any): Promise; export function dockerContainerStats(id?: string, cb?: (data: Systeminformation.DockerContainerStatsData[]) => any): Promise; export function dockerContainerProcesses(id?: string, cb?: (data: any) => any): Promise; diff --git a/lib/index.js b/lib/index.js index dc2a67b..cd365ac 100755 --- a/lib/index.js +++ b/lib/index.js @@ -482,6 +482,7 @@ exports.inetChecksite = internet.inetChecksite; exports.inetLatency = internet.inetLatency; exports.dockerInfo = docker.dockerInfo; +exports.dockerImages = docker.dockerImages; exports.dockerContainers = docker.dockerContainers; exports.dockerContainerStats = docker.dockerContainerStats; exports.dockerContainerProcesses = docker.dockerContainerProcesses; diff --git a/test/si.js b/test/si.js index e8f8375..513d122 100644 --- a/test/si.js +++ b/test/si.js @@ -49,10 +49,10 @@ function test(f) { else if (f === '4') { si.networkStats().then(data => { if (data !== null) { resolve({ data, title: 'NET Stats' }); } else { resolve('not_supported'); } }); } else if (f === '5') { si.networkConnections().then(data => { if (data !== null) { resolve({ data, title: 'NET Connections' }); } else { resolve('not_supported'); } }); } else if (f === '6') { si.dockerInfo().then(data => { if (data !== null) { resolve({ data, title: 'Docker Info' }); } else { resolve('not_supported'); } }); } - else if (f === '7') { si.dockerContainers(true).then(data => { if (data !== null) { resolve({ data, title: 'Docker Containers' }); } else { resolve('not_supported'); } }); } - else if (f === '8') { si.dockerContainerStats('*').then(data => { if (data !== null) { resolve({ data, title: 'Docker Cont Stats' }); } else { resolve('not_supported'); } }); } - else if (f === '9') { si.dockerContainerProcesses('*').then(data => { if (data !== null) { resolve({ data, title: 'Docker Cont Processes' }); } else { resolve('not_supported'); } }); } - else if (f === '0') { si.dockerAll().then(data => { if (data !== null) { resolve({ data, title: 'Docker All' }); } else { resolve('not_supported'); } }); } + else if (f === '7') { si.dockerImages().then(data => { if (data !== null) { resolve({ data, title: 'Docker Images' }); } else { resolve('not_supported'); } }); } + else if (f === '8') { si.dockerContainers(true).then(data => { if (data !== null) { resolve({ data, title: 'Docker Containers' }); } else { resolve('not_supported'); } }); } + else if (f === '9') { si.dockerContainerStats('*').then(data => { if (data !== null) { resolve({ data, title: 'Docker Cont Stats' }); } else { resolve('not_supported'); } }); } + else if (f === '0') { si.dockerContainerProcesses('*').then(data => { if (data !== null) { resolve({ data, title: 'Docker Cont Processes' }); } else { resolve('not_supported'); } }); } else if (f === ',') { si.getStaticData().then(data => { if (data !== null) { resolve({ data, title: 'All Static Data' }); } else { resolve('not_supported'); } }); } else if (f === '.') { si.getDynamicData('apache2, postgres, wsearch').then(data => { if (data !== null) { resolve({ data, title: 'All Dynamic Data' }); } else { resolve('not_supported'); } }); } else if (f === '/') { si.getAllData('apache2, postgres, wsearch').then(data => { if (data !== null) { resolve({ data, title: 'All Data' }); } else { resolve('not_supported'); } }); } diff --git a/test/test.js b/test/test.js index 98775db..ce8ea65 100644 --- a/test/test.js +++ b/test/test.js @@ -16,18 +16,19 @@ function printHeader() { function printMenu() { console.log(''); console.log('┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐'); - console.log('│ a ... Audio h ... Bluetooth s ... Services Y ... Battery ? ... Get Object │'); - console.log('│ b ... BIOS i ... INET Latency S ... Shell z ... Users , ... All Static │'); - console.log('│ B ... Baseboard I ... INET Check Site t ... time 1 ... NET Iface Default . ... All Dynamic │'); - console.log('│ C ... Chassis j ... CPU Current Speed T ... CPU Temperature 2 ... NET Gateway Default / ... All │'); - console.log('│ c ... CPU l ... CPU Current Load u ... USB 3 ... NET Interfaces │'); - console.log('│ d ... DiskLayout L ... Full Load U ... UUID 4 ... NET Stats │'); - console.log('│ D ... DiskIO m ... Memory v ... Versions 5 ... NET Connections │'); - console.log('│ e ... Block Devices M ... MEM Layout V ... Virtual Box 6 ... Docker Info │'); - console.log('│ E ... Open Files o ... OS Info w ... WIFI networks 7 ... Docker Container │'); - console.log('│ f ... FS Size p ... Processes W ... WIFI interfaces 8 ... Docker Cont Stats │'); - console.log('│ F ... FS Stats P ... Process Load x ... WIFI connections 9 ... Docker Cont Proc │'); - console.log('│ g ... Graphics r ... Printer y ... System 0 ... Docker All q >>> QUIT │'); + console.log('│ a ... Audio i ... INET Latency t ... time 1 ... NET Iface Default ? ... Get Object │'); + console.log('│ b ... BIOS I ... INET Check Site T ... CPU Temperature 2 ... NET Gateway Default , ... All Static │'); + console.log('│ B ... Baseboard j ... CPU Current Speed u ... USB 3 ... NET Interfaces . ... All Dynamic │'); + console.log('│ C ... Chassis l ... CPU Current Load U ... UUID 4 ... NET Stats / ... All │'); + console.log('│ c ... CPU L ... Full Load v ... Versions 5 ... NET Connections │'); + console.log('│ d ... DiskLayout m ... Memory V ... Virtual Box │'); + console.log('│ D ... DiskIO M ... MEM Layout w ... WIFI networks │'); + console.log('│ e ... Block Devices o ... OS Info W ... WIFI interfaces │'); + console.log('│ E ... Open Files p ... Processes x ... WIFI connections 6 ... Docker Info │'); + console.log('│ f ... FS Size P ... Process Load y ... System 7 ... Docker Images │'); + console.log('│ F ... FS Stats r ... Printer Y ... Battery 8 ... Docker Container │'); + console.log('│ g ... Graphics s ... Services z ... Users 9 ... Docker Cont Stats │'); + console.log('│ h ... Bluetooth S ... Shell 0 ... Docker Cont Proc q >>> QUIT │'); console.log('└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘'); } From ef6d0a76c4fa5a09d92b7d67e535ae866c8b7a29 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Wed, 24 Feb 2021 13:25:55 +0100 Subject: [PATCH 07/33] 5.4.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1e128b6..520b023 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "systeminformation", - "version": "5.3.5", + "version": "5.4.0", "description": "Simple system and OS information library", "license": "MIT", "author": "Sebastian Hildebrandt (https://plus-innovations.com)", From 305d264376aef987a93e7a54058db0197267d426 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Thu, 25 Feb 2021 08:04:31 +0100 Subject: [PATCH 08/33] dockerVolumes() added --- CHANGELOG.md | 5 +++ README.md | 13 +++++-- docs/docker.html | 81 +++++++++++++++++++++++++++++++++++++++++ docs/tests.html | 29 +++++++-------- lib/docker.js | 42 ++++++++++++++++++++++ lib/dockerSocket.js | 87 +++++++++++++++++++-------------------------- lib/index.d.ts | 15 ++++++-- lib/index.js | 1 + test/si.js | 1 + test/test.js | 31 ++++++++-------- 10 files changed, 219 insertions(+), 86 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d2ca0f1..4029a73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ - `audio()` detailed audio information - `bluetoothDevices()` detailed information detected bluetooth devices +- `dockerImages()` detailed information docker images +- `dockerVolumes()` detailed information docker volumes - `printers()` detailed printer information - `usb()` detailed USB information - `wifiInterfaces()` detected Wi-Fi interfaces @@ -44,6 +46,7 @@ We had to make **several interface changes** to keep systeminformation as consis - `cpu()`: extended socket list (win) - `cpu()`: added virtualization if cpu supports virtualization - `cpu()`: now flags are part of this function +- `diskLayout()`: added USB drives (mac OS) - `fsSize()`: added available - `fsSize()`: improved calculation of used - `getData()`: support for passing parameters and filters (see section General / getData) @@ -53,6 +56,7 @@ We had to make **several interface changes** to keep systeminformation as consis - `memoryLayout()`: added ECC flag - `osInfo()`: better fqdn (win) - `osinfo()`: added hypervizor if hyper-v is enabled (win only) +- `osInfo()`: added remoteSession (win only) - `system()`: better Raspberry PI detection - `system()`: added virtual and virtualHost (if system is virtual instance) - `uuid()`: better value support @@ -72,6 +76,7 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page. | Version | Date | Comment | | -------------- | -------------- | -------- | +| 5.5.0 | 2021-02-25 | `dockerVolumes()` added | | 5.4.0 | 2021-02-24 | `dockerImages()` added | | 5.3.5 | 2021-02-23 | `dockerContainerStats()` fixed parameter * | | 5.3.4 | 2021-02-20 | `sanitizeShellString()` optimized strict sanitation | diff --git a/README.md b/README.md index 633ab4b..de680d3 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ This next major version release 5.0 comes with new functionality and several imp - added audio: get detailed audio device information - added bluetooth: get detailed bluetooth device information -- added dockerImages: get detailed information about docker images +- added dockerImages, dockerVolumes: get detailed information about docker images and volumes - added printer: get information from detected printers - added usb: get detailed usb controller and device information - added wifi interfaces ans connections: extended wifi information @@ -103,6 +103,7 @@ si.cpu() (last 7 major and minor version releases) +- Version 5.5.0: `dockerVolumes()` added - Version 5.4.0: `dockerImages()` added - Version 5.3.0: `osInfo()` added remoteSession (win only) - Version 5.2.0: `wifiInterfaces()` and `wifiConnections()` added @@ -110,8 +111,6 @@ si.cpu() - Version 5.0.0: new version 5 - attention there are some breaking changes. See [detailed version 5 changes here][changes5-url]. - Version 4.34.0: `system()` added flag virtual (linux, windows) - Version 4.33.0: `graphics()` added nvidia-smi support (linux, windows) -- Version 4.32.0: `graphics()` added clinfo support (linux) -- Version 4.31.0: `osInfo()` added FQDN - ... You can find all changes here: [detailed changelog][changelog-url] @@ -734,6 +733,14 @@ Full function reference with examples can be found at [https://systeminformation | | [0].rss | X | X | X | X | X | resident set size | | | [0].vsz | X | X | X | X | X | virtual size in Kbytes | | | [0].command | X | X | X | X | X | command and arguments | +| si.dockerVolumes(cb) | [{...}] | returns array of all docker volumes | +| | [0].name | X | X | X | X | X | volume name | +| | [0].driver | X | X | X | X | X | driver | +| | [0].labels | X | X | X | X | X | labels object | +| | [0].mountpoint | X | X | X | X | X | mountpoint | +| | [0].options | X | X | X | X | X | options | +| | [0].scope | X | X | X | X | X | scope | +| | [0].created | X | X | X | X | X | created at | | si.dockerAll(cb) | {...} | X | X | X | X | X | list of all containers including their stats
and processes in one single array | #### 17. Virtual Box diff --git a/docs/docker.html b/docs/docker.html index cd1a616..fb7f11c 100644 --- a/docs/docker.html +++ b/docs/docker.html @@ -1216,6 +1216,87 @@ X command and arguments + + si.dockerVolumes(cb) + [{...}] + X + X + X + X + X + returns array of docker volumes + + + + + [0].name + X + X + X + X + X + volume name + + + + [0].driver + X + X + X + X + X + driver + + + + [0].labels + X + X + X + X + X + labels object + + + + [0].mountpoint + X + X + X + X + X + mountpoint + + + + [0].options + X + X + X + X + X + options + + + + [0].scope + X + X + X + X + X + scope + + + + [0].created + X + X + X + X + X + created at + si.dockerAll(cb) {...} diff --git a/docs/tests.html b/docs/tests.html index 117f10d..7851ad7 100644 --- a/docs/tests.html +++ b/docs/tests.html @@ -62,20 +62,21 @@
SYSTEMINFORMATION - Test Scripts - Version: 5.x.y
 ═══════════════════════════════════════════════════════════
 
-┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-│  a ... Audio              h ... Bluetooth          s ... Services           Y ... Battery                  ? ... Get Object      │
-│  b ... BIOS               i ... INET Latency       S ... Shell              z ... Users                    , ... All Static      │
-│  B ... Baseboard          I ... INET Check Site    t ... time               1 ... NET Iface Default        . ... All Dynamic     │
-│  C ... Chassis            j ... CPU Current Speed  T ... CPU Temperature    2 ... NET Gateway Default      / ... All             │
-│  c ... CPU                l ... CPU Current Load   u ... USB                3 ... NET Interfaces                                 │
-│  d ... DiskLayout         L ... Full Load          U ... UUID               4 ... NET Stats                                      │
-│  D ... DiskIO             m ... Memory             v ... Versions           5 ... NET Connections                                │
-│  e ... Block Devices      M ... MEM Layout         V ... Virtual Box        6 ... Docker Info                                    │
-│  E ... Open Files         o ... OS Info            w ... WIFI networks      7 ... Docker Container                               │
-│  f ... FS Size            p ... Processes          W ... WIFI interfaces    8 ... Docker Cont Stats                              │
-│  F ... FS Stats           P ... Process Load       x ... WIFI connections   9 ... Docker Cont Proc                               │
-│  g ... Graphics           r ... Printer            y ... System             0 ... Docker All               q >>> QUIT            │
-└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
+┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ a ... Audio i ... INET Latency t ... time 1 ... NET Iface Default ? ... Get Object │ +│ b ... BIOS I ... INET Check Site T ... CPU Temperature 2 ... NET Gateway Default , ... All Static │ +│ B ... Baseboard j ... CPU Current Speed u ... USB 3 ... NET Interfaces . ... All Dynamic │ +│ C ... Chassis l ... CPU Current Load U ... UUID 4 ... NET Stats / ... All │ +│ c ... CPU L ... Full Load v ... Versions 5 ... NET Connections │ +│ d ... DiskLayout m ... Memory V ... Virtual Box │ +│ D ... DiskIO M ... MEM Layout w ... WIFI networks │ +│ e ... Block Devices o ... OS Info W ... WIFI interfaces │ +│ E ... Open Files p ... Processes x ... WIFI connections 6 ... Docker Info │ +│ f ... FS Size P ... Process Load y ... System 7 ... Docker Images │ +│ F ... FS Stats r ... Printer Y ... Battery 8 ... Docker Container │ +│ g ... Graphics s ... Services z ... Users 9 ... Docker Cont Stats │ +│ h ... Bluetooth S ... Shell 0 ... Docker Cont Proc q >>> QUIT │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

Press q to exit the test suite

Here a sample output for the e.g. c ... CPU

┌────────────────────────────────────────────────┐
diff --git a/lib/docker.js b/lib/docker.js
index e4d3678..845f0cd 100644
--- a/lib/docker.js
+++ b/lib/docker.js
@@ -666,6 +666,48 @@ function dockerContainerProcesses(containerID, callback) {
 
 exports.dockerContainerProcesses = dockerContainerProcesses;
 
+function dockerVolumes(callback) {
+
+  let result = [];
+  return new Promise((resolve) => {
+    process.nextTick(() => {
+      if (!_docker_socket) {
+        _docker_socket = new DockerSocket();
+      }
+      _docker_socket.listVolumes(data => {
+        let dockerVolumes = {};
+        try {
+          dockerVolumes = data;
+          if (dockerVolumes && dockerVolumes.Volumes && Object.prototype.toString.call(dockerVolumes.Volumes) === '[object Array]' && dockerVolumes.Volumes.length > 0) {
+
+            dockerVolumes.Volumes.forEach(function (element) {
+
+              result.push({
+                name: element.Name,
+                driver: element.Driver,
+                labels: element.Labels,
+                mountpoint: element.Mountpoint,
+                options: element.Options,
+                scope: element.Scope,
+                created: element.CreatedAt ? Math.round(new Date(element.CreatedAt).getTime() / 1000) : 0,
+              });
+            });
+            if (callback) { callback(result); }
+            resolve(result);
+          } else {
+            if (callback) { callback(result); }
+            resolve(result);
+          }
+        } catch (err) {
+          if (callback) { callback(result); }
+          resolve(result);
+        }
+      });
+    });
+  });
+}
+
+exports.dockerVolumes = dockerVolumes;
 function dockerAll(callback) {
   return new Promise((resolve) => {
     process.nextTick(() => {
diff --git a/lib/dockerSocket.js b/lib/dockerSocket.js
index a9d5ea6..0b989b7 100644
--- a/lib/dockerSocket.js
+++ b/lib/dockerSocket.js
@@ -167,57 +167,6 @@ class DockerSocket {
     }
   }
 
-  listVolumes(filter, callback) {
-    try {
-
-      let socket = net.createConnection({ path: socketPath });
-      let alldata = '';
-      let data;
-
-      filter = filter || {};
-      let filterString = '';
-      if (filter.dangling && typeof filter.dangling === 'boolean') {
-        filterString += (filterString ? '&' : '') + 'dangling=true';
-      }
-      if (filter.driver && typeof filter.driver === 'string') {
-        filterString += (filterString ? '&' : '') + `driver=${filter.driver}`;
-      }
-      if (filter.label && typeof filter.label === 'string') {
-        filterString += (filterString ? '&' : '') + `label=${filter.label}`;
-      }
-      if (filter.name && typeof filter.name === 'string') {
-        filterString += (filterString ? '&' : '') + `name=${filter.name}`;
-      }
-
-      socket.on('connect', () => {
-        socket.write('GET http:/volumes/' + (filterString ? `?${filterString}` : '') + ' HTTP/1.0\r\n\r\n');
-      });
-
-      socket.on('data', data => {
-        alldata = alldata + data.toString();
-      });
-
-      socket.on('error', () => {
-        socket = false;
-        callback({});
-      });
-
-      socket.on('end', () => {
-        let startbody = alldata.indexOf('\r\n\r\n');
-        alldata = alldata.substring(startbody + 4);
-        socket = false;
-        try {
-          data = JSON.parse(alldata);
-          callback(data);
-        } catch (err) {
-          callback({});
-        }
-      });
-    } catch (err) {
-      callback({});
-    }
-  }
-
   getStats(id, callback) {
     id = id || '';
     if (id) {
@@ -337,6 +286,42 @@ class DockerSocket {
       callback({});
     }
   }
+
+  listVolumes(callback) {
+    try {
+
+      let socket = net.createConnection({ path: socketPath });
+      let alldata = '';
+      let data;
+
+      socket.on('connect', () => {
+        socket.write('GET http:/volumes HTTP/1.0\r\n\r\n');
+      });
+
+      socket.on('data', data => {
+        alldata = alldata + data.toString();
+      });
+
+      socket.on('error', () => {
+        socket = false;
+        callback({});
+      });
+
+      socket.on('end', () => {
+        let startbody = alldata.indexOf('\r\n\r\n');
+        alldata = alldata.substring(startbody + 4);
+        socket = false;
+        try {
+          data = JSON.parse(alldata);
+          callback(data);
+        } catch (err) {
+          callback({});
+        }
+      });
+    } catch (err) {
+      callback({});
+    }
+  }  
 }
 
 module.exports = DockerSocket;
diff --git a/lib/index.d.ts b/lib/index.d.ts
index 889d33b..cf3fe46 100644
--- a/lib/index.d.ts
+++ b/lib/index.d.ts
@@ -660,7 +660,7 @@ export namespace Systeminformation {
     repoTags: any;
     config: any;
     rootFS: any;
-  }  
+  }
 
   interface DockerContainerData {
     id: string;
@@ -712,6 +712,16 @@ export namespace Systeminformation {
     networks: any;
   }
 
+  interface DockerVolumeData {
+    name: string;
+    driver: string;
+    labels: any;
+    mountpoint: string;
+    options: any;
+    scope: string;
+    created: number;
+  }
+
   // 9. Virtual Box
 
   interface VboxInfoData {
@@ -872,10 +882,11 @@ export function processLoad(processName: string, cb?: (data: Systeminformation.P
 export function services(serviceName: string, cb?: (data: Systeminformation.ServicesData[]) => any): Promise;
 
 export function dockerInfo(cb?: (data: Systeminformation.DockerInfoData) => any): Promise;
-export function dockerImages(all?: boolean, cb?: (data: dockerstats.DockerImageData[]) => any): Promise;
+export function dockerImages(all?: boolean, cb?: (data: Systeminformation.DockerImageData[]) => any): Promise;
 export function dockerContainers(all?: boolean, cb?: (data: Systeminformation.DockerContainerData[]) => any): Promise;
 export function dockerContainerStats(id?: string, cb?: (data: Systeminformation.DockerContainerStatsData[]) => any): Promise;
 export function dockerContainerProcesses(id?: string, cb?: (data: any) => any): Promise;
+export function dockerVolumes(cb?: (data: Systeminformation.DockerVolumeData[]) => any): Promise;
 export function dockerAll(cb?: (data: any) => any): Promise;
 
 export function vboxInfo(cb?: (data: Systeminformation.VboxInfoData[]) => any): Promise;
diff --git a/lib/index.js b/lib/index.js
index cd365ac..4e804a4 100755
--- a/lib/index.js
+++ b/lib/index.js
@@ -486,6 +486,7 @@ exports.dockerImages = docker.dockerImages;
 exports.dockerContainers = docker.dockerContainers;
 exports.dockerContainerStats = docker.dockerContainerStats;
 exports.dockerContainerProcesses = docker.dockerContainerProcesses;
+exports.dockerVolumes = docker.dockerVolumes;
 exports.dockerAll = docker.dockerAll;
 
 exports.vboxInfo = vbox.vboxInfo;
diff --git a/test/si.js b/test/si.js
index 513d122..55cb8c5 100644
--- a/test/si.js
+++ b/test/si.js
@@ -53,6 +53,7 @@ function test(f) {
       else if (f === '8') { si.dockerContainers(true).then(data => { if (data !== null) { resolve({ data, title: 'Docker Containers' }); } else { resolve('not_supported'); } }); }
       else if (f === '9') { si.dockerContainerStats('*').then(data => { if (data !== null) { resolve({ data, title: 'Docker Cont Stats' }); } else { resolve('not_supported'); } }); }
       else if (f === '0') { si.dockerContainerProcesses('*').then(data => { if (data !== null) { resolve({ data, title: 'Docker Cont Processes' }); } else { resolve('not_supported'); } }); }
+      else if (f === '+') { si.dockerVolumes().then(data => { if (data !== null) { resolve({ data, title: 'Docker Volumes' }); } else { resolve('not_supported'); } }); }
       else if (f === ',') { si.getStaticData().then(data => { if (data !== null) { resolve({ data, title: 'All Static Data' }); } else { resolve('not_supported'); } }); }
       else if (f === '.') { si.getDynamicData('apache2, postgres, wsearch').then(data => { if (data !== null) { resolve({ data, title: 'All Dynamic Data' }); } else { resolve('not_supported'); } }); }
       else if (f === '/') { si.getAllData('apache2, postgres, wsearch').then(data => { if (data !== null) { resolve({ data, title: 'All Data' }); } else { resolve('not_supported'); } }); }
diff --git a/test/test.js b/test/test.js
index ce8ea65..4ed9660 100644
--- a/test/test.js
+++ b/test/test.js
@@ -15,22 +15,21 @@ function printHeader() {
 
 function printMenu() {
   console.log('');
-  console.log('┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐');
-  console.log('│  a ... Audio              i ... INET Latency       t ... time               1 ... NET Iface Default        ? ... Get Object      │');
-  console.log('│  b ... BIOS               I ... INET Check Site    T ... CPU Temperature    2 ... NET Gateway Default      , ... All Static      │');
-  console.log('│  B ... Baseboard          j ... CPU Current Speed  u ... USB                3 ... NET Interfaces           . ... All Dynamic     │');
-  console.log('│  C ... Chassis            l ... CPU Current Load   U ... UUID               4 ... NET Stats                / ... All             │');
-  console.log('│  c ... CPU                L ... Full Load          v ... Versions           5 ... NET Connections                                │');
-  console.log('│  d ... DiskLayout         m ... Memory             V ... Virtual Box                                                             │');
-  console.log('│  D ... DiskIO             M ... MEM Layout         w ... WIFI networks                                                           │');
-  console.log('│  e ... Block Devices      o ... OS Info            W ... WIFI interfaces                                                         │');
-  console.log('│  E ... Open Files         p ... Processes          x ... WIFI connections   6 ... Docker Info                                    │');
-  console.log('│  f ... FS Size            P ... Process Load       y ... System             7 ... Docker Images                                  │');
-  console.log('│  F ... FS Stats           r ... Printer            Y ... Battery            8 ... Docker Container                               │');
-  console.log('│  g ... Graphics           s ... Services           z ... Users              9 ... Docker Cont Stats                              │');
-  console.log('│  h ... Bluetooth          S ... Shell                                       0 ... Docker Cont Proc         q >>> QUIT            │');
-  console.log('└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘');
-
+  console.log('┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐');
+  console.log('│  a ... Audio              i ... INET Latency       t ... time               1 ... NET Iface Default     ? ... Get Object    │');
+  console.log('│  b ... BIOS               I ... INET Check Site    T ... CPU Temperature    2 ... NET Gateway Default   , ... All Static    │');
+  console.log('│  B ... Baseboard          j ... CPU Current Speed  u ... USB                3 ... NET Interfaces        . ... All Dynamic   │');
+  console.log('│  C ... Chassis            l ... CPU Current Load   U ... UUID               4 ... NET Stats             / ... All           │');
+  console.log('│  c ... CPU                L ... Full Load          v ... Versions           5 ... NET Connections                           │');
+  console.log('│  d ... DiskLayout         m ... Memory             V ... Virtual Box                                                        │');
+  console.log('│  D ... DiskIO             M ... MEM Layout         w ... WIFI networks                                                      │');
+  console.log('│  e ... Block Devices      o ... OS Info            W ... WIFI interfaces    6 ... Docker Info                               │');
+  console.log('│  E ... Open Files         p ... Processes          x ... WIFI connections   7 ... Docker Images                             │');
+  console.log('│  f ... FS Size            P ... Process Load       y ... System             8 ... Docker Container                          │');
+  console.log('│  F ... FS Stats           r ... Printer            Y ... Battery            9 ... Docker Cont Stats                         │');
+  console.log('│  g ... Graphics           s ... Services           z ... Users              0 ... Docker Cont Proc                          │');
+  console.log('│  h ... Bluetooth          S ... Shell                                       + ... Docker Volumes        q >>> QUIT          │');
+  console.log('└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘');
 }
 
 function EnableUserInput() {

From b88b1c5c13729bd5d014211c99bd6e59313ec28a Mon Sep 17 00:00:00 2001
From: Sebastian Hildebrandt 
Date: Thu, 25 Feb 2021 08:04:36 +0100
Subject: [PATCH 09/33] 5.5.0

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 520b023..fab2ca2 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "systeminformation",
-  "version": "5.4.0",
+  "version": "5.5.0",
   "description": "Simple system and OS information library",
   "license": "MIT",
   "author": "Sebastian Hildebrandt  (https://plus-innovations.com)",

From d40b85c1ac7d2f38fd6ab0cf661056d26c0c0ff9 Mon Sep 17 00:00:00 2001
From: Sebastian Hildebrandt 
Date: Thu, 25 Feb 2021 08:57:39 +0100
Subject: [PATCH 10/33] updated docs

---
 docs/history.html | 5 +++++
 docs/index.html   | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/docs/history.html b/docs/history.html
index 7837c16..2078d9d 100644
--- a/docs/history.html
+++ b/docs/history.html
@@ -56,6 +56,11 @@
                   
                 
                 
+                  
+                    5.5.0
+                    2021-02-25
+                    dockerVolumes() added
+                  
                   
                     5.4.0
                     2021-02-24
diff --git a/docs/index.html b/docs/index.html
index 6297938..8ad1f6a 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -170,7 +170,7 @@
       
       
systeminformation
 
-
New Version: 5.4.0
+
New Version: 5.5.0
From bb82868bce9b4b6370ef66d9cc9bc63aab18d6dd Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Wed, 3 Mar 2021 19:13:28 +0100 Subject: [PATCH 11/33] cpuTemperature() added socket and chipset temp (linux) --- CHANGELOG.md | 2 ++ README.md | 5 +++-- docs/changes.html | 1 + docs/cpu.html | 31 +++++++++++++++++++++++++++++- docs/history.html | 5 +++++ docs/index.html | 6 +++--- lib/cpu.js | 49 +++++++++++++++++++++++++++++++++++++++++++++-- lib/index.d.ts | 2 ++ 8 files changed, 93 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4029a73..7cd7fc8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ We had to make **several interface changes** to keep systeminformation as consis - `cpu()`: extended socket list (win) - `cpu()`: added virtualization if cpu supports virtualization - `cpu()`: now flags are part of this function +- `cpuTemperature()` added added socket and chipset temp (linux) - `diskLayout()`: added USB drives (mac OS) - `fsSize()`: added available - `fsSize()`: improved calculation of used @@ -76,6 +77,7 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page. | Version | Date | Comment | | -------------- | -------------- | -------- | +| 5.6.0 | 2021-03-03 | `cpuTemperature()` added socket and chipset temp (linux) | | 5.5.0 | 2021-02-25 | `dockerVolumes()` added | | 5.4.0 | 2021-02-24 | `dockerImages()` added | | 5.3.5 | 2021-02-23 | `dockerContainerStats()` fixed parameter * | diff --git a/README.md b/README.md index de680d3..d287483 100644 --- a/README.md +++ b/README.md @@ -103,14 +103,13 @@ si.cpu() (last 7 major and minor version releases) +- Version 5.6.0: `cpuTemperature()` added added socket and chipset temp (linux) - Version 5.5.0: `dockerVolumes()` added - Version 5.4.0: `dockerImages()` added - Version 5.3.0: `osInfo()` added remoteSession (win only) - Version 5.2.0: `wifiInterfaces()` and `wifiConnections()` added - Version 5.1.0: `memLayout()` added ECC flag, `bios()` added language, features (linux) - Version 5.0.0: new version 5 - attention there are some breaking changes. See [detailed version 5 changes here][changes5-url]. -- Version 4.34.0: `system()` added flag virtual (linux, windows) -- Version 4.33.0: `graphics()` added nvidia-smi support (linux, windows) - ... You can find all changes here: [detailed changelog][changelog-url] @@ -224,6 +223,8 @@ Full function reference with examples can be found at [https://systeminformation | | main | X | X | X | X | | main temperature (avg) | | | cores | X | X | X | X | | array of temperatures | | | max | X | X | X | X | | max temperature | +| | socket | X | | | | | array socket temperatures | +| | chipset | X | | | | | chipset temperature | #### 4. Memory diff --git a/docs/changes.html b/docs/changes.html index 2d21469..d913931 100644 --- a/docs/changes.html +++ b/docs/changes.html @@ -173,6 +173,7 @@
  • cpu(): extended socket list (win)
  • cpu(): added virtualization if cpu supports virtualization
  • cpu(): now flags are part of this function
  • +
  • cpuTemperature(): added socket and chipset temperature (linux)
  • fsSize(): added available
  • fsSize(): improved calculation of used
  • getData(): support for passing parameters and filters (see section General / getData)
  • diff --git a/docs/cpu.html b/docs/cpu.html index 5e9bad1..334e669 100644 --- a/docs/cpu.html +++ b/docs/cpu.html @@ -545,6 +545,26 @@ si.cpuCurrentSpeed().then(data => console.log(data));
    @@ -552,7 +572,16 @@ si.cpuCurrentSpeed().then(data => console.log(data));const si = require('systeminformation'); si.cpuTemperature().then(data => console.log(data));
    -{ main: 42, cores: [], max: 42 }
    +{
    +  main: 42,
    +  cores: [
    +    34, 35, 33, 32,
    +    37, 32, 35, 33
    +  ],
    +  max: 42,
    +  socket: [ 16.8, 27.8 ],
    +  chipset: 49
    +}
     
    diff --git a/docs/history.html b/docs/history.html index 2078d9d..3690ba5 100644 --- a/docs/history.html +++ b/docs/history.html @@ -56,6 +56,11 @@ + + 5.6.0 + 2021-03-03 + cpuTemperature() added socket and chipset temp (linux) + 5.5.0 2021-02-25 diff --git a/docs/index.html b/docs/index.html index 8ad1f6a..662f62f 100644 --- a/docs/index.html +++ b/docs/index.html @@ -170,7 +170,7 @@
    systeminformation
     
    -
    New Version: 5.5.0
    +
    New Version: 5.6.0
    @@ -201,7 +201,7 @@
    -
    14,053
    +
    14,121
    Lines of code
    @@ -209,7 +209,7 @@
    Downloads last month
    -
    389
    +
    390
    Dependents
    diff --git a/lib/cpu.js b/lib/cpu.js index 1d83971..5c1dbc7 100644 --- a/lib/cpu.js +++ b/lib/cpu.js @@ -930,9 +930,32 @@ function cpuTemperature(callback) { let result = { main: null, cores: [], - max: null + max: null, + socket: [], + chipset: null }; if (_linux) { + // CPU Chipset, Socket + try { + const cmd = 'cat /sys/class/thermal/thermal_zone*/type; echo "-----"; cat /sys/class/thermal/thermal_zone*/temp;'; + const parts = execSync(cmd).toString().split('-----\n'); + if (parts.length === 2) { + const lines = parts[0].split('\n'); + const lines2 = parts[1].split('\n'); + for (let i = 0; i < lines.length; i++) { + const line = lines[i].trim(); + if (line.startsWith('acpi') && lines2[i]) { + result.socket.push(Math.round(parseInt(lines2[i], 10) / 100) / 10); + } + if (line.startsWith('pch') && lines2[i]) { + result.chipset = Math.round(parseInt(lines2[i], 10) / 100) / 10; + } + } + } + } catch (e) { + util.noop(); + } + const cmd = 'for mon in /sys/class/hwmon/hwmon*; do for label in "$mon"/temp*_label; do if [ -f $label ]; then value=$(echo $label | rev | cut -c 7- | rev)_input; if [ -f "$value" ]; then echo $(cat "$label")___$(cat "$value"); fi; fi; done; done;'; try { exec(cmd, function (error, stdout) { @@ -963,15 +986,37 @@ function cpuTemperature(callback) { resolve(result); return; } - // } exec('sensors', function (error, stdout) { if (!error) { let lines = stdout.toString().split('\n'); let tdieTemp = null; + let newSectionStarts = true; + let section = ''; lines.forEach(function (line) { + // determine section + if (line.trim() === '') { + newSectionStarts = true; + } else if (newSectionStarts) { + if (line.trim().toLowerCase().startsWith('acpi')) { section = 'acpi'; } + if (line.trim().toLowerCase().startsWith('pch')) { section = 'pch'; } + if (line.trim().toLowerCase().startsWith('core')) { section = 'core'; } + newSectionStarts = false; + } let regex = /[+-]([^°]*)/g; let temps = line.match(regex); let firstPart = line.split(':')[0].toUpperCase(); + if (section === 'acpi') { + // socket temp + if (firstPart.indexOf('TEMP') !== -1) { + result.socket.push(parseFloat(temps)); + } + } else if (section === 'pch') { + // chipset temp + if (firstPart.indexOf('TEMP') !== -1) { + result.chipset = parseFloat(temps); + } + } + // cpu temp if (firstPart.indexOf('PHYSICAL') !== -1 || firstPart.indexOf('PACKAGE') !== -1) { result.main = parseFloat(temps); } diff --git a/lib/index.d.ts b/lib/index.d.ts index cf3fe46..36ccb91 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -104,6 +104,8 @@ export namespace Systeminformation { main: number; cores: number[]; max: number; + socket?: number[]; + chipset?: number; } interface MemData { From 9ca44bb2112acdf555790108e36ee7f9ac0e0b38 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Wed, 3 Mar 2021 19:13:36 +0100 Subject: [PATCH 12/33] 5.6.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fab2ca2..3457df0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "systeminformation", - "version": "5.5.0", + "version": "5.6.0", "description": "Simple system and OS information library", "license": "MIT", "author": "Sebastian Hildebrandt (https://plus-innovations.com)", From 80e20a8268f6dbc976b8e8dcd234de8cc3edf624 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Wed, 3 Mar 2021 19:49:53 +0100 Subject: [PATCH 13/33] get() fixed issue boolean parameters --- CHANGELOG.md | 1 + docs/history.html | 5 +++++ docs/index.html | 2 +- lib/docker.js | 6 ++++++ lib/index.js | 17 +++++++++++------ lib/processes.js | 4 ++++ 6 files changed, 28 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7cd7fc8..429c291 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -77,6 +77,7 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page. | Version | Date | Comment | | -------------- | -------------- | -------- | +| 5.6.1 | 2021-03-03 | `get()` fixed issue boolean parameters | | 5.6.0 | 2021-03-03 | `cpuTemperature()` added socket and chipset temp (linux) | | 5.5.0 | 2021-02-25 | `dockerVolumes()` added | | 5.4.0 | 2021-02-24 | `dockerImages()` added | diff --git a/docs/history.html b/docs/history.html index 3690ba5..fd98a82 100644 --- a/docs/history.html +++ b/docs/history.html @@ -56,6 +56,11 @@ + + 5.6.1 + 2021-03-03 + get() fixed issue boolean parameters + 5.6.0 2021-03-03 diff --git a/docs/index.html b/docs/index.html index 662f62f..4ba67fa 100644 --- a/docs/index.html +++ b/docs/index.html @@ -170,7 +170,7 @@
    systeminformation
     
    -
    New Version: 5.6.0
    +
    New Version: 5.6.1
    diff --git a/lib/docker.js b/lib/docker.js index 845f0cd..235487e 100644 --- a/lib/docker.js +++ b/lib/docker.js @@ -98,6 +98,9 @@ function dockerImages(all, callback) { callback = all; all = false; } + if (typeof all === 'string' && all === 'true') { + all = true; + } if (typeof all !== 'boolean' && all !== undefined) { all = false; } @@ -218,6 +221,9 @@ function dockerContainers(all, callback) { callback = all; all = false; } + if (typeof all === 'string' && all === 'true') { + all = true; + } if (typeof all !== 'boolean' && all !== undefined) { all = false; } diff --git a/lib/index.js b/lib/index.js index 4e804a4..68b46d1 100755 --- a/lib/index.js +++ b/lib/index.js @@ -362,12 +362,17 @@ function get(valueObject, callback) { // result is in an array, go through all elements of array and pick only the right ones const partialArray = []; data[i].forEach(element => { - const partialRes = {}; - keys.forEach(k => { - if ({}.hasOwnProperty.call(element, k)) { - partialRes[k] = element[k]; - } - }); + let partialRes = {}; + if (keys.length === 1 && (keys[0] === '*' || keys[0] === 'all')) { + partialRes = element; + } else { + keys.forEach(k => { + if ({}.hasOwnProperty.call(element, k)) { + partialRes[k] = element[k]; + } + }); + } + // if there is a filter, then just take those elements if (filter && filterParts.length === 2) { if ({}.hasOwnProperty.call(partialRes, filterParts[0].trim())) { const val = partialRes[filterParts[0].trim()]; diff --git a/lib/processes.js b/lib/processes.js index 83a90cc..400c01f 100644 --- a/lib/processes.js +++ b/lib/processes.js @@ -164,6 +164,10 @@ function services(srv, callback) { } } } + if ((_darwin) && srvString === '*') { // service enumeration mnot yet suported on mac OS + if (callback) { callback(result); } + resolve(result); + } let comm = (_darwin) ? 'ps -caxo pcpu,pmem,pid,command' : 'ps -axo pcpu,pmem,pid,command'; if (srvString !== '' && srvs.length > 0) { exec(comm + ' | grep -v grep | grep -iE "' + srvString + '"', { maxBuffer: 1024 * 20000 }, function (error, stdout) { // lgtm [js/shell-command-constructed-from-input] From 8ef639e892ae17536f269d1b982ef2f2248da6ec Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Wed, 3 Mar 2021 19:49:59 +0100 Subject: [PATCH 14/33] 5.6.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3457df0..66f5ff2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "systeminformation", - "version": "5.6.0", + "version": "5.6.1", "description": "Simple system and OS information library", "license": "MIT", "author": "Sebastian Hildebrandt (https://plus-innovations.com)", From d49c332d9ff5ffe636465ed4a8ec5e83ec6cec2e Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Tue, 9 Mar 2021 11:58:47 +0100 Subject: [PATCH 15/33] networkInterfaces(), cpu() improvements windows --- README.md | 2 +- docs/index.html | 2 +- lib/cpu.js | 150 ++++++++++++++++++++++++------------------------ lib/network.js | 8 ++- 4 files changed, 83 insertions(+), 79 deletions(-) diff --git a/README.md b/README.md index d287483..8fad89e 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ [![Sponsoring][sponsor-badge]][sponsor-url] [![MIT license][license-img]][license-url] -This is amazing. Started as a small project just for myself, it now has > 10,000 lines of code, > 400 versions published, > 3 mio downloads per month, > 30 mio downloads overall. Thank you to all who contributed to this project! +This is amazing. Started as a small project just for myself, it now has > 10,000 lines of code, > 400 versions published, up to 3 mio downloads per month, > 30 mio downloads overall. Thank you to all who contributed to this project! ## New Version 5.0 diff --git a/docs/index.html b/docs/index.html index 4ba67fa..a988e34 100644 --- a/docs/index.html +++ b/docs/index.html @@ -209,7 +209,7 @@
    Downloads last month
    -
    390
    +
    393
    Dependents
    diff --git a/lib/cpu.js b/lib/cpu.js index 5c1dbc7..6476301 100644 --- a/lib/cpu.js +++ b/lib/cpu.js @@ -750,88 +750,88 @@ function getCpu() { } if (_windows) { try { - util.wmic('cpu get /value').then((stdout, error) => { - if (!error) { - let lines = stdout.split('\r\n'); - let name = util.getValue(lines, 'name', '=') || ''; - if (name.indexOf('@') >= 0) { - result.brand = name.split('@')[0].trim(); - result.speed = name.split('@')[1] ? parseFloat(name.split('@')[1].trim()) : 0; - _cpu_speed = result.speed; - } else { - result.brand = name.trim(); - result.speed = 0; - } - result = cpuBrandManufacturer(result); - result.revision = util.getValue(lines, 'revision', '='); - result.cache.l1d = 0; - result.cache.l1i = 0; - result.cache.l2 = util.getValue(lines, 'l2cachesize', '='); - result.cache.l3 = util.getValue(lines, 'l3cachesize', '='); - if (result.cache.l2) { result.cache.l2 = parseInt(result.cache.l2, 10) * 1024; } - if (result.cache.l3) { result.cache.l3 = parseInt(result.cache.l3, 10) * 1024; } - result.vendor = util.getValue(lines, 'manufacturer', '='); - result.speedMax = Math.round(parseFloat(util.getValue(lines, 'maxclockspeed', '=').replace(/,/g, '.')) / 10.0) / 100; - if (result.speed === 0 && (result.brand.indexOf('AMD') > -1 || result.brand.toLowerCase().indexOf('ryzen') > -1)) { - result.speed = getAMDSpeed(result.brand); - } - if (result.speed === 0) { - result.speed = result.speedMax; - } - result.speedMin = result.speed; + const workload = []; + workload.push(util.wmic('cpu get /value')); + workload.push(util.wmic('path Win32_CacheMemory get CacheType,InstalledSize,Purpose')); - let description = util.getValue(lines, 'description', '=').split(' '); - for (let i = 0; i < description.length; i++) { - if (description[i].toLowerCase().startsWith('family') && (i + 1) < description.length && description[i + 1]) { - result.family = description[i + 1]; - } - if (description[i].toLowerCase().startsWith('model') && (i + 1) < description.length && description[i + 1]) { - result.model = description[i + 1]; - } - if (description[i].toLowerCase().startsWith('stepping') && (i + 1) < description.length && description[i + 1]) { - result.stepping = description[i + 1]; - } + Promise.all( + workload + ).then(data => { + let lines = data[0].split('\r\n'); + let name = util.getValue(lines, 'name', '=') || ''; + if (name.indexOf('@') >= 0) { + result.brand = name.split('@')[0].trim(); + result.speed = name.split('@')[1] ? parseFloat(name.split('@')[1].trim()) : 0; + _cpu_speed = result.speed; + } else { + result.brand = name.trim(); + result.speed = 0; + } + result = cpuBrandManufacturer(result); + result.revision = util.getValue(lines, 'revision', '='); + result.cache.l1d = 0; + result.cache.l1i = 0; + result.cache.l2 = util.getValue(lines, 'l2cachesize', '='); + result.cache.l3 = util.getValue(lines, 'l3cachesize', '='); + if (result.cache.l2) { result.cache.l2 = parseInt(result.cache.l2, 10) * 1024; } + if (result.cache.l3) { result.cache.l3 = parseInt(result.cache.l3, 10) * 1024; } + result.vendor = util.getValue(lines, 'manufacturer', '='); + result.speedMax = Math.round(parseFloat(util.getValue(lines, 'maxclockspeed', '=').replace(/,/g, '.')) / 10.0) / 100; + if (result.speed === 0 && (result.brand.indexOf('AMD') > -1 || result.brand.toLowerCase().indexOf('ryzen') > -1)) { + result.speed = getAMDSpeed(result.brand); + } + if (result.speed === 0) { + result.speed = result.speedMax; + } + result.speedMin = result.speed; + + let description = util.getValue(lines, 'description', '=').split(' '); + for (let i = 0; i < description.length; i++) { + if (description[i].toLowerCase().startsWith('family') && (i + 1) < description.length && description[i + 1]) { + result.family = description[i + 1]; } - // socket type - const socketId = util.getValue(lines, 'UpgradeMethod', '='); - if (socketTypes[socketId]) { - result.socket = socketTypes[socketId]; + if (description[i].toLowerCase().startsWith('model') && (i + 1) < description.length && description[i + 1]) { + result.model = description[i + 1]; } - // # threads / # cores - const countProcessors = util.countLines(lines, 'Caption'); - const countThreads = util.getValue(lines, 'NumberOfLogicalProcessors', '='); - const countCores = util.getValue(lines, 'NumberOfCores', '='); - if (countProcessors) { - result.processors = parseInt(countProcessors) || 1; - } - if (countCores && countThreads) { - result.cores = parseInt(countThreads) || util.cores(); - result.physicalCores = parseInt(countCores) || util.cores(); - } - if (countProcessors > 1) { - result.cores = result.cores * countProcessors; - result.physicalCores = result.physicalCores * countProcessors; + if (description[i].toLowerCase().startsWith('stepping') && (i + 1) < description.length && description[i + 1]) { + result.stepping = description[i + 1]; } } - util.wmic('path Win32_CacheMemory get CacheType,InstalledSize,Purpose').then((stdout, error) => { - if (!error) { - let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0); - lines.forEach(function (line) { - if (line !== '') { - line = line.trim().split(/\s\s+/); - // L1 Instructions - if (line[2] === 'L1 Cache' && line[0] === '3') { - result.cache.l1i = parseInt(line[1], 10); - } - // L1 Data - if (line[2] === 'L1 Cache' && line[0] === '4') { - result.cache.l1d = parseInt(line[1], 10); - } - } - }); + // socket type + const socketId = util.getValue(lines, 'UpgradeMethod', '='); + if (socketTypes[socketId]) { + result.socket = socketTypes[socketId]; + } + // # threads / # cores + const countProcessors = util.countLines(lines, 'Caption'); + const countThreads = util.getValue(lines, 'NumberOfLogicalProcessors', '='); + const countCores = util.getValue(lines, 'NumberOfCores', '='); + if (countProcessors) { + result.processors = parseInt(countProcessors) || 1; + } + if (countCores && countThreads) { + result.cores = parseInt(countThreads) || util.cores(); + result.physicalCores = parseInt(countCores) || util.cores(); + } + if (countProcessors > 1) { + result.cores = result.cores * countProcessors; + result.physicalCores = result.physicalCores * countProcessors; + } + lines = data[1].split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0); + lines.forEach(function (line) { + if (line !== '') { + line = line.trim().split(/\s\s+/); + // L1 Instructions + if (line[2] === 'L1 Cache' && line[0] === '3') { + result.cache.l1i = parseInt(line[1], 10); + } + // L1 Data + if (line[2] === 'L1 Cache' && line[0] === '4') { + result.cache.l1d = parseInt(line[1], 10); + } } - resolve(result); }); + resolve(result); }); } catch (e) { resolve(result); diff --git a/lib/network.js b/lib/network.js index 34cfa0a..9e1087b 100644 --- a/lib/network.js +++ b/lib/network.js @@ -221,6 +221,7 @@ function parseLinesWindowsNics(sections, nconfigsections) { let netEnabled = util.getValue(lines, 'NetEnabled', '='); let adapterType = util.getValue(lines, 'AdapterTypeID', '=') === '9' ? 'wireless' : 'wired'; let ifacename = util.getValue(lines, 'Name', '=').replace(/\]/g, ')').replace(/\[/g, '('); + let iface = util.getValue(lines, 'NetConnectionID', '=').replace(/\]/g, ')').replace(/\[/g, '('); if (ifacename.toLowerCase().indexOf('wi-fi') >= 0 || ifacename.toLowerCase().indexOf('wireless') >= 0) { adapterType = 'wireless'; } @@ -230,6 +231,7 @@ function parseLinesWindowsNics(sections, nconfigsections) { mac: util.getValue(lines, 'MACAddress', '=').toLowerCase(), dhcp: util.getValue(linesNicConfig, 'dhcpEnabled', '=').toLowerCase(), name: ifacename, + iface, netEnabled: netEnabled === 'TRUE', speed: isNaN(speed) ? null : speed, operstate: util.getValue(lines, 'NetConnectionStatus', '=') === '2' ? 'up' : 'down', @@ -243,7 +245,7 @@ function parseLinesWindowsNics(sections, nconfigsections) { } function getWindowsNics() { - const cmd = util.getWmic() + ' nic get MACAddress, name, NetEnabled, Speed, NetConnectionStatus, AdapterTypeId /value'; + const cmd = util.getWmic() + ' nic get MACAddress, name, NetConnectionId, NetEnabled, Speed, NetConnectionStatus, AdapterTypeId /value'; const cmdnicconfig = util.getWmic() + ' nicconfig get dhcpEnabled /value'; try { const nsections = execSync(cmd, util.execOptsWin).split(/\n\s*\n/); @@ -774,6 +776,7 @@ function networkInterfaces(callback, rescan = true) { _dhcpNics = getLinuxDHCPNics(); } for (let dev in ifaces) { + let iface = dev; let ip4 = ''; let ip4subnet = ''; let ip6 = ''; @@ -873,6 +876,7 @@ function networkInterfaces(callback, rescan = true) { dnsSuffix = getWindowsIfaceDNSsuffix(dnsSuffixes.ifaces, dev); nics.forEach(detail => { if (detail.mac === mac) { + iface = detail.iface || iface; ifaceName = detail.name; dhcp = detail.dhcp; operstate = detail.operstate; @@ -895,7 +899,7 @@ function networkInterfaces(callback, rescan = true) { } const virtual = internal ? false : testVirtualNic(dev, ifaceName, mac); result.push({ - iface: dev, + iface, ifaceName, ip4, ip4subnet, From ef880e8193d30998f37d541b9dc3db773f490a77 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Wed, 10 Mar 2021 13:54:24 +0100 Subject: [PATCH 16/33] networkInterfaces(), cpu() improvement (win) --- CHANGELOG.md | 1 + docs/history.html | 5 +++++ docs/index.html | 6 +++--- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 429c291..4ad1b1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -77,6 +77,7 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page. | Version | Date | Comment | | -------------- | -------------- | -------- | +| 5.6.2 | 2021-03-10 | `networkInterfaces()` `cpu()` improvement (win) | | 5.6.1 | 2021-03-03 | `get()` fixed issue boolean parameters | | 5.6.0 | 2021-03-03 | `cpuTemperature()` added socket and chipset temp (linux) | | 5.5.0 | 2021-02-25 | `dockerVolumes()` added | diff --git a/docs/history.html b/docs/history.html index fd98a82..ddeb8cd 100644 --- a/docs/history.html +++ b/docs/history.html @@ -56,6 +56,11 @@ + + 5.6.2 + 2021-03-10 + networkInterfaces(), cpu() improvements (win) + 5.6.1 2021-03-03 diff --git a/docs/index.html b/docs/index.html index a988e34..0965949 100644 --- a/docs/index.html +++ b/docs/index.html @@ -170,7 +170,7 @@
    systeminformation
     
    -
    New Version: 5.6.1
    +
    New Version: 5.6.2
    @@ -201,7 +201,7 @@
    -
    14,121
    +
    14,185
    Lines of code
    @@ -209,7 +209,7 @@
    Downloads last month
    -
    393
    +
    395
    Dependents
    From 41b3059f216ad0aefece4fbffd3a6c2fe829e71b Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Wed, 10 Mar 2021 13:54:33 +0100 Subject: [PATCH 17/33] 5.6.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 66f5ff2..7ebfa89 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "systeminformation", - "version": "5.6.1", + "version": "5.6.2", "description": "Simple system and OS information library", "license": "MIT", "author": "Sebastian Hildebrandt (https://plus-innovations.com)", From af9b8a522e31271ab7f82ef75e92cba12f52da90 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Sun, 14 Mar 2021 18:08:45 +0100 Subject: [PATCH 18/33] sanitizeShellString() improvement --- CHANGELOG.md | 1 + docs/history.html | 5 +++++ docs/index.html | 6 +++--- docs/security.html | 17 +++++++++++++++++ lib/util.js | 9 +++++---- 5 files changed, 31 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ad1b1c..40e1f1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -77,6 +77,7 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page. | Version | Date | Comment | | -------------- | -------------- | -------- | +| 5.6.3 | 2021-03-10 | `sanitizeShellString()` improvement | | 5.6.2 | 2021-03-10 | `networkInterfaces()` `cpu()` improvement (win) | | 5.6.1 | 2021-03-03 | `get()` fixed issue boolean parameters | | 5.6.0 | 2021-03-03 | `cpuTemperature()` added socket and chipset temp (linux) | diff --git a/docs/history.html b/docs/history.html index ddeb8cd..f91d534 100644 --- a/docs/history.html +++ b/docs/history.html @@ -56,6 +56,11 @@ + + 5.6.3 + 2021-03-14 + sanitizeShellString() improvements + 5.6.2 2021-03-10 diff --git a/docs/index.html b/docs/index.html index 0965949..dfaecaf 100644 --- a/docs/index.html +++ b/docs/index.html @@ -166,11 +166,11 @@
    - Security advisory:
    Update to v5.3.2
    + Security advisory:
    Update to v5.6.3
    systeminformation
     
    -
    New Version: 5.6.2
    +
    New Version: 5.6.3
    @@ -209,7 +209,7 @@
    Downloads last month
    -
    395
    +
    397
    Dependents
    diff --git a/docs/security.html b/docs/security.html index 16637dc..7508f12 100644 --- a/docs/security.html +++ b/docs/security.html @@ -43,6 +43,23 @@
    Security Advisories
    +

    Command Injection Vulnerability

    +

    Affected versions: + < 5.6.3 and < 4.34.13
    + Date: 2021-03-14
    + CVE indentifier - +

    + +

    Impact

    +

    We had an issue that there was a possibility to perform a potential command injection possibility by passing a manipulated string prototype as a parameter to the following functions. Affected commands: inetLatency(), inetChecksite(), services(), processLoad().

    + +

    Patch

    +

    Problem was fixed with additional parameter checking. Please upgrade to version >= 5.6.3 (or >= 4.34.13 if you are using version 4).

    + +

    Workarround

    +

    If you cannot upgrade, be sure to check or sanitize parameter strings that are passed to inetLatency(), inetChecksite(), services(), processLoad() (string only)

    +
    +

    Insufficient File Scheme Validation

    Affected versions: < 5.3.2 and < 4.34.12
    diff --git a/lib/util.js b/lib/util.js index 24b3e6e..04e5a89 100644 --- a/lib/util.js +++ b/lib/util.js @@ -529,10 +529,11 @@ function sanitizeShellString(str, strict = false) { s[i] === '\'' || s[i] === '`' || s[i] === '"' || - strict && s[i] === '@' || - strict && s[i] === ' ' || - strict && s[i] == '{' || - strict && s[i] == ')')) { + s[i].length > 1 || + (strict && s[i] === '@') || + (strict && s[i] === ' ') || + (strict && s[i] == '{') || + (strict && s[i] == ')'))) { result = result + s[i]; } } From d84fea93dc1dc1225bc2d86a6fddc6ba1595ce26 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Sun, 14 Mar 2021 18:17:10 +0100 Subject: [PATCH 19/33] updated docs --- docs/security.html | 4 ++-- docs/v4/history.html | 5 +++++ docs/v4/index.html | 4 ++-- docs/v4/security.html | 17 +++++++++++++++++ 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/docs/security.html b/docs/security.html index 7508f12..aff46fb 100644 --- a/docs/security.html +++ b/docs/security.html @@ -45,7 +45,7 @@

    Command Injection Vulnerability

    Affected versions: - < 5.6.3 and < 4.34.13
    + < 5.6.3 and < 4.34.16
    Date: 2021-03-14
    CVE indentifier -

    @@ -54,7 +54,7 @@

    We had an issue that there was a possibility to perform a potential command injection possibility by passing a manipulated string prototype as a parameter to the following functions. Affected commands: inetLatency(), inetChecksite(), services(), processLoad().

    Patch

    -

    Problem was fixed with additional parameter checking. Please upgrade to version >= 5.6.3 (or >= 4.34.13 if you are using version 4).

    +

    Problem was fixed with additional parameter checking. Please upgrade to version >= 5.6.3 (or >= 4.34.16 if you are using version 4).

    Workarround

    If you cannot upgrade, be sure to check or sanitize parameter strings that are passed to inetLatency(), inetChecksite(), services(), processLoad() (string only)

    diff --git a/docs/v4/history.html b/docs/v4/history.html index 14962b5..8efd931 100644 --- a/docs/v4/history.html +++ b/docs/v4/history.html @@ -83,6 +83,11 @@ + + 4.34.16 + 2021-03-14 + sanitizeShellString() improvements + 4.34.15 2020-02-23 diff --git a/docs/v4/index.html b/docs/v4/index.html index 4348562..b51e9d8 100644 --- a/docs/v4/index.html +++ b/docs/v4/index.html @@ -165,12 +165,12 @@
    - Security advisory:
    Update to v4.34.11
    + Security advisory:
    Update to v4.34.16
    systeminformation
     
    Version 4 documentation
    -
    Current Version: 4.34.15
    +
    Current Version: 4.34.16
    diff --git a/docs/v4/security.html b/docs/v4/security.html index 6a41d03..f478020 100644 --- a/docs/v4/security.html +++ b/docs/v4/security.html @@ -42,6 +42,23 @@
    Security Advisories
    +

    Command Injection Vulnerability

    +

    Affected versions: + < 4.34.13
    + Date: 2021-03-14
    + CVE indentifier - +

    + +

    Impact

    +

    We had an issue that there was a possibility to perform a potential command injection possibility by passing a manipulated string prototype as a parameter to the following functions. Affected commands: inetLatency(), inetChecksite(), services(), processLoad().

    + +

    Patch

    +

    Problem was fixed with additional parameter checking. Please upgrade to version >= 4.34.13 if you are using version 4.

    + +

    Workarround

    +

    If you cannot upgrade, be sure to check or sanitize parameter strings that are passed to inetLatency(), inetChecksite(), services(), processLoad() (string only)

    +
    +

    Insufficient File Scheme Validation

    Affected versions: 4.34.12
    From b106e4153834acab259f336e049fb17b51cf1506 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Sun, 14 Mar 2021 18:17:21 +0100 Subject: [PATCH 20/33] 5.6.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7ebfa89..7c2deee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "systeminformation", - "version": "5.6.2", + "version": "5.6.3", "description": "Simple system and OS information library", "license": "MIT", "author": "Sebastian Hildebrandt (https://plus-innovations.com)", From 7922366d707de7f20995fc8e30ac3153636bf35f Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Mon, 15 Mar 2021 11:21:32 +0100 Subject: [PATCH 21/33] sanitizeShellString() and other security improvements --- CHANGELOG.md | 3 ++- docs/history.html | 5 +++++ docs/index.html | 4 ++-- docs/security.html | 6 +++--- docs/v4/history.html | 5 +++++ docs/v4/index.html | 4 ++-- docs/v4/security.html | 6 +++--- lib/internet.js | 32 ++++++++++++++++++-------------- lib/network.js | 3 ++- lib/processes.js | 23 +++++++++++++---------- lib/util.js | 41 ++++++++++++++++++++++++++++++++++++++++- 11 files changed, 95 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 40e1f1c..94be3e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -77,7 +77,8 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page. | Version | Date | Comment | | -------------- | -------------- | -------- | -| 5.6.3 | 2021-03-10 | `sanitizeShellString()` improvement | +| 5.6.4 | 2021-03-15 | `sanitizeShellString()` and other security improvements | +| 5.6.3 | 2021-03-14 | `sanitizeShellString()` improvement | | 5.6.2 | 2021-03-10 | `networkInterfaces()` `cpu()` improvement (win) | | 5.6.1 | 2021-03-03 | `get()` fixed issue boolean parameters | | 5.6.0 | 2021-03-03 | `cpuTemperature()` added socket and chipset temp (linux) | diff --git a/docs/history.html b/docs/history.html index f91d534..3e66d56 100644 --- a/docs/history.html +++ b/docs/history.html @@ -56,6 +56,11 @@ + + 5.6.4 + 2021-03-15 + sanitizeShellString() and other security improvements + 5.6.3 2021-03-14 diff --git a/docs/index.html b/docs/index.html index dfaecaf..6262226 100644 --- a/docs/index.html +++ b/docs/index.html @@ -166,11 +166,11 @@

    - Security advisory:
    Update to v5.6.3
    + Security advisory:
    Update to v5.6.4
    systeminformation
     
    -
    New Version: 5.6.3
    +
    New Version: 5.6.4
    diff --git a/docs/security.html b/docs/security.html index aff46fb..3eeb8a8 100644 --- a/docs/security.html +++ b/docs/security.html @@ -45,8 +45,8 @@

    Command Injection Vulnerability

    Affected versions: - < 5.6.3 and < 4.34.16
    - Date: 2021-03-14
    + < 5.6.4 and < 4.34.17
    + Date: 2021-03-15
    CVE indentifier -

    @@ -54,7 +54,7 @@

    We had an issue that there was a possibility to perform a potential command injection possibility by passing a manipulated string prototype as a parameter to the following functions. Affected commands: inetLatency(), inetChecksite(), services(), processLoad().

    Patch

    -

    Problem was fixed with additional parameter checking. Please upgrade to version >= 5.6.3 (or >= 4.34.16 if you are using version 4).

    +

    Problem was fixed with additional parameter checking. Please upgrade to version >= 5.6.4 (or >= 4.34.17 if you are using version 4).

    Workarround

    If you cannot upgrade, be sure to check or sanitize parameter strings that are passed to inetLatency(), inetChecksite(), services(), processLoad() (string only)

    diff --git a/docs/v4/history.html b/docs/v4/history.html index 8efd931..55aa575 100644 --- a/docs/v4/history.html +++ b/docs/v4/history.html @@ -83,6 +83,11 @@ + + 4.34.17 + 2021-03-14 + sanitizeShellString() and other security improvements + 4.34.16 2021-03-14 diff --git a/docs/v4/index.html b/docs/v4/index.html index b51e9d8..2b08555 100644 --- a/docs/v4/index.html +++ b/docs/v4/index.html @@ -165,12 +165,12 @@
    - Security advisory:
    Update to v4.34.16
    + Security advisory:
    Update to v4.34.17
    systeminformation
     
    Version 4 documentation
    -
    Current Version: 4.34.16
    +
    Current Version: 4.34.17
    diff --git a/docs/v4/security.html b/docs/v4/security.html index f478020..3907e78 100644 --- a/docs/v4/security.html +++ b/docs/v4/security.html @@ -44,8 +44,8 @@

    Command Injection Vulnerability

    Affected versions: - < 4.34.13
    - Date: 2021-03-14
    + < 4.34.17
    + Date: 2021-03-15
    CVE indentifier -

    @@ -53,7 +53,7 @@

    We had an issue that there was a possibility to perform a potential command injection possibility by passing a manipulated string prototype as a parameter to the following functions. Affected commands: inetLatency(), inetChecksite(), services(), processLoad().

    Patch

    -

    Problem was fixed with additional parameter checking. Please upgrade to version >= 4.34.13 if you are using version 4.

    +

    Problem was fixed with additional parameter checking. Please upgrade to version >= 4.34.17 if you are using version 4.

    Workarround

    If you cannot upgrade, be sure to check or sanitize parameter strings that are passed to inetLatency(), inetChecksite(), services(), processLoad() (string only)

    diff --git a/lib/internet.js b/lib/internet.js index 6c4e9af..9ac1e71 100644 --- a/lib/internet.js +++ b/lib/internet.js @@ -13,7 +13,7 @@ // 12. Internet // ---------------------------------------------------------------------------------- -const exec = require('child_process').exec; +// const exec = require('child_process').exec; const execFile = require('child_process').execFile; const util = require('./util'); @@ -46,11 +46,12 @@ function inetChecksite(url, callback) { } let urlSanitized = ''; const s = util.sanitizeShellString(url, true); - for (let i = 0; i <= 2000; i++) { + const mathMin = util.mathMin; + for (let i = 0; i <= mathMin(s.length, 2000); i++) { if (!(s[i] === undefined)) { s[i].__proto__.toLowerCase = util.stringToLower; const sl = s[i].toLowerCase(); - if (sl && sl[0] && !sl[1]) { + if (sl && sl[0] && !sl[1] && sl[0].length === 1) { urlSanitized = urlSanitized + sl[0]; } } @@ -65,12 +66,14 @@ function inetChecksite(url, callback) { } let t = Date.now(); if (_linux || _freebsd || _openbsd || _netbsd || _darwin || _sunos) { - let args = ' -I --connect-timeout 5 -m 5 ' + urlSanitized + ' 2>/dev/null | head -n 1 | cut -d " " -f2'; + let args = ['-I', '--connect-timeout', '5', '-m', '5']; + args.push(urlSanitized); let cmd = 'curl'; - exec(cmd + args, function (error, stdout) { - let statusCode = parseInt(stdout.toString()); + util.execSave(cmd, args).then((stdout) => { + const lines = stdout.split('\n'); + let statusCode = lines[0] && lines[0].indexOf(' ') >= 0 ? parseInt(lines[0].split(' ')[1], 10) : 404; result.status = statusCode || 404; - result.ok = !error && (statusCode === 200 || statusCode === 301 || statusCode === 302 || statusCode === 304); + result.ok = (statusCode === 200 || statusCode === 301 || statusCode === 302 || statusCode === 304); result.ms = (result.ok ? Date.now() - t : null); if (callback) { callback(result); } resolve(result); @@ -142,7 +145,8 @@ function inetLatency(host, callback) { } let hostSanitized = ''; const s = (util.isPrototypePolluted() ? '8.8.8.8' : util.sanitizeShellString(host, true)).trim(); - for (let i = 0; i <= 2000; i++) { + const mathMin = util.mathMin; + for (let i = 0; i <= mathMin(s.length, 2000); i++) { if (!(s[i] === undefined)) { s[i].__proto__.toLowerCase = util.stringToLower; const sl = s[i].toLowerCase(); @@ -171,10 +175,10 @@ function inetLatency(host, callback) { params = '-c2 -t3 ' + hostSanitized; filt = 'avg'; } - execFile('ping', params.split(' '), function (error, stdout) { + util.execSave('ping', params.split(' ')).then((stdout) => { let result = null; - if (!error) { - const lines = stdout.toString().split('\n').filter(line => line.indexOf(filt) >= 0).join('\n'); + if (stdout) { + const lines = stdout.split('\n').filter(line => line.indexOf(filt) >= 0).join('\n'); const line = lines.split('='); if (line.length > 1) { @@ -191,10 +195,10 @@ function inetLatency(host, callback) { if (_sunos) { const params = '-s -a ' + hostSanitized + ' 56 2'; const filt = 'avg'; - execFile('ping', params.split(' '), { timeout: 3000 }, function (error, stdout) { + util.execSave('ping', params.split(' '), { timeout: 3000 }).then((stdout) => { let result = null; - if (!error) { - const lines = stdout.toString().split('\n').filter(line => line.indexOf(filt) >= 0).join('\n'); + if (stdout) { + const lines = stdout.split('\n').filter(line => line.indexOf(filt) >= 0).join('\n'); const line = lines.split('='); if (line.length > 1) { const parts = line[1].split('/'); diff --git a/lib/network.js b/lib/network.js index 9e1087b..5398ece 100644 --- a/lib/network.js +++ b/lib/network.js @@ -1061,7 +1061,8 @@ function networkStatsSingle(iface) { process.nextTick(() => { let ifaceSanitized = ''; const s = util.isPrototypePolluted() ? '---' : util.sanitizeShellString(iface); - for (let i = 0; i <= 2000; i++) { + const mathMin = util.mathMin; + for (let i = 0; i <= mathMin(s.length, 2000); i++) { if (!(s[i] === undefined)) { ifaceSanitized = ifaceSanitized + s[i]; } diff --git a/lib/processes.js b/lib/processes.js index 400c01f..2f234c6 100644 --- a/lib/processes.js +++ b/lib/processes.js @@ -111,7 +111,8 @@ function services(srv, callback) { srvString.__proto__.trim = util.stringTrim; const s = util.sanitizeShellString(srv); - for (let i = 0; i <= 2000; i++) { + const mathMin = util.mathMin; + for (let i = 0; i <= mathMin(s.length, 2000); i++) { if (!(s[i] === undefined)) { srvString = srvString + s[i]; } @@ -164,15 +165,15 @@ function services(srv, callback) { } } } - if ((_darwin) && srvString === '*') { // service enumeration mnot yet suported on mac OS + if ((_darwin) && srvString === '*') { // service enumeration not yet suported on mac OS if (callback) { callback(result); } resolve(result); } - let comm = (_darwin) ? 'ps -caxo pcpu,pmem,pid,command' : 'ps -axo pcpu,pmem,pid,command'; + let args = (_darwin) ? ['-caxo', 'pcpu,pmem,pid,command'] : ['-axo', 'pcpu,pmem,pid,command']; if (srvString !== '' && srvs.length > 0) { - exec(comm + ' | grep -v grep | grep -iE "' + srvString + '"', { maxBuffer: 1024 * 20000 }, function (error, stdout) { // lgtm [js/shell-command-constructed-from-input] - if (!error) { - let lines = stdout.toString().replace(/ +/g, ' ').replace(/,+/g, '.').split('\n'); + util.execSave('ps', args).then((stdout) => { + if (stdout) { + let lines = stdout.replace(/ +/g, ' ').replace(/,+/g, '.').split('\n'); srvs.forEach(function (srv) { let ps; if (_darwin) { @@ -267,9 +268,10 @@ function services(srv, callback) { resolve(result); } } else { - exec('ps -o comm | grep -v grep | egrep "' + srvString + '"', { maxBuffer: 1024 * 20000 }, function (error, stdout) { // lgtm [js/shell-command-constructed-from-input] - if (!error) { - let lines = stdout.toString().replace(/ +/g, ' ').replace(/,+/g, '.').split('\n'); + args = ['-o', 'comm']; + util.execSave('ps', args).then((stdout) => { + if (stdout) { + let lines = stdout.replace(/ +/g, ' ').replace(/,+/g, '.').split('\n'); srvs.forEach(function (srv) { let ps = lines.filter(function (e) { return e.indexOf(srv) !== -1; @@ -909,7 +911,8 @@ function processLoad(proc, callback) { processesString.__proto__.trim = util.stringTrim; const s = util.sanitizeShellString(proc); - for (let i = 0; i <= 2000; i++) { + const mathMin = util.mathMin; + for (let i = 0; i <= mathMin(s.length, 2000); i++) { if (!(s[i] === undefined)) { processesString = processesString + s[i]; } diff --git a/lib/util.js b/lib/util.js index 04e5a89..d5c689f 100644 --- a/lib/util.js +++ b/lib/util.js @@ -58,6 +58,7 @@ const stringToString = new String().toString; const stringSubstr = new String().substr; const stringTrim = new String().trim; const stringStartWith = new String().startsWith; +const mathMin = Math.min; function isFunction(functionToCheck) { let getType = {}; @@ -389,6 +390,42 @@ function powerShell(cmd) { }); } +function execSave(cmd, args, options) { + let result = ''; + options = options || {}; + + return new Promise((resolve) => { + process.nextTick(() => { + try { + const child = spawn(cmd, args, options); + + if (child && !child.pid) { + child.on('error', function () { + resolve(result); + }); + } + if (child && child.pid) { + child.stdout.on('data', function (data) { + result += data.toString(); + }); + child.on('close', function () { + child.kill(); + resolve(result); + }); + child.on('error', function () { + child.kill(); + resolve(result); + }); + } else { + resolve(result); + } + } catch (e) { + resolve(result); + } + }); + }); +} + function getCodepage() { if (_windows) { if (!codepage) { @@ -506,7 +543,7 @@ function countLines(lines, startingWith) { function sanitizeShellString(str, strict = false) { const s = str || ''; let result = ''; - for (let i = 0; i <= 2000; i++) { + for (let i = 0; i <= mathMin(s.length, 2000); i++) { if (!(s[i] === undefined || s[i] === '>' || s[i] === '<' || @@ -925,6 +962,7 @@ exports.wmic = wmic; exports.darwinXcodeExists = darwinXcodeExists; exports.getVboxmanage = getVboxmanage; exports.powerShell = powerShell; +exports.execSave = execSave; exports.nanoSeconds = nanoSeconds; exports.countUniqueLines = countUniqueLines; exports.countLines = countLines; @@ -943,5 +981,6 @@ exports.stringToString = stringToString; exports.stringSubstr = stringSubstr; exports.stringTrim = stringTrim; exports.stringStartWith = stringStartWith; +exports.mathMin = mathMin; exports.WINDIR = WINDIR; exports.getFilesInPath = getFilesInPath; From 0be6fcd575c05687d1076d5cd6d75af2ebae5a46 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Mon, 15 Mar 2021 11:42:12 +0100 Subject: [PATCH 22/33] sanitizeShellString() and other security improvements --- lib/docker.js | 2 +- lib/internet.js | 6 ++---- lib/network.js | 3 +-- lib/processes.js | 6 ++---- 4 files changed, 6 insertions(+), 11 deletions(-) diff --git a/lib/docker.js b/lib/docker.js index 235487e..89705eb 100644 --- a/lib/docker.js +++ b/lib/docker.js @@ -470,7 +470,7 @@ function dockerContainerStats(containerIDs, callback) { if (containerIDsSanitized !== '*') { containerIDsSanitized = ''; const s = (util.isPrototypePolluted() ? '' : util.sanitizeShellString(containerIDs, true)).trim(); - for (let i = 0; i <= 2000; i++) { + for (let i = 0; i <= util.mathMin(s.length, 2000); i++) { if (!(s[i] === undefined)) { s[i].__proto__.toLowerCase = util.stringToLower; const sl = s[i].toLowerCase(); diff --git a/lib/internet.js b/lib/internet.js index 9ac1e71..1f75a71 100644 --- a/lib/internet.js +++ b/lib/internet.js @@ -46,8 +46,7 @@ function inetChecksite(url, callback) { } let urlSanitized = ''; const s = util.sanitizeShellString(url, true); - const mathMin = util.mathMin; - for (let i = 0; i <= mathMin(s.length, 2000); i++) { + for (let i = 0; i <= util.mathMin(s.length, 2000); i++) { if (!(s[i] === undefined)) { s[i].__proto__.toLowerCase = util.stringToLower; const sl = s[i].toLowerCase(); @@ -145,8 +144,7 @@ function inetLatency(host, callback) { } let hostSanitized = ''; const s = (util.isPrototypePolluted() ? '8.8.8.8' : util.sanitizeShellString(host, true)).trim(); - const mathMin = util.mathMin; - for (let i = 0; i <= mathMin(s.length, 2000); i++) { + for (let i = 0; i <= util.mathMin(s.length, 2000); i++) { if (!(s[i] === undefined)) { s[i].__proto__.toLowerCase = util.stringToLower; const sl = s[i].toLowerCase(); diff --git a/lib/network.js b/lib/network.js index 5398ece..0dc8d9e 100644 --- a/lib/network.js +++ b/lib/network.js @@ -1061,8 +1061,7 @@ function networkStatsSingle(iface) { process.nextTick(() => { let ifaceSanitized = ''; const s = util.isPrototypePolluted() ? '---' : util.sanitizeShellString(iface); - const mathMin = util.mathMin; - for (let i = 0; i <= mathMin(s.length, 2000); i++) { + for (let i = 0; i <= util.mathMin(s.length, 2000); i++) { if (!(s[i] === undefined)) { ifaceSanitized = ifaceSanitized + s[i]; } diff --git a/lib/processes.js b/lib/processes.js index 2f234c6..510577a 100644 --- a/lib/processes.js +++ b/lib/processes.js @@ -111,8 +111,7 @@ function services(srv, callback) { srvString.__proto__.trim = util.stringTrim; const s = util.sanitizeShellString(srv); - const mathMin = util.mathMin; - for (let i = 0; i <= mathMin(s.length, 2000); i++) { + for (let i = 0; i <= util.mathMin(s.length, 2000); i++) { if (!(s[i] === undefined)) { srvString = srvString + s[i]; } @@ -911,8 +910,7 @@ function processLoad(proc, callback) { processesString.__proto__.trim = util.stringTrim; const s = util.sanitizeShellString(proc); - const mathMin = util.mathMin; - for (let i = 0; i <= mathMin(s.length, 2000); i++) { + for (let i = 0; i <= util.mathMin(s.length, 2000); i++) { if (!(s[i] === undefined)) { processesString = processesString + s[i]; } From 01ef56cd5824ed6da1c11b37013a027fdef67524 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Mon, 15 Mar 2021 11:51:30 +0100 Subject: [PATCH 23/33] sanitizeShellString() and other security improvements --- lib/internet.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/internet.js b/lib/internet.js index 1f75a71..2dc0d5a 100644 --- a/lib/internet.js +++ b/lib/internet.js @@ -14,7 +14,6 @@ // ---------------------------------------------------------------------------------- // const exec = require('child_process').exec; -const execFile = require('child_process').execFile; const util = require('./util'); let _platform = process.platform; @@ -213,9 +212,9 @@ function inetLatency(host, callback) { let result = null; try { const params = hostSanitized + ' -n 1'; - execFile('ping', params.split(' '), util.execOptsWin, function (error, stdout) { - if (!error) { - let lines = stdout.toString().split('\r\n'); + util.execSave('ping', params.split(' '), util.execOptsWin).then((stdout) => { + if (stdout) { + let lines = stdout.split('\r\n'); lines.shift(); lines.forEach(function (line) { if ((line.toLowerCase().match(/ms/g) || []).length === 3) { From 244186ef5ea7e3e3eb7e973f702d9a81999e2789 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Mon, 15 Mar 2021 13:04:08 +0100 Subject: [PATCH 24/33] 5.6.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7c2deee..bafcbbd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "systeminformation", - "version": "5.6.3", + "version": "5.6.4", "description": "Simple system and OS information library", "license": "MIT", "author": "Sebastian Hildebrandt (https://plus-innovations.com)", From 0c700f61e4997547a20942bbdb7857d10df311c1 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Mon, 15 Mar 2021 18:11:28 +0100 Subject: [PATCH 25/33] cpuTemperature() fix (linux) --- CHANGELOG.md | 1 + docs/history.html | 5 +++++ docs/index.html | 2 +- lib/cpu.js | 2 +- 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94be3e9..424601d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -77,6 +77,7 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page. | Version | Date | Comment | | -------------- | -------------- | -------- | +| 5.6.5 | 2021-03-15 | `cpuTemperature()` fix (linux) | | 5.6.4 | 2021-03-15 | `sanitizeShellString()` and other security improvements | | 5.6.3 | 2021-03-14 | `sanitizeShellString()` improvement | | 5.6.2 | 2021-03-10 | `networkInterfaces()` `cpu()` improvement (win) | diff --git a/docs/history.html b/docs/history.html index 3e66d56..79a20ab 100644 --- a/docs/history.html +++ b/docs/history.html @@ -56,6 +56,11 @@ + + 5.6.5 + 2021-03-15 + cpuTemperature() fix linux + 5.6.4 2021-03-15 diff --git a/docs/index.html b/docs/index.html index 6262226..f87088f 100644 --- a/docs/index.html +++ b/docs/index.html @@ -170,7 +170,7 @@
    systeminformation
     
    -
    New Version: 5.6.4
    +
    New Version: 5.6.5
    diff --git a/lib/cpu.js b/lib/cpu.js index 6476301..8ef1f02 100644 --- a/lib/cpu.js +++ b/lib/cpu.js @@ -937,7 +937,7 @@ function cpuTemperature(callback) { if (_linux) { // CPU Chipset, Socket try { - const cmd = 'cat /sys/class/thermal/thermal_zone*/type; echo "-----"; cat /sys/class/thermal/thermal_zone*/temp;'; + const cmd = 'cat /sys/class/thermal/thermal_zone*/type 2>/dev/null; echo "-----"; cat /sys/class/thermal/thermal_zone*/temp 2>/dev/null;'; const parts = execSync(cmd).toString().split('-----\n'); if (parts.length === 2) { const lines = parts[0].split('\n'); From cc15927a38089e948bff2f0fb584f3ed492ff92f Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Mon, 15 Mar 2021 18:11:37 +0100 Subject: [PATCH 26/33] 5.6.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bafcbbd..28e2222 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "systeminformation", - "version": "5.6.4", + "version": "5.6.5", "description": "Simple system and OS information library", "license": "MIT", "author": "Sebastian Hildebrandt (https://plus-innovations.com)", From 2c54d64aed09fe6ce0532faec1b81b3d6e75176f Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Tue, 16 Mar 2021 11:17:37 +0100 Subject: [PATCH 27/33] code refactoring --- CHANGELOG.md | 1 + docs/history.html | 5 +++++ docs/index.html | 6 +++--- lib/internet.js | 18 +++++++++--------- lib/processes.js | 12 +++++------- lib/util.js | 4 ++-- 6 files changed, 25 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 424601d..9912deb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -77,6 +77,7 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page. | Version | Date | Comment | | -------------- | -------------- | -------- | +| 5.6.6 | 2021-03-16 | code refactoring | | 5.6.5 | 2021-03-15 | `cpuTemperature()` fix (linux) | | 5.6.4 | 2021-03-15 | `sanitizeShellString()` and other security improvements | | 5.6.3 | 2021-03-14 | `sanitizeShellString()` improvement | diff --git a/docs/history.html b/docs/history.html index 79a20ab..a5fd53c 100644 --- a/docs/history.html +++ b/docs/history.html @@ -56,6 +56,11 @@ + + 5.6.6 + 2021-03-16 + code refactoring + 5.6.5 2021-03-15 diff --git a/docs/index.html b/docs/index.html index f87088f..ac465fb 100644 --- a/docs/index.html +++ b/docs/index.html @@ -170,7 +170,7 @@
    systeminformation
     
    -
    New Version: 5.6.5
    +
    New Version: 5.6.6
    @@ -201,7 +201,7 @@
    -
    14,185
    +
    14,225
    Lines of code
    @@ -209,7 +209,7 @@
    Downloads last month
    -
    397
    +
    398
    Dependents
    diff --git a/lib/internet.js b/lib/internet.js index 2dc0d5a..23e6d6f 100644 --- a/lib/internet.js +++ b/lib/internet.js @@ -67,7 +67,7 @@ function inetChecksite(url, callback) { let args = ['-I', '--connect-timeout', '5', '-m', '5']; args.push(urlSanitized); let cmd = 'curl'; - util.execSave(cmd, args).then((stdout) => { + util.execSafe(cmd, args).then((stdout) => { const lines = stdout.split('\n'); let statusCode = lines[0] && lines[0].indexOf(' ') >= 0 ? parseInt(lines[0].split(' ')[1], 10) : 404; result.status = statusCode || 404; @@ -161,18 +161,18 @@ function inetLatency(host, callback) { let filt; if (_linux || _freebsd || _openbsd || _netbsd || _darwin) { if (_linux) { - params = '-c 2 -w 3 ' + hostSanitized; + params = ['-c', '2', '-w', '3', hostSanitized]; filt = 'rtt'; } if (_freebsd || _openbsd || _netbsd) { - params = '-c 2 -t 3 ' + hostSanitized; + params = ['-c', '2', '-t', '3', hostSanitized]; filt = 'round-trip'; } if (_darwin) { - params = '-c2 -t3 ' + hostSanitized; + params = ['-c2', '-t3', hostSanitized]; filt = 'avg'; } - util.execSave('ping', params.split(' ')).then((stdout) => { + util.execSafe('ping', params).then((stdout) => { let result = null; if (stdout) { const lines = stdout.split('\n').filter(line => line.indexOf(filt) >= 0).join('\n'); @@ -190,9 +190,9 @@ function inetLatency(host, callback) { }); } if (_sunos) { - const params = '-s -a ' + hostSanitized + ' 56 2'; + const params = ['-s', '-a', hostSanitized, '56', '2']; const filt = 'avg'; - util.execSave('ping', params.split(' '), { timeout: 3000 }).then((stdout) => { + util.execSafe('ping', params, { timeout: 3000 }).then((stdout) => { let result = null; if (stdout) { const lines = stdout.split('\n').filter(line => line.indexOf(filt) >= 0).join('\n'); @@ -211,8 +211,8 @@ function inetLatency(host, callback) { if (_windows) { let result = null; try { - const params = hostSanitized + ' -n 1'; - util.execSave('ping', params.split(' '), util.execOptsWin).then((stdout) => { + const params = [hostSanitized, '-n', '1']; + util.execSafe('ping', params, util.execOptsWin).then((stdout) => { if (stdout) { let lines = stdout.split('\r\n'); lines.shift(); diff --git a/lib/processes.js b/lib/processes.js index 510577a..c569a22 100644 --- a/lib/processes.js +++ b/lib/processes.js @@ -18,8 +18,6 @@ const fs = require('fs'); const path = require('path'); const exec = require('child_process').exec; const execSync = require('child_process').execSync; -const execFile = require('child_process').execFile; - const util = require('./util'); @@ -170,7 +168,7 @@ function services(srv, callback) { } let args = (_darwin) ? ['-caxo', 'pcpu,pmem,pid,command'] : ['-axo', 'pcpu,pmem,pid,command']; if (srvString !== '' && srvs.length > 0) { - util.execSave('ps', args).then((stdout) => { + util.execSafe('ps', args).then((stdout) => { if (stdout) { let lines = stdout.replace(/ +/g, ' ').replace(/,+/g, '.').split('\n'); srvs.forEach(function (srv) { @@ -268,7 +266,7 @@ function services(srv, callback) { } } else { args = ['-o', 'comm']; - util.execSave('ps', args).then((stdout) => { + util.execSafe('ps', args).then((stdout) => { if (stdout) { let lines = stdout.replace(/ +/g, ' ').replace(/,+/g, '.').split('\n'); srvs.forEach(function (srv) { @@ -1058,9 +1056,9 @@ function processLoad(proc, callback) { } if (_darwin || _linux || _freebsd || _openbsd || _netbsd) { - const params = '-axo pid,pcpu,pmem,comm'; - execFile('ps', params.split(' '), { maxBuffer: 1024 * 20000 }, function (error, stdout) { - if (!error) { + const params = ['-axo', 'pid,pcpu,pmem,comm']; + util.execSafe('ps', params).then((stdout) => { + if (stdout) { let procStats = []; let lines = stdout.toString().split('\n').filter(function (line) { if (processesString === '*') { return true; } diff --git a/lib/util.js b/lib/util.js index d5c689f..d7cd6bf 100644 --- a/lib/util.js +++ b/lib/util.js @@ -390,7 +390,7 @@ function powerShell(cmd) { }); } -function execSave(cmd, args, options) { +function execSafe(cmd, args, options) { let result = ''; options = options || {}; @@ -962,7 +962,7 @@ exports.wmic = wmic; exports.darwinXcodeExists = darwinXcodeExists; exports.getVboxmanage = getVboxmanage; exports.powerShell = powerShell; -exports.execSave = execSave; +exports.execSafe = execSafe; exports.nanoSeconds = nanoSeconds; exports.countUniqueLines = countUniqueLines; exports.countLines = countLines; From 5a6e509f4ac96ad6a6fd01685eda1b5caad4fb23 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Tue, 16 Mar 2021 11:24:21 +0100 Subject: [PATCH 28/33] 5.6.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 28e2222..dd4a553 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "systeminformation", - "version": "5.6.5", + "version": "5.6.6", "description": "Simple system and OS information library", "license": "MIT", "author": "Sebastian Hildebrandt (https://plus-innovations.com)", From 1ff90056d39352016bce53dbd69f2ed9f41c92fd Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Tue, 16 Mar 2021 12:01:39 +0100 Subject: [PATCH 29/33] inetLatency() ineChecksite() schema validation --- CHANGELOG.md | 1 + docs/history.html | 5 +++++ docs/index.html | 2 +- docs/security.html | 3 +++ docs/v4/history.html | 10 ++++++++++ docs/v4/index.html | 2 +- docs/v4/security.html | 3 +++ lib/internet.js | 4 ++-- 8 files changed, 26 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9912deb..8fdc899 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -77,6 +77,7 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page. | Version | Date | Comment | | -------------- | -------------- | -------- | +| 5.6.7 | 2021-03-16 | `inetLatency()` `ineChecksite()` schema validation | | 5.6.6 | 2021-03-16 | code refactoring | | 5.6.5 | 2021-03-15 | `cpuTemperature()` fix (linux) | | 5.6.4 | 2021-03-15 | `sanitizeShellString()` and other security improvements | diff --git a/docs/history.html b/docs/history.html index a5fd53c..702e07c 100644 --- a/docs/history.html +++ b/docs/history.html @@ -56,6 +56,11 @@ + + 5.6.8 + 2021-03-16 + inetLatency() inetChecksite() schema avlidation + 5.6.6 2021-03-16 diff --git a/docs/index.html b/docs/index.html index ac465fb..7c6f89f 100644 --- a/docs/index.html +++ b/docs/index.html @@ -170,7 +170,7 @@
    systeminformation
     
    -
    New Version: 5.6.6
    +
    New Version: 5.6.7
    diff --git a/docs/security.html b/docs/security.html index 3eeb8a8..590c081 100644 --- a/docs/security.html +++ b/docs/security.html @@ -43,6 +43,9 @@
    Security Advisories
    +

    Passing User Paramters to Systeminformation

    +

    Be aware to not use inetLatency(), inetChecksite(), services(), processLoad() with arbitrary untrusted user input! We are doing a lot of input sanitation for those functions in this package but we cannot handle all cases!

    +

    Command Injection Vulnerability

    Affected versions: < 5.6.4 and < 4.34.17
    diff --git a/docs/v4/history.html b/docs/v4/history.html index 55aa575..2aedaf7 100644 --- a/docs/v4/history.html +++ b/docs/v4/history.html @@ -83,6 +83,16 @@ + + 4.34.19 + 2021-03-16 + inetLatency() inetChecksite() schema avlidation + + + 4.34.18 + 2021-03-16 + code refactoring + 4.34.17 2021-03-14 diff --git a/docs/v4/index.html b/docs/v4/index.html index 2b08555..9bedc4b 100644 --- a/docs/v4/index.html +++ b/docs/v4/index.html @@ -170,7 +170,7 @@

    systeminformation
     
    Version 4 documentation
    -
    Current Version: 4.34.17
    +
    Current Version: 4.34.19
    diff --git a/docs/v4/security.html b/docs/v4/security.html index 3907e78..d7e8db4 100644 --- a/docs/v4/security.html +++ b/docs/v4/security.html @@ -42,6 +42,9 @@
    Security Advisories
    +

    Passing User Paramters to Systeminformation

    +

    Be aware to not use inetLatency(), inetChecksite(), services(), processLoad() with arbitrary untrusted user input! We are doing a lot of input sanitation for those functions in this package but we cannot handle all cases!

    +

    Command Injection Vulnerability

    Affected versions: < 4.34.17
    diff --git a/lib/internet.js b/lib/internet.js index 23e6d6f..cc996e1 100644 --- a/lib/internet.js +++ b/lib/internet.js @@ -58,7 +58,7 @@ function inetChecksite(url, callback) { try { if (urlSanitized && !util.isPrototypePolluted()) { urlSanitized.__proto__.startsWith = util.stringStartWith; - if (urlSanitized.startsWith('file:')) { + if (urlSanitized.startsWith('file:') || urlSanitized.startsWith('gopher:') || urlSanitized.startsWith('telnet:') || urlSanitized.startsWith('mailto:') || urlSanitized.startsWith('news:') || urlSanitized.startsWith('nntp:')) { if (callback) { callback(result); } return resolve(result); } @@ -153,7 +153,7 @@ function inetLatency(host, callback) { } } hostSanitized.__proto__.startsWith = util.stringStartWith; - if (hostSanitized.startsWith('file:')) { + if (hostSanitized.startsWith('file:') || hostSanitized.startsWith('gopher:') || hostSanitized.startsWith('telnet:') || hostSanitized.startsWith('mailto:') || hostSanitized.startsWith('news:') || hostSanitized.startsWith('nntp:')) { if (callback) { callback(null); } return resolve(null); } From d09531b36f1cde53b09c8a7ba838e3df1dcfc80e Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Tue, 16 Mar 2021 12:04:23 +0100 Subject: [PATCH 30/33] 5.6.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index dd4a553..dc6597a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "systeminformation", - "version": "5.6.6", + "version": "5.6.7", "description": "Simple system and OS information library", "license": "MIT", "author": "Sebastian Hildebrandt (https://plus-innovations.com)", From 8e2f9e0233008616356ebdecb877bffb341dedfb Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Sat, 20 Mar 2021 12:06:03 +0100 Subject: [PATCH 31/33] docs: updated --- docs/index.html | 4 +- docs/security.html | 4 +- docs/styles.css | 171 +++++++---------------------------------- docs/styles.css.map | 10 +-- docs/styles.scss | 8 ++ docs/v4/index.html | 2 +- docs/v4/security.html | 4 +- docs/v4/styles.css | 148 +++++------------------------------ docs/v4/styles.css.map | 10 +-- docs/v4/styles.scss | 4 + 10 files changed, 71 insertions(+), 294 deletions(-) diff --git a/docs/index.html b/docs/index.html index 7c6f89f..d4773fd 100644 --- a/docs/index.html +++ b/docs/index.html @@ -192,6 +192,8 @@ Total alerts MIT license

    +
    Security issues: Please have a look at our security advisories.
    +
    @@ -345,7 +347,7 @@
    Issues
    -
    Security issues: Please have a look at our security advisories
    +
    Security issues: We highly recomment to have a look at our security advisories
    Having an issue: If you run into problems, please check out known issues page first.
    If you still have problems, please feel free to open an issue on our github page
    diff --git a/docs/security.html b/docs/security.html index 590c081..96877e2 100644 --- a/docs/security.html +++ b/docs/security.html @@ -44,7 +44,9 @@
    Security Advisories

    Passing User Paramters to Systeminformation

    -

    Be aware to not use inetLatency(), inetChecksite(), services(), processLoad() with arbitrary untrusted user input! We are doing a lot of input sanitation for those functions in this package but we cannot handle all cases!

    +

    For most of the applications that are using systeminformation, there is no reason to worry. But be aware! If you are using inetLatency(), inetChecksite(), services(), processLoad() with arbitrary untrusted user input, you should pay extra attention! We are doing a lot of input sanitation for those functions inside this package but we cannot handle all cases!

    +

    This can lead to serious impact on your servers!

    +

    We highly recommend to always upgrade to the latest version of our package. We maintain security updates for version 5 AND also version 4. For version 4 you can install latest version by placing "systeminformation": "^4" in your package.json (dependencies) and run npm install

    Command Injection Vulnerability

    Affected versions: diff --git a/docs/styles.css b/docs/styles.css index af748b0..cf001bb 100644 --- a/docs/styles.css +++ b/docs/styles.css @@ -1,11 +1,11 @@ body { - font-family: 'Roboto', 'HelveticaNeue-Light','Helvetica Neue Light','Helvetica Neue',Helvetica,Arial,sans-serif; + font-family: "Roboto", "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 300; min-height: 100%; } h1, h2, h3, h4 { - font-family: 'Roboto', 'HelveticaNeue-Light','Helvetica Neue Light','Helvetica Neue',Helvetica,Arial,sans-serif; + font-family: "Roboto", "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 500; color: #3d5cb3; } @@ -18,6 +18,16 @@ h1, h2, h3, h4 { font-weight: 500; } +.warning { + font-weight: 500; + color: #9c0101; +} + +.larger { + margin-top: 10px; + font-size: 1.5rem !important; +} + .medium { font-weight: 500; } @@ -40,45 +50,24 @@ h1, h2, h3, h4 { height: 100vh; height: calc(var(--vh, 1vh) * 100); opacity: 0.95; - display: -webkit-box; - display: -ms-flexbox; display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; + justify-content: center; text-align: center; width: 100% !important; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; + flex-direction: column; } - .bg-image-full .top-container { text-align: center; - -ms-flex-item-align: center; - align-self: center; - display: -webkit-box; - display: -ms-flexbox; + align-self: center; display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; + justify-content: center; + flex-direction: column; + align-items: center; + flex-grow: 1; overflow: hidden; position: relative; width: 100% !important; } - .bg-image-full .recommendation { position: absolute; top: 30px; @@ -88,20 +77,17 @@ h1, h2, h3, h4 { display: inline-block; width: 280px; text-align: center; - padding: .25em 0; + padding: 0.25em 0; color: white; - -webkit-transform: rotate(45deg); - transform: rotate(45deg); + transform: rotate(45deg); background: #971d1d; font-size: 0.9rem; } - @media only screen and (min-width: 420px) { .bg-image-full .recommendation { - font-size: 1.0rem; + font-size: 1rem; } } - @media only screen and (min-width: 767px) { .bg-image-full .recommendation { font-size: 1.1rem; @@ -110,7 +96,6 @@ h1, h2, h3, h4 { width: 330px; } } - @media only screen and (min-width: 1024px) { .bg-image-full .recommendation { width: 330px; @@ -120,11 +105,9 @@ h1, h2, h3, h4 { font-size: 1.2rem; } } - .bg-image-full .recommendation:hover { text-decoration: none; } - .bg-image-full .title { color: #fff; padding-top: 10px; @@ -132,197 +115,164 @@ h1, h2, h3, h4 { margin-bottom: 10px; font-weight: 500; } - @media only screen and (min-width: 374px) { .bg-image-full .title { font-size: 2.1rem; } } - @media only screen and (min-width: 420px) { .bg-image-full .title { font-size: 2.4rem; } } - @media only screen and (min-width: 767px) { .bg-image-full .title { font-size: 3.5rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .title { font-size: 4rem; } } - @media only screen and (min-width: 1200px) { .bg-image-full .title { font-size: 5rem; } } - @media only screen and (min-width: 1900px) { .bg-image-full .title { font-size: 6rem; } } - .bg-image-full .logo { width: 100px; } - @media only screen and (min-width: 420px) { .bg-image-full .logo { width: 120px; } } - @media only screen and (min-width: 767px) { .bg-image-full .logo { width: 160px; } } - @media only screen and (min-width: 1024px) { .bg-image-full .logo { width: 200px; } } - @media only screen and (min-width: 1900px) { .bg-image-full .logo { width: 250px; } } - .bg-image-full .subtitle { text-align: center; color: #bbb; font-size: 0.78rem; } - @media only screen and (min-width: 375px) { .bg-image-full .subtitle { font-size: 0.9rem; } } - @media only screen and (min-width: 420px) { .bg-image-full .subtitle { font-size: 1rem; } } - @media only screen and (min-width: 767px) { .bg-image-full .subtitle { font-size: 1.1rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .subtitle { font-size: 1.3rem; } } - @media only screen and (min-width: 1200px) { .bg-image-full .subtitle { font-size: 1.4rem; } } - @media only screen and (min-width: 1900px) { .bg-image-full .subtitle { font-size: 1.6rem; } } - .bg-image-full .text > a { text-align: center; color: #fff; font-size: 0.9rem; } - .bg-image-full .text > a:hover { color: #aaa; text-decoration: none; } - @media only screen and (min-width: 375px) { .bg-image-full .text > a { font-size: 0.9rem; } } - @media only screen and (min-width: 420px) { .bg-image-full .text > a { font-size: 1rem; } } - @media only screen and (min-width: 767px) { .bg-image-full .text > a { font-size: 1rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .text > a { font-size: 1.1rem; } } - @media only screen and (min-width: 1200px) { .bg-image-full .text > a { font-size: 1.2rem; } } - @media only screen and (min-width: 1900px) { .bg-image-full .text > a { font-size: 1.5rem; } } - .bg-image-full .version { text-align: center; margin-bottom: 10px; color: #fff; - font-size: .9rem; + font-size: 0.9rem; } - @media only screen and (min-width: 420px) { .bg-image-full .version { - font-size: .9rem; + font-size: 0.9rem; } } - @media only screen and (min-width: 768px) { .bg-image-full .version { font-size: 1rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .version { font-size: 1.1rem; } } - @media only screen and (min-width: 1200px) { .bg-image-full .version { font-size: 1.2rem; } } - @media only screen and (min-width: 1900px) { .bg-image-full .version { font-size: 1.5rem; } } - .bg-image-full .down { text-align: center; color: #fff; @@ -331,7 +281,6 @@ h1, h2, h3, h4 { margin-bottom: 15px; cursor: pointer; } - .bg-image-full .down .caret { font-size: 3rem; } @@ -347,12 +296,10 @@ h1, h2, h3, h4 { height: 65px; position: relative; } - .nav .logo { width: 60px; margin-top: 12px; } - .nav .title { display: none; color: #fff; @@ -361,55 +308,45 @@ h1, h2, h3, h4 { margin-top: 15px; font-weight: 500; } - @media only screen and (min-width: 767px) { .nav .title { display: inline-block; } } - @media only screen and (min-width: 1024px) { .nav .title { font-size: 1.5rem; } } - .nav .text { margin-top: 18px; } - .nav .text a { color: #fff; margin-top: 12px; - font-size: 1.0rem; + font-size: 1rem; } - @media only screen and (min-width: 1023px) { .nav .text a { margin-top: 10px; font-size: 1.2rem; } } - .nav .text a:hover { color: #aaa; text-decoration: none; } - .nav .github { display: none; } - @media only screen and (min-width: 768px) { .nav .github { display: inline-block; } } - .nav .todocs { display: inline-block; } - @media only screen and (min-width: 768px) { .nav .todocs { display: none; @@ -420,51 +357,42 @@ h1, h2, h3, h4 { text-align: center; color: #333; } - .features .inner { padding: 10px 0px; } - @media only screen and (min-width: 768px) { .features .inner { padding: 15px 20px; } } - .features .inner .icons { display: block; font-size: 3rem; line-height: 1.3; color: #bbb; } - @media only screen and (min-width: 420px) { .features .inner .icons { font-size: 3.5rem; } } - @media only screen and (min-width: 768px) { .features .inner .icons { font-size: 4rem; } } - @media only screen and (min-width: 1024px) { .features .inner .icons { font-size: 5rem; } } - .features .inner .icontitle { font-size: 1.2rem; } - .features .inner:hover { background: #f4f4f4; color: #567adf; } - .features .inner:hover .icons { color: #567adf; } @@ -476,13 +404,11 @@ h1, h2, h3, h4 { font-weight: 500; color: #3d5cb3; } - @media only screen and (min-width: 420px) { .sectionheader .title { font-size: 2.3rem; } } - @media only screen and (min-width: 768px) { .sectionheader .title { text-align: left; @@ -490,27 +416,23 @@ h1, h2, h3, h4 { font-size: 2.6rem; } } - @media only screen and (min-width: 1024px) { .sectionheader .title { padding-top: 40px; font-size: 3rem; } } - .sectionheader .title-small { text-align: center; font-size: 1.4rem; font-weight: 500; color: #3d5cb3; } - @media only screen and (min-width: 420px) { .sectionheader .title-small { font-size: 1.6rem; } } - @media only screen and (min-width: 768px) { .sectionheader .title-small { text-align: left; @@ -518,53 +440,44 @@ h1, h2, h3, h4 { font-size: 1.8rem; } } - @media only screen and (min-width: 1024px) { .sectionheader .title-small { padding-top: 30px; font-size: 2rem; } } - .sectionheader .subtitle { text-align: center; - font-size: .9rem; + font-size: 0.9rem; } - @media only screen and (min-width: 420px) { .sectionheader .subtitle { font-size: 1rem; } } - @media only screen and (min-width: 768px) { .sectionheader .subtitle { text-align: left; font-size: 1.1rem; } } - @media only screen and (min-width: 1024px) { .sectionheader .subtitle { font-size: 1.3rem; } } - .sectionheader .npmicons { text-align: center; } - .sectionheader .text { text-align: center; padding-top: 10px; } - @media only screen and (min-width: 768px) { .sectionheader .text { text-align: left; } } - .sectionheader hr { margin-top: 40px; margin-bottom: 0px; @@ -574,19 +487,15 @@ h1, h2, h3, h4 { .index { margin: 0 0 10px 0; } - .index .text, .index .subtitle, .index .title, .index .title-small, .index .npmicons { text-align: center; } - .index .larger { font-size: 1.2rem; } - .index a { text-decoration: none; } - .index a:hover { text-decoration: none; color: #567adf; @@ -608,34 +517,28 @@ ul { margin-top: 40px; text-align: center; } - .number-section .numbers { font-size: 2rem; } - @media only screen and (min-width: 420px) { .number-section .numbers { font-size: 2.4rem; } } - @media only screen and (min-width: 768px) { .number-section .numbers { font-size: 2.8rem; } } - .number-section .title { color: #999; font-size: 1rem; } - @media only screen and (min-width: 420px) { .number-section .title { font-size: 1.1rem; } } - @media only screen and (min-width: 768px) { .number-section .title { font-size: 1.2rem; @@ -645,60 +548,49 @@ ul { .menu { display: none; } - @media only screen and (min-width: 768px) { .menu { margin-top: 30px; display: inline-block; } } - .menu .title { margin: 25px 0 5px 0; color: #000; } - .menu .title a { width: 100%; color: #000; text-decoration: none; } - .menu .title a:hover { color: #567adf; } - .menu .title .navtitle { font-size: 1.3rem; margin-bottom: 5px; display: inline-block; color: #3d5cb3; } - .menu hr { margin: 5px 0; } - .menu ul { list-style-type: none; margin: 0; padding: 0; } - .menu ul li { padding: 2px 0 1px 0; } - .menu ul li a { width: 100%; color: #666; text-decoration: none; } - .menu ul li a:hover { color: #567adf; } - .menu ul li.active > a { color: #567adf; font-weight: 500; @@ -734,20 +626,16 @@ pre { .example td:first-child { background-color: #fff !important; } - .example td:last-child { background-color: #f8faff !important; } - .example h5 { padding-top: 5px; padding-left: 10px; } - .example pre { background-color: unset; } - .example pre .js { background-color: #f0f0f4; } @@ -759,22 +647,17 @@ footer { padding-bottom: 30px; position: relative; } - footer .home { color: #3d5cb3; font-size: 1.1rem; } - footer a { color: #000; } - footer a:hover { text-decoration: none; } - footer .badge { color: #fff; font-size: 0.9rem; -} -/*# sourceMappingURL=styles.css.map */ \ No newline at end of file +}/*# sourceMappingURL=styles.css.map */ \ No newline at end of file diff --git a/docs/styles.css.map b/docs/styles.css.map index 0c62735..e9e1349 100644 --- a/docs/styles.css.map +++ b/docs/styles.css.map @@ -1,9 +1 @@ -{ - "version": 3, - "mappings": "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", - "sources": [ - "styles.scss" - ], - "names": [], - "file": "styles.css" -} \ No newline at end of file +{"version":3,"sources":["styles.scss"],"names":[],"mappings":"AAAA;EACI,oHAAA;EACA,gBAAA;EACA,gBAAA;AACJ;;AACA;EACI,oHAAA;EACA,gBAAA;EACA,cAAA;AAEJ;;AAAA;EACI,kBAAA;AAGJ;;AADA;EACI,gBAAA;AAIJ;;AAFA;EACI,gBAAA;EACA,cAAA;AAKJ;;AAHA;EACE,gBAAA;EACA,4BAAA;AAMF;;AAJA;EACI,gBAAA;AAOJ;;AALA;EACE,cAAA;AAQF;;AALA;EAEI,yBAAA;EAA2B,+CAAA;EAC3B,2DAAA;EAA6D,mCAAA;EAE7D,2BAAA;EACA,4BAAA;EACA,sBAAA;EACA,uCAAA;EAIA,sBAAA;EACA,yBAAA;EACA,aAAA;EACA,kCAAA;EACA,aAAA;EACA,aAAA;EACA,uBAAA;EACA,kBAAA;EACA,sBAAA;EAEA,sBAAA;AAMJ;AALI;EACE,kBAAA;EACA,kBAAA;EACA,aAAA;EACA,uBAAA;EACA,sBAAA;EACA,mBAAA;EACA,YAAA;EACA,gBAAA;EACA,kBAAA;EACA,sBAAA;AAON;AALI;EACE,kBAAA;EACA,SAAA;EACA,UAAA;EACA,mBAAA;EACA,WAAA;EACA,qBAAA;EACA,YAAA;EACA,kBAAA;EACA,iBAAA;EACA,YAAA;EACA,wBAAA;EACA,mBAAA;EACA,iBAAA;AAON;AANM;EAdF;IAeI,eAAA;EASN;AACF;AARM;EAjBF;IAkBI,iBAAA;IACA,SAAA;IACA,mBAAA;IACA,YAAA;EAWN;AACF;AAVM;EAvBF;IAwBI,YAAA;IACA,SAAA;IACA,UAAA;IACA,mBAAA;IACA,iBAAA;EAaN;AACF;AAZM;EACE,qBAAA;AAcR;AAXI;EACI,WAAA;EACA,iBAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;AAaR;AAZQ;EANJ;IAOQ,iBAAA;EAeV;AACF;AAdQ;EATJ;IAUQ,iBAAA;EAiBV;AACF;AAhBQ;EAZJ;IAaQ,iBAAA;EAmBV;AACF;AAlBQ;EAfJ;IAgBQ,eAAA;EAqBV;AACF;AApBQ;EAlBJ;IAmBQ,eAAA;EAuBV;AACF;AAtBQ;EArBJ;IAsBQ,eAAA;EAyBV;AACF;AAvBI;EACI,YAAA;AAyBR;AAxBQ;EAFJ;IAGQ,YAAA;EA2BV;AACF;AA1BQ;EALJ;IAMQ,YAAA;EA6BV;AACF;AA5BQ;EARJ;IASQ,YAAA;EA+BV;AACF;AA9BQ;EAXJ;IAYQ,YAAA;EAiCV;AACF;AA/BI;EACI,kBAAA;EACA,WAAA;EACA,kBAAA;AAiCR;AAhCQ;EAJJ;IAKQ,iBAAA;EAmCV;AACF;AAlCQ;EAPJ;IAQQ,eAAA;EAqCV;AACF;AApCQ;EAVJ;IAWQ,iBAAA;EAuCV;AACF;AAtCQ;EAbJ;IAcQ,iBAAA;EAyCV;AACF;AAxCQ;EAhBJ;IAiBQ,iBAAA;EA2CV;AACF;AA1CQ;EAnBJ;IAoBQ,iBAAA;EA6CV;AACF;AA3CI;EACI,kBAAA;EACA,WAAA;EACA,iBAAA;AA6CR;AA5CQ;EACI,WAAA;EACA,qBAAA;AA8CZ;AA5CQ;EARJ;IASQ,iBAAA;EA+CV;AACF;AA9CQ;EAXJ;IAYQ,eAAA;EAiDV;AACF;AAhDQ;EAdJ;IAeQ,eAAA;EAmDV;AACF;AAlDQ;EAjBJ;IAkBQ,iBAAA;EAqDV;AACF;AApDQ;EApBJ;IAqBQ,iBAAA;EAuDV;AACF;AAtDQ;EAvBJ;IAwBQ,iBAAA;EAyDV;AACF;AAvDI;EACI,kBAAA;EACA,mBAAA;EACA,WAAA;EACA,iBAAA;AAyDR;AAxDQ;EALJ;IAMQ,iBAAA;EA2DV;AACF;AA1DQ;EARJ;IASQ,eAAA;EA6DV;AACF;AA5DQ;EAXJ;IAYQ,iBAAA;EA+DV;AACF;AA9DQ;EAdJ;IAeQ,iBAAA;EAiEV;AACF;AAhEQ;EAjBJ;IAkBQ,iBAAA;EAmEV;AACF;AAjEI;EACE,kBAAA;EACA,WAAA;EACA,iBAAA;EACA,cAAA;EACA,mBAAA;EACA,eAAA;AAmEN;AAlEM;EACE,eAAA;AAoER;;AAxDA;EACI,0CAAA;EACA,yBAAA;EAA2B,+CAAA;EAC3B,2DAAA;EAA6D,mCAAA;EAG7D,sBAAA;EACA,yBAAA;EACA,YAAA;EACA,kBAAA;AA6DJ;AA5DI;EACI,WAAA;EACA,gBAAA;AA8DR;AA5DI;EACI,aAAA;EACA,WAAA;EACA,iBAAA;EACA,iBAAA;EACA,gBAAA;EACA,gBAAA;AA8DR;AA7DQ;EAPJ;IAQQ,qBAAA;EAgEV;AACF;AA/DQ;EAVJ;IAWQ,iBAAA;EAkEV;AACF;AA/DI;EACI,gBAAA;AAiER;AA/DQ;EACI,WAAA;EACA,gBAAA;EACA,eAAA;AAiEZ;AAhEY;EAJJ;IAKQ,gBAAA;IACA,iBAAA;EAmEd;AACF;AAlEY;EACI,WAAA;EACA,qBAAA;AAoEhB;AAhEI;EACE,aAAA;AAkEN;AAjEM;EAFF;IAGI,qBAAA;EAoEN;AACF;AAlEI;EACE,qBAAA;AAoEN;AAnEM;EAFF;IAGI,aAAA;EAsEN;AACF;;AAnEA;EACI,kBAAA;EACA,WAAA;AAsEJ;AArEI;EACE,iBAAA;AAuEN;AAtEM;EAFF;IAGI,kBAAA;EAyEN;AACF;AAxEM;EACI,cAAA;EACA,eAAA;EACA,gBAAA;EACA,WAAA;AA0EV;AAzEU;EALJ;IAMQ,iBAAA;EA4EZ;AACF;AA3EU;EARJ;IASQ,eAAA;EA8EZ;AACF;AA7EU;EAXJ;IAYQ,eAAA;EAgFZ;AACF;AA9EM;EACI,iBAAA;AAgFV;AA7EM;EACI,mBAAA;EACA,cAAA;AA+EV;AA9EU;EACE,cAAA;AAgFZ;;AA1EI;EACI,kBAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,cAAA;AA6ER;AA5EQ;EANJ;IAOQ,iBAAA;EA+EV;AACF;AA9EQ;EATJ;IAUQ,gBAAA;IACA,iBAAA;IACA,iBAAA;EAiFV;AACF;AAhFQ;EAdJ;IAeQ,iBAAA;IACA,eAAA;EAmFV;AACF;AAjFI;EACI,kBAAA;EACA,iBAAA;EACA,gBAAA;EACA,cAAA;AAmFR;AAlFQ;EALJ;IAMQ,iBAAA;EAqFV;AACF;AApFQ;EARJ;IASQ,gBAAA;IACA,iBAAA;IACA,iBAAA;EAuFV;AACF;AAtFQ;EAbJ;IAcQ,iBAAA;IACA,eAAA;EAyFV;AACF;AAvFI;EACI,kBAAA;EACA,iBAAA;AAyFR;AAxFQ;EAHJ;IAIQ,eAAA;EA2FV;AACF;AA1FQ;EANJ;IAOQ,gBAAA;IACA,iBAAA;EA6FV;AACF;AA5FQ;EAVJ;IAWQ,iBAAA;EA+FV;AACF;AA7FI;EACI,kBAAA;AA+FR;AA7FI;EACI,kBAAA;EACA,iBAAA;AA+FR;AA9FQ;EAHJ;IAIQ,gBAAA;EAiGV;AACF;AA/FI;EACI,gBAAA;EACA,kBAAA;EACA,sBAAA;AAiGR;;AA9FA;EACE,kBAAA;AAiGF;AAhGE;EACI,kBAAA;AAkGN;AAhGE;EACE,iBAAA;AAkGJ;AA/FE;EACI,qBAAA;AAiGN;AAhGM;EACI,qBAAA;EACA,cAAA;AAkGV;;AA7FI;EACI,gBAAA;AAgGR;;AA7FA;EACI,gBAAA;AAgGJ;;AA9FA;EACI,gBAAA;AAiGJ;;AA/FA;EACI,gBAAA;EACA,kBAAA;AAkGJ;AAjGI;EACI,eAAA;AAmGR;AAlGQ;EAFJ;IAGQ,iBAAA;EAqGV;AACF;AApGQ;EALJ;IAMQ,iBAAA;EAuGV;AACF;AArGI;EACI,WAAA;EACA,eAAA;AAuGR;AAtGQ;EAHJ;IAIQ,iBAAA;EAyGV;AACF;AAxGQ;EANJ;IAOQ,iBAAA;EA2GV;AACF;;AAxGA;EACI,aAAA;AA2GJ;AA1GI;EAFJ;IAGQ,gBAAA;IACA,qBAAA;EA6GN;AACF;AA5GI;EACI,oBAAA;EACA,WAAA;AA8GR;AA7GQ;EACE,WAAA;EACA,WAAA;EACA,qBAAA;AA+GV;AA9GU;EACI,cAAA;AAgHd;AA7GQ;EACE,iBAAA;EACA,kBAAA;EACA,qBAAA;EACA,cAAA;AA+GV;AA5GI;EACI,aAAA;AA8GR;AA5GI;EACI,qBAAA;EACA,SAAA;EACA,UAAA;AA8GR;AA7GQ;EACI,oBAAA;AA+GZ;AA9GY;EACI,WAAA;EACA,WAAA;EACA,qBAAA;AAgHhB;AA/GgB;EACI,cAAA;AAiHpB;AA9GY;EACI,cAAA;EACA,gBAAA;AAgHhB;;AA3GA;EACI,mEAAA;EACA,mCAAA;EACA,eAAA;EACA,kBAAA;EACA,oBAAA;EACA,gBAAA;EACA,qBAAA;EACA,sBAAA;EACA,SAAA;EACA,cAAA;AA8GJ;;AA5GA;EACI,0BAAA;EACA,mEAAA;EACA,mCAAA;EACA,eAAA;EACA,kBAAA;EACA,oBAAA;EACA,gBAAA;EACA,iBAAA;EACA,sBAAA;EACA,WAAA;EACA,gBAAA;AA+GJ;;AA5GI;EACE,iCAAA;AA+GN;AA7GI;EACE,oCAAA;AA+GN;AA7GI;EACE,gBAAA;EACA,kBAAA;AA+GN;AA7GI;EACE,uBAAA;AA+GN;AA9GM;EACE,yBAAA;AAgHR;;AA3GA;EACI,sBAAA;EACA,gBAAA;EACA,iBAAA;EACA,oBAAA;EACA,kBAAA;AA8GJ;AA7GI;EACE,cAAA;EACA,iBAAA;AA+GN;AA7GI;EACI,WAAA;AA+GR;AA9GQ;EACE,qBAAA;AAgHV;AA7GI;EACE,WAAA;EACA,iBAAA;AA+GN","file":"styles.css"} \ No newline at end of file diff --git a/docs/styles.scss b/docs/styles.scss index 9d6b97e..8441407 100644 --- a/docs/styles.scss +++ b/docs/styles.scss @@ -14,6 +14,14 @@ h1, h2, h3, h4 { .bold { font-weight: 500; } +.warning { + font-weight: 500; + color: rgb(156, 1, 1); +} +.larger { + margin-top: 10px; + font-size: 1.5rem !important; +} .medium { font-weight: 500; } diff --git a/docs/v4/index.html b/docs/v4/index.html index 9bedc4b..770659a 100644 --- a/docs/v4/index.html +++ b/docs/v4/index.html @@ -320,7 +320,7 @@

    Issues
    -
    Security issues: Please have a look at our security advisories
    +
    Security issues: Please have a look at our security advisories
    If you run into problems, please check out known issues page first. If you still have problems, please feel free to open an issue on our github page
    diff --git a/docs/v4/security.html b/docs/v4/security.html index d7e8db4..343d435 100644 --- a/docs/v4/security.html +++ b/docs/v4/security.html @@ -43,7 +43,9 @@
    Security Advisories

    Passing User Paramters to Systeminformation

    -

    Be aware to not use inetLatency(), inetChecksite(), services(), processLoad() with arbitrary untrusted user input! We are doing a lot of input sanitation for those functions in this package but we cannot handle all cases!

    +

    For most of the applications that are using systeminformation, there is no reason to worry. But be aware! If you are using inetLatency(), inetChecksite(), services(), processLoad() with arbitrary untrusted user input, you should pay extra attention! We are doing a lot of input sanitation for those functions inside this package but we cannot handle all cases!

    +

    This can lead to serious impact on your servers!

    +

    We highly recommend to always upgrade to the latest version of our package. We maintain security updates for version 5 AND also version 4. For version 4 you can install latest version by placing "systeminformation": "^4" in your package.json (dependencies) and run npm install

    Command Injection Vulnerability

    Affected versions: diff --git a/docs/v4/styles.css b/docs/v4/styles.css index 624a5b5..40c2066 100644 --- a/docs/v4/styles.css +++ b/docs/v4/styles.css @@ -17,6 +17,11 @@ h1, h2, h3, h4 { font-weight: 700; } +.warning { + font-weight: 500; + color: #9c0101; +} + .bg-image-full { background: no-repeat center center scroll; background-color: #4b2313; @@ -28,41 +33,20 @@ h1, h2, h3, h4 { height: 100vh; height: calc(var(--vh, 1vh) * 100); opacity: 0.95; - display: -webkit-box; - display: -ms-flexbox; display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; + justify-content: center; text-align: center; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; + flex-direction: column; } - .bg-image-full .container { text-align: center; - -ms-flex-item-align: center; - align-self: center; - display: -webkit-box; - display: -ms-flexbox; + align-self: center; display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; + justify-content: center; + flex-direction: column; + align-items: center; + flex-grow: 1; } - .bg-image-full .recommendation { position: absolute; top: 40px; @@ -71,26 +55,22 @@ h1, h2, h3, h4 { display: inline-block; width: 330px; text-align: center; - padding: .25em 0; + padding: 0.25em 0; color: white; - -webkit-transform: rotate(45deg); - transform: rotate(45deg); + transform: rotate(45deg); background: #971d1d; font-size: 0.9rem; } - @media only screen and (min-width: 420px) { .bg-image-full .recommendation { - font-size: 1.0rem; + font-size: 1rem; } } - @media only screen and (min-width: 768px) { .bg-image-full .recommendation { font-size: 1.1rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .recommendation { top: 50px; @@ -98,148 +78,123 @@ h1, h2, h3, h4 { font-size: 1.2rem; } } - .bg-image-full .recommendation:hover { text-decoration: none; } - .bg-image-full .title { color: #fff; padding-top: 10px; font-size: 1.8rem; margin-bottom: 10px; } - @media only screen and (min-width: 420px) { .bg-image-full .title { font-size: 2.4rem; } } - @media only screen and (min-width: 768px) { .bg-image-full .title { font-size: 3.2rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .title { font-size: 4rem; } } - .bg-image-full .logo { width: 100px; } - @media only screen and (min-width: 420px) { .bg-image-full .logo { width: 120px; } } - @media only screen and (min-width: 768px) { .bg-image-full .logo { width: 160px; } } - @media only screen and (min-width: 1024px) { .bg-image-full .logo { width: 200px; } } - .bg-image-full .subtitle { text-align: center; color: #bbb; font-size: 0.78rem; } - @media only screen and (min-width: 375px) { .bg-image-full .subtitle { font-size: 0.9rem; } } - @media only screen and (min-width: 420px) { .bg-image-full .subtitle { font-size: 1rem; } } - @media only screen and (min-width: 768px) { .bg-image-full .subtitle { font-size: 1.1rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .subtitle { font-size: 1.3rem; } } - .bg-image-full .text > a { text-align: center; color: #fff; font-size: 0.9rem; } - .bg-image-full .text > a:hover { color: #aaa; text-decoration: none; } - @media only screen and (min-width: 375px) { .bg-image-full .text > a { font-size: 0.9rem; } } - @media only screen and (min-width: 420px) { .bg-image-full .text > a { font-size: 1rem; } } - @media only screen and (min-width: 768px) { .bg-image-full .text > a { font-size: 1rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .text > a { font-size: 1.1rem; } } - .bg-image-full .version { text-align: center; margin-bottom: 10px; color: #fff; - font-size: .9rem; + font-size: 0.9rem; } - @media only screen and (min-width: 420px) { .bg-image-full .version { - font-size: .9rem; + font-size: 0.9rem; } } - @media only screen and (min-width: 768px) { .bg-image-full .version { font-size: 1rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .version { font-size: 1.1rem; } } - .bg-image-full .down { text-align: center; color: #fff; @@ -248,7 +203,6 @@ h1, h2, h3, h4 { margin-bottom: 15px; cursor: pointer; } - .bg-image-full .down .caret { font-size: 3rem; } @@ -264,12 +218,10 @@ h1, h2, h3, h4 { height: 65px; position: relative; } - .nav .logo { width: 60px; margin-top: 12px; } - .nav .title { display: none; color: #fff; @@ -277,55 +229,45 @@ h1, h2, h3, h4 { margin-left: 15px; margin-top: 18px; } - @media only screen and (min-width: 768px) { .nav .title { display: inline-block; } } - @media only screen and (min-width: 1024px) { .nav .title { font-size: 1.2rem; } } - .nav .text { margin-top: 18px; } - .nav .text a { color: #fff; margin-top: 12px; - font-size: 1.0rem; + font-size: 1rem; } - @media only screen and (min-width: 1023px) { .nav .text a { margin-top: 10px; font-size: 1.2rem; } } - .nav .text a:hover { color: #aaa; text-decoration: none; } - .nav .github { display: none; } - @media only screen and (min-width: 768px) { .nav .github { display: inline-block; } } - .nav .todocs { display: inline-block; } - @media only screen and (min-width: 768px) { .nav .todocs { display: none; @@ -336,50 +278,41 @@ h1, h2, h3, h4 { text-align: center; color: #333; } - .features .inner { padding: 10px 0px; } - @media only screen and (min-width: 768px) { .features .inner { padding: 15px 20px; } } - .features .inner .icons { display: block; font-size: 3rem; color: #bbb; } - @media only screen and (min-width: 420px) { .features .inner .icons { font-size: 3.5rem; } } - @media only screen and (min-width: 768px) { .features .inner .icons { font-size: 4rem; } } - @media only screen and (min-width: 1024px) { .features .inner .icons { font-size: 5rem; } } - .features .inner .icontitle { font-size: 1.2rem; } - .features .inner:hover { background: #f4f4f4; color: #567adf; } - .features .inner:hover .icons { color: #567adf; } @@ -389,13 +322,11 @@ h1, h2, h3, h4 { padding-top: 20px; font-size: 2rem; } - @media only screen and (min-width: 420px) { .sectionheader .title { font-size: 2.3rem; } } - @media only screen and (min-width: 768px) { .sectionheader .title { text-align: left; @@ -403,25 +334,21 @@ h1, h2, h3, h4 { font-size: 2.6rem; } } - @media only screen and (min-width: 1024px) { .sectionheader .title { padding-top: 30px; font-size: 3rem; } } - .sectionheader .title-small { text-align: center; font-size: 1.4rem; } - @media only screen and (min-width: 420px) { .sectionheader .title-small { font-size: 1.6rem; } } - @media only screen and (min-width: 768px) { .sectionheader .title-small { text-align: left; @@ -429,53 +356,44 @@ h1, h2, h3, h4 { font-size: 1.8rem; } } - @media only screen and (min-width: 1024px) { .sectionheader .title-small { padding-top: 30px; font-size: 2rem; } } - .sectionheader .subtitle { text-align: center; - font-size: .9rem; + font-size: 0.9rem; } - @media only screen and (min-width: 420px) { .sectionheader .subtitle { font-size: 1rem; } } - @media only screen and (min-width: 768px) { .sectionheader .subtitle { text-align: left; font-size: 1.1rem; } } - @media only screen and (min-width: 1024px) { .sectionheader .subtitle { font-size: 1.3rem; } } - .sectionheader .npmicons { text-align: center; } - .sectionheader .text { text-align: center; padding-top: 10px; } - @media only screen and (min-width: 768px) { .sectionheader .text { text-align: left; } } - .sectionheader hr { margin-top: 40px; margin-bottom: 0px; @@ -485,15 +403,12 @@ h1, h2, h3, h4 { .index { margin: 0 0 10px 0; } - .index .text, .index .subtitle, .index .title, .index .title-small, .index .npmicons { text-align: center; } - .index a { text-decoration: none; } - .index a:hover { text-decoration: none; color: #567adf; @@ -515,34 +430,28 @@ ul { margin-top: 40px; text-align: center; } - .number-section .numbers { font-size: 2rem; } - @media only screen and (min-width: 420px) { .number-section .numbers { font-size: 2.4rem; } } - @media only screen and (min-width: 768px) { .number-section .numbers { font-size: 2.8rem; } } - .number-section .title { color: #999; font-size: 1rem; } - @media only screen and (min-width: 420px) { .number-section .title { font-size: 1.1rem; } } - @media only screen and (min-width: 768px) { .number-section .title { font-size: 1.2rem; @@ -552,53 +461,43 @@ ul { .menu { display: none; } - @media only screen and (min-width: 768px) { .menu { margin-top: 30px; display: inline-block; } } - .menu .title { margin: 25px 0 5px 0; color: #000; } - .menu .title a { width: 100%; color: #000; text-decoration: none; } - .menu .title a:hover { color: #567adf; } - .menu hr { margin: 5px 0; } - .menu ul { list-style-type: none; margin: 0; padding: 0; } - .menu ul li { padding: 2px 0; } - .menu ul li a { width: 100%; color: #666; text-decoration: none; } - .menu ul li a:hover { color: #567adf; } - .menu ul li.active > a { color: #567adf; } @@ -633,20 +532,16 @@ pre { .example td:first-child { background-color: #fff !important; } - .example td:last-child { background-color: #f8faff !important; } - .example h5 { padding-top: 5px; padding-left: 10px; } - .example pre { background-color: unset; } - .example pre .js { background-color: #f0f0f4; } @@ -658,11 +553,9 @@ footer { padding-bottom: 30px; position: relative; } - footer a { color: #000; } - footer .badge { color: #fff; font-size: 0.9rem; @@ -675,5 +568,4 @@ footer .badge { .v5 { color: #567adf; -} -/*# sourceMappingURL=styles.css.map */ \ No newline at end of file +}/*# sourceMappingURL=styles.css.map */ \ No newline at end of file diff --git a/docs/v4/styles.css.map b/docs/v4/styles.css.map index 33deed5..071e29d 100644 --- a/docs/v4/styles.css.map +++ b/docs/v4/styles.css.map @@ -1,9 +1 @@ -{ - "version": 3, - "mappings": "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", - "sources": [ - "styles.scss" - ], - "names": [], - "file": "styles.css" -} \ No newline at end of file +{"version":3,"sources":["styles.scss"],"names":[],"mappings":"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","file":"styles.css"} \ No newline at end of file diff --git a/docs/v4/styles.scss b/docs/v4/styles.scss index 143a9f5..ff3b0d9 100644 --- a/docs/v4/styles.scss +++ b/docs/v4/styles.scss @@ -13,6 +13,10 @@ h1, h2, h3, h4 { .bold { font-weight: 700; } +.warning { + font-weight: 500; + color: rgb(156, 1, 1); +} .bg-image-full { background: no-repeat center center scroll; background-color: #4b2313; /* For browsers that do not support gradients */ From 3d15d8e3546e7f4ac469de0002296dad53102ba9 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Tue, 23 Mar 2021 09:04:51 +0100 Subject: [PATCH 32/33] typescript definitions fix wifiInterfces, wifiConnections --- CHANGELOG.md | 1 + docs/history.html | 5 +++++ docs/index.html | 4 ++-- lib/index.d.ts | 2 ++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fdc899..2569ac8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -77,6 +77,7 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page. | Version | Date | Comment | | -------------- | -------------- | -------- | +| 5.6.8 | 2021-03-22 | typescript definitions fix `wifiInterfces()`, `wifiConnections()` | | 5.6.7 | 2021-03-16 | `inetLatency()` `ineChecksite()` schema validation | | 5.6.6 | 2021-03-16 | code refactoring | | 5.6.5 | 2021-03-15 | `cpuTemperature()` fix (linux) | diff --git a/docs/history.html b/docs/history.html index 702e07c..626b88c 100644 --- a/docs/history.html +++ b/docs/history.html @@ -58,6 +58,11 @@ 5.6.8 + 2021-03-23 + typescript definitions fix wifiInterfces, wifiConnections + + + 5.6.7 2021-03-16 inetLatency() inetChecksite() schema avlidation diff --git a/docs/index.html b/docs/index.html index d4773fd..d35e503 100644 --- a/docs/index.html +++ b/docs/index.html @@ -170,7 +170,7 @@

    systeminformation
     
    -
    New Version: 5.6.7
    +
    New Version: 5.6.8
    @@ -211,7 +211,7 @@
    Downloads last month
    -
    398
    +
    402
    Dependents
    diff --git a/lib/index.d.ts b/lib/index.d.ts index 36ccb91..30b2530 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -876,6 +876,8 @@ export function inetChecksite(url: string, cb?: (data: Systeminformation.InetChe export function inetLatency(host?: string, cb?: (data: number) => any): Promise; export function wifiNetworks(cb?: (data: Systeminformation.WifiNetworkData[]) => any): Promise; +export function wifiInterfaces(cb?: (data: Systeminformation.WifiInterfaceData[]) => any): Promise; +export function wifiConnections(cb?: (data: Systeminformation.WifiConnectionData[]) => any): Promise; export function users(cb?: (data: Systeminformation.UserData[]) => any): Promise; From b36d2528306eae84dfd698f5bf17cb46584b5f25 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Tue, 23 Mar 2021 09:04:55 +0100 Subject: [PATCH 33/33] 5.6.8 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index dc6597a..cf1228f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "systeminformation", - "version": "5.6.7", + "version": "5.6.8", "description": "Simple system and OS information library", "license": "MIT", "author": "Sebastian Hildebrandt (https://plus-innovations.com)",