@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.
Files changed (196) hide show
  1. package/LICENSE.txt +25 -0
  2. package/README.md +122 -0
  3. package/built/algorithms/dataStructures/graph/Graph.js +155 -0
  4. package/built/algorithms/dataStructures/graph/Graph.js.map +1 -0
  5. package/built/algorithms/dataStructures/graph/GraphEdge.js +27 -0
  6. package/built/algorithms/dataStructures/graph/GraphEdge.js.map +1 -0
  7. package/built/algorithms/dataStructures/graph/GraphVertex.js +79 -0
  8. package/built/algorithms/dataStructures/graph/GraphVertex.js.map +1 -0
  9. package/built/algorithms/dataStructures/linked-list/LinkedList.js +134 -0
  10. package/built/algorithms/dataStructures/linked-list/LinkedList.js.map +1 -0
  11. package/built/algorithms/dataStructures/linked-list/LinkedListNode.js +16 -0
  12. package/built/algorithms/dataStructures/linked-list/LinkedListNode.js.map +1 -0
  13. package/built/algorithms/graph/depth-first-search/index.js +49 -0
  14. package/built/algorithms/graph/depth-first-search/index.js.map +1 -0
  15. package/built/algorithms/graph/detect-cycle/index.js +77 -0
  16. package/built/algorithms/graph/detect-cycle/index.js.map +1 -0
  17. package/built/algorithms/utils/Comparator.js +35 -0
  18. package/built/algorithms/utils/Comparator.js.map +1 -0
  19. package/built/analyzer/recordSecrets.js +17 -0
  20. package/built/analyzer/recordSecrets.js.map +1 -0
  21. package/built/analyzer/secretsRegexes.js +13 -0
  22. package/built/analyzer/secretsRegexes.js.map +1 -0
  23. package/built/analyzer/secretsRegexesData.json +51 -0
  24. package/built/check.js +47 -0
  25. package/built/check.js.map +1 -0
  26. package/built/checkInstance.js +69 -0
  27. package/built/checkInstance.js.map +1 -0
  28. package/built/cli/ci/command.js +183 -0
  29. package/built/cli/ci/command.js.map +1 -0
  30. package/built/cli/ci/options.js +3 -0
  31. package/built/cli/ci/options.js.map +1 -0
  32. package/built/cli/exitCode.js +11 -0
  33. package/built/cli/exitCode.js.map +1 -0
  34. package/built/cli/progressReporter.js +16 -0
  35. package/built/cli/progressReporter.js.map +1 -0
  36. package/built/cli/resolveAppId.js +83 -0
  37. package/built/cli/resolveAppId.js.map +1 -0
  38. package/built/cli/scan/command.js +174 -0
  39. package/built/cli/scan/command.js.map +1 -0
  40. package/built/cli/scan/options.js +3 -0
  41. package/built/cli/scan/options.js.map +1 -0
  42. package/built/cli/scan/scanner.js +154 -0
  43. package/built/cli/scan/scanner.js.map +1 -0
  44. package/built/cli/scan.js +103 -0
  45. package/built/cli/scan.js.map +1 -0
  46. package/built/cli/scanArgs.js +26 -0
  47. package/built/cli/scanArgs.js.map +1 -0
  48. package/built/cli/scanOptions.js +3 -0
  49. package/built/cli/scanOptions.js.map +1 -0
  50. package/built/cli/upload/command.js +95 -0
  51. package/built/cli/upload/command.js.map +1 -0
  52. package/built/cli/upload/options.js +3 -0
  53. package/built/cli/upload/options.js.map +1 -0
  54. package/built/cli/validateFile.js +66 -0
  55. package/built/cli/validateFile.js.map +1 -0
  56. package/built/cli.js +32 -0
  57. package/built/cli.js.map +1 -0
  58. package/built/configuration/configurationProvider.js +169 -0
  59. package/built/configuration/configurationProvider.js.map +1 -0
  60. package/built/configuration/schema/match-pattern-config.json +32 -0
  61. package/built/configuration/schema/options.json +193 -0
  62. package/built/configuration/types/checkConfig.js +3 -0
  63. package/built/configuration/types/checkConfig.js.map +1 -0
  64. package/built/configuration/types/configuration.js +3 -0
  65. package/built/configuration/types/configuration.js.map +1 -0
  66. package/built/configuration/types/matchEventConfig.js +3 -0
  67. package/built/configuration/types/matchEventConfig.js.map +1 -0
  68. package/built/configuration/types/matchPatternConfig.js +3 -0
  69. package/built/configuration/types/matchPatternConfig.js.map +1 -0
  70. package/built/database/index.js +259 -0
  71. package/built/database/index.js.map +1 -0
  72. package/built/database/visit.js +80 -0
  73. package/built/database/visit.js.map +1 -0
  74. package/built/errors.js +35 -0
  75. package/built/errors.js.map +1 -0
  76. package/built/findings.js +15 -0
  77. package/built/findings.js.map +1 -0
  78. package/built/integration/appland/fetchStatus.js +51 -0
  79. package/built/integration/appland/fetchStatus.js.map +1 -0
  80. package/built/integration/appland/upload.js +193 -0
  81. package/built/integration/appland/upload.js.map +1 -0
  82. package/built/integration/github/commitStatus.js +19 -0
  83. package/built/integration/github/commitStatus.js.map +1 -0
  84. package/built/integration/vars.js +68 -0
  85. package/built/integration/vars.js.map +1 -0
  86. package/built/openapi/index.js +100 -0
  87. package/built/openapi/index.js.map +1 -0
  88. package/built/openapi/method.js +120 -0
  89. package/built/openapi/method.js.map +1 -0
  90. package/built/openapi/model.js +49 -0
  91. package/built/openapi/model.js.map +1 -0
  92. package/built/openapi/path.js +36 -0
  93. package/built/openapi/path.js.map +1 -0
  94. package/built/openapi/provider.js +133 -0
  95. package/built/openapi/provider.js.map +1 -0
  96. package/built/openapi/response.js +59 -0
  97. package/built/openapi/response.js.map +1 -0
  98. package/built/openapi/rpcRequest.js +130 -0
  99. package/built/openapi/rpcRequest.js.map +1 -0
  100. package/built/openapi/schema.js +42 -0
  101. package/built/openapi/schema.js.map +1 -0
  102. package/built/openapi/securitySchemes.js +32 -0
  103. package/built/openapi/securitySchemes.js.map +1 -0
  104. package/built/openapi/statusCodes.js +68 -0
  105. package/built/openapi/statusCodes.js.map +1 -0
  106. package/built/openapi/util.js +91 -0
  107. package/built/openapi/util.js.map +1 -0
  108. package/built/report/appMapMetadata.js +2 -0
  109. package/built/report/appMapMetadata.js.map +1 -0
  110. package/built/report/findingSummary.js +3 -0
  111. package/built/report/findingSummary.js.map +1 -0
  112. package/built/report/findingsReport.js +37 -0
  113. package/built/report/findingsReport.js.map +1 -0
  114. package/built/report/scanResults.js +103 -0
  115. package/built/report/scanResults.js.map +1 -0
  116. package/built/report/scanSummary.js +3 -0
  117. package/built/report/scanSummary.js.map +1 -0
  118. package/built/report/summaryReport.js +70 -0
  119. package/built/report/summaryReport.js.map +1 -0
  120. package/built/ruleChecker.js +260 -0
  121. package/built/ruleChecker.js.map +1 -0
  122. package/built/rules/authzBeforeAuthn.js +82 -0
  123. package/built/rules/authzBeforeAuthn.js.map +1 -0
  124. package/built/rules/circularDependency.js +227 -0
  125. package/built/rules/circularDependency.js.map +1 -0
  126. package/built/rules/http500.js +18 -0
  127. package/built/rules/http500.js.map +1 -0
  128. package/built/rules/illegalPackageDependency.js +38 -0
  129. package/built/rules/illegalPackageDependency.js.map +1 -0
  130. package/built/rules/incompatibleHttpClientRequest.js +96 -0
  131. package/built/rules/incompatibleHttpClientRequest.js.map +1 -0
  132. package/built/rules/insecureCompare.js +59 -0
  133. package/built/rules/insecureCompare.js.map +1 -0
  134. package/built/rules/jobNotCancelled.js +72 -0
  135. package/built/rules/jobNotCancelled.js.map +1 -0
  136. package/built/rules/lib/hasParameterOrReceiver.js +11 -0
  137. package/built/rules/lib/hasParameterOrReceiver.js.map +1 -0
  138. package/built/rules/lib/matchEvent.js +32 -0
  139. package/built/rules/lib/matchEvent.js.map +1 -0
  140. package/built/rules/lib/matchPattern.js +28 -0
  141. package/built/rules/lib/matchPattern.js.map +1 -0
  142. package/built/rules/lib/rpcWithoutProtection.js +40 -0
  143. package/built/rules/lib/rpcWithoutProtection.js.map +1 -0
  144. package/built/rules/missingAuthentication.js +65 -0
  145. package/built/rules/missingAuthentication.js.map +1 -0
  146. package/built/rules/missingContentType.js +27 -0
  147. package/built/rules/missingContentType.js.map +1 -0
  148. package/built/rules/nPlusOneQuery.js +84 -0
  149. package/built/rules/nPlusOneQuery.js.map +1 -0
  150. package/built/rules/queryFromInvalidPackage.js +37 -0
  151. package/built/rules/queryFromInvalidPackage.js.map +1 -0
  152. package/built/rules/queryFromView.js +29 -0
  153. package/built/rules/queryFromView.js.map +1 -0
  154. package/built/rules/rpcWithoutCircuitBreaker.js +97 -0
  155. package/built/rules/rpcWithoutCircuitBreaker.js.map +1 -0
  156. package/built/rules/saveWithoutValidation.js +27 -0
  157. package/built/rules/saveWithoutValidation.js.map +1 -0
  158. package/built/rules/secretInLog.js +76 -0
  159. package/built/rules/secretInLog.js.map +1 -0
  160. package/built/rules/slowFunctionCall.js +37 -0
  161. package/built/rules/slowFunctionCall.js.map +1 -0
  162. package/built/rules/slowHttpServerRequest.js +24 -0
  163. package/built/rules/slowHttpServerRequest.js.map +1 -0
  164. package/built/rules/slowQuery.js +23 -0
  165. package/built/rules/slowQuery.js.map +1 -0
  166. package/built/rules/tooManyJoins.js +77 -0
  167. package/built/rules/tooManyJoins.js.map +1 -0
  168. package/built/rules/tooManyUpdates.js +143 -0
  169. package/built/rules/tooManyUpdates.js.map +1 -0
  170. package/built/rules/unbatchedMaterializedQuery.js +65 -0
  171. package/built/rules/unbatchedMaterializedQuery.js.map +1 -0
  172. package/built/rules/updateInGetRequest.js +66 -0
  173. package/built/rules/updateInGetRequest.js.map +1 -0
  174. package/built/rules/util.js +102 -0
  175. package/built/rules/util.js.map +1 -0
  176. package/built/sampleConfig/bike_index.yml +10 -0
  177. package/built/sampleConfig/default.yml +19 -0
  178. package/built/sampleConfig/railsSampleApp6thEd.yml +29 -0
  179. package/built/sampleConfig/solidus.yml +31 -0
  180. package/built/scope/commandScope.js +156 -0
  181. package/built/scope/commandScope.js.map +1 -0
  182. package/built/scope/httpClientRequestScope.js +105 -0
  183. package/built/scope/httpClientRequestScope.js.map +1 -0
  184. package/built/scope/httpServerRequestScope.js +105 -0
  185. package/built/scope/httpServerRequestScope.js.map +1 -0
  186. package/built/scope/rootScope.js +105 -0
  187. package/built/scope/rootScope.js.map +1 -0
  188. package/built/scope/scopeImpl.js +88 -0
  189. package/built/scope/scopeImpl.js.map +1 -0
  190. package/built/scope/scopeIterator.js +21 -0
  191. package/built/scope/scopeIterator.js.map +1 -0
  192. package/built/scope/sqlTransactionScope.js +175 -0
  193. package/built/scope/sqlTransactionScope.js.map +1 -0
  194. package/built/wellKnownLabels.js +9 -0
  195. package/built/wellKnownLabels.js.map +1 -0
  196. 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":"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"}
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,2FAAqE;AACrE,+FAAyE;AACzE,mFAA6D;AAC7D,kFAAmE;AACnE,6BAAkC;AAElC,+BAAiC;AAEjC,mDAAkD;AAIlD;IACE,eAAmB,QAAuB,EAAS,MAAiC;QAAjE,aAAQ,GAAR,QAAQ,CAAe;QAAS,WAAM,GAAN,MAAM,CAA2B;IAAG,CAAC;IAC1F,YAAC;AAAD,CAAC,AAFD,IAEC;AAED,SAAS,aAAa,CAAC,KAAY,EAAE,eAA+B;IAClE,IAAM,SAAS,GAAkB,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;IAC5D,OAAO,CACL,SAAS,KAAK,EAAE;QAChB,eAAe,CAAC,IAAI,CAAC,UAAC,MAAM,IAAK,OAAA,MAAM,CAAC,SAAS,CAAC,EAAjB,CAAiB,CAAC;QACnD,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ;QAC1B,IAAA,iBAAU,EAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CACtC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAW,EAAE,eAA+B;IAChE,IAAM,KAAK,GAAG,IAAI,eAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAM,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;IACrD,IAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,IAAM,YAAY,GAAG,IAAI,GAAG,EAAwB,CAAC;IAErD,IAAM,UAAU,GAAG,UAAC,GAAgB,EAAE,KAAY;QAChD,IAAI,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,GAAG,IAAI,qBAAW,CAAC,GAAG,CAAC,CAAC;YAC9B,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC1B,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;SAChC;aAAM;YACL,YAAY,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACpC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,IAAM,YAAY,GAAG,UACnB,KAAY,EACZ,WAAyB,EACzB,aAAiC;QAEjC,IAAI,SAAS,GAAuB,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;QAC/D,IAAI,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,EAAE;YACzC,SAAS,GAAG,IAAI,CAAC;SAClB;QAED,IAAI,SAAS,EAAE;YACb,IAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC5C,IAAI,aAAa,IAAI,aAAa,KAAK,SAAS,EAAE;gBAChD,IAAM,IAAI,GAAG,IAAI,mBAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAE,EAAE,MAAM,CAAC,CAAC;gBACjE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;oBAC7B,IAAI,IAAA,cAAO,GAAE,EAAE;wBACb,OAAO,CAAC,IAAI,CAAC,eAAa,aAAa,SAAI,WAAW,YAAO,SAAS,SAAI,KAAO,CAAC,CAAC;qBACpF;oBACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;oBACzB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBACrB;aACF;YACD,aAAa,GAAG,SAAS,CAAC;SAC3B;QACD,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,KAAK,IAAK,OAAA,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,EAAzC,CAAyC,CAAC,CAAC;IAC/E,CAAC,CAAC;IAEF,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,EAAE,EAAE;QACpC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;KAC7C;IACD,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAE/B,OAAO,IAAA,sBAAmB,EAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAC,KAAK;QAC1C,OAAO,IAAI,KAAK,CACd,KAAK,CAAC,GAAG,CAAC,UAAC,MAAM,IAAK,OAAA,MAAM,CAAC,MAAM,EAAE,EAAf,CAAe,CAAC,EACtC,YAAY,CACb,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,IAAM,cAAc,GAAG,UAAC,KAAY,EAAE,eAA+B;IACnE,IAAM,aAAa,GAAG,UACpB,KAAY,EACZ,WAAoB,EACpB,SAAwB,EACxB,cAAkB,EAClB,IAAkB;QADlB,+BAAA,EAAA,kBAAkB;QAClB,qBAAA,EAAA,SAAkB;QAElB,IAAI,WAAW,EAAE;YACf,IAAI,IAAA,cAAO,GAAE,EAAE;gBACb,OAAO,CAAC,IAAI,CAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAS,KAAO,CAAC,CAAC;aACzE;YACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAClB;aAAM;YACL,IAAI,IAAA,cAAO,GAAE,EAAE;gBACb,OAAO,CAAC,IAAI,CAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAa,KAAO,CAAC,CAAC;aAC7E;SACF;QAED,IAAI,cAAc,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3C,IAAI,IAAA,cAAO,GAAE,EAAE;gBACb,OAAO,CAAC,IAAI,CAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAW,IAAM,CAAC,CAAC;aAC1E;YACD,gCAAW,IAAI,UAAE;SAClB;QAED,IAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;QAE7C,IAAI,IAAA,cAAO,GAAE,EAAE;YACb,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,UAAU,CAAC,IAAI,EAArB,CAAqB,CAAC,CAAC,CAAC;SACpE;QAED,+CAA+C;QAC/C,IAAI,MAAM,GAAG,KAAK,CAAC,QAAQ;aACxB,MAAM,CACL,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS,IAAI,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,EAAjF,CAAiF,CAC7F;aACA,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,CAAC,EAA5D,CAA4D,CAAC;aAC5E,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnB,qDAAqD;QACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,MAAM,GAAG,KAAK,CAAC,QAAQ;iBACpB,MAAM,CACL,UAAC,KAAK;gBACJ,OAAA,KAAK,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS;oBACxC,CAAC,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC;oBACtC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,UAAU,CAAC,SAAS;YAF5D,CAE4D,CAC/D;iBACA,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,GAAG,CAAC,EAAE,IAAI,CAAC,EAA/D,CAA+D,CAAC;iBAC/E,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,EAAJ,CAAI,CAAC,CAAC;SAC3B;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACrB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;SAClB;aAAM;YACL,IAAI,WAAW,EAAE;gBACf,IAAI,IAAA,cAAO,GAAE,EAAE;oBACb,OAAO,CAAC,IAAI,CACP,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;yBACtB,IAAI,CAAC,EAAE,CAAC;yBACR,IAAI,CAAC,IAAI,CAAC,QAAK,CACnB,CAAC;iBACH;gBACD,IAAI,CAAC,GAAG,EAAE,CAAC;aACZ;iBAAM;gBACL,IAAI,IAAA,cAAO,GAAE,EAAE;oBACb,OAAO,CAAC,IAAI,CACP,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;yBACtB,IAAI,CAAC,EAAE,CAAC;yBACR,IAAI,CAAC,IAAI,CAAC,eAAY,CAC1B,CAAC;iBACH;aACF;YACD,OAAO,IAAI,CAAC;SACb;IACH,CAAC,CAAC;IAEF,sFAAsF;IACtF,iCAAiC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC9C,IAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtC,IAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;QACnD,IAAM,SAAS,GAAG,EAAE,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9C,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SAChE;QACD,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5B,IAAI,IAAA,cAAO,GAAE,EAAE;YACb,OAAO,CAAC,IAAI,CAAC,wCAAsC,SAAW,CAAC,CAAC;SACjE;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3C,IAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAClC,IAAM,IAAI,GAAG,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YACxD,IAAI,IAAI,EAAE;gBACR,OAAO,IAAI,CAAC;aACb;SACF;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;IAAA;QACS,oBAAe,GAAyB,EAAE,CAAC;QAC3C,UAAK,GAAG,CAAC,CAAC;IACnB,CAAC;IAAD,cAAC;AAAD,CAAC,AAHD,IAGC;AAED,SAAS,KAAK,CAAC,OAAgB;IAC7B,IAAM,eAAe,GAAG,IAAA,2BAAY,EAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAE9D,SAAS,OAAO,CAAC,KAAY;QAC3B,OAAO,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC;aACxC,MAAM,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,EAA1C,CAA0C,CAAC;aAC7D,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,cAAc,CAAC,KAAK,EAAE,eAAe,CAAC,EAAtC,CAAsC,CAAC;aACtD,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,EAAJ,CAAI,CAAC;aACtB,GAAG,CAAC,UAAC,IAAI;YACR,OAAO;gBACL,KAAK,EAAE,IAAK,CAAC,CAAC,CAAC;gBACf,OAAO,EAAE;oBACP,mCAAmC;oBACnC,IAAK,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,UAAU,CAAC,SAAS,EAA1B,CAA0B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;iBAC9D,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,aAAa,EAAE,IAAK;aACN,CAAC;QACnB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,OAAO;QACL,OAAO,SAAA;KACR,CAAC;AACJ,CAAC;AAED,kBAAe;IACb,EAAE,EAAE,qBAAqB;IACzB,KAAK,EAAE,6BAA6B;IACpC,KAAK,EAAE,SAAS;IAChB,OAAO,SAAA;IACP,cAAc,EAAE,KAAK;IACrB,KAAK,OAAA;CACE,CAAC"}
@@ -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