pentest-tool-lite 3.10.6 → 3.10.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Pentest.js +46 -0
- package/dist/{src/Test.js → Test.js} +11 -24
- package/dist/commands/Sitemap.js +79 -0
- package/dist/dns/A.js +49 -0
- package/dist/dns/DMARC.js +59 -0
- package/dist/dns/NS.js +36 -0
- package/dist/dns/RegistrationDate.js +39 -0
- package/dist/dns/index.js +47 -0
- package/dist/functions/parseSitemap.js +12 -0
- package/dist/html/Anchor.js +56 -0
- package/dist/html/CSS.js +92 -0
- package/dist/html/DuplicateId.js +35 -0
- package/dist/html/Generator.js +31 -0
- package/dist/html/Image.js +79 -0
- package/dist/html/JavaScript.js +107 -0
- package/dist/{src/html → html}/__TESTS__/Generator.test.js +10 -19
- package/dist/html/index.js +51 -0
- package/dist/{src/index → index} +21 -20
- package/dist/{src/logger → logger}/Console.js +1 -3
- package/dist/metadata/HTML.js +26 -0
- package/dist/metadata/Markdown.js +28 -0
- package/dist/metadata/ResponseTime.js +25 -0
- package/dist/metadata/index.js +45 -0
- package/dist/request/NodeFetch.js +58 -0
- package/dist/{src/request → request}/cache/UnlimitedCache.js +2 -0
- package/dist/security/ContentEncoding.js +44 -0
- package/dist/security/ContentSecurityPolicy.js +32 -0
- package/dist/security/Cookies.js +44 -0
- package/dist/security/FingerPrint.js +37 -0
- package/dist/security/GoogleWebRisk.js +44 -0
- package/dist/security/HSTS.js +48 -0
- package/dist/security/HTTPS.js +78 -0
- package/dist/security/HTTPVersion.js +50 -0
- package/dist/security/PermissionsPolicy.js +53 -0
- package/dist/security/Redirect.js +37 -0
- package/dist/security/ReferrerPolicy.js +32 -0
- package/dist/security/RobotsTXT.js +28 -0
- package/dist/security/SSL.js +36 -0
- package/dist/security/XFrameOptions.js +32 -0
- package/dist/security/XXSSProtection.js +32 -0
- package/dist/{src/security → security}/__TESTS__/ContentSecurityPolicy.test.js +10 -19
- package/dist/{src/security → security}/__TESTS__/FingerPrint.test.js +10 -19
- package/dist/{src/security → security}/__TESTS__/HSTS.test.js +15 -24
- package/dist/{src/security → security}/__TESTS__/HTTPS.test.js +15 -24
- package/dist/{src/security → security}/__TESTS__/XFrameOptions.test.js +10 -19
- package/dist/{src/security → security}/__TESTS__/XXSSProtection.test.js +10 -19
- package/dist/{src/security → security}/index.js +20 -31
- package/dist/seo/Heading.js +51 -0
- package/dist/seo/Robots.js +21 -0
- package/dist/seo/Sitemap.js +32 -0
- package/dist/seo/Title.js +44 -0
- package/dist/seo/index.js +47 -0
- package/dist/wordpress/DefaultFiles.js +50 -0
- package/dist/wordpress/Generator.js +58 -0
- package/dist/wordpress/index.js +43 -0
- package/package.json +10 -2
- package/dist/package.json +0 -61
- package/dist/src/Pentest.js +0 -57
- package/dist/src/commands/Sitemap.js +0 -96
- package/dist/src/dns/A.js +0 -65
- package/dist/src/dns/DMARC.js +0 -73
- package/dist/src/dns/NS.js +0 -52
- package/dist/src/dns/RegistrationDate.js +0 -55
- package/dist/src/dns/index.js +0 -58
- package/dist/src/functions/parseSitemap.js +0 -23
- package/dist/src/html/Anchor.js +0 -72
- package/dist/src/html/CSS.js +0 -108
- package/dist/src/html/DuplicateId.js +0 -49
- package/dist/src/html/Generator.js +0 -45
- package/dist/src/html/Image.js +0 -95
- package/dist/src/html/JavaScript.js +0 -123
- package/dist/src/html/index.js +0 -62
- package/dist/src/metadata/HTML.js +0 -40
- package/dist/src/metadata/Markdown.js +0 -42
- package/dist/src/metadata/ResponseTime.js +0 -39
- package/dist/src/metadata/index.js +0 -56
- package/dist/src/request/NodeFetch.js +0 -68
- package/dist/src/security/ContentEncoding.js +0 -58
- package/dist/src/security/ContentSecurityPolicy.js +0 -46
- package/dist/src/security/Cookies.js +0 -58
- package/dist/src/security/FingerPrint.js +0 -51
- package/dist/src/security/GoogleWebRisk.js +0 -58
- package/dist/src/security/HSTS.js +0 -62
- package/dist/src/security/HTTPS.js +0 -92
- package/dist/src/security/HTTPVersion.js +0 -64
- package/dist/src/security/PermissionsPolicy.js +0 -67
- package/dist/src/security/Redirect.js +0 -51
- package/dist/src/security/ReferrerPolicy.js +0 -46
- package/dist/src/security/RobotsTXT.js +0 -42
- package/dist/src/security/SSL.js +0 -50
- package/dist/src/security/XFrameOptions.js +0 -46
- package/dist/src/security/XXSSProtection.js +0 -46
- package/dist/src/seo/Heading.js +0 -65
- package/dist/src/seo/Robots.js +0 -35
- package/dist/src/seo/Sitemap.js +0 -46
- package/dist/src/seo/Title.js +0 -58
- package/dist/src/seo/index.js +0 -58
- package/dist/src/wordpress/DefaultFiles.js +0 -66
- package/dist/src/wordpress/Generator.js +0 -76
- package/dist/src/wordpress/index.js +0 -54
- /package/dist/{src/Pentest.d.ts → Pentest.d.ts} +0 -0
- /package/dist/{src/Test.d.ts → Test.d.ts} +0 -0
- /package/dist/{src/commands → commands}/Sitemap.d.ts +0 -0
- /package/dist/{src/config.d.ts → config.d.ts} +0 -0
- /package/dist/{src/config.js → config.js} +0 -0
- /package/dist/{src/dns → dns}/A.d.ts +0 -0
- /package/dist/{src/dns → dns}/DMARC.d.ts +0 -0
- /package/dist/{src/dns → dns}/NS.d.ts +0 -0
- /package/dist/{src/dns → dns}/RegistrationDate.d.ts +0 -0
- /package/dist/{src/dns → dns}/index.d.ts +0 -0
- /package/dist/{src/functions → functions}/findEvery.d.ts +0 -0
- /package/dist/{src/functions → functions}/findEvery.js +0 -0
- /package/dist/{src/functions → functions}/getAnchors.d.ts +0 -0
- /package/dist/{src/functions → functions}/getAnchors.js +0 -0
- /package/dist/{src/functions → functions}/getDomain.d.ts +0 -0
- /package/dist/{src/functions → functions}/getDomain.js +0 -0
- /package/dist/{src/functions → functions}/getDuplicates.d.ts +0 -0
- /package/dist/{src/functions → functions}/getDuplicates.js +0 -0
- /package/dist/{src/functions → functions}/getGenerator.d.ts +0 -0
- /package/dist/{src/functions → functions}/getGenerator.js +0 -0
- /package/dist/{src/functions → functions}/getHeading.d.ts +0 -0
- /package/dist/{src/functions → functions}/getHeading.js +0 -0
- /package/dist/{src/functions → functions}/getImages.d.ts +0 -0
- /package/dist/{src/functions → functions}/getImages.js +0 -0
- /package/dist/{src/functions → functions}/getObject.d.ts +0 -0
- /package/dist/{src/functions → functions}/getObject.js +0 -0
- /package/dist/{src/functions → functions}/getScripts.d.ts +0 -0
- /package/dist/{src/functions → functions}/getScripts.js +0 -0
- /package/dist/{src/functions → functions}/getStylesheets.d.ts +0 -0
- /package/dist/{src/functions → functions}/getStylesheets.js +0 -0
- /package/dist/{src/functions → functions}/getTitle.d.ts +0 -0
- /package/dist/{src/functions → functions}/getTitle.js +0 -0
- /package/dist/{src/functions → functions}/index.d.ts +0 -0
- /package/dist/{src/functions → functions}/index.js +0 -0
- /package/dist/{src/functions → functions}/parseHtml.d.ts +0 -0
- /package/dist/{src/functions → functions}/parseHtml.js +0 -0
- /package/dist/{src/functions → functions}/parseSitemap.d.ts +0 -0
- /package/dist/{src/functions → functions}/parseXml.d.ts +0 -0
- /package/dist/{src/functions → functions}/parseXml.js +0 -0
- /package/dist/{src/html → html}/Anchor.d.ts +0 -0
- /package/dist/{src/html → html}/CSS.d.ts +0 -0
- /package/dist/{src/html → html}/DuplicateId.d.ts +0 -0
- /package/dist/{src/html → html}/Generator.d.ts +0 -0
- /package/dist/{src/html → html}/Image.d.ts +0 -0
- /package/dist/{src/html → html}/JavaScript.d.ts +0 -0
- /package/dist/{src/html → html}/__TESTS__/Generator.test.d.ts +0 -0
- /package/dist/{src/html → html}/index.d.ts +0 -0
- /package/dist/{src/index.d.ts → index.d.ts} +0 -0
- /package/dist/{src/logger → logger}/Console.d.ts +0 -0
- /package/dist/{src/logger → logger}/Logger.d.ts +0 -0
- /package/dist/{src/logger → logger}/Logger.js +0 -0
- /package/dist/{src/logger → logger}/index.d.ts +0 -0
- /package/dist/{src/logger → logger}/index.js +0 -0
- /package/dist/{src/metadata → metadata}/HTML.d.ts +0 -0
- /package/dist/{src/metadata → metadata}/Markdown.d.ts +0 -0
- /package/dist/{src/metadata → metadata}/ResponseTime.d.ts +0 -0
- /package/dist/{src/metadata → metadata}/index.d.ts +0 -0
- /package/dist/{src/report → report}/CommandLine.d.ts +0 -0
- /package/dist/{src/report → report}/CommandLine.js +0 -0
- /package/dist/{src/report → report}/Json.d.ts +0 -0
- /package/dist/{src/report → report}/Json.js +0 -0
- /package/dist/{src/report → report}/Report.d.ts +0 -0
- /package/dist/{src/report → report}/Report.js +0 -0
- /package/dist/{src/report → report}/Symbols.d.ts +0 -0
- /package/dist/{src/report → report}/Symbols.js +0 -0
- /package/dist/{src/report → report}/index.d.ts +0 -0
- /package/dist/{src/report → report}/index.js +0 -0
- /package/dist/{src/request → request}/NodeFetch.d.ts +0 -0
- /package/dist/{src/request → request}/Request.d.ts +0 -0
- /package/dist/{src/request → request}/Request.js +0 -0
- /package/dist/{src/request → request}/cache/BlackHoleCache.d.ts +0 -0
- /package/dist/{src/request → request}/cache/BlackHoleCache.js +0 -0
- /package/dist/{src/request → request}/cache/UnlimitedCache.d.ts +0 -0
- /package/dist/{src/request → request}/index.d.ts +0 -0
- /package/dist/{src/request → request}/index.js +0 -0
- /package/dist/{src/security → security}/ContentEncoding.d.ts +0 -0
- /package/dist/{src/security → security}/ContentSecurityPolicy.d.ts +0 -0
- /package/dist/{src/security → security}/Cookies.d.ts +0 -0
- /package/dist/{src/security → security}/FingerPrint.d.ts +0 -0
- /package/dist/{src/security → security}/GoogleWebRisk.d.ts +0 -0
- /package/dist/{src/security → security}/HSTS.d.ts +0 -0
- /package/dist/{src/security → security}/HTTPS.d.ts +0 -0
- /package/dist/{src/security → security}/HTTPVersion.d.ts +0 -0
- /package/dist/{src/security → security}/PermissionsPolicy.d.ts +0 -0
- /package/dist/{src/security → security}/Redirect.d.ts +0 -0
- /package/dist/{src/security → security}/ReferrerPolicy.d.ts +0 -0
- /package/dist/{src/security → security}/RobotsTXT.d.ts +0 -0
- /package/dist/{src/security → security}/SSL.d.ts +0 -0
- /package/dist/{src/security → security}/XFrameOptions.d.ts +0 -0
- /package/dist/{src/security → security}/XXSSProtection.d.ts +0 -0
- /package/dist/{src/security → security}/__TESTS__/ContentSecurityPolicy.test.d.ts +0 -0
- /package/dist/{src/security → security}/__TESTS__/FingerPrint.test.d.ts +0 -0
- /package/dist/{src/security → security}/__TESTS__/HSTS.test.d.ts +0 -0
- /package/dist/{src/security → security}/__TESTS__/HTTPS.test.d.ts +0 -0
- /package/dist/{src/security → security}/__TESTS__/XFrameOptions.test.d.ts +0 -0
- /package/dist/{src/security → security}/__TESTS__/XXSSProtection.test.d.ts +0 -0
- /package/dist/{src/security → security}/index.d.ts +0 -0
- /package/dist/{src/seo → seo}/Heading.d.ts +0 -0
- /package/dist/{src/seo → seo}/Robots.d.ts +0 -0
- /package/dist/{src/seo → seo}/Sitemap.d.ts +0 -0
- /package/dist/{src/seo → seo}/Title.d.ts +0 -0
- /package/dist/{src/seo → seo}/index.d.ts +0 -0
- /package/dist/{src/wordpress → wordpress}/DefaultFiles.d.ts +0 -0
- /package/dist/{src/wordpress → wordpress}/Generator.d.ts +0 -0
- /package/dist/{src/wordpress → wordpress}/index.d.ts +0 -0
|
@@ -1,23 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
14
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
6
|
const FingerPrint_1 = __importDefault(require("../FingerPrint"));
|
|
16
7
|
const request_1 = __importDefault(require("../../request"));
|
|
17
|
-
test('FingerPrint test without any finger print header present', () =>
|
|
8
|
+
test('FingerPrint test without any finger print header present', async () => {
|
|
18
9
|
const fingerPrint = new FingerPrint_1.default();
|
|
19
10
|
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
20
|
-
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(() =>
|
|
11
|
+
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(async () => {
|
|
21
12
|
return new Promise((resolve) => {
|
|
22
13
|
resolve({
|
|
23
14
|
headers: {
|
|
@@ -25,15 +16,15 @@ test('FingerPrint test without any finger print header present', () => __awaiter
|
|
|
25
16
|
},
|
|
26
17
|
});
|
|
27
18
|
});
|
|
28
|
-
})
|
|
29
|
-
const result =
|
|
19
|
+
});
|
|
20
|
+
const result = await fingerPrint.run({ url: 'https://juffalow.com' });
|
|
30
21
|
expect(result.status).toEqual('SUCCESS');
|
|
31
22
|
mock.mockRestore();
|
|
32
|
-
})
|
|
33
|
-
test('FingerPrint test with finger print header present', () =>
|
|
23
|
+
});
|
|
24
|
+
test('FingerPrint test with finger print header present', async () => {
|
|
34
25
|
const fingerPrint = new FingerPrint_1.default();
|
|
35
26
|
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
36
|
-
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(() =>
|
|
27
|
+
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(async () => {
|
|
37
28
|
return new Promise((resolve) => {
|
|
38
29
|
resolve({
|
|
39
30
|
headers: {
|
|
@@ -41,8 +32,8 @@ test('FingerPrint test with finger print header present', () => __awaiter(void 0
|
|
|
41
32
|
},
|
|
42
33
|
});
|
|
43
34
|
});
|
|
44
|
-
})
|
|
45
|
-
const result =
|
|
35
|
+
});
|
|
36
|
+
const result = await fingerPrint.run({ url: 'https://juffalow.com' });
|
|
46
37
|
expect(result.status).toEqual('ERROR');
|
|
47
38
|
mock.mockRestore();
|
|
48
|
-
})
|
|
39
|
+
});
|
|
@@ -1,23 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
14
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
6
|
const HSTS_1 = __importDefault(require("../HSTS"));
|
|
16
7
|
const request_1 = __importDefault(require("../../request"));
|
|
17
|
-
test('HSTS test with correct header', () =>
|
|
8
|
+
test('HSTS test with correct header', async () => {
|
|
18
9
|
const hsts = new HSTS_1.default();
|
|
19
10
|
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
20
|
-
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(() =>
|
|
11
|
+
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(async () => {
|
|
21
12
|
return new Promise((resolve) => {
|
|
22
13
|
resolve({
|
|
23
14
|
headers: {
|
|
@@ -25,15 +16,15 @@ test('HSTS test with correct header', () => __awaiter(void 0, void 0, void 0, fu
|
|
|
25
16
|
},
|
|
26
17
|
});
|
|
27
18
|
});
|
|
28
|
-
})
|
|
29
|
-
const result =
|
|
19
|
+
});
|
|
20
|
+
const result = await hsts.run({ url: 'https://juffalow.com' });
|
|
30
21
|
expect(result.status).toEqual('SUCCESS');
|
|
31
22
|
mock.mockRestore();
|
|
32
|
-
})
|
|
33
|
-
test('HSTS test with low max age value', () =>
|
|
23
|
+
});
|
|
24
|
+
test('HSTS test with low max age value', async () => {
|
|
34
25
|
const hsts = new HSTS_1.default();
|
|
35
26
|
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
36
|
-
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(() =>
|
|
27
|
+
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(async () => {
|
|
37
28
|
return new Promise((resolve) => {
|
|
38
29
|
resolve({
|
|
39
30
|
headers: {
|
|
@@ -41,22 +32,22 @@ test('HSTS test with low max age value', () => __awaiter(void 0, void 0, void 0,
|
|
|
41
32
|
},
|
|
42
33
|
});
|
|
43
34
|
});
|
|
44
|
-
})
|
|
45
|
-
const result =
|
|
35
|
+
});
|
|
36
|
+
const result = await hsts.run({ url: 'https://juffalow.com' });
|
|
46
37
|
expect(result.status).toEqual('ERROR');
|
|
47
38
|
mock.mockRestore();
|
|
48
|
-
})
|
|
49
|
-
test('HSTS test with missing HSTS header', () =>
|
|
39
|
+
});
|
|
40
|
+
test('HSTS test with missing HSTS header', async () => {
|
|
50
41
|
const hsts = new HSTS_1.default();
|
|
51
42
|
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
52
|
-
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(() =>
|
|
43
|
+
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(async () => {
|
|
53
44
|
return new Promise((resolve) => {
|
|
54
45
|
resolve({
|
|
55
46
|
headers: {},
|
|
56
47
|
});
|
|
57
48
|
});
|
|
58
|
-
})
|
|
59
|
-
const result =
|
|
49
|
+
});
|
|
50
|
+
const result = await hsts.run({ url: 'https://juffalow.com' });
|
|
60
51
|
expect(result.status).toEqual('ERROR');
|
|
61
52
|
mock.mockRestore();
|
|
62
|
-
})
|
|
53
|
+
});
|
|
@@ -1,23 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
14
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
6
|
const HTTPS_1 = __importDefault(require("../HTTPS"));
|
|
16
7
|
const request_1 = __importDefault(require("../../request"));
|
|
17
|
-
test('HTTPS test with correct statusCode and location header', () =>
|
|
8
|
+
test('HTTPS test with correct statusCode and location header', async () => {
|
|
18
9
|
const https = new HTTPS_1.default();
|
|
19
10
|
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
20
|
-
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(() =>
|
|
11
|
+
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(async () => {
|
|
21
12
|
return new Promise((resolve) => {
|
|
22
13
|
resolve({
|
|
23
14
|
statusCode: 301,
|
|
@@ -26,30 +17,30 @@ test('HTTPS test with correct statusCode and location header', () => __awaiter(v
|
|
|
26
17
|
},
|
|
27
18
|
});
|
|
28
19
|
});
|
|
29
|
-
})
|
|
30
|
-
const result =
|
|
20
|
+
});
|
|
21
|
+
const result = await https.run({ url: 'https://juffalow.com' });
|
|
31
22
|
expect(result.status).toEqual('SUCCESS');
|
|
32
23
|
mock.mockRestore();
|
|
33
|
-
})
|
|
34
|
-
test('HTTPS test with wrong statusCode', () =>
|
|
24
|
+
});
|
|
25
|
+
test('HTTPS test with wrong statusCode', async () => {
|
|
35
26
|
const https = new HTTPS_1.default();
|
|
36
27
|
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
37
|
-
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(() =>
|
|
28
|
+
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(async () => {
|
|
38
29
|
return new Promise((resolve) => {
|
|
39
30
|
resolve({
|
|
40
31
|
statusCode: 200,
|
|
41
32
|
headers: {}
|
|
42
33
|
});
|
|
43
34
|
});
|
|
44
|
-
})
|
|
45
|
-
const result =
|
|
35
|
+
});
|
|
36
|
+
const result = await https.run({ url: 'https://juffalow.com' });
|
|
46
37
|
expect(result.status).toEqual('ERROR');
|
|
47
38
|
mock.mockRestore();
|
|
48
|
-
})
|
|
49
|
-
test('HTTPS test with correct statusCode but wrong redirect location', () =>
|
|
39
|
+
});
|
|
40
|
+
test('HTTPS test with correct statusCode but wrong redirect location', async () => {
|
|
50
41
|
const https = new HTTPS_1.default();
|
|
51
42
|
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
52
|
-
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(() =>
|
|
43
|
+
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(async () => {
|
|
53
44
|
return new Promise((resolve) => {
|
|
54
45
|
resolve({
|
|
55
46
|
statusCode: 301,
|
|
@@ -58,8 +49,8 @@ test('HTTPS test with correct statusCode but wrong redirect location', () => __a
|
|
|
58
49
|
}
|
|
59
50
|
});
|
|
60
51
|
});
|
|
61
|
-
})
|
|
62
|
-
const result =
|
|
52
|
+
});
|
|
53
|
+
const result = await https.run({ url: 'https://juffalow.com' });
|
|
63
54
|
expect(result.status).toEqual('ERROR');
|
|
64
55
|
mock.mockRestore();
|
|
65
|
-
})
|
|
56
|
+
});
|
|
@@ -1,23 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
14
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
6
|
const XFrameOptions_1 = __importDefault(require("../XFrameOptions"));
|
|
16
7
|
const request_1 = __importDefault(require("../../request"));
|
|
17
|
-
test('X-Frame-Options test with correct header', () =>
|
|
8
|
+
test('X-Frame-Options test with correct header', async () => {
|
|
18
9
|
const pentest = new XFrameOptions_1.default();
|
|
19
10
|
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
20
|
-
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(() =>
|
|
11
|
+
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(async () => {
|
|
21
12
|
return new Promise((resolve) => {
|
|
22
13
|
resolve({
|
|
23
14
|
headers: {
|
|
@@ -25,22 +16,22 @@ test('X-Frame-Options test with correct header', () => __awaiter(void 0, void 0,
|
|
|
25
16
|
},
|
|
26
17
|
});
|
|
27
18
|
});
|
|
28
|
-
})
|
|
29
|
-
const result =
|
|
19
|
+
});
|
|
20
|
+
const result = await pentest.run({ url: 'https://juffalow.com' });
|
|
30
21
|
expect(result.status).toEqual('SUCCESS');
|
|
31
22
|
mock.mockRestore();
|
|
32
|
-
})
|
|
33
|
-
test('X-Frame-Options test with missing X-Frame-Options header', () =>
|
|
23
|
+
});
|
|
24
|
+
test('X-Frame-Options test with missing X-Frame-Options header', async () => {
|
|
34
25
|
const pentest = new XFrameOptions_1.default();
|
|
35
26
|
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
36
|
-
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(() =>
|
|
27
|
+
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(async () => {
|
|
37
28
|
return new Promise((resolve) => {
|
|
38
29
|
resolve({
|
|
39
30
|
headers: {}
|
|
40
31
|
});
|
|
41
32
|
});
|
|
42
|
-
})
|
|
43
|
-
const result =
|
|
33
|
+
});
|
|
34
|
+
const result = await pentest.run({ url: 'https://juffalow.com' });
|
|
44
35
|
expect(result.status).toEqual('ERROR');
|
|
45
36
|
mock.mockRestore();
|
|
46
|
-
})
|
|
37
|
+
});
|
|
@@ -1,23 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
14
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
6
|
const XXSSProtection_1 = __importDefault(require("../XXSSProtection"));
|
|
16
7
|
const request_1 = __importDefault(require("../../request"));
|
|
17
|
-
test('X-XSS-Protection test with correct header', () =>
|
|
8
|
+
test('X-XSS-Protection test with correct header', async () => {
|
|
18
9
|
const pentest = new XXSSProtection_1.default();
|
|
19
10
|
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
20
|
-
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(() =>
|
|
11
|
+
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(async () => {
|
|
21
12
|
return new Promise((resolve) => {
|
|
22
13
|
resolve({
|
|
23
14
|
headers: {
|
|
@@ -25,22 +16,22 @@ test('X-XSS-Protection test with correct header', () => __awaiter(void 0, void 0
|
|
|
25
16
|
},
|
|
26
17
|
});
|
|
27
18
|
});
|
|
28
|
-
})
|
|
29
|
-
const result =
|
|
19
|
+
});
|
|
20
|
+
const result = await pentest.run({ url: 'https://juffalow.com' });
|
|
30
21
|
expect(result.status).toEqual('SUCCESS');
|
|
31
22
|
mock.mockRestore();
|
|
32
|
-
})
|
|
33
|
-
test('X-XSS-Protection test with missing X-XSS-Protection header', () =>
|
|
23
|
+
});
|
|
24
|
+
test('X-XSS-Protection test with missing X-XSS-Protection header', async () => {
|
|
34
25
|
const pentest = new XXSSProtection_1.default();
|
|
35
26
|
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
36
|
-
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(() =>
|
|
27
|
+
const mock = jest.spyOn(request_1.default, 'get').mockImplementation(async () => {
|
|
37
28
|
return new Promise((resolve) => {
|
|
38
29
|
resolve({
|
|
39
30
|
headers: {}
|
|
40
31
|
});
|
|
41
32
|
});
|
|
42
|
-
})
|
|
43
|
-
const result =
|
|
33
|
+
});
|
|
34
|
+
const result = await pentest.run({ url: 'https://juffalow.com' });
|
|
44
35
|
expect(result.status).toEqual('ERROR');
|
|
45
36
|
mock.mockRestore();
|
|
46
|
-
})
|
|
37
|
+
});
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -29,9 +20,9 @@ const SSL_1 = __importDefault(require("./SSL"));
|
|
|
29
20
|
const GoogleWebRisk_1 = __importDefault(require("./GoogleWebRisk"));
|
|
30
21
|
const Redirect_1 = __importDefault(require("./Redirect"));
|
|
31
22
|
class Security extends Test_1.default {
|
|
23
|
+
name = 'Security';
|
|
32
24
|
constructor() {
|
|
33
25
|
super();
|
|
34
|
-
this.name = 'Security';
|
|
35
26
|
this.tests = [
|
|
36
27
|
new HTTPS_1.default(),
|
|
37
28
|
new HSTS_1.default(),
|
|
@@ -50,27 +41,25 @@ class Security extends Test_1.default {
|
|
|
50
41
|
new Redirect_1.default(),
|
|
51
42
|
];
|
|
52
43
|
}
|
|
53
|
-
test(params) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
};
|
|
73
|
-
});
|
|
44
|
+
async test(params) {
|
|
45
|
+
const tests = this.getTests();
|
|
46
|
+
const results = [];
|
|
47
|
+
for (const test of tests) {
|
|
48
|
+
const result = await test.run(params).catch(() => {
|
|
49
|
+
return {
|
|
50
|
+
status: 'ERROR',
|
|
51
|
+
title: test.name,
|
|
52
|
+
description: 'Test failed or cannot be run!',
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
results.push(result);
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
status: this.getStatus(results.map(result => result.status)),
|
|
59
|
+
title: this.name,
|
|
60
|
+
description: '',
|
|
61
|
+
results,
|
|
62
|
+
};
|
|
74
63
|
}
|
|
75
64
|
}
|
|
76
65
|
exports.default = Security;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const Test_1 = __importDefault(require("../Test"));
|
|
7
|
+
const request_1 = __importDefault(require("../request"));
|
|
8
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
9
|
+
const functions_1 = require("../functions");
|
|
10
|
+
class Heading extends Test_1.default {
|
|
11
|
+
name = 'Heading';
|
|
12
|
+
async test({ url }) {
|
|
13
|
+
logger_1.default.info(`Starting ${this.constructor.name} test...`);
|
|
14
|
+
const response = await request_1.default.get(url);
|
|
15
|
+
const html = await (0, functions_1.parseHtml)(response);
|
|
16
|
+
const heading = (0, functions_1.getHeading)(html);
|
|
17
|
+
const subTests = this.checkHeading(heading);
|
|
18
|
+
return {
|
|
19
|
+
status: this.getStatus(subTests.map(test => test.status)),
|
|
20
|
+
title: this.constructor.name,
|
|
21
|
+
description: '',
|
|
22
|
+
results: subTests,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
checkHeading(title) {
|
|
26
|
+
const results = [];
|
|
27
|
+
if (typeof title === 'undefined') {
|
|
28
|
+
return [{
|
|
29
|
+
status: 'ERROR',
|
|
30
|
+
title: 'H1 tag',
|
|
31
|
+
description: 'HTML should contain H1 tag.',
|
|
32
|
+
}];
|
|
33
|
+
}
|
|
34
|
+
results.push({
|
|
35
|
+
status: typeof title !== 'undefined' && title.length > 0 ? 'SUCCESS' : 'WARNING',
|
|
36
|
+
title: 'H1 tag',
|
|
37
|
+
});
|
|
38
|
+
results.push({
|
|
39
|
+
status: Array.isArray(title) ? 'ERROR' : 'SUCCESS',
|
|
40
|
+
title: 'Duplicate H1 tag',
|
|
41
|
+
description: `HTML should contain just one H1 tag.`,
|
|
42
|
+
});
|
|
43
|
+
results.push({
|
|
44
|
+
status: title.length <= 60 ? 'SUCCESS' : 'WARNING',
|
|
45
|
+
title: 'H1 length',
|
|
46
|
+
description: `H1 length should be under 60 characters and it is ${title.length}.`,
|
|
47
|
+
});
|
|
48
|
+
return results;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.default = Heading;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const Test_1 = __importDefault(require("../Test"));
|
|
7
|
+
const request_1 = __importDefault(require("../request"));
|
|
8
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
9
|
+
class Robots extends Test_1.default {
|
|
10
|
+
name = 'Robots';
|
|
11
|
+
async test({ url }) {
|
|
12
|
+
logger_1.default.info(`Starting ${this.constructor.name} test...`);
|
|
13
|
+
const response = await request_1.default.get(`${url}/robots.txt`);
|
|
14
|
+
return {
|
|
15
|
+
status: Math.floor(response.statusCode / 100) === 2 ? 'SUCCESS' : 'WARNING',
|
|
16
|
+
title: 'Robots.txt',
|
|
17
|
+
description: '',
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.default = Robots;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const Test_1 = __importDefault(require("../Test"));
|
|
7
|
+
const request_1 = __importDefault(require("../request"));
|
|
8
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
9
|
+
const functions_1 = require("../functions");
|
|
10
|
+
class Sitemap extends Test_1.default {
|
|
11
|
+
name = 'Sitemap';
|
|
12
|
+
async test({ url }) {
|
|
13
|
+
logger_1.default.info(`Starting ${this.constructor.name} test...`);
|
|
14
|
+
const robotsResponse = await request_1.default.get(`${url}/robots.txt`);
|
|
15
|
+
let sitemapUrl = `${url}/sitemap.xml`;
|
|
16
|
+
if (Math.floor(robotsResponse.statusCode / 100) === 2) {
|
|
17
|
+
const lines = robotsResponse.body.split(/\r?\n/);
|
|
18
|
+
const sitemap = lines.find(line => line.startsWith('Sitemap'));
|
|
19
|
+
if (typeof sitemap !== 'undefined') {
|
|
20
|
+
sitemapUrl = sitemap.split(' ')[1];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const response = await request_1.default.get(sitemapUrl);
|
|
24
|
+
const xml = await (0, functions_1.parseXml)(response);
|
|
25
|
+
return {
|
|
26
|
+
status: 'sitemapindex' in xml || 'urlset' in xml ? 'SUCCESS' : 'WARNING',
|
|
27
|
+
title: this.constructor.name,
|
|
28
|
+
description: '',
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.default = Sitemap;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const Test_1 = __importDefault(require("../Test"));
|
|
7
|
+
const request_1 = __importDefault(require("../request"));
|
|
8
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
9
|
+
const functions_1 = require("../functions");
|
|
10
|
+
class Title extends Test_1.default {
|
|
11
|
+
name = 'Title';
|
|
12
|
+
async test({ url }) {
|
|
13
|
+
logger_1.default.info(`Starting ${this.constructor.name} test...`);
|
|
14
|
+
const response = await request_1.default.get(url);
|
|
15
|
+
const html = await (0, functions_1.parseHtml)(response);
|
|
16
|
+
const title = (0, functions_1.getTitle)(html);
|
|
17
|
+
const subTests = this.checkTitle(title);
|
|
18
|
+
return {
|
|
19
|
+
status: this.getStatus(subTests.map(test => test.status)),
|
|
20
|
+
title: this.constructor.name,
|
|
21
|
+
description: '',
|
|
22
|
+
results: subTests,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
checkTitle(title) {
|
|
26
|
+
const results = [];
|
|
27
|
+
results.push({
|
|
28
|
+
status: typeof title !== 'undefined' && title.length > 0 ? 'SUCCESS' : 'WARNING',
|
|
29
|
+
title: 'Title tag',
|
|
30
|
+
});
|
|
31
|
+
results.push({
|
|
32
|
+
status: Array.isArray(title) ? 'ERROR' : 'SUCCESS',
|
|
33
|
+
title: 'Duplicate title tag',
|
|
34
|
+
description: `HTML should contain just one title tag.`,
|
|
35
|
+
});
|
|
36
|
+
results.push({
|
|
37
|
+
status: title.length <= 60 ? 'SUCCESS' : 'WARNING',
|
|
38
|
+
title: 'Title length',
|
|
39
|
+
description: `Title length should be under 60 characters and it is ${title.length}.`,
|
|
40
|
+
});
|
|
41
|
+
return results;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.default = Title;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const Test_1 = __importDefault(require("../Test"));
|
|
7
|
+
const Title_1 = __importDefault(require("./Title"));
|
|
8
|
+
const Heading_1 = __importDefault(require("./Heading"));
|
|
9
|
+
const Sitemap_1 = __importDefault(require("./Sitemap"));
|
|
10
|
+
const Robots_1 = __importDefault(require("./Robots"));
|
|
11
|
+
class SEO extends Test_1.default {
|
|
12
|
+
name = 'SEO';
|
|
13
|
+
constructor() {
|
|
14
|
+
super();
|
|
15
|
+
this.tests = [
|
|
16
|
+
new Title_1.default(),
|
|
17
|
+
new Heading_1.default(),
|
|
18
|
+
new Sitemap_1.default(),
|
|
19
|
+
new Robots_1.default(),
|
|
20
|
+
];
|
|
21
|
+
}
|
|
22
|
+
async test(params) {
|
|
23
|
+
const tests = this.getTests();
|
|
24
|
+
const results = [];
|
|
25
|
+
for (const test of tests) {
|
|
26
|
+
let result = null;
|
|
27
|
+
try {
|
|
28
|
+
result = await test.run(params);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
result = {
|
|
32
|
+
status: 'ERROR',
|
|
33
|
+
title: test.name,
|
|
34
|
+
description: 'Test failed or cannot be run!',
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
results.push(result);
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
status: this.getStatus(results.map(result => result.status)),
|
|
41
|
+
title: this.name,
|
|
42
|
+
description: '',
|
|
43
|
+
results,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.default = SEO;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const Test_1 = __importDefault(require("../Test"));
|
|
7
|
+
const request_1 = __importDefault(require("../request"));
|
|
8
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
9
|
+
class DefaultFiles extends Test_1.default {
|
|
10
|
+
name = 'Default files';
|
|
11
|
+
files = [
|
|
12
|
+
'readme.html',
|
|
13
|
+
'licence.txt',
|
|
14
|
+
'wp-config-sample.php',
|
|
15
|
+
'wp-admin/install.php',
|
|
16
|
+
'wp-admin/upgrade.php',
|
|
17
|
+
];
|
|
18
|
+
async test({ url }) {
|
|
19
|
+
logger_1.default.info('Starting default files test...');
|
|
20
|
+
let results = [];
|
|
21
|
+
results = await this.checkFiles(url);
|
|
22
|
+
return {
|
|
23
|
+
status: this.getStatus(results.map(result => result.status)),
|
|
24
|
+
title: 'Default files',
|
|
25
|
+
description: '',
|
|
26
|
+
results: results,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
async checkFiles(url) {
|
|
30
|
+
const results = [];
|
|
31
|
+
for (const file of this.files) {
|
|
32
|
+
const response = await request_1.default.get(`${url.endsWith('/') ? url.substring(0, url.length - 1) : url}/${file}`);
|
|
33
|
+
if (Math.floor(response.statusCode / 100) === 2 || Math.floor(response.statusCode / 100) === 5) {
|
|
34
|
+
results.push({
|
|
35
|
+
status: 'WARNING',
|
|
36
|
+
title: file,
|
|
37
|
+
description: `The ${file} file is reachable on the server!`
|
|
38
|
+
});
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
results.push({
|
|
42
|
+
status: 'SUCCESS',
|
|
43
|
+
title: file,
|
|
44
|
+
description: `The ${file} file is not reachable on the server.`,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return results;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.default = DefaultFiles;
|