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.
Files changed (205) hide show
  1. package/dist/Pentest.js +46 -0
  2. package/dist/{src/Test.js → Test.js} +11 -24
  3. package/dist/commands/Sitemap.js +79 -0
  4. package/dist/dns/A.js +49 -0
  5. package/dist/dns/DMARC.js +59 -0
  6. package/dist/dns/NS.js +36 -0
  7. package/dist/dns/RegistrationDate.js +39 -0
  8. package/dist/dns/index.js +47 -0
  9. package/dist/functions/parseSitemap.js +12 -0
  10. package/dist/html/Anchor.js +56 -0
  11. package/dist/html/CSS.js +92 -0
  12. package/dist/html/DuplicateId.js +35 -0
  13. package/dist/html/Generator.js +31 -0
  14. package/dist/html/Image.js +79 -0
  15. package/dist/html/JavaScript.js +107 -0
  16. package/dist/{src/html → html}/__TESTS__/Generator.test.js +10 -19
  17. package/dist/html/index.js +51 -0
  18. package/dist/{src/index → index} +21 -20
  19. package/dist/{src/logger → logger}/Console.js +1 -3
  20. package/dist/metadata/HTML.js +26 -0
  21. package/dist/metadata/Markdown.js +28 -0
  22. package/dist/metadata/ResponseTime.js +25 -0
  23. package/dist/metadata/index.js +45 -0
  24. package/dist/request/NodeFetch.js +58 -0
  25. package/dist/{src/request → request}/cache/UnlimitedCache.js +2 -0
  26. package/dist/security/ContentEncoding.js +44 -0
  27. package/dist/security/ContentSecurityPolicy.js +32 -0
  28. package/dist/security/Cookies.js +44 -0
  29. package/dist/security/FingerPrint.js +37 -0
  30. package/dist/security/GoogleWebRisk.js +44 -0
  31. package/dist/security/HSTS.js +48 -0
  32. package/dist/security/HTTPS.js +78 -0
  33. package/dist/security/HTTPVersion.js +50 -0
  34. package/dist/security/PermissionsPolicy.js +53 -0
  35. package/dist/security/Redirect.js +37 -0
  36. package/dist/security/ReferrerPolicy.js +32 -0
  37. package/dist/security/RobotsTXT.js +28 -0
  38. package/dist/security/SSL.js +36 -0
  39. package/dist/security/XFrameOptions.js +32 -0
  40. package/dist/security/XXSSProtection.js +32 -0
  41. package/dist/{src/security → security}/__TESTS__/ContentSecurityPolicy.test.js +10 -19
  42. package/dist/{src/security → security}/__TESTS__/FingerPrint.test.js +10 -19
  43. package/dist/{src/security → security}/__TESTS__/HSTS.test.js +15 -24
  44. package/dist/{src/security → security}/__TESTS__/HTTPS.test.js +15 -24
  45. package/dist/{src/security → security}/__TESTS__/XFrameOptions.test.js +10 -19
  46. package/dist/{src/security → security}/__TESTS__/XXSSProtection.test.js +10 -19
  47. package/dist/{src/security → security}/index.js +20 -31
  48. package/dist/seo/Heading.js +51 -0
  49. package/dist/seo/Robots.js +21 -0
  50. package/dist/seo/Sitemap.js +32 -0
  51. package/dist/seo/Title.js +44 -0
  52. package/dist/seo/index.js +47 -0
  53. package/dist/wordpress/DefaultFiles.js +50 -0
  54. package/dist/wordpress/Generator.js +58 -0
  55. package/dist/wordpress/index.js +43 -0
  56. package/package.json +10 -2
  57. package/dist/package.json +0 -61
  58. package/dist/src/Pentest.js +0 -57
  59. package/dist/src/commands/Sitemap.js +0 -96
  60. package/dist/src/dns/A.js +0 -65
  61. package/dist/src/dns/DMARC.js +0 -73
  62. package/dist/src/dns/NS.js +0 -52
  63. package/dist/src/dns/RegistrationDate.js +0 -55
  64. package/dist/src/dns/index.js +0 -58
  65. package/dist/src/functions/parseSitemap.js +0 -23
  66. package/dist/src/html/Anchor.js +0 -72
  67. package/dist/src/html/CSS.js +0 -108
  68. package/dist/src/html/DuplicateId.js +0 -49
  69. package/dist/src/html/Generator.js +0 -45
  70. package/dist/src/html/Image.js +0 -95
  71. package/dist/src/html/JavaScript.js +0 -123
  72. package/dist/src/html/index.js +0 -62
  73. package/dist/src/metadata/HTML.js +0 -40
  74. package/dist/src/metadata/Markdown.js +0 -42
  75. package/dist/src/metadata/ResponseTime.js +0 -39
  76. package/dist/src/metadata/index.js +0 -56
  77. package/dist/src/request/NodeFetch.js +0 -68
  78. package/dist/src/security/ContentEncoding.js +0 -58
  79. package/dist/src/security/ContentSecurityPolicy.js +0 -46
  80. package/dist/src/security/Cookies.js +0 -58
  81. package/dist/src/security/FingerPrint.js +0 -51
  82. package/dist/src/security/GoogleWebRisk.js +0 -58
  83. package/dist/src/security/HSTS.js +0 -62
  84. package/dist/src/security/HTTPS.js +0 -92
  85. package/dist/src/security/HTTPVersion.js +0 -64
  86. package/dist/src/security/PermissionsPolicy.js +0 -67
  87. package/dist/src/security/Redirect.js +0 -51
  88. package/dist/src/security/ReferrerPolicy.js +0 -46
  89. package/dist/src/security/RobotsTXT.js +0 -42
  90. package/dist/src/security/SSL.js +0 -50
  91. package/dist/src/security/XFrameOptions.js +0 -46
  92. package/dist/src/security/XXSSProtection.js +0 -46
  93. package/dist/src/seo/Heading.js +0 -65
  94. package/dist/src/seo/Robots.js +0 -35
  95. package/dist/src/seo/Sitemap.js +0 -46
  96. package/dist/src/seo/Title.js +0 -58
  97. package/dist/src/seo/index.js +0 -58
  98. package/dist/src/wordpress/DefaultFiles.js +0 -66
  99. package/dist/src/wordpress/Generator.js +0 -76
  100. package/dist/src/wordpress/index.js +0 -54
  101. /package/dist/{src/Pentest.d.ts → Pentest.d.ts} +0 -0
  102. /package/dist/{src/Test.d.ts → Test.d.ts} +0 -0
  103. /package/dist/{src/commands → commands}/Sitemap.d.ts +0 -0
  104. /package/dist/{src/config.d.ts → config.d.ts} +0 -0
  105. /package/dist/{src/config.js → config.js} +0 -0
  106. /package/dist/{src/dns → dns}/A.d.ts +0 -0
  107. /package/dist/{src/dns → dns}/DMARC.d.ts +0 -0
  108. /package/dist/{src/dns → dns}/NS.d.ts +0 -0
  109. /package/dist/{src/dns → dns}/RegistrationDate.d.ts +0 -0
  110. /package/dist/{src/dns → dns}/index.d.ts +0 -0
  111. /package/dist/{src/functions → functions}/findEvery.d.ts +0 -0
  112. /package/dist/{src/functions → functions}/findEvery.js +0 -0
  113. /package/dist/{src/functions → functions}/getAnchors.d.ts +0 -0
  114. /package/dist/{src/functions → functions}/getAnchors.js +0 -0
  115. /package/dist/{src/functions → functions}/getDomain.d.ts +0 -0
  116. /package/dist/{src/functions → functions}/getDomain.js +0 -0
  117. /package/dist/{src/functions → functions}/getDuplicates.d.ts +0 -0
  118. /package/dist/{src/functions → functions}/getDuplicates.js +0 -0
  119. /package/dist/{src/functions → functions}/getGenerator.d.ts +0 -0
  120. /package/dist/{src/functions → functions}/getGenerator.js +0 -0
  121. /package/dist/{src/functions → functions}/getHeading.d.ts +0 -0
  122. /package/dist/{src/functions → functions}/getHeading.js +0 -0
  123. /package/dist/{src/functions → functions}/getImages.d.ts +0 -0
  124. /package/dist/{src/functions → functions}/getImages.js +0 -0
  125. /package/dist/{src/functions → functions}/getObject.d.ts +0 -0
  126. /package/dist/{src/functions → functions}/getObject.js +0 -0
  127. /package/dist/{src/functions → functions}/getScripts.d.ts +0 -0
  128. /package/dist/{src/functions → functions}/getScripts.js +0 -0
  129. /package/dist/{src/functions → functions}/getStylesheets.d.ts +0 -0
  130. /package/dist/{src/functions → functions}/getStylesheets.js +0 -0
  131. /package/dist/{src/functions → functions}/getTitle.d.ts +0 -0
  132. /package/dist/{src/functions → functions}/getTitle.js +0 -0
  133. /package/dist/{src/functions → functions}/index.d.ts +0 -0
  134. /package/dist/{src/functions → functions}/index.js +0 -0
  135. /package/dist/{src/functions → functions}/parseHtml.d.ts +0 -0
  136. /package/dist/{src/functions → functions}/parseHtml.js +0 -0
  137. /package/dist/{src/functions → functions}/parseSitemap.d.ts +0 -0
  138. /package/dist/{src/functions → functions}/parseXml.d.ts +0 -0
  139. /package/dist/{src/functions → functions}/parseXml.js +0 -0
  140. /package/dist/{src/html → html}/Anchor.d.ts +0 -0
  141. /package/dist/{src/html → html}/CSS.d.ts +0 -0
  142. /package/dist/{src/html → html}/DuplicateId.d.ts +0 -0
  143. /package/dist/{src/html → html}/Generator.d.ts +0 -0
  144. /package/dist/{src/html → html}/Image.d.ts +0 -0
  145. /package/dist/{src/html → html}/JavaScript.d.ts +0 -0
  146. /package/dist/{src/html → html}/__TESTS__/Generator.test.d.ts +0 -0
  147. /package/dist/{src/html → html}/index.d.ts +0 -0
  148. /package/dist/{src/index.d.ts → index.d.ts} +0 -0
  149. /package/dist/{src/logger → logger}/Console.d.ts +0 -0
  150. /package/dist/{src/logger → logger}/Logger.d.ts +0 -0
  151. /package/dist/{src/logger → logger}/Logger.js +0 -0
  152. /package/dist/{src/logger → logger}/index.d.ts +0 -0
  153. /package/dist/{src/logger → logger}/index.js +0 -0
  154. /package/dist/{src/metadata → metadata}/HTML.d.ts +0 -0
  155. /package/dist/{src/metadata → metadata}/Markdown.d.ts +0 -0
  156. /package/dist/{src/metadata → metadata}/ResponseTime.d.ts +0 -0
  157. /package/dist/{src/metadata → metadata}/index.d.ts +0 -0
  158. /package/dist/{src/report → report}/CommandLine.d.ts +0 -0
  159. /package/dist/{src/report → report}/CommandLine.js +0 -0
  160. /package/dist/{src/report → report}/Json.d.ts +0 -0
  161. /package/dist/{src/report → report}/Json.js +0 -0
  162. /package/dist/{src/report → report}/Report.d.ts +0 -0
  163. /package/dist/{src/report → report}/Report.js +0 -0
  164. /package/dist/{src/report → report}/Symbols.d.ts +0 -0
  165. /package/dist/{src/report → report}/Symbols.js +0 -0
  166. /package/dist/{src/report → report}/index.d.ts +0 -0
  167. /package/dist/{src/report → report}/index.js +0 -0
  168. /package/dist/{src/request → request}/NodeFetch.d.ts +0 -0
  169. /package/dist/{src/request → request}/Request.d.ts +0 -0
  170. /package/dist/{src/request → request}/Request.js +0 -0
  171. /package/dist/{src/request → request}/cache/BlackHoleCache.d.ts +0 -0
  172. /package/dist/{src/request → request}/cache/BlackHoleCache.js +0 -0
  173. /package/dist/{src/request → request}/cache/UnlimitedCache.d.ts +0 -0
  174. /package/dist/{src/request → request}/index.d.ts +0 -0
  175. /package/dist/{src/request → request}/index.js +0 -0
  176. /package/dist/{src/security → security}/ContentEncoding.d.ts +0 -0
  177. /package/dist/{src/security → security}/ContentSecurityPolicy.d.ts +0 -0
  178. /package/dist/{src/security → security}/Cookies.d.ts +0 -0
  179. /package/dist/{src/security → security}/FingerPrint.d.ts +0 -0
  180. /package/dist/{src/security → security}/GoogleWebRisk.d.ts +0 -0
  181. /package/dist/{src/security → security}/HSTS.d.ts +0 -0
  182. /package/dist/{src/security → security}/HTTPS.d.ts +0 -0
  183. /package/dist/{src/security → security}/HTTPVersion.d.ts +0 -0
  184. /package/dist/{src/security → security}/PermissionsPolicy.d.ts +0 -0
  185. /package/dist/{src/security → security}/Redirect.d.ts +0 -0
  186. /package/dist/{src/security → security}/ReferrerPolicy.d.ts +0 -0
  187. /package/dist/{src/security → security}/RobotsTXT.d.ts +0 -0
  188. /package/dist/{src/security → security}/SSL.d.ts +0 -0
  189. /package/dist/{src/security → security}/XFrameOptions.d.ts +0 -0
  190. /package/dist/{src/security → security}/XXSSProtection.d.ts +0 -0
  191. /package/dist/{src/security → security}/__TESTS__/ContentSecurityPolicy.test.d.ts +0 -0
  192. /package/dist/{src/security → security}/__TESTS__/FingerPrint.test.d.ts +0 -0
  193. /package/dist/{src/security → security}/__TESTS__/HSTS.test.d.ts +0 -0
  194. /package/dist/{src/security → security}/__TESTS__/HTTPS.test.d.ts +0 -0
  195. /package/dist/{src/security → security}/__TESTS__/XFrameOptions.test.d.ts +0 -0
  196. /package/dist/{src/security → security}/__TESTS__/XXSSProtection.test.d.ts +0 -0
  197. /package/dist/{src/security → security}/index.d.ts +0 -0
  198. /package/dist/{src/seo → seo}/Heading.d.ts +0 -0
  199. /package/dist/{src/seo → seo}/Robots.d.ts +0 -0
  200. /package/dist/{src/seo → seo}/Sitemap.d.ts +0 -0
  201. /package/dist/{src/seo → seo}/Title.d.ts +0 -0
  202. /package/dist/{src/seo → seo}/index.d.ts +0 -0
  203. /package/dist/{src/wordpress → wordpress}/DefaultFiles.d.ts +0 -0
  204. /package/dist/{src/wordpress → wordpress}/Generator.d.ts +0 -0
  205. /package/dist/{src/wordpress → wordpress}/index.d.ts +0 -0
@@ -1,67 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const Test_1 = __importDefault(require("../Test"));
16
- const request_1 = __importDefault(require("../request"));
17
- const logger_1 = __importDefault(require("../logger"));
18
- /**
19
- *
20
- * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy
21
- */
22
- class PermissionsPolicy extends Test_1.default {
23
- constructor() {
24
- super(...arguments);
25
- this.name = 'Permissions-Policy';
26
- }
27
- test(_a) {
28
- return __awaiter(this, arguments, void 0, function* ({ url }) {
29
- logger_1.default.info('Starting PermissionsPolicy test...');
30
- const response = yield request_1.default.get(url);
31
- if (!Object.prototype.hasOwnProperty.call(response.headers, 'permissions-policy')) {
32
- return {
33
- status: 'ERROR',
34
- title: 'Permissions-Policy',
35
- description: 'Response headers does not contain permissions-policy header!',
36
- };
37
- }
38
- const permissionsArray = ['accelerometer', 'geolocation', 'midi', 'notifications', 'push', 'sync-xhr',
39
- 'microphone', 'camera', 'magnetometer', 'gyroscope', 'speaker', 'vibrate', 'fullscreen', 'payment', 'usb'];
40
- const attributesList = response.headers['permissions-policy'];
41
- const subChecks = this.checkPermissions(permissionsArray, attributesList);
42
- return {
43
- status: subChecks.some(check => check.status === 'WARNING') ? 'WARNING' : 'SUCCESS',
44
- title: 'Permissions-Policy',
45
- description: '',
46
- results: subChecks,
47
- };
48
- });
49
- }
50
- checkPermissions(permissions, attributes) {
51
- return permissions.map((permission) => {
52
- if (!attributes.includes(permission)) {
53
- return {
54
- status: 'WARNING',
55
- title: permission,
56
- description: `Permission ${permission} is missing.`,
57
- };
58
- }
59
- return {
60
- status: 'SUCCESS',
61
- title: permission,
62
- description: `Permission ${permission} is present.`,
63
- };
64
- });
65
- }
66
- }
67
- exports.default = PermissionsPolicy;
@@ -1,51 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const Test_1 = __importDefault(require("../Test"));
16
- const request_1 = __importDefault(require("../request"));
17
- const logger_1 = __importDefault(require("../logger"));
18
- class Redirect extends Test_1.default {
19
- constructor() {
20
- super(...arguments);
21
- this.name = 'Redirect';
22
- }
23
- test(_a) {
24
- return __awaiter(this, arguments, void 0, function* ({ url }) {
25
- logger_1.default.info('Starting Redirect test...');
26
- const response = yield request_1.default.get(url, { redirect: 'follow' });
27
- if (response.response.redirected) {
28
- const originalUrl = new URL(url);
29
- const finalUrl = new URL(response.response.url);
30
- if (originalUrl.hostname !== finalUrl.hostname) {
31
- return {
32
- status: 'ERROR',
33
- title: this.name,
34
- description: 'URL redirects to different hostname!',
35
- };
36
- }
37
- return {
38
- status: 'SUCCESS',
39
- title: this.name,
40
- description: 'Request was redirected but to the same hostname.',
41
- };
42
- }
43
- return {
44
- status: 'SUCCESS',
45
- title: this.name,
46
- description: 'Request was not redirected.',
47
- };
48
- });
49
- }
50
- }
51
- exports.default = Redirect;
@@ -1,46 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const Test_1 = __importDefault(require("../Test"));
16
- const request_1 = __importDefault(require("../request"));
17
- const logger_1 = __importDefault(require("../logger"));
18
- /**
19
- *
20
- * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy
21
- */
22
- class ReferrerPolicy extends Test_1.default {
23
- constructor() {
24
- super(...arguments);
25
- this.name = 'Referrer-Policy';
26
- }
27
- test(_a) {
28
- return __awaiter(this, arguments, void 0, function* ({ url }) {
29
- logger_1.default.info('Starting ReferrerPolicy test...');
30
- const response = yield request_1.default.get(url);
31
- if (!Object.prototype.hasOwnProperty.call(response.headers, 'referrer-policy')) {
32
- return {
33
- status: 'WARNING',
34
- title: 'Referrer-Policy',
35
- description: 'Response headers does not contain referrer-policy header!',
36
- };
37
- }
38
- return {
39
- status: 'SUCCESS',
40
- title: 'Referrer-Policy',
41
- description: `The value of referrer-policy header is ${response.headers['referrer-policy']}.`,
42
- };
43
- });
44
- }
45
- }
46
- exports.default = ReferrerPolicy;
@@ -1,42 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const Test_1 = __importDefault(require("../Test"));
16
- const request_1 = __importDefault(require("../request"));
17
- const logger_1 = __importDefault(require("../logger"));
18
- class RobotsTXT extends Test_1.default {
19
- constructor() {
20
- super(...arguments);
21
- this.name = 'Robots.txt';
22
- }
23
- test(_a) {
24
- return __awaiter(this, arguments, void 0, function* ({ url }) {
25
- logger_1.default.info('Starting robotstxt test...');
26
- const response = yield request_1.default.get(url + '/robots.txt');
27
- if (response !== null && response.statusCode === 200) {
28
- return {
29
- status: 'SUCCESS',
30
- title: 'Robots.txt',
31
- description: 'Site does contain robots.txt',
32
- };
33
- }
34
- return {
35
- status: 'ERROR',
36
- title: 'Robots.txt',
37
- description: 'Site does not contain robots.txt',
38
- };
39
- });
40
- }
41
- }
42
- exports.default = RobotsTXT;
@@ -1,50 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const ssl_checker_1 = __importDefault(require("ssl-checker"));
16
- const Test_1 = __importDefault(require("../Test"));
17
- const logger_1 = __importDefault(require("../logger"));
18
- class SSL extends Test_1.default {
19
- constructor() {
20
- super(...arguments);
21
- this.name = 'SSL';
22
- }
23
- test(_a) {
24
- return __awaiter(this, arguments, void 0, function* ({ url }) {
25
- logger_1.default.info('Starting SSL test...');
26
- const hostname = (new URL(url)).hostname;
27
- const sslDetails = yield (0, ssl_checker_1.default)(hostname);
28
- if (!sslDetails.valid) {
29
- return {
30
- status: 'ERROR',
31
- title: this.name,
32
- description: 'SSL certificate is not valid!',
33
- };
34
- }
35
- if (sslDetails.daysRemaining <= 7) {
36
- return {
37
- status: 'WARNING',
38
- title: this.name,
39
- description: 'SSL certificate is valid for 7 or less days!',
40
- };
41
- }
42
- return {
43
- status: 'SUCCESS',
44
- title: this.name,
45
- description: `SSL certificate is valid until ${sslDetails.validTo}.`,
46
- };
47
- });
48
- }
49
- }
50
- exports.default = SSL;
@@ -1,46 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const Test_1 = __importDefault(require("../Test"));
16
- const request_1 = __importDefault(require("../request"));
17
- const logger_1 = __importDefault(require("../logger"));
18
- /**
19
- *
20
- * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
21
- */
22
- class XFrameOptions extends Test_1.default {
23
- constructor() {
24
- super(...arguments);
25
- this.name = 'X-Frame-Options';
26
- }
27
- test(_a) {
28
- return __awaiter(this, arguments, void 0, function* ({ url }) {
29
- logger_1.default.info('Starting X-Frame-Options test...');
30
- const response = yield request_1.default.get(url);
31
- if (!Object.prototype.hasOwnProperty.call(response.headers, 'x-frame-options')) {
32
- return {
33
- status: 'ERROR',
34
- title: 'X-Frame-Options',
35
- description: 'Response headers does not contain x-frame-options header!',
36
- };
37
- }
38
- return {
39
- status: 'SUCCESS',
40
- title: 'X-Frame-Options',
41
- description: `The value of x-frame-options header is ${response.headers['x-frame-options']}.`,
42
- };
43
- });
44
- }
45
- }
46
- exports.default = XFrameOptions;
@@ -1,46 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const Test_1 = __importDefault(require("../Test"));
16
- const request_1 = __importDefault(require("../request"));
17
- const logger_1 = __importDefault(require("../logger"));
18
- /**
19
- *
20
- * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
21
- */
22
- class XXSSProtection extends Test_1.default {
23
- constructor() {
24
- super(...arguments);
25
- this.name = 'X-XSS-Protection';
26
- }
27
- test(_a) {
28
- return __awaiter(this, arguments, void 0, function* ({ url }) {
29
- logger_1.default.info('Starting X-XSS-Protection test...');
30
- const response = yield request_1.default.get(url);
31
- if (!Object.prototype.hasOwnProperty.call(response.headers, 'x-xss-protection')) {
32
- return {
33
- status: 'ERROR',
34
- title: 'X-XSS-Protection',
35
- description: 'Response headers does not contain x-xss-protection header!',
36
- };
37
- }
38
- return {
39
- status: 'SUCCESS',
40
- title: 'X-XSS-Protection',
41
- description: `The value of x-xss-protection header is ${response.headers['x-xss-protection']}.`,
42
- };
43
- });
44
- }
45
- }
46
- exports.default = XXSSProtection;
@@ -1,65 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const Test_1 = __importDefault(require("../Test"));
16
- const request_1 = __importDefault(require("../request"));
17
- const logger_1 = __importDefault(require("../logger"));
18
- const functions_1 = require("../functions");
19
- class Heading extends Test_1.default {
20
- constructor() {
21
- super(...arguments);
22
- this.name = 'Heading';
23
- }
24
- test(_a) {
25
- return __awaiter(this, arguments, void 0, function* ({ url }) {
26
- logger_1.default.info(`Starting ${this.constructor.name} test...`);
27
- const response = yield request_1.default.get(url);
28
- const html = yield (0, functions_1.parseHtml)(response);
29
- const heading = (0, functions_1.getHeading)(html);
30
- const subTests = this.checkHeading(heading);
31
- return {
32
- status: this.getStatus(subTests.map(test => test.status)),
33
- title: this.constructor.name,
34
- description: '',
35
- results: subTests,
36
- };
37
- });
38
- }
39
- checkHeading(title) {
40
- const results = [];
41
- if (typeof title === 'undefined') {
42
- return [{
43
- status: 'ERROR',
44
- title: 'H1 tag',
45
- description: 'HTML should contain H1 tag.',
46
- }];
47
- }
48
- results.push({
49
- status: typeof title !== 'undefined' && title.length > 0 ? 'SUCCESS' : 'WARNING',
50
- title: 'H1 tag',
51
- });
52
- results.push({
53
- status: Array.isArray(title) ? 'ERROR' : 'SUCCESS',
54
- title: 'Duplicate H1 tag',
55
- description: `HTML should contain just one H1 tag.`,
56
- });
57
- results.push({
58
- status: title.length <= 60 ? 'SUCCESS' : 'WARNING',
59
- title: 'H1 length',
60
- description: `H1 length should be under 60 characters and it is ${title.length}.`,
61
- });
62
- return results;
63
- }
64
- }
65
- exports.default = Heading;
@@ -1,35 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const Test_1 = __importDefault(require("../Test"));
16
- const request_1 = __importDefault(require("../request"));
17
- const logger_1 = __importDefault(require("../logger"));
18
- class Robots extends Test_1.default {
19
- constructor() {
20
- super(...arguments);
21
- this.name = 'Robots';
22
- }
23
- test(_a) {
24
- return __awaiter(this, arguments, void 0, function* ({ url }) {
25
- logger_1.default.info(`Starting ${this.constructor.name} test...`);
26
- const response = yield request_1.default.get(`${url}/robots.txt`);
27
- return {
28
- status: Math.floor(response.statusCode / 100) === 2 ? 'SUCCESS' : 'WARNING',
29
- title: 'Robots.txt',
30
- description: '',
31
- };
32
- });
33
- }
34
- }
35
- exports.default = Robots;
@@ -1,46 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const Test_1 = __importDefault(require("../Test"));
16
- const request_1 = __importDefault(require("../request"));
17
- const logger_1 = __importDefault(require("../logger"));
18
- const functions_1 = require("../functions");
19
- class Sitemap extends Test_1.default {
20
- constructor() {
21
- super(...arguments);
22
- this.name = 'Sitemap';
23
- }
24
- test(_a) {
25
- return __awaiter(this, arguments, void 0, function* ({ url }) {
26
- logger_1.default.info(`Starting ${this.constructor.name} test...`);
27
- const robotsResponse = yield request_1.default.get(`${url}/robots.txt`);
28
- let sitemapUrl = `${url}/sitemap.xml`;
29
- if (Math.floor(robotsResponse.statusCode / 100) === 2) {
30
- const lines = robotsResponse.body.split(/\r?\n/);
31
- const sitemap = lines.find(line => line.startsWith('Sitemap'));
32
- if (typeof sitemap !== 'undefined') {
33
- sitemapUrl = sitemap.split(' ')[1];
34
- }
35
- }
36
- const response = yield request_1.default.get(sitemapUrl);
37
- const xml = yield (0, functions_1.parseXml)(response);
38
- return {
39
- status: 'sitemapindex' in xml || 'urlset' in xml ? 'SUCCESS' : 'WARNING',
40
- title: this.constructor.name,
41
- description: '',
42
- };
43
- });
44
- }
45
- }
46
- exports.default = Sitemap;
@@ -1,58 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const Test_1 = __importDefault(require("../Test"));
16
- const request_1 = __importDefault(require("../request"));
17
- const logger_1 = __importDefault(require("../logger"));
18
- const functions_1 = require("../functions");
19
- class Title extends Test_1.default {
20
- constructor() {
21
- super(...arguments);
22
- this.name = 'Title';
23
- }
24
- test(_a) {
25
- return __awaiter(this, arguments, void 0, function* ({ url }) {
26
- logger_1.default.info(`Starting ${this.constructor.name} test...`);
27
- const response = yield request_1.default.get(url);
28
- const html = yield (0, functions_1.parseHtml)(response);
29
- const title = (0, functions_1.getTitle)(html);
30
- const subTests = this.checkTitle(title);
31
- return {
32
- status: this.getStatus(subTests.map(test => test.status)),
33
- title: this.constructor.name,
34
- description: '',
35
- results: subTests,
36
- };
37
- });
38
- }
39
- checkTitle(title) {
40
- const results = [];
41
- results.push({
42
- status: typeof title !== 'undefined' && title.length > 0 ? 'SUCCESS' : 'WARNING',
43
- title: 'Title tag',
44
- });
45
- results.push({
46
- status: Array.isArray(title) ? 'ERROR' : 'SUCCESS',
47
- title: 'Duplicate title tag',
48
- description: `HTML should contain just one title tag.`,
49
- });
50
- results.push({
51
- status: title.length <= 60 ? 'SUCCESS' : 'WARNING',
52
- title: 'Title length',
53
- description: `Title length should be under 60 characters and it is ${title.length}.`,
54
- });
55
- return results;
56
- }
57
- }
58
- exports.default = Title;
@@ -1,58 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const Test_1 = __importDefault(require("../Test"));
16
- const Title_1 = __importDefault(require("./Title"));
17
- const Heading_1 = __importDefault(require("./Heading"));
18
- const Sitemap_1 = __importDefault(require("./Sitemap"));
19
- const Robots_1 = __importDefault(require("./Robots"));
20
- class SEO extends Test_1.default {
21
- constructor() {
22
- super();
23
- this.name = 'SEO';
24
- this.tests = [
25
- new Title_1.default(),
26
- new Heading_1.default(),
27
- new Sitemap_1.default(),
28
- new Robots_1.default(),
29
- ];
30
- }
31
- test(params) {
32
- return __awaiter(this, void 0, void 0, function* () {
33
- const tests = this.getTests();
34
- const results = [];
35
- for (const test of tests) {
36
- let result = null;
37
- try {
38
- result = yield test.run(params);
39
- }
40
- catch (_a) {
41
- result = {
42
- status: 'ERROR',
43
- title: test.name,
44
- description: 'Test failed or cannot be run!',
45
- };
46
- }
47
- results.push(result);
48
- }
49
- return {
50
- status: this.getStatus(results.map(result => result.status)),
51
- title: this.name,
52
- description: '',
53
- results,
54
- };
55
- });
56
- }
57
- }
58
- exports.default = SEO;