From c308589d282a8349e4941d68cccb18004d5fccfc Mon Sep 17 00:00:00 2001 From: Philipp Kunz Date: Thu, 17 Feb 2022 00:03:13 +0100 Subject: [PATCH] fix(core): update --- package-lock.json | 49 +++++++++++++++++++++++++ package.json | 1 + test/test.ping.ts | 16 ++++++++ ts/index.ts | 2 +- ts/smartnetwork.classes.smartnetwork.ts | 13 +++++++ ts/smartnetwork.plugins.ts | 5 ++- 6 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 test/test.ping.ts diff --git a/package-lock.json b/package-lock.json index 2a8d412..1476a90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@pushrocks/smartpromise": "^3.1.6", "@pushrocks/smartstring": "^3.0.24", "@types/default-gateway": "^3.0.1", + "icmp": "^2.0.1", "isopen": "^1.3.0", "public-ip": "^4.0.4", "systeminformation": "^5.11.3" @@ -8443,6 +8444,15 @@ "ms": "^2.0.0" } }, + "node_modules/icmp": { + "version": "2.0.1", + "resolved": "https://verdaccio.lossless.one/icmp/-/icmp-2.0.1.tgz", + "integrity": "sha512-M7r2J6pjZOwZFSjsFNvYlWvtpVbCckwCd2EQSHc4Mzscwp9X7DUpnPcQiVceKI9YQ42INb53cMmgIzaRs87Jmg==", + "license": "MIT", + "dependencies": { + "raw-socket": "^1.7.0" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://verdaccio.lossless.one/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -12449,6 +12459,22 @@ "node": ">= 0.8" } }, + "node_modules/raw-socket": { + "version": "1.7.0", + "resolved": "https://verdaccio.lossless.one/raw-socket/-/raw-socket-1.7.0.tgz", + "integrity": "sha512-mXqWihgwaFNmV5le0dWk5o+03M3A2zBIkC9BNaE6R0CJN9eYot++j2FIqgNSDq6/Vmu32PPI155SiiWNV2yyFQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "nan": "2.14.*" + } + }, + "node_modules/raw-socket/node_modules/nan": { + "version": "2.14.2", + "resolved": "https://verdaccio.lossless.one/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "license": "MIT" + }, "node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://verdaccio.lossless.one/readable-stream/-/readable-stream-2.3.7.tgz", @@ -22139,6 +22165,14 @@ "ms": "^2.0.0" } }, + "icmp": { + "version": "2.0.1", + "resolved": "https://verdaccio.lossless.one/icmp/-/icmp-2.0.1.tgz", + "integrity": "sha512-M7r2J6pjZOwZFSjsFNvYlWvtpVbCckwCd2EQSHc4Mzscwp9X7DUpnPcQiVceKI9YQ42INb53cMmgIzaRs87Jmg==", + "requires": { + "raw-socket": "^1.7.0" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://verdaccio.lossless.one/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -25112,6 +25146,21 @@ "unpipe": "1.0.0" } }, + "raw-socket": { + "version": "1.7.0", + "resolved": "https://verdaccio.lossless.one/raw-socket/-/raw-socket-1.7.0.tgz", + "integrity": "sha512-mXqWihgwaFNmV5le0dWk5o+03M3A2zBIkC9BNaE6R0CJN9eYot++j2FIqgNSDq6/Vmu32PPI155SiiWNV2yyFQ==", + "requires": { + "nan": "2.14.*" + }, + "dependencies": { + "nan": { + "version": "2.14.2", + "resolved": "https://verdaccio.lossless.one/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + } + } + }, "readable-stream": { "version": "2.3.7", "resolved": "https://verdaccio.lossless.one/readable-stream/-/readable-stream-2.3.7.tgz", diff --git a/package.json b/package.json index 8d327ba..7606bfc 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "@pushrocks/smartpromise": "^3.1.6", "@pushrocks/smartstring": "^3.0.24", "@types/default-gateway": "^3.0.1", + "icmp": "^2.0.1", "isopen": "^1.3.0", "public-ip": "^4.0.4", "systeminformation": "^5.11.3" diff --git a/test/test.ping.ts b/test/test.ping.ts new file mode 100644 index 0000000..123a213 --- /dev/null +++ b/test/test.ping.ts @@ -0,0 +1,16 @@ +import {tap, expect, expectAsync} from '@pushrocks/tapbundle'; + +import * as smartnetwork from '../ts'; + +let testSmartnetwork: smartnetwork.SmartNetwork; + +tap.test('should create a vlid instance of SmartNetwork', async () => { + testSmartnetwork = new smartnetwork.SmartNetwork(); + expect(testSmartnetwork).toBeInstanceOf(smartnetwork.SmartNetwork); +}) + +tap.test('should send a ping to Google', async () => { + expectAsync(testSmartnetwork.ping('https://lossless.com')).toBeTrue(); +}) + +tap.start(); diff --git a/ts/index.ts b/ts/index.ts index 0439cfd..40c07a7 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -1 +1 @@ -export * from './smartnetwork.classes.smartnetwork'; +export * from './smartnetwork.classes.smartnetwork'; \ No newline at end of file diff --git a/ts/smartnetwork.classes.smartnetwork.ts b/ts/smartnetwork.classes.smartnetwork.ts index f008ec2..fd4d34e 100644 --- a/ts/smartnetwork.classes.smartnetwork.ts +++ b/ts/smartnetwork.classes.smartnetwork.ts @@ -16,6 +16,19 @@ export class SmartNetwork { return test; } + public async ping(hostArg: string, timeoutArg: number = 500): Promise { + if (process.getuid() !== 0 ) { + console.log('icmp not allowed for nonroot!'); + return; + } + const result = await plugins.icmp.ping(hostArg, timeoutArg).catch(); + if (result) { + return true; + } else { + return false; + } + } + /** * returns a promise with a boolean answer * note: false also resolves with false as argument diff --git a/ts/smartnetwork.plugins.ts b/ts/smartnetwork.plugins.ts index c8b9078..e8d9439 100644 --- a/ts/smartnetwork.plugins.ts +++ b/ts/smartnetwork.plugins.ts @@ -13,7 +13,8 @@ export { smartpromise, smartstring }; // @third party scope const isopen = require('isopen'); -import publicIp from 'public-ip'; +const icmp = require('icmp'); +import * as publicIp from 'public-ip'; import * as systeminformation from 'systeminformation'; -export { isopen, publicIp, systeminformation }; +export { isopen, icmp, publicIp, systeminformation };