123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- "use strict";
- var _Utils = _interopRequireDefault(require("../Utils"));
- var _Check = require("./Check");
- var CheckGroups = _interopRequireWildcard(require("./CheckGroups/CheckGroups"));
- var _logger = _interopRequireDefault(require("../logger"));
- var _lodash = require("lodash");
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
- class CheckRunner {
-
- constructor(config = {}) {
- this._validateParams(config);
- const {
- enableCheck = false,
- enableCheckLog = false,
- checkGroups = CheckGroups
- } = config;
- this.enableCheck = enableCheck;
- this.enableCheckLog = enableCheckLog;
- this.checkGroups = checkGroups;
- }
-
- async run({
- version = '1.0.0'
- } = {}) {
-
- const groups = Object.values(this.checkGroups).filter(c => typeof c === 'function').map(CheckGroup => new CheckGroup());
-
- groups.forEach(group => group.run());
-
- const report = this._generateReport({
- groups,
- version
- });
-
- if (this.enableCheckLog) {
- this._logReport(report);
- }
- return report;
- }
-
- _generateReport({
- groups,
- version
- }) {
-
- const report = {
- report: {
- version,
- state: _Check.CheckState.success,
- groups: []
- }
- };
-
- switch (version) {
- case '1.0.0':
- default:
-
- for (const group of groups) {
-
- const groupReport = {
- name: group.name(),
- state: _Check.CheckState.success,
- checks: []
- };
-
- groupReport.checks = group.checks().map(check => {
- const checkReport = {
- title: check.title,
- state: check.checkState()
- };
- if (check.checkState() == _Check.CheckState.fail) {
- checkReport.warning = check.warning;
- checkReport.solution = check.solution;
- report.report.state = _Check.CheckState.fail;
- groupReport.state = _Check.CheckState.fail;
- }
- return checkReport;
- });
- report.report.groups.push(groupReport);
- }
- }
- return report;
- }
-
- _logReport(report) {
-
- const log = report.report.state == _Check.CheckState.success ? s => _logger.default.info(s) : s => _logger.default.warn(s);
-
- const indent = ' ';
- let output = '';
- let checksCount = 0;
- let failedChecksCount = 0;
- let skippedCheckCount = 0;
-
- for (const group of report.report.groups) {
- output += `\n- ${group.name}`;
- for (const check of group.checks) {
- checksCount++;
- output += `\n${indent}${this._getLogIconForState(check.state)} ${check.title}`;
- if (check.state == _Check.CheckState.fail) {
- failedChecksCount++;
- output += `\n${indent}${indent}Warning: ${check.warning}`;
- output += ` ${check.solution}`;
- } else if (check.state == _Check.CheckState.none) {
- skippedCheckCount++;
- output += `\n${indent}${indent}Test did not execute, this is likely an internal server issue, please report.`;
- }
- }
- }
- output = `\n###################################` + `\n# #` + `\n# Parse Server Security Check #` + `\n# #` + `\n###################################` + `\n` + `\n${failedChecksCount > 0 ? 'Warning: ' : ''}${failedChecksCount} weak security setting(s) found${failedChecksCount > 0 ? '!' : ''}` + `\n${checksCount} check(s) executed` + `\n${skippedCheckCount} check(s) skipped` + `\n` + `${output}`;
-
- log(output);
- }
-
- _getLogIconForState(state) {
- switch (state) {
- case _Check.CheckState.success:
- return '✅';
- case _Check.CheckState.fail:
- return '❌';
- default:
- return 'ℹ️';
- }
- }
-
- _validateParams(params) {
- _Utils.default.validateParams(params, {
- enableCheck: {
- t: 'boolean',
- v: _lodash.isBoolean,
- o: true
- },
- enableCheckLog: {
- t: 'boolean',
- v: _lodash.isBoolean,
- o: true
- },
- checkGroups: {
- t: 'array',
- v: _lodash.isArray,
- o: true
- }
- });
- }
- }
- module.exports = CheckRunner;
|