@appland/scanner 1.33.1
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/LICENSE.txt +25 -0
- package/README.md +122 -0
- package/built/algorithms/dataStructures/graph/Graph.js +155 -0
- package/built/algorithms/dataStructures/graph/Graph.js.map +1 -0
- package/built/algorithms/dataStructures/graph/GraphEdge.js +27 -0
- package/built/algorithms/dataStructures/graph/GraphEdge.js.map +1 -0
- package/built/algorithms/dataStructures/graph/GraphVertex.js +79 -0
- package/built/algorithms/dataStructures/graph/GraphVertex.js.map +1 -0
- package/built/algorithms/dataStructures/linked-list/LinkedList.js +134 -0
- package/built/algorithms/dataStructures/linked-list/LinkedList.js.map +1 -0
- package/built/algorithms/dataStructures/linked-list/LinkedListNode.js +16 -0
- package/built/algorithms/dataStructures/linked-list/LinkedListNode.js.map +1 -0
- package/built/algorithms/graph/depth-first-search/index.js +49 -0
- package/built/algorithms/graph/depth-first-search/index.js.map +1 -0
- package/built/algorithms/graph/detect-cycle/index.js +77 -0
- package/built/algorithms/graph/detect-cycle/index.js.map +1 -0
- package/built/algorithms/utils/Comparator.js +35 -0
- package/built/algorithms/utils/Comparator.js.map +1 -0
- package/built/analyzer/recordSecrets.js +17 -0
- package/built/analyzer/recordSecrets.js.map +1 -0
- package/built/analyzer/secretsRegexes.js +13 -0
- package/built/analyzer/secretsRegexes.js.map +1 -0
- package/built/analyzer/secretsRegexesData.json +51 -0
- package/built/check.js +47 -0
- package/built/check.js.map +1 -0
- package/built/checkInstance.js +69 -0
- package/built/checkInstance.js.map +1 -0
- package/built/cli/ci/command.js +183 -0
- package/built/cli/ci/command.js.map +1 -0
- package/built/cli/ci/options.js +3 -0
- package/built/cli/ci/options.js.map +1 -0
- package/built/cli/exitCode.js +11 -0
- package/built/cli/exitCode.js.map +1 -0
- package/built/cli/progressReporter.js +16 -0
- package/built/cli/progressReporter.js.map +1 -0
- package/built/cli/resolveAppId.js +83 -0
- package/built/cli/resolveAppId.js.map +1 -0
- package/built/cli/scan/command.js +174 -0
- package/built/cli/scan/command.js.map +1 -0
- package/built/cli/scan/options.js +3 -0
- package/built/cli/scan/options.js.map +1 -0
- package/built/cli/scan/scanner.js +154 -0
- package/built/cli/scan/scanner.js.map +1 -0
- package/built/cli/scan.js +103 -0
- package/built/cli/scan.js.map +1 -0
- package/built/cli/scanArgs.js +26 -0
- package/built/cli/scanArgs.js.map +1 -0
- package/built/cli/scanOptions.js +3 -0
- package/built/cli/scanOptions.js.map +1 -0
- package/built/cli/upload/command.js +95 -0
- package/built/cli/upload/command.js.map +1 -0
- package/built/cli/upload/options.js +3 -0
- package/built/cli/upload/options.js.map +1 -0
- package/built/cli/validateFile.js +66 -0
- package/built/cli/validateFile.js.map +1 -0
- package/built/cli.js +32 -0
- package/built/cli.js.map +1 -0
- package/built/configuration/configurationProvider.js +169 -0
- package/built/configuration/configurationProvider.js.map +1 -0
- package/built/configuration/schema/match-pattern-config.json +32 -0
- package/built/configuration/schema/options.json +193 -0
- package/built/configuration/types/checkConfig.js +3 -0
- package/built/configuration/types/checkConfig.js.map +1 -0
- package/built/configuration/types/configuration.js +3 -0
- package/built/configuration/types/configuration.js.map +1 -0
- package/built/configuration/types/matchEventConfig.js +3 -0
- package/built/configuration/types/matchEventConfig.js.map +1 -0
- package/built/configuration/types/matchPatternConfig.js +3 -0
- package/built/configuration/types/matchPatternConfig.js.map +1 -0
- package/built/database/index.js +259 -0
- package/built/database/index.js.map +1 -0
- package/built/database/visit.js +80 -0
- package/built/database/visit.js.map +1 -0
- package/built/errors.js +35 -0
- package/built/errors.js.map +1 -0
- package/built/findings.js +15 -0
- package/built/findings.js.map +1 -0
- package/built/integration/appland/fetchStatus.js +51 -0
- package/built/integration/appland/fetchStatus.js.map +1 -0
- package/built/integration/appland/upload.js +193 -0
- package/built/integration/appland/upload.js.map +1 -0
- package/built/integration/github/commitStatus.js +19 -0
- package/built/integration/github/commitStatus.js.map +1 -0
- package/built/integration/vars.js +68 -0
- package/built/integration/vars.js.map +1 -0
- package/built/openapi/index.js +100 -0
- package/built/openapi/index.js.map +1 -0
- package/built/openapi/method.js +120 -0
- package/built/openapi/method.js.map +1 -0
- package/built/openapi/model.js +49 -0
- package/built/openapi/model.js.map +1 -0
- package/built/openapi/path.js +36 -0
- package/built/openapi/path.js.map +1 -0
- package/built/openapi/provider.js +133 -0
- package/built/openapi/provider.js.map +1 -0
- package/built/openapi/response.js +59 -0
- package/built/openapi/response.js.map +1 -0
- package/built/openapi/rpcRequest.js +130 -0
- package/built/openapi/rpcRequest.js.map +1 -0
- package/built/openapi/schema.js +42 -0
- package/built/openapi/schema.js.map +1 -0
- package/built/openapi/securitySchemes.js +32 -0
- package/built/openapi/securitySchemes.js.map +1 -0
- package/built/openapi/statusCodes.js +68 -0
- package/built/openapi/statusCodes.js.map +1 -0
- package/built/openapi/util.js +91 -0
- package/built/openapi/util.js.map +1 -0
- package/built/report/appMapMetadata.js +2 -0
- package/built/report/appMapMetadata.js.map +1 -0
- package/built/report/findingSummary.js +3 -0
- package/built/report/findingSummary.js.map +1 -0
- package/built/report/findingsReport.js +37 -0
- package/built/report/findingsReport.js.map +1 -0
- package/built/report/scanResults.js +103 -0
- package/built/report/scanResults.js.map +1 -0
- package/built/report/scanSummary.js +3 -0
- package/built/report/scanSummary.js.map +1 -0
- package/built/report/summaryReport.js +70 -0
- package/built/report/summaryReport.js.map +1 -0
- package/built/ruleChecker.js +260 -0
- package/built/ruleChecker.js.map +1 -0
- package/built/rules/authzBeforeAuthn.js +82 -0
- package/built/rules/authzBeforeAuthn.js.map +1 -0
- package/built/rules/circularDependency.js +227 -0
- package/built/rules/circularDependency.js.map +1 -0
- package/built/rules/http500.js +18 -0
- package/built/rules/http500.js.map +1 -0
- package/built/rules/illegalPackageDependency.js +38 -0
- package/built/rules/illegalPackageDependency.js.map +1 -0
- package/built/rules/incompatibleHttpClientRequest.js +96 -0
- package/built/rules/incompatibleHttpClientRequest.js.map +1 -0
- package/built/rules/insecureCompare.js +59 -0
- package/built/rules/insecureCompare.js.map +1 -0
- package/built/rules/jobNotCancelled.js +72 -0
- package/built/rules/jobNotCancelled.js.map +1 -0
- package/built/rules/lib/hasParameterOrReceiver.js +11 -0
- package/built/rules/lib/hasParameterOrReceiver.js.map +1 -0
- package/built/rules/lib/matchEvent.js +32 -0
- package/built/rules/lib/matchEvent.js.map +1 -0
- package/built/rules/lib/matchPattern.js +28 -0
- package/built/rules/lib/matchPattern.js.map +1 -0
- package/built/rules/lib/rpcWithoutProtection.js +40 -0
- package/built/rules/lib/rpcWithoutProtection.js.map +1 -0
- package/built/rules/missingAuthentication.js +65 -0
- package/built/rules/missingAuthentication.js.map +1 -0
- package/built/rules/missingContentType.js +27 -0
- package/built/rules/missingContentType.js.map +1 -0
- package/built/rules/nPlusOneQuery.js +84 -0
- package/built/rules/nPlusOneQuery.js.map +1 -0
- package/built/rules/queryFromInvalidPackage.js +37 -0
- package/built/rules/queryFromInvalidPackage.js.map +1 -0
- package/built/rules/queryFromView.js +29 -0
- package/built/rules/queryFromView.js.map +1 -0
- package/built/rules/rpcWithoutCircuitBreaker.js +97 -0
- package/built/rules/rpcWithoutCircuitBreaker.js.map +1 -0
- package/built/rules/saveWithoutValidation.js +27 -0
- package/built/rules/saveWithoutValidation.js.map +1 -0
- package/built/rules/secretInLog.js +76 -0
- package/built/rules/secretInLog.js.map +1 -0
- package/built/rules/slowFunctionCall.js +37 -0
- package/built/rules/slowFunctionCall.js.map +1 -0
- package/built/rules/slowHttpServerRequest.js +24 -0
- package/built/rules/slowHttpServerRequest.js.map +1 -0
- package/built/rules/slowQuery.js +23 -0
- package/built/rules/slowQuery.js.map +1 -0
- package/built/rules/tooManyJoins.js +77 -0
- package/built/rules/tooManyJoins.js.map +1 -0
- package/built/rules/tooManyUpdates.js +143 -0
- package/built/rules/tooManyUpdates.js.map +1 -0
- package/built/rules/unbatchedMaterializedQuery.js +65 -0
- package/built/rules/unbatchedMaterializedQuery.js.map +1 -0
- package/built/rules/updateInGetRequest.js +66 -0
- package/built/rules/updateInGetRequest.js.map +1 -0
- package/built/rules/util.js +102 -0
- package/built/rules/util.js.map +1 -0
- package/built/sampleConfig/bike_index.yml +10 -0
- package/built/sampleConfig/default.yml +19 -0
- package/built/sampleConfig/railsSampleApp6thEd.yml +29 -0
- package/built/sampleConfig/solidus.yml +31 -0
- package/built/scope/commandScope.js +156 -0
- package/built/scope/commandScope.js.map +1 -0
- package/built/scope/httpClientRequestScope.js +105 -0
- package/built/scope/httpClientRequestScope.js.map +1 -0
- package/built/scope/httpServerRequestScope.js +105 -0
- package/built/scope/httpServerRequestScope.js.map +1 -0
- package/built/scope/rootScope.js +105 -0
- package/built/scope/rootScope.js.map +1 -0
- package/built/scope/scopeImpl.js +88 -0
- package/built/scope/scopeImpl.js.map +1 -0
- package/built/scope/scopeIterator.js +21 -0
- package/built/scope/scopeIterator.js.map +1 -0
- package/built/scope/sqlTransactionScope.js +175 -0
- package/built/scope/sqlTransactionScope.js.map +1 -0
- package/built/wellKnownLabels.js +9 -0
- package/built/wellKnownLabels.js.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1,260 @@
|
|
|
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 __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __values = (this && this.__values) || function(o) {
|
|
39
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
40
|
+
if (m) return m.call(o);
|
|
41
|
+
if (o && typeof o.length === "number") return {
|
|
42
|
+
next: function () {
|
|
43
|
+
if (o && i >= o.length) o = void 0;
|
|
44
|
+
return { value: o && o[i++], done: !o };
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
48
|
+
};
|
|
49
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
50
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
|
+
};
|
|
52
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
+
var errors_1 = require("./errors");
|
|
54
|
+
var util_1 = require("./rules/util");
|
|
55
|
+
var rootScope_1 = __importDefault(require("./scope/rootScope"));
|
|
56
|
+
var httpServerRequestScope_1 = __importDefault(require("./scope/httpServerRequestScope"));
|
|
57
|
+
var httpClientRequestScope_1 = __importDefault(require("./scope/httpClientRequestScope"));
|
|
58
|
+
var commandScope_1 = __importDefault(require("./scope/commandScope"));
|
|
59
|
+
var sqlTransactionScope_1 = __importDefault(require("./scope/sqlTransactionScope"));
|
|
60
|
+
var checkInstance_1 = __importDefault(require("./checkInstance"));
|
|
61
|
+
var RuleChecker = /** @class */ (function () {
|
|
62
|
+
function RuleChecker() {
|
|
63
|
+
this.scopes = {
|
|
64
|
+
root: new rootScope_1.default(),
|
|
65
|
+
command: new commandScope_1.default(),
|
|
66
|
+
http_server_request: new httpServerRequestScope_1.default(),
|
|
67
|
+
http_client_request: new httpClientRequestScope_1.default(),
|
|
68
|
+
transaction: new sqlTransactionScope_1.default(),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
RuleChecker.prototype.check = function (appMapFile, appMap, check, findings) {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
73
|
+
var scopeIterator, callEvents, _a, _b, scope, checkInstance, _c, _d, event, e_1_1, e_2_1;
|
|
74
|
+
var e_2, _e, e_1, _f;
|
|
75
|
+
return __generator(this, function (_g) {
|
|
76
|
+
switch (_g.label) {
|
|
77
|
+
case 0:
|
|
78
|
+
if ((0, util_1.verbose)()) {
|
|
79
|
+
console.warn("Checking AppMap " + appMap.name + " with scope " + check.scope);
|
|
80
|
+
}
|
|
81
|
+
scopeIterator = this.scopes[check.scope];
|
|
82
|
+
if (!scopeIterator) {
|
|
83
|
+
throw new errors_1.AbortError("Invalid scope name \"" + check.scope + "\"");
|
|
84
|
+
}
|
|
85
|
+
callEvents = function () {
|
|
86
|
+
var i;
|
|
87
|
+
return __generator(this, function (_a) {
|
|
88
|
+
switch (_a.label) {
|
|
89
|
+
case 0:
|
|
90
|
+
i = 0;
|
|
91
|
+
_a.label = 1;
|
|
92
|
+
case 1:
|
|
93
|
+
if (!(i < appMap.events.length)) return [3 /*break*/, 4];
|
|
94
|
+
return [4 /*yield*/, appMap.events[i]];
|
|
95
|
+
case 2:
|
|
96
|
+
_a.sent();
|
|
97
|
+
_a.label = 3;
|
|
98
|
+
case 3:
|
|
99
|
+
i++;
|
|
100
|
+
return [3 /*break*/, 1];
|
|
101
|
+
case 4: return [2 /*return*/];
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
_g.label = 1;
|
|
106
|
+
case 1:
|
|
107
|
+
_g.trys.push([1, 15, 16, 17]);
|
|
108
|
+
_a = __values(scopeIterator.scopes(callEvents())), _b = _a.next();
|
|
109
|
+
_g.label = 2;
|
|
110
|
+
case 2:
|
|
111
|
+
if (!!_b.done) return [3 /*break*/, 14];
|
|
112
|
+
scope = _b.value;
|
|
113
|
+
if ((0, util_1.verbose)()) {
|
|
114
|
+
console.warn("Scope " + scope.scope);
|
|
115
|
+
}
|
|
116
|
+
checkInstance = new checkInstance_1.default(check);
|
|
117
|
+
if (!check.filterScope(scope.scope, appMap)) {
|
|
118
|
+
return [3 /*break*/, 13];
|
|
119
|
+
}
|
|
120
|
+
if (!checkInstance.enumerateScope) return [3 /*break*/, 11];
|
|
121
|
+
_g.label = 3;
|
|
122
|
+
case 3:
|
|
123
|
+
_g.trys.push([3, 8, 9, 10]);
|
|
124
|
+
_c = (e_1 = void 0, __values(scope.events())), _d = _c.next();
|
|
125
|
+
_g.label = 4;
|
|
126
|
+
case 4:
|
|
127
|
+
if (!!_d.done) return [3 /*break*/, 7];
|
|
128
|
+
event = _d.value;
|
|
129
|
+
return [4 /*yield*/, this.checkEvent(event, scope.scope, appMapFile, appMap, checkInstance, findings)];
|
|
130
|
+
case 5:
|
|
131
|
+
_g.sent();
|
|
132
|
+
_g.label = 6;
|
|
133
|
+
case 6:
|
|
134
|
+
_d = _c.next();
|
|
135
|
+
return [3 /*break*/, 4];
|
|
136
|
+
case 7: return [3 /*break*/, 10];
|
|
137
|
+
case 8:
|
|
138
|
+
e_1_1 = _g.sent();
|
|
139
|
+
e_1 = { error: e_1_1 };
|
|
140
|
+
return [3 /*break*/, 10];
|
|
141
|
+
case 9:
|
|
142
|
+
try {
|
|
143
|
+
if (_d && !_d.done && (_f = _c.return)) _f.call(_c);
|
|
144
|
+
}
|
|
145
|
+
finally { if (e_1) throw e_1.error; }
|
|
146
|
+
return [7 /*endfinally*/];
|
|
147
|
+
case 10: return [3 /*break*/, 13];
|
|
148
|
+
case 11: return [4 /*yield*/, this.checkEvent(scope.scope, scope.scope, appMapFile, appMap, checkInstance, findings)];
|
|
149
|
+
case 12:
|
|
150
|
+
_g.sent();
|
|
151
|
+
_g.label = 13;
|
|
152
|
+
case 13:
|
|
153
|
+
_b = _a.next();
|
|
154
|
+
return [3 /*break*/, 2];
|
|
155
|
+
case 14: return [3 /*break*/, 17];
|
|
156
|
+
case 15:
|
|
157
|
+
e_2_1 = _g.sent();
|
|
158
|
+
e_2 = { error: e_2_1 };
|
|
159
|
+
return [3 /*break*/, 17];
|
|
160
|
+
case 16:
|
|
161
|
+
try {
|
|
162
|
+
if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
|
|
163
|
+
}
|
|
164
|
+
finally { if (e_2) throw e_2.error; }
|
|
165
|
+
return [7 /*endfinally*/];
|
|
166
|
+
case 17: return [2 /*return*/];
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
};
|
|
171
|
+
RuleChecker.prototype.checkEvent = function (event, scope, appMapFile, appMap, checkInstance, findings) {
|
|
172
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
173
|
+
var buildFinding, matchResult, numFindings, finding, message, finding;
|
|
174
|
+
return __generator(this, function (_a) {
|
|
175
|
+
switch (_a.label) {
|
|
176
|
+
case 0:
|
|
177
|
+
if (!event.isCall()) {
|
|
178
|
+
return [2 /*return*/];
|
|
179
|
+
}
|
|
180
|
+
if ((0, util_1.verbose)()) {
|
|
181
|
+
console.warn("Asserting " + checkInstance.ruleId + " on " + event.codeObject.fqid + " event " + event.toString());
|
|
182
|
+
}
|
|
183
|
+
if (!event.returnEvent) {
|
|
184
|
+
if ((0, util_1.verbose)()) {
|
|
185
|
+
console.warn("\tEvent has no returnEvent. Skipping.");
|
|
186
|
+
}
|
|
187
|
+
return [2 /*return*/];
|
|
188
|
+
}
|
|
189
|
+
if (!checkInstance.filterEvent(event, appMap)) {
|
|
190
|
+
return [2 /*return*/];
|
|
191
|
+
}
|
|
192
|
+
buildFinding = function (matchEvent, message, groupMessage, occurranceCount, relatedEvents) {
|
|
193
|
+
if (matchEvent === void 0) { matchEvent = undefined; }
|
|
194
|
+
if (message === void 0) { message = undefined; }
|
|
195
|
+
if (groupMessage === void 0) { groupMessage = undefined; }
|
|
196
|
+
if (occurranceCount === void 0) { occurranceCount = undefined; }
|
|
197
|
+
if (relatedEvents === void 0) { relatedEvents = undefined; }
|
|
198
|
+
var findingEvent = matchEvent || event;
|
|
199
|
+
// Fixes:
|
|
200
|
+
// TypeError: Cannot read property 'forEach' of undefined
|
|
201
|
+
// at hashHttp (/Users/kgilpin/source/appland/scanner/node_modules/@appland/models/dist/index.cjs:1663:11)
|
|
202
|
+
// at hashEvent (/Users/kgilpin/source/appland/scanner/node_modules/@appland/models/dist/index.cjs:1714:14)
|
|
203
|
+
// at Event.get hash [as hash] (/Users/kgilpin/source/appland/scanner/node_modules/@appland/models/dist/index.cjs:3325:27)
|
|
204
|
+
findingEvent.message || (findingEvent.message = []);
|
|
205
|
+
return {
|
|
206
|
+
appMapFile: appMapFile,
|
|
207
|
+
checkId: checkInstance.checkId,
|
|
208
|
+
ruleId: checkInstance.ruleId,
|
|
209
|
+
ruleTitle: checkInstance.title,
|
|
210
|
+
event: findingEvent,
|
|
211
|
+
hash: findingEvent.hash,
|
|
212
|
+
scope: scope,
|
|
213
|
+
message: message || checkInstance.title,
|
|
214
|
+
groupMessage: groupMessage,
|
|
215
|
+
occurranceCount: occurranceCount,
|
|
216
|
+
relatedEvents: relatedEvents,
|
|
217
|
+
};
|
|
218
|
+
};
|
|
219
|
+
return [4 /*yield*/, checkInstance.ruleLogic.matcher(event, appMap, checkInstance.filterEvent.bind(checkInstance))];
|
|
220
|
+
case 1:
|
|
221
|
+
matchResult = _a.sent();
|
|
222
|
+
numFindings = findings.length;
|
|
223
|
+
if (matchResult === true) {
|
|
224
|
+
finding = void 0;
|
|
225
|
+
if (checkInstance.ruleLogic.message) {
|
|
226
|
+
message = checkInstance.ruleLogic.message(scope, event);
|
|
227
|
+
finding = buildFinding(event, message);
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
finding = buildFinding(event);
|
|
231
|
+
}
|
|
232
|
+
findings.push(finding);
|
|
233
|
+
}
|
|
234
|
+
else if (typeof matchResult === 'string') {
|
|
235
|
+
finding = buildFinding(event, matchResult);
|
|
236
|
+
finding.message = matchResult;
|
|
237
|
+
findings.push(finding);
|
|
238
|
+
}
|
|
239
|
+
else if (matchResult) {
|
|
240
|
+
matchResult.forEach(function (mr) {
|
|
241
|
+
var finding = buildFinding(mr.event, mr.message, mr.groupMessage, mr.occurranceCount, mr.relatedEvents);
|
|
242
|
+
findings.push(finding);
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
if ((0, util_1.verbose)()) {
|
|
246
|
+
if (findings.length > numFindings) {
|
|
247
|
+
findings.forEach(function (finding) {
|
|
248
|
+
return console.log("\tFinding: " + finding.ruleId + " : " + finding.message);
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return [2 /*return*/];
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
};
|
|
257
|
+
return RuleChecker;
|
|
258
|
+
}());
|
|
259
|
+
exports.default = RuleChecker;
|
|
260
|
+
//# sourceMappingURL=ruleChecker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ruleChecker.js","sourceRoot":"","sources":["../src/ruleChecker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,mCAAsC;AAEtC,qCAAuC;AAEvC,gEAA0C;AAC1C,0FAAoE;AACpE,0FAAoE;AACpE,sEAAgD;AAChD,oFAA8D;AAC9D,kEAA4C;AAE5C;IAAA;QACU,WAAM,GAAkC;YAC9C,IAAI,EAAE,IAAI,mBAAS,EAAE;YACrB,OAAO,EAAE,IAAI,sBAAY,EAAE;YAC3B,mBAAmB,EAAE,IAAI,gCAAsB,EAAE;YACjD,mBAAmB,EAAE,IAAI,gCAAsB,EAAE;YACjD,WAAW,EAAE,IAAI,6BAAmB,EAAE;SACvC,CAAC;IA+IJ,CAAC;IA7IO,2BAAK,GAAX,UACE,UAAkB,EAClB,MAAc,EACd,KAAY,EACZ,QAAmB;;;;;;;wBAEnB,IAAI,IAAA,cAAO,GAAE,EAAE;4BACb,OAAO,CAAC,IAAI,CAAC,qBAAmB,MAAM,CAAC,IAAI,oBAAe,KAAK,CAAC,KAAO,CAAC,CAAC;yBAC1E;wBACK,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBAC/C,IAAI,CAAC,aAAa,EAAE;4BAClB,MAAM,IAAI,mBAAU,CAAC,0BAAuB,KAAK,CAAC,KAAK,OAAG,CAAC,CAAC;yBAC7D;wBAEK,UAAU,GAAG;;;;;wCACR,CAAC,GAAG,CAAC;;;6CAAE,CAAA,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAA;wCACtC,qBAAM,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAA;;wCAAtB,SAAsB,CAAC;;;wCADiB,CAAC,EAAE,CAAA;;;;;yBAG9C,CAAC;;;;wBAEkB,KAAA,SAAA,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;;;;wBAA3C,KAAK;wBACd,IAAI,IAAA,cAAO,GAAE,EAAE;4BACb,OAAO,CAAC,IAAI,CAAC,WAAS,KAAK,CAAC,KAAO,CAAC,CAAC;yBACtC;wBACK,aAAa,GAAG,IAAI,uBAAa,CAAC,KAAK,CAAC,CAAC;wBAC/C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;4BAC3C,yBAAS;yBACV;6BACG,aAAa,CAAC,cAAc,EAA5B,yBAA4B;;;;wBACV,oBAAA,SAAA,KAAK,CAAC,MAAM,EAAE,CAAA,CAAA;;;;wBAAvB,KAAK;wBACd,qBAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAA;;wBAAtF,SAAsF,CAAC;;;;;;;;;;;;;;;;;6BAGzF,qBAAM,IAAI,CAAC,UAAU,CACnB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,KAAK,EACX,UAAU,EACV,MAAM,EACN,aAAa,EACb,QAAQ,CACT,EAAA;;wBAPD,SAOC,CAAC;;;;;;;;;;;;;;;;;;;;KAGP;IAEK,gCAAU,GAAhB,UACE,KAAY,EACZ,KAAY,EACZ,UAAkB,EAClB,MAAc,EACd,aAA4B,EAC5B,QAAmB;;;;;;wBAEnB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;4BACnB,sBAAO;yBACR;wBACD,IAAI,IAAA,cAAO,GAAE,EAAE;4BACb,OAAO,CAAC,IAAI,CACV,eAAa,aAAa,CAAC,MAAM,YAAO,KAAK,CAAC,UAAU,CAAC,IAAI,eAAU,KAAK,CAAC,QAAQ,EAAI,CAC1F,CAAC;yBACH;wBAED,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;4BACtB,IAAI,IAAA,cAAO,GAAE,EAAE;gCACb,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;6BACvD;4BACD,sBAAO;yBACR;wBAED,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;4BAC7C,sBAAO;yBACR;wBAEK,YAAY,GAAG,UACnB,UAAyC,EACzC,OAAuC,EACvC,YAA4C,EAC5C,eAA+C,EAC/C,aAA8C;4BAJ9C,2BAAA,EAAA,sBAAyC;4BACzC,wBAAA,EAAA,mBAAuC;4BACvC,6BAAA,EAAA,wBAA4C;4BAC5C,gCAAA,EAAA,2BAA+C;4BAC/C,8BAAA,EAAA,yBAA8C;4BAE9C,IAAM,YAAY,GAAG,UAAU,IAAI,KAAK,CAAC;4BACzC,SAAS;4BACT,yDAAyD;4BACzD,4GAA4G;4BAC5G,6GAA6G;4BAC7G,4HAA4H;4BAC5H,YAAY,CAAC,OAAO,KAApB,YAAY,CAAC,OAAO,GAAK,EAAE,EAAC;4BAC5B,OAAO;gCACL,UAAU,YAAA;gCACV,OAAO,EAAE,aAAa,CAAC,OAAO;gCAC9B,MAAM,EAAE,aAAa,CAAC,MAAM;gCAC5B,SAAS,EAAE,aAAa,CAAC,KAAK;gCAC9B,KAAK,EAAE,YAAY;gCACnB,IAAI,EAAE,YAAY,CAAC,IAAI;gCACvB,KAAK,OAAA;gCACL,OAAO,EAAE,OAAO,IAAI,aAAa,CAAC,KAAK;gCACvC,YAAY,cAAA;gCACZ,eAAe,iBAAA;gCACf,aAAa,eAAA;6BACd,CAAC;wBACJ,CAAC,CAAC;wBAEkB,qBAAM,aAAa,CAAC,SAAS,CAAC,OAAO,CACvD,KAAK,EACL,MAAM,EACN,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAC9C,EAAA;;wBAJK,WAAW,GAAG,SAInB;wBACK,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC;wBACpC,IAAI,WAAW,KAAK,IAAI,EAAE;4BACpB,OAAO,SAAA,CAAC;4BACZ,IAAI,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE;gCAC7B,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gCAC9D,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;6BACxC;iCAAM;gCACL,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;6BAC/B;4BACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;yBACxB;6BAAM,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;4BACpC,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,WAAqB,CAAC,CAAC;4BAC3D,OAAO,CAAC,OAAO,GAAG,WAAqB,CAAC;4BACxC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;yBACxB;6BAAM,IAAI,WAAW,EAAE;4BACtB,WAAW,CAAC,OAAO,CAAC,UAAC,EAAE;gCACrB,IAAM,OAAO,GAAG,YAAY,CAC1B,EAAE,CAAC,KAAK,EACR,EAAE,CAAC,OAAO,EACV,EAAE,CAAC,YAAY,EACf,EAAE,CAAC,eAAe,EAClB,EAAE,CAAC,aAAa,CACjB,CAAC;gCACF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;4BACzB,CAAC,CAAC,CAAC;yBACJ;wBACD,IAAI,IAAA,cAAO,GAAE,EAAE;4BACb,IAAI,QAAQ,CAAC,MAAM,GAAG,WAAW,EAAE;gCACjC,QAAQ,CAAC,OAAO,CAAC,UAAC,OAAO;oCACvB,OAAA,OAAO,CAAC,GAAG,CAAC,gBAAc,OAAO,CAAC,MAAM,WAAM,OAAO,CAAC,OAAS,CAAC;gCAAhE,CAAgE,CACjE,CAAC;6BACH;yBACF;;;;;KACF;IACH,kBAAC;AAAD,CAAC,AAtJD,IAsJC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __values = (this && this.__values) || function(o) {
|
|
3
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
4
|
+
if (m) return m.call(o);
|
|
5
|
+
if (o && typeof o.length === "number") return {
|
|
6
|
+
next: function () {
|
|
7
|
+
if (o && i >= o.length) o = void 0;
|
|
8
|
+
return { value: o && o[i++], done: !o };
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
var models_1 = require("@appland/models");
|
|
15
|
+
var util_1 = require("./util");
|
|
16
|
+
function containsAuthentication(events) {
|
|
17
|
+
var e_1, _a;
|
|
18
|
+
try {
|
|
19
|
+
for (var events_1 = __values(events), events_1_1 = events_1.next(); !events_1_1.done; events_1_1 = events_1.next()) {
|
|
20
|
+
var iter = events_1_1.value;
|
|
21
|
+
if ((0, util_1.providesAuthentication)(iter.event, SecurityAuthentication)) {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
27
|
+
finally {
|
|
28
|
+
try {
|
|
29
|
+
if (events_1_1 && !events_1_1.done && (_a = events_1.return)) _a.call(events_1);
|
|
30
|
+
}
|
|
31
|
+
finally { if (e_1) throw e_1.error; }
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
function build() {
|
|
36
|
+
function matcher(rootEvent) {
|
|
37
|
+
var e_2, _a;
|
|
38
|
+
try {
|
|
39
|
+
for (var _b = __values(new models_1.EventNavigator(rootEvent).descendants()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
40
|
+
var event = _c.value;
|
|
41
|
+
if ((0, util_1.providesAuthentication)(event.event, SecurityAuthentication)) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (event.event.labels.has(SecurityAuthorization) && (0, util_1.isTruthy)(event.event.returnValue)) {
|
|
45
|
+
// If the authorization event has a successful authentication descendant, allow this as well.
|
|
46
|
+
if (containsAuthentication(event.descendants())) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return [
|
|
51
|
+
{
|
|
52
|
+
level: 'error',
|
|
53
|
+
event: rootEvent,
|
|
54
|
+
message: event.event + " provides authorization, but the request is not authenticated",
|
|
55
|
+
relatedEvents: [event.event],
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
63
|
+
finally {
|
|
64
|
+
try {
|
|
65
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
66
|
+
}
|
|
67
|
+
finally { if (e_2) throw e_2.error; }
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return { matcher: matcher };
|
|
71
|
+
}
|
|
72
|
+
var SecurityAuthentication = 'security.authentication';
|
|
73
|
+
var SecurityAuthorization = 'security.authorization';
|
|
74
|
+
exports.default = {
|
|
75
|
+
id: 'authz-before-authn',
|
|
76
|
+
title: 'Authorization performed before authentication',
|
|
77
|
+
labels: [SecurityAuthorization, SecurityAuthentication],
|
|
78
|
+
scope: 'http_server_request',
|
|
79
|
+
enumerateScope: false,
|
|
80
|
+
build: build,
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=authzBeforeAuthn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authzBeforeAuthn.js","sourceRoot":"","sources":["../../src/rules/authzBeforeAuthn.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,0CAAwD;AACxD,+BAA0D;AAG1D,SAAS,sBAAsB,CAAC,MAAiC;;;QAC/D,KAAmB,IAAA,WAAA,SAAA,MAAM,CAAA,8BAAA,kDAAE;YAAtB,IAAM,IAAI,mBAAA;YACb,IAAI,IAAA,6BAAsB,EAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,EAAE;gBAC9D,OAAO,IAAI,CAAC;aACb;SACF;;;;;;;;;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,KAAK;IACZ,SAAS,OAAO,CAAC,SAAgB;;;YAC/B,KAAoB,IAAA,KAAA,SAAA,IAAI,uBAAc,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAA,gBAAA,4BAAE;gBAA5D,IAAM,KAAK,WAAA;gBACd,IAAI,IAAA,6BAAsB,EAAC,KAAK,CAAC,KAAK,EAAE,sBAAsB,CAAC,EAAE;oBAC/D,OAAO;iBACR;gBACD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,IAAA,eAAQ,EAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;oBACtF,6FAA6F;oBAC7F,IAAI,sBAAsB,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE;wBAC/C,OAAO;qBACR;yBAAM;wBACL,OAAO;4BACL;gCACE,KAAK,EAAE,OAAO;gCACd,KAAK,EAAE,SAAS;gCAChB,OAAO,EAAK,KAAK,CAAC,KAAK,kEAA+D;gCACtF,aAAa,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;6BAC7B;yBACF,CAAC;qBACH;iBACF;aACF;;;;;;;;;IACH,CAAC;IAED,OAAO,EAAE,OAAO,SAAA,EAAE,CAAC;AACrB,CAAC;AAED,IAAM,sBAAsB,GAAG,yBAAyB,CAAC;AACzD,IAAM,qBAAqB,GAAG,wBAAwB,CAAC;AAEvD,kBAAe;IACb,EAAE,EAAE,oBAAoB;IACxB,KAAK,EAAE,+CAA+C;IACtD,MAAM,EAAE,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;IACvD,KAAK,EAAE,qBAAkC;IACzC,cAAc,EAAE,KAAK;IACrB,KAAK,OAAA;CACE,CAAC"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
3
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
4
|
+
if (!m) return o;
|
|
5
|
+
var i = m.call(o), r, ar = [], e;
|
|
6
|
+
try {
|
|
7
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
8
|
+
}
|
|
9
|
+
catch (error) { e = { error: error }; }
|
|
10
|
+
finally {
|
|
11
|
+
try {
|
|
12
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
13
|
+
}
|
|
14
|
+
finally { if (e) throw e.error; }
|
|
15
|
+
}
|
|
16
|
+
return ar;
|
|
17
|
+
};
|
|
18
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
19
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
20
|
+
if (ar || !(i in from)) {
|
|
21
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
22
|
+
ar[i] = from[i];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
26
|
+
};
|
|
27
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
28
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
29
|
+
};
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
var GraphEdge_1 = __importDefault(require("../algorithms/dataStructures/graph/GraphEdge"));
|
|
32
|
+
var GraphVertex_1 = __importDefault(require("../algorithms/dataStructures/graph/GraphVertex"));
|
|
33
|
+
var Graph_1 = __importDefault(require("../algorithms/dataStructures/graph/Graph"));
|
|
34
|
+
var detect_cycle_1 = __importDefault(require("../algorithms/graph/detect-cycle"));
|
|
35
|
+
var path_1 = require("path");
|
|
36
|
+
var util_1 = require("./util");
|
|
37
|
+
var matchPattern_1 = require("./lib/matchPattern");
|
|
38
|
+
var Cycle = /** @class */ (function () {
|
|
39
|
+
function Cycle(packages, events) {
|
|
40
|
+
this.packages = packages;
|
|
41
|
+
this.events = events;
|
|
42
|
+
}
|
|
43
|
+
return Cycle;
|
|
44
|
+
}());
|
|
45
|
+
function ignorePackage(event, ignoredPackages) {
|
|
46
|
+
var myPackage = event.codeObject.packageOf;
|
|
47
|
+
return (myPackage === '' ||
|
|
48
|
+
ignoredPackages.some(function (filter) { return filter(myPackage); }) ||
|
|
49
|
+
!event.codeObject.location ||
|
|
50
|
+
(0, path_1.isAbsolute)(event.codeObject.location));
|
|
51
|
+
}
|
|
52
|
+
function detectCycles(root, ignoredPackages) {
|
|
53
|
+
var graph = new Graph_1.default(true);
|
|
54
|
+
var vertices = new Map();
|
|
55
|
+
var edges = new Set();
|
|
56
|
+
var vertexEvents = new Map();
|
|
57
|
+
var makeVertex = function (pkg, event) {
|
|
58
|
+
var result = vertices.get(pkg);
|
|
59
|
+
if (!result) {
|
|
60
|
+
result = new GraphVertex_1.default(pkg);
|
|
61
|
+
vertices.set(pkg, result);
|
|
62
|
+
vertexEvents.set(pkg, [event]);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
vertexEvents.get(pkg).push(event);
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
};
|
|
69
|
+
var collectEvent = function (event, parentEvent, parentPackage) {
|
|
70
|
+
var myPackage = event.codeObject.packageOf;
|
|
71
|
+
if (ignorePackage(event, ignoredPackages)) {
|
|
72
|
+
myPackage = null;
|
|
73
|
+
}
|
|
74
|
+
if (myPackage) {
|
|
75
|
+
var vertex = makeVertex(myPackage, event);
|
|
76
|
+
if (parentPackage && parentPackage !== myPackage) {
|
|
77
|
+
var edge = new GraphEdge_1.default(vertices.get(parentPackage), vertex);
|
|
78
|
+
if (!edges.has(edge.getKey())) {
|
|
79
|
+
if ((0, util_1.verbose)()) {
|
|
80
|
+
console.warn("New edge: " + parentPackage + "/" + parentEvent + " -> " + myPackage + "/" + event);
|
|
81
|
+
}
|
|
82
|
+
edges.add(edge.getKey());
|
|
83
|
+
graph.addEdge(edge);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
parentPackage = myPackage;
|
|
87
|
+
}
|
|
88
|
+
event.children.forEach(function (child) { return collectEvent(child, event, parentPackage); });
|
|
89
|
+
};
|
|
90
|
+
if (root.codeObject.packageOf !== '') {
|
|
91
|
+
makeVertex(root.codeObject.packageOf, root);
|
|
92
|
+
}
|
|
93
|
+
collectEvent(root, null, null);
|
|
94
|
+
return (0, detect_cycle_1.default)(graph).map(function (cycle) {
|
|
95
|
+
return new Cycle(cycle.map(function (vertex) { return vertex.getKey(); }), vertexEvents);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Given a list of package names which occur in a cycle,
|
|
100
|
+
* search the event tree to find a list of specific events whose sequence and package names match the cycle.
|
|
101
|
+
|
|
102
|
+
* @returns Sequence of events whose package names match the cyclePath.
|
|
103
|
+
*/
|
|
104
|
+
var searchForCycle = function (cycle, ignoredPackages) {
|
|
105
|
+
var traverseEvent = function (event, recordEvent, cyclePath, cyclePathIndex, path) {
|
|
106
|
+
if (cyclePathIndex === void 0) { cyclePathIndex = 0; }
|
|
107
|
+
if (path === void 0) { path = []; }
|
|
108
|
+
if (recordEvent) {
|
|
109
|
+
if ((0, util_1.verbose)()) {
|
|
110
|
+
console.warn(Array(path.length).fill('').join(' ') + "push: " + event);
|
|
111
|
+
}
|
|
112
|
+
path.push(event);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
if ((0, util_1.verbose)()) {
|
|
116
|
+
console.warn(Array(path.length).fill('').join(' ') + "traverse: " + event);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (cyclePathIndex === cyclePath.length - 1) {
|
|
120
|
+
if ((0, util_1.verbose)()) {
|
|
121
|
+
console.warn(Array(path.length).fill('').join(' ') + "result: " + path);
|
|
122
|
+
}
|
|
123
|
+
return __spreadArray([], __read(path), false);
|
|
124
|
+
}
|
|
125
|
+
var myPackage = event.codeObject.packageOf;
|
|
126
|
+
if ((0, util_1.verbose)()) {
|
|
127
|
+
console.warn(event.children.map(function (child) { return child.codeObject.fqid; }));
|
|
128
|
+
}
|
|
129
|
+
// Traverse children of ignored or same package
|
|
130
|
+
var result = event.children
|
|
131
|
+
.filter(function (child) { return child.codeObject.packageOf === myPackage || ignorePackage(child, ignoredPackages); })
|
|
132
|
+
.map(function (child) { return traverseEvent(child, false, cyclePath, cyclePathIndex, path); })
|
|
133
|
+
.filter(Boolean);
|
|
134
|
+
// Traverse children of the next package in the graph
|
|
135
|
+
if (result.length === 0) {
|
|
136
|
+
result = event.children
|
|
137
|
+
.filter(function (child) {
|
|
138
|
+
return child.codeObject.packageOf !== myPackage &&
|
|
139
|
+
!ignorePackage(child, ignoredPackages) &&
|
|
140
|
+
cyclePath[cyclePathIndex + 1] === child.codeObject.packageOf;
|
|
141
|
+
})
|
|
142
|
+
.map(function (child) { return traverseEvent(child, true, cyclePath, cyclePathIndex + 1, path); })
|
|
143
|
+
.filter(function (path) { return path; });
|
|
144
|
+
}
|
|
145
|
+
if (result.length > 0) {
|
|
146
|
+
return result[0];
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
if (recordEvent) {
|
|
150
|
+
if ((0, util_1.verbose)()) {
|
|
151
|
+
console.warn(Array(path.length - 1)
|
|
152
|
+
.fill('')
|
|
153
|
+
.join(' ') + "pop");
|
|
154
|
+
}
|
|
155
|
+
path.pop();
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
if ((0, util_1.verbose)()) {
|
|
159
|
+
console.warn(Array(path.length - 1)
|
|
160
|
+
.fill('')
|
|
161
|
+
.join(' ') + "untraverse");
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
// Look for a cycle starting at each package name. For each package name, consider the
|
|
168
|
+
// events that have that package.
|
|
169
|
+
for (var i = 0; i < cycle.packages.length; i++) {
|
|
170
|
+
var packageName = cycle.packages[i];
|
|
171
|
+
var startEvents = cycle.events.get(packageName);
|
|
172
|
+
var cyclePath = [];
|
|
173
|
+
for (var k = 0; k < cycle.packages.length; k++) {
|
|
174
|
+
cyclePath[k] = cycle.packages[(i + k) % cycle.packages.length];
|
|
175
|
+
}
|
|
176
|
+
cyclePath.push(packageName);
|
|
177
|
+
if ((0, util_1.verbose)()) {
|
|
178
|
+
console.warn("Searching for event path for cycle " + cyclePath);
|
|
179
|
+
}
|
|
180
|
+
for (var j = 0; j < startEvents.length; j++) {
|
|
181
|
+
var startEvent = startEvents[j];
|
|
182
|
+
var path = traverseEvent(startEvent, true, cyclePath);
|
|
183
|
+
if (path) {
|
|
184
|
+
return path;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return null;
|
|
189
|
+
};
|
|
190
|
+
var Options = /** @class */ (function () {
|
|
191
|
+
function Options() {
|
|
192
|
+
this.ignoredPackages = [];
|
|
193
|
+
this.depth = 4;
|
|
194
|
+
}
|
|
195
|
+
return Options;
|
|
196
|
+
}());
|
|
197
|
+
function build(options) {
|
|
198
|
+
var ignoredPackages = (0, matchPattern_1.buildFilters)(options.ignoredPackages);
|
|
199
|
+
function matcher(event) {
|
|
200
|
+
return detectCycles(event, ignoredPackages)
|
|
201
|
+
.filter(function (cycle) { return cycle.packages.length + 1 >= options.depth; })
|
|
202
|
+
.map(function (cycle) { return searchForCycle(cycle, ignoredPackages); })
|
|
203
|
+
.filter(function (path) { return path; })
|
|
204
|
+
.map(function (path) {
|
|
205
|
+
return {
|
|
206
|
+
event: path[0],
|
|
207
|
+
message: [
|
|
208
|
+
'Cycle in package dependency graph',
|
|
209
|
+
path.map(function (event) { return event.codeObject.packageOf; }).join(' -> '),
|
|
210
|
+
].join(': '),
|
|
211
|
+
relatedEvents: path,
|
|
212
|
+
};
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
matcher: matcher,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
exports.default = {
|
|
220
|
+
id: 'circular-dependency',
|
|
221
|
+
title: 'Circular package dependency',
|
|
222
|
+
scope: 'command',
|
|
223
|
+
Options: Options,
|
|
224
|
+
enumerateScope: false,
|
|
225
|
+
build: build,
|
|
226
|
+
};
|
|
227
|
+
//# sourceMappingURL=circularDependency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circularDependency.js","sourceRoot":"","sources":["../../src/rules/circularDependency.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
function build() {
|
|
4
|
+
return {
|
|
5
|
+
matcher: function (e) {
|
|
6
|
+
return e.httpServerResponse.status >= 500 && e.httpServerResponse.status < 600;
|
|
7
|
+
},
|
|
8
|
+
where: function (e) { return !!e.httpServerResponse; },
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
exports.default = {
|
|
12
|
+
id: 'http-5xx',
|
|
13
|
+
title: 'HTTP 5xx status code',
|
|
14
|
+
scope: 'http_server_request',
|
|
15
|
+
enumerateScope: false,
|
|
16
|
+
build: build,
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=http500.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http500.js","sourceRoot":"","sources":["../../src/rules/http500.ts"],"names":[],"mappings":";;AAGA,SAAS,KAAK;IACZ,OAAO;QACL,OAAO,EAAE,UAAC,CAAQ;YAChB,OAAA,CAAC,CAAC,kBAAmB,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,kBAAmB,CAAC,MAAM,GAAG,GAAG;QAAzE,CAAyE;QAC3E,KAAK,EAAE,UAAC,CAAQ,IAAK,OAAA,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAtB,CAAsB;KAC5C,CAAC;AACJ,CAAC;AAED,kBAAe;IACb,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,sBAAsB;IAC7B,KAAK,EAAE,qBAAqB;IAC5B,cAAc,EAAE,KAAK;IACrB,KAAK,OAAA;CACE,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var matchPattern_1 = require("./lib/matchPattern");
|
|
4
|
+
var Options = /** @class */ (function () {
|
|
5
|
+
function Options() {
|
|
6
|
+
this.callerPackages = [];
|
|
7
|
+
this.calleePackage = {};
|
|
8
|
+
}
|
|
9
|
+
return Options;
|
|
10
|
+
}());
|
|
11
|
+
function build(options) {
|
|
12
|
+
var callerPatterns = (0, matchPattern_1.buildFilters)(options.callerPackages || []);
|
|
13
|
+
var calleePattern = (0, matchPattern_1.buildFilter)(options.calleePackage);
|
|
14
|
+
function where(e) {
|
|
15
|
+
return !!e.parent && !!e.parent.codeObject.packageOf && calleePattern(e.codeObject.packageOf);
|
|
16
|
+
}
|
|
17
|
+
function matcher(e) {
|
|
18
|
+
var packageNamesStr = options.callerPackages
|
|
19
|
+
.map(function (config) { return config.equal || config.include || config.match; })
|
|
20
|
+
.map(String)
|
|
21
|
+
.join(' or ');
|
|
22
|
+
var parentPackage = e.parent.codeObject.packageOf;
|
|
23
|
+
if (!(e.codeObject.packageOf === parentPackage ||
|
|
24
|
+
callerPatterns.some(function (pattern) { return pattern(parentPackage); }))) {
|
|
25
|
+
return "Code object " + e.codeObject.id + " was invoked from " + parentPackage + ", not from " + packageNamesStr;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return { where: where, matcher: matcher };
|
|
29
|
+
}
|
|
30
|
+
exports.default = {
|
|
31
|
+
id: 'illegal-package-dependency',
|
|
32
|
+
title: 'Illegal use of code by a non-whitelisted package',
|
|
33
|
+
scope: 'command',
|
|
34
|
+
enumerateScope: true,
|
|
35
|
+
Options: Options,
|
|
36
|
+
build: build,
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=illegalPackageDependency.js.map
|