@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 @@
|
|
|
1
|
+
{"version":3,"file":"illegalPackageDependency.js","sourceRoot":"","sources":["../../src/rules/illegalPackageDependency.ts"],"names":[],"mappings":";;AAIA,mDAA+D;AAE/D;IAAA;QACS,mBAAc,GAAyB,EAAE,CAAC;QAC1C,kBAAa,GAAuB,EAAwB,CAAC;IACtE,CAAC;IAAD,cAAC;AAAD,CAAC,AAHD,IAGC;AAED,SAAS,KAAK,CAAC,OAAgB;IAC7B,IAAM,cAAc,GAAG,IAAA,2BAAY,EAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;IAClE,IAAM,aAAa,GAAG,IAAA,0BAAW,EAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAEzD,SAAS,KAAK,CAAC,CAAQ;QACrB,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAO,CAAC,UAAU,CAAC,SAAS,IAAI,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACjG,CAAC;IAED,SAAS,OAAO,CAAC,CAAQ;QACvB,IAAM,eAAe,GAAG,OAAO,CAAC,cAAc;aAC3C,GAAG,CAAC,UAAC,MAAM,IAAK,OAAA,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,EAA9C,CAA8C,CAAC;aAC/D,GAAG,CAAC,MAAM,CAAC;aACX,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,IAAM,aAAa,GAAG,CAAC,CAAC,MAAO,CAAC,UAAU,CAAC,SAAS,CAAC;QACrD,IACE,CAAC,CACC,CAAC,CAAC,UAAU,CAAC,SAAS,KAAK,aAAa;YACxC,cAAc,CAAC,IAAI,CAAC,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,aAAa,CAAC,EAAtB,CAAsB,CAAC,CACzD,EACD;YACA,OAAO,iBAAe,CAAC,CAAC,UAAU,CAAC,EAAE,0BAAqB,aAAa,mBAAc,eAAiB,CAAC;SACxG;IACH,CAAC;IAED,OAAO,EAAE,KAAK,OAAA,EAAE,OAAO,SAAA,EAAE,CAAC;AAC5B,CAAC;AAED,kBAAe;IACb,EAAE,EAAE,4BAA4B;IAChC,KAAK,EAAE,kDAAkD;IACzD,KAAK,EAAE,SAAsB;IAC7B,cAAc,EAAE,IAAI;IACpB,OAAO,SAAA;IACP,KAAK,OAAA;CACE,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
var openapi_1 = require("../openapi");
|
|
40
|
+
var Options = /** @class */ (function () {
|
|
41
|
+
function Options() {
|
|
42
|
+
this.schemata = {};
|
|
43
|
+
}
|
|
44
|
+
return Options;
|
|
45
|
+
}());
|
|
46
|
+
var changeMessage = function (change) {
|
|
47
|
+
return "HTTP client request is incompatible with OpenAPI schema. Change details: " + change.action + " " + change.sourceSpecEntityDetails
|
|
48
|
+
.concat(change.destinationSpecEntityDetails)
|
|
49
|
+
.map(function (detail) { return detail.location; })
|
|
50
|
+
.join(', ');
|
|
51
|
+
};
|
|
52
|
+
function build(options) {
|
|
53
|
+
function matcher(event) {
|
|
54
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
55
|
+
var clientFragment, serverSchema, clientSchema, changes;
|
|
56
|
+
return __generator(this, function (_a) {
|
|
57
|
+
switch (_a.label) {
|
|
58
|
+
case 0:
|
|
59
|
+
clientFragment = (0, openapi_1.forClientRequest)(event);
|
|
60
|
+
return [4 /*yield*/, (0, openapi_1.forURL)(event.httpClientRequest.url, options.schemata)];
|
|
61
|
+
case 1:
|
|
62
|
+
serverSchema = _a.sent();
|
|
63
|
+
clientSchema = {
|
|
64
|
+
openapi: '3.0.0',
|
|
65
|
+
info: {
|
|
66
|
+
title: 'Schema derived from client request',
|
|
67
|
+
version: serverSchema.info.version, // Indicate that it *should* be compatible.
|
|
68
|
+
},
|
|
69
|
+
paths: clientFragment.paths,
|
|
70
|
+
components: { securitySchemes: clientFragment.securitySchemes },
|
|
71
|
+
};
|
|
72
|
+
return [4 /*yield*/, (0, openapi_1.breakingChanges)(clientSchema, serverSchema)];
|
|
73
|
+
case 2:
|
|
74
|
+
changes = _a.sent();
|
|
75
|
+
return [2 /*return*/, changes.map(function (change) { return ({
|
|
76
|
+
level: 'error',
|
|
77
|
+
message: changeMessage(change),
|
|
78
|
+
}); })];
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
matcher: matcher,
|
|
85
|
+
where: function (e) { return !!e.httpClientRequest && !!e.httpClientRequest.url; },
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
exports.default = {
|
|
89
|
+
id: 'incompatible-http-client-request',
|
|
90
|
+
title: 'Incompatible HTTP client request',
|
|
91
|
+
scope: 'http_client_request',
|
|
92
|
+
enumerateScope: false,
|
|
93
|
+
Options: Options,
|
|
94
|
+
build: build,
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=incompatibleHttpClientRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incompatibleHttpClientRequest.js","sourceRoot":"","sources":["../../src/rules/incompatibleHttpClientRequest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,sCAAuE;AAMvE;IAAA;QACS,aAAQ,GAA2B,EAAE,CAAC;IAC/C,CAAC;IAAD,cAAC;AAAD,CAAC,AAFD,IAEC;AAED,IAAM,aAAa,GAAG,UAAC,MAA0C;IAC/D,OAAO,8EACL,MAAM,CAAC,MAAM,SACX,MAAM,CAAC,uBAAuB;SAC/B,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC;SAC3C,GAAG,CAAC,UAAC,MAAM,IAAK,OAAA,MAAM,CAAC,QAAQ,EAAf,CAAe,CAAC;SAChC,IAAI,CAAC,IAAI,CAAG,CAAC;AAClB,CAAC,CAAC;AAEF,SAAS,KAAK,CAAC,OAAgB;IAC7B,SAAe,OAAO,CAAC,KAAY;;;;;;wBAC3B,cAAc,GAAG,IAAA,0BAAgB,EAAC,KAAK,CAAC,CAAC;wBAC1B,qBAAM,IAAA,gBAAM,EAAC,KAAK,CAAC,iBAAkB,CAAC,GAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAA;;wBAA5E,YAAY,GAAG,SAA6D;wBAC5E,YAAY,GAAG;4BACnB,OAAO,EAAE,OAAO;4BAChB,IAAI,EAAE;gCACJ,KAAK,EAAE,oCAAoC;gCAC3C,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,2CAA2C;6BAChF;4BACD,KAAK,EAAE,cAAe,CAAC,KAAK;4BAC5B,UAAU,EAAE,EAAE,eAAe,EAAE,cAAe,CAAC,eAAe,EAAE;yBAC3C,CAAC;wBACR,qBAAM,IAAA,yBAAe,EAAC,YAAY,EAAE,YAAY,CAAC,EAAA;;wBAA3D,OAAO,GAAG,SAAiD;wBACjE,sBAAO,OAAO,CAAC,GAAG,CAAC,UAAC,MAA0C,IAAK,OAAA,CAAC;gCAClE,KAAK,EAAE,OAAO;gCACd,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC;6BAC/B,CAAC,EAHiE,CAGjE,CAAC,EAAC;;;;KACL;IAED,OAAO;QACL,OAAO,SAAA;QACP,KAAK,EAAE,UAAC,CAAQ,IAAK,OAAA,CAAC,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAkB,CAAC,GAAG,EAAnD,CAAmD;KACzE,CAAC;AACJ,CAAC;AAED,kBAAe;IACb,EAAE,EAAE,kCAAkC;IACtC,KAAK,EAAE,kCAAkC;IACzC,KAAK,EAAE,qBAAqB;IAC5B,cAAc,EAAE,KAAK;IACrB,OAAO,SAAA;IACP,KAAK,OAAA;CACE,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var recordSecrets_1 = __importDefault(require("../analyzer/recordSecrets"));
|
|
7
|
+
var secretsRegexes_1 = __importDefault(require("../analyzer/secretsRegexes"));
|
|
8
|
+
var BCRYPT_REGEXP = /^[$]2[abxy]?[$](?:0[4-9]|[12][0-9]|3[01])[$][./0-9a-zA-Z]{53}$/;
|
|
9
|
+
var secrets = new Set();
|
|
10
|
+
function stringEquals(e) {
|
|
11
|
+
if (!e.parameters || !e.receiver || e.parameters.length !== 1) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
var args = [e.receiver.value, e.parameters[0].value];
|
|
15
|
+
function isBcrypt(str) {
|
|
16
|
+
return BCRYPT_REGEXP.test(str);
|
|
17
|
+
}
|
|
18
|
+
function isSecret(str) {
|
|
19
|
+
if (secrets.has(str)) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
return !!Object.keys(secretsRegexes_1.default).find(function (key) { return !!secretsRegexes_1.default[key].find(function (re) { return re.test(str); }); });
|
|
23
|
+
}
|
|
24
|
+
// BCrypted strings are safe to compare using equals()
|
|
25
|
+
if (args.every(isBcrypt)) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (!args.every(isSecret)) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
function build() {
|
|
34
|
+
function matcher(e) {
|
|
35
|
+
if (e.codeObject.labels.has(Secret)) {
|
|
36
|
+
(0, recordSecrets_1.default)(secrets, e);
|
|
37
|
+
}
|
|
38
|
+
if (e.parameters && e.codeObject.labels.has(StringEquals)) {
|
|
39
|
+
return stringEquals(e);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function where(e) {
|
|
43
|
+
return (e.isFunction && (e.codeObject.labels.has(StringEquals) || e.codeObject.labels.has(Secret)));
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
matcher: matcher,
|
|
47
|
+
where: where,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
var Secret = 'secret';
|
|
51
|
+
var StringEquals = 'string.equals';
|
|
52
|
+
exports.default = {
|
|
53
|
+
id: 'insecure-compare',
|
|
54
|
+
title: 'Insecure comparison of secrets',
|
|
55
|
+
labels: [Secret, StringEquals],
|
|
56
|
+
enumerateScope: true,
|
|
57
|
+
build: build,
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=insecureCompare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insecureCompare.js","sourceRoot":"","sources":["../../src/rules/insecureCompare.ts"],"names":[],"mappings":";;;;;AACA,4EAAsD;AACtD,8EAAwD;AAGxD,IAAM,aAAa,GAAG,gEAAgE,CAAC;AAEvF,IAAM,OAAO,GAAgB,IAAI,GAAG,EAAE,CAAC;AAEvC,SAAS,YAAY,CAAC,CAAQ;IAC5B,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,UAAW,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9D,OAAO;KACR;IAED,IAAM,IAAI,GAAG,CAAC,CAAC,CAAC,QAAS,CAAC,KAAK,EAAE,CAAC,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAEzD,SAAS,QAAQ,CAAC,GAAW;QAC3B,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,SAAS,QAAQ,CAAC,GAAW;QAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACpB,OAAO,IAAI,CAAC;SACb;QACD,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAc,CAAC,CAAC,IAAI,CACvC,UAAC,GAAG,IAAc,OAAA,CAAC,CAAC,wBAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAC,EAAU,IAAc,OAAA,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAZ,CAAY,CAAC,EAAjE,CAAiE,CACpF,CAAC;IACJ,CAAC;IAED,sDAAsD;IACtD,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;QACxB,OAAO;KACR;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;QACzB,OAAO;KACR;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,KAAK;IACZ,SAAS,OAAO,CAAC,CAAQ;QACvB,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACnC,IAAA,uBAAa,EAAC,OAAO,EAAE,CAAC,CAAC,CAAC;SAC3B;QACD,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YACzD,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;SACxB;IACH,CAAC;IAED,SAAS,KAAK,CAAC,CAAQ;QACrB,OAAO,CACL,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAC3F,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,SAAA;QACP,KAAK,OAAA;KACN,CAAC;AACJ,CAAC;AAED,IAAM,MAAM,GAAG,QAAQ,CAAC;AACxB,IAAM,YAAY,GAAG,eAAe,CAAC;AAErC,kBAAe;IACb,EAAE,EAAE,kBAAkB;IACtB,KAAK,EAAE,gCAAgC;IACvC,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,cAAc,EAAE,IAAI;IACpB,KAAK,OAAA;CACE,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
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 wellKnownLabels_1 = __importDefault(require("../wellKnownLabels"));
|
|
32
|
+
var sqlTransactionScope_1 = require("../scope/sqlTransactionScope");
|
|
33
|
+
function build() {
|
|
34
|
+
function matcher(event) {
|
|
35
|
+
if (!(0, sqlTransactionScope_1.hasTransactionDetails)(event))
|
|
36
|
+
throw new Error("expected event " + event.id + " to be a transaction");
|
|
37
|
+
if (event.transaction.status === 'commit')
|
|
38
|
+
return;
|
|
39
|
+
var creationEvents = event.transaction.events.filter(function (_a) {
|
|
40
|
+
var labels = _a.labels;
|
|
41
|
+
return labels.has(wellKnownLabels_1.default.JobCreate);
|
|
42
|
+
});
|
|
43
|
+
var cancellationEvents = event.transaction.events.filter(function (_a) {
|
|
44
|
+
var labels = _a.labels;
|
|
45
|
+
return labels.has(wellKnownLabels_1.default.JobCancel);
|
|
46
|
+
});
|
|
47
|
+
var missing = creationEvents.length - cancellationEvents.length;
|
|
48
|
+
if (missing === 0)
|
|
49
|
+
return;
|
|
50
|
+
var result = {
|
|
51
|
+
level: 'error',
|
|
52
|
+
event: event,
|
|
53
|
+
message: missing + " jobs created but not cancelled in this rolled back transaction",
|
|
54
|
+
// if there's a mismatch and there are cancellations we can't tell
|
|
55
|
+
// for sure which creations they match, so return everything
|
|
56
|
+
relatedEvents: __spreadArray(__spreadArray([], __read(creationEvents), false), __read(cancellationEvents), false),
|
|
57
|
+
};
|
|
58
|
+
return [result];
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
matcher: matcher,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
exports.default = {
|
|
65
|
+
id: 'job-not-cancelled',
|
|
66
|
+
title: 'Job created in a rolled back transaction and not cancelled',
|
|
67
|
+
scope: 'transaction',
|
|
68
|
+
enumerateScope: false,
|
|
69
|
+
labels: [wellKnownLabels_1.default.JobCreate, wellKnownLabels_1.default.JobCancel],
|
|
70
|
+
build: build,
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=jobNotCancelled.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobNotCancelled.js","sourceRoot":"","sources":["../../src/rules/jobNotCancelled.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,uEAAwC;AACxC,oEAAqE;AAErE,SAAS,KAAK;IACZ,SAAS,OAAO,CAAC,KAAY;QAC3B,IAAI,CAAC,IAAA,2CAAqB,EAAC,KAAK,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,oBAAkB,KAAK,CAAC,EAAE,yBAAsB,CAAC,CAAC;QACpE,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO;QAElD,IAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,UAAC,EAAU;gBAAR,MAAM,YAAA;YAC9D,OAAA,MAAM,CAAC,GAAG,CAAC,yBAAM,CAAC,SAAS,CAAC;QAA5B,CAA4B,CAC7B,CAAC;QACF,IAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,UAAC,EAAU;gBAAR,MAAM,YAAA;YAClE,OAAA,MAAM,CAAC,GAAG,CAAC,yBAAM,CAAC,SAAS,CAAC;QAA5B,CAA4B,CAC7B,CAAC;QACF,IAAM,OAAO,GAAG,cAAc,CAAC,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC;QAClE,IAAI,OAAO,KAAK,CAAC;YAAE,OAAO;QAE1B,IAAM,MAAM,GAAgB;YAC1B,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,KAAK;YACZ,OAAO,EAAK,OAAO,oEAAiE;YACpF,kEAAkE;YAClE,4DAA4D;YAC5D,aAAa,yCAAM,cAAc,kBAAK,kBAAkB,SAAC;SAC1D,CAAC;QAEF,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,OAAO;QACL,OAAO,SAAA;KACR,CAAC;AACJ,CAAC;AAED,kBAAe;IACb,EAAE,EAAE,mBAAmB;IACvB,KAAK,EAAE,4DAA4D;IACnE,KAAK,EAAE,aAAa;IACpB,cAAc,EAAE,KAAK;IACrB,MAAM,EAAE,CAAC,yBAAM,CAAC,SAAS,EAAE,yBAAM,CAAC,SAAS,CAAC;IAC5C,KAAK,OAAA;CACE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
// Builds a function that returns true if the provided event argument has the specified
|
|
4
|
+
// objectId as the receiver or as a parameter value.
|
|
5
|
+
exports.default = (function (objectId) {
|
|
6
|
+
return function (event) {
|
|
7
|
+
return (!!event.receiver && event.receiver.object_id === objectId) ||
|
|
8
|
+
(!!event.parameters && event.parameters.some(function (param) { return param.object_id === objectId; }));
|
|
9
|
+
};
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=hasParameterOrReceiver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hasParameterOrReceiver.js","sourceRoot":"","sources":["../../../src/rules/lib/hasParameterOrReceiver.ts"],"names":[],"mappings":";;AAEA,uFAAuF;AACvF,oDAAoD;AACpD,mBAAe,UAAC,QAAgB;IAC9B,OAAO,UAAC,KAAY;QAClB,OAAA,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAS,CAAC,SAAS,KAAK,QAAQ,CAAC;YAC5D,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAW,CAAC,IAAI,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,SAAS,KAAK,QAAQ,EAA5B,CAA4B,CAAC,CAAC;IADvF,CACuF,CAAC;AAC5F,CAAC,EAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildFilters = exports.buildFilter = void 0;
|
|
4
|
+
var database_1 = require("../../database");
|
|
5
|
+
var matchPattern_1 = require("./matchPattern");
|
|
6
|
+
function buildFilter(pattern) {
|
|
7
|
+
var testFn = (0, matchPattern_1.buildFilter)(pattern.test);
|
|
8
|
+
var propertyFn = {
|
|
9
|
+
id: function (e) { return e.codeObject.id; },
|
|
10
|
+
type: function (e) { return e.codeObject.type; },
|
|
11
|
+
fqid: function (e) { return e.codeObject.fqid; },
|
|
12
|
+
query: function (e) { return (e.sql ? (0, database_1.sqlNormalized)(e.sql) : null); },
|
|
13
|
+
route: function (e) { return e.route; },
|
|
14
|
+
};
|
|
15
|
+
return function (event) {
|
|
16
|
+
var fn = propertyFn[pattern.property];
|
|
17
|
+
if (!fn) {
|
|
18
|
+
throw new Error("Unrecognized Event filter property: " + pattern.property);
|
|
19
|
+
}
|
|
20
|
+
var value = fn(event);
|
|
21
|
+
if (!value) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
return testFn(value);
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
exports.buildFilter = buildFilter;
|
|
28
|
+
function buildFilters(patterns) {
|
|
29
|
+
return patterns.map(buildFilter);
|
|
30
|
+
}
|
|
31
|
+
exports.buildFilters = buildFilters;
|
|
32
|
+
//# sourceMappingURL=matchEvent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchEvent.js","sourceRoot":"","sources":["../../../src/rules/lib/matchEvent.ts"],"names":[],"mappings":";;;AACA,2CAA+C;AAG/C,+CAAkE;AAElE,SAAgB,WAAW,CAAC,OAAyB;IACnD,IAAM,MAAM,GAAG,IAAA,0BAAiB,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C,IAAM,UAAU,GAAG;QACjB,EAAE,EAAE,UAAC,CAAQ,IAAK,OAAA,CAAC,CAAC,UAAU,CAAC,EAAE,EAAf,CAAe;QACjC,IAAI,EAAE,UAAC,CAAQ,IAAK,OAAA,CAAC,CAAC,UAAU,CAAC,IAAI,EAAjB,CAAiB;QACrC,IAAI,EAAE,UAAC,CAAQ,IAAK,OAAA,CAAC,CAAC,UAAU,CAAC,IAAI,EAAjB,CAAiB;QACrC,KAAK,EAAE,UAAC,CAAQ,IAAK,OAAA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAA,wBAAa,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAArC,CAAqC;QAC1D,KAAK,EAAE,UAAC,CAAQ,IAAK,OAAA,CAAC,CAAC,KAAK,EAAP,CAAO;KAC7B,CAAC;IAEF,OAAO,UAAC,KAAY;QAClB,IAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,EAAE,EAAE;YACP,MAAM,IAAI,KAAK,CAAC,yCAAuC,OAAO,CAAC,QAAU,CAAC,CAAC;SAC5E;QACD,IAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,KAAK,CAAC;SACd;QAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC;AAvBD,kCAuBC;AAED,SAAgB,YAAY,CAAC,QAA4B;IACvD,OAAO,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACnC,CAAC;AAFD,oCAEC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildFilters = exports.buildFilter = void 0;
|
|
4
|
+
function buildFilter(pattern) {
|
|
5
|
+
function respectIgnoreCaseFlag(value) {
|
|
6
|
+
return pattern.ignoreCase ? value.toLocaleLowerCase() : value;
|
|
7
|
+
}
|
|
8
|
+
if (pattern.equal) {
|
|
9
|
+
var testStr_1 = respectIgnoreCaseFlag(pattern.equal);
|
|
10
|
+
return function (value) { return respectIgnoreCaseFlag(value) === testStr_1; };
|
|
11
|
+
}
|
|
12
|
+
else if (pattern.include) {
|
|
13
|
+
var testStr_2 = respectIgnoreCaseFlag(pattern.include);
|
|
14
|
+
return function (value) { return respectIgnoreCaseFlag(value).includes(testStr_2); };
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
var regexp_1 = pattern.match instanceof RegExp
|
|
18
|
+
? pattern.match
|
|
19
|
+
: new RegExp(pattern.match, pattern.ignoreCase ? 'i' : undefined);
|
|
20
|
+
return function (value) { return regexp_1.test(value); };
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.buildFilter = buildFilter;
|
|
24
|
+
function buildFilters(patterns) {
|
|
25
|
+
return patterns.map(buildFilter);
|
|
26
|
+
}
|
|
27
|
+
exports.buildFilters = buildFilters;
|
|
28
|
+
//# sourceMappingURL=matchPattern.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchPattern.js","sourceRoot":"","sources":["../../../src/rules/lib/matchPattern.ts"],"names":[],"mappings":";;;AAGA,SAAgB,WAAW,CAAC,OAA2B;IACrD,SAAS,qBAAqB,CAAC,KAAa;QAC1C,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAChE,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,EAAE;QACjB,IAAM,SAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC;QACtD,OAAO,UAAC,KAAa,IAAc,OAAA,qBAAqB,CAAC,KAAK,CAAC,KAAK,SAAO,EAAxC,CAAwC,CAAC;KAC7E;SAAM,IAAI,OAAO,CAAC,OAAO,EAAE;QAC1B,IAAM,SAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAQ,CAAC,CAAC;QACxD,OAAO,UAAC,KAAa,IAAc,OAAA,qBAAqB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,SAAO,CAAC,EAA9C,CAA8C,CAAC;KACnF;SAAM;QACL,IAAM,QAAM,GACV,OAAO,CAAC,KAAK,YAAY,MAAM;YAC7B,CAAC,CAAC,OAAO,CAAC,KAAK;YACf,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAA0B,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3F,OAAO,UAAC,KAAa,IAAc,OAAA,QAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAlB,CAAkB,CAAC;KACvD;AACH,CAAC;AAlBD,kCAkBC;AAED,SAAgB,YAAY,CAAC,QAA8B;IACzD,OAAO,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACnC,CAAC;AAFD,oCAEC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
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
|
+
exports.rpcWithoutProtection = void 0;
|
|
15
|
+
function rpcWithoutProtection(candidateGenerator, options) {
|
|
16
|
+
return {
|
|
17
|
+
matcher: function (httpClientRequest) {
|
|
18
|
+
var e_1, _a;
|
|
19
|
+
try {
|
|
20
|
+
for (var _b = __values(candidateGenerator(httpClientRequest)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
21
|
+
var candidate = _c.value;
|
|
22
|
+
if (candidate.codeObject.labels.has(options.expectedLabel)) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
28
|
+
finally {
|
|
29
|
+
try {
|
|
30
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
31
|
+
}
|
|
32
|
+
finally { if (e_1) throw e_1.error; }
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
35
|
+
},
|
|
36
|
+
where: function (e) { return !!e.httpClientRequest; },
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
exports.rpcWithoutProtection = rpcWithoutProtection;
|
|
40
|
+
//# sourceMappingURL=rpcWithoutProtection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpcWithoutProtection.js","sourceRoot":"","sources":["../../../src/rules/lib/rpcWithoutProtection.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAOA,SAAgB,oBAAoB,CAClC,kBAAkE,EAClE,OAAoC;IAEpC,OAAO;QACL,OAAO,EAAE,UAAC,iBAAwB;;;gBAChC,KAAwB,IAAA,KAAA,SAAA,kBAAkB,CAAC,iBAAiB,CAAC,CAAA,gBAAA,4BAAE;oBAA1D,IAAM,SAAS,WAAA;oBAClB,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;wBAC1D,OAAO,KAAK,CAAC;qBACd;iBACF;;;;;;;;;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,EAAE,UAAC,CAAQ,IAAK,OAAA,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAArB,CAAqB;KAC3C,CAAC;AACJ,CAAC;AAfD,oDAeC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var models_1 = require("@appland/models");
|
|
4
|
+
var rpcRequest_1 = require("../openapi/rpcRequest");
|
|
5
|
+
var util_1 = require("./util");
|
|
6
|
+
var matchPattern_1 = require("./lib/matchPattern");
|
|
7
|
+
function isPublic(event) {
|
|
8
|
+
return event.labels.has(Public);
|
|
9
|
+
}
|
|
10
|
+
var authenticatedBy = function (iterator) {
|
|
11
|
+
var i = iterator.next();
|
|
12
|
+
while (!i.done) {
|
|
13
|
+
if (isPublic(i.value.event) || (0, util_1.providesAuthentication)(i.value.event, SecurityAuthentication)) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
i = iterator.next();
|
|
17
|
+
}
|
|
18
|
+
return false;
|
|
19
|
+
};
|
|
20
|
+
var Options = /** @class */ (function () {
|
|
21
|
+
function Options() {
|
|
22
|
+
this.includeContentTypes = [];
|
|
23
|
+
this.excludeContentTypes = [];
|
|
24
|
+
}
|
|
25
|
+
return Options;
|
|
26
|
+
}());
|
|
27
|
+
function build(options) {
|
|
28
|
+
if (options === void 0) { options = new Options(); }
|
|
29
|
+
var includeContentTypes = (0, matchPattern_1.buildFilters)(options.includeContentTypes);
|
|
30
|
+
var excludeContentTypes = (0, matchPattern_1.buildFilters)(options.excludeContentTypes);
|
|
31
|
+
function testContentType(contentType) {
|
|
32
|
+
function test(filter) {
|
|
33
|
+
return filter(contentType);
|
|
34
|
+
}
|
|
35
|
+
return ((includeContentTypes.length === 0 || includeContentTypes.some(test)) &&
|
|
36
|
+
!excludeContentTypes.some(test));
|
|
37
|
+
}
|
|
38
|
+
function matcher(event) {
|
|
39
|
+
return !authenticatedBy(new models_1.EventNavigator(event).descendants());
|
|
40
|
+
}
|
|
41
|
+
function where(e) {
|
|
42
|
+
return (e.route !== undefined &&
|
|
43
|
+
e.httpServerResponse !== undefined &&
|
|
44
|
+
e.httpServerResponse.status < 300 &&
|
|
45
|
+
!!(0, rpcRequest_1.rpcRequestForEvent)(e) &&
|
|
46
|
+
!!(0, rpcRequest_1.rpcRequestForEvent)(e).contentType &&
|
|
47
|
+
testContentType((0, rpcRequest_1.rpcRequestForEvent)(e).contentType));
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
where: where,
|
|
51
|
+
matcher: matcher,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
var Public = 'public';
|
|
55
|
+
var SecurityAuthentication = 'security.authentication';
|
|
56
|
+
exports.default = {
|
|
57
|
+
id: 'missing-authentication',
|
|
58
|
+
title: 'Unauthenticated HTTP server request',
|
|
59
|
+
scope: 'http_server_request',
|
|
60
|
+
labels: [Public, SecurityAuthentication],
|
|
61
|
+
enumerateScope: false,
|
|
62
|
+
Options: Options,
|
|
63
|
+
build: build,
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=missingAuthentication.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"missingAuthentication.js","sourceRoot":"","sources":["../../src/rules/missingAuthentication.ts"],"names":[],"mappings":";;AAAA,0CAAwD;AACxD,oDAA2D;AAG3D,+BAAgD;AAEhD,mDAAkD;AAElD,SAAS,QAAQ,CAAC,KAAY;IAC5B,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,IAAM,eAAe,GAAG,UAAC,QAAkC;IACzD,IAAI,CAAC,GAAmC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxD,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;QACd,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAA,6BAAsB,EAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,sBAAsB,CAAC,EAAE;YAC5F,OAAO,IAAI,CAAC;SACb;QACD,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;KACrB;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;IAAA;QACS,wBAAmB,GAAyB,EAAE,CAAC;QAC/C,wBAAmB,GAAyB,EAAE,CAAC;IACxD,CAAC;IAAD,cAAC;AAAD,CAAC,AAHD,IAGC;AAED,SAAS,KAAK,CAAC,OAAgC;IAAhC,wBAAA,EAAA,cAAuB,OAAO,EAAE;IAC7C,IAAM,mBAAmB,GAAG,IAAA,2BAAY,EAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACtE,IAAM,mBAAmB,GAAG,IAAA,2BAAY,EAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEtE,SAAS,eAAe,CAAC,WAAmB;QAC1C,SAAS,IAAI,CAAC,MAAoB;YAChC,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,CACL,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAChC,CAAC;IACJ,CAAC;IAED,SAAS,OAAO,CAAC,KAAY;QAC3B,OAAO,CAAC,eAAe,CAAC,IAAI,uBAAc,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,SAAS,KAAK,CAAC,CAAQ;QACrB,OAAO,CACL,CAAC,CAAC,KAAK,KAAK,SAAS;YACrB,CAAC,CAAC,kBAAkB,KAAK,SAAS;YAClC,CAAC,CAAC,kBAAkB,CAAC,MAAM,GAAG,GAAG;YACjC,CAAC,CAAC,IAAA,+BAAkB,EAAC,CAAC,CAAC;YACvB,CAAC,CAAC,IAAA,+BAAkB,EAAC,CAAC,CAAE,CAAC,WAAW;YACpC,eAAe,CAAC,IAAA,+BAAkB,EAAC,CAAC,CAAE,CAAC,WAAW,CAAC,CACpD,CAAC;IACJ,CAAC;IACD,OAAO;QACL,KAAK,OAAA;QACL,OAAO,SAAA;KACR,CAAC;AACJ,CAAC;AACD,IAAM,MAAM,GAAG,QAAQ,CAAC;AACxB,IAAM,sBAAsB,GAAG,yBAAyB,CAAC;AAEzD,kBAAe;IACb,EAAE,EAAE,wBAAwB;IAC5B,KAAK,EAAE,qCAAqC;IAC5C,KAAK,EAAE,qBAAqB;IAC5B,MAAM,EAAE,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,cAAc,EAAE,KAAK;IACrB,OAAO,SAAA;IACP,KAAK,OAAA;CACE,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var rpcRequest_1 = require("../openapi/rpcRequest");
|
|
4
|
+
var isRedirect = function (status) { return [301, 302, 303, 307, 308].includes(status); };
|
|
5
|
+
var hasContent = function (status) { return status !== 204; };
|
|
6
|
+
function build() {
|
|
7
|
+
function matcher(e) {
|
|
8
|
+
return (0, rpcRequest_1.rpcRequestForEvent)(e).contentType === undefined;
|
|
9
|
+
}
|
|
10
|
+
function where(e) {
|
|
11
|
+
return (!!e.httpServerResponse &&
|
|
12
|
+
!isRedirect(e.httpServerResponse.status) &&
|
|
13
|
+
hasContent(e.httpServerResponse.status));
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
matcher: matcher,
|
|
17
|
+
where: where,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
exports.default = {
|
|
21
|
+
id: 'missing-content-type',
|
|
22
|
+
title: 'HTTP server request without a Content-Type header',
|
|
23
|
+
scope: 'http_server_request',
|
|
24
|
+
enumerateScope: false,
|
|
25
|
+
build: build,
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=missingContentType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"missingContentType.js","sourceRoot":"","sources":["../../src/rules/missingContentType.ts"],"names":[],"mappings":";;AAEA,oDAA2D;AAE3D,IAAM,UAAU,GAAG,UAAC,MAAc,IAAK,OAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAA1C,CAA0C,CAAC;AAClF,IAAM,UAAU,GAAG,UAAC,MAAc,IAAK,OAAA,MAAM,KAAK,GAAG,EAAd,CAAc,CAAC;AAEtD,SAAS,KAAK;IACZ,SAAS,OAAO,CAAC,CAAQ;QACvB,OAAO,IAAA,+BAAkB,EAAC,CAAC,CAAE,CAAC,WAAW,KAAK,SAAS,CAAC;IAC1D,CAAC;IACD,SAAS,KAAK,CAAC,CAAQ;QACrB,OAAO,CACL,CAAC,CAAC,CAAC,CAAC,kBAAkB;YACtB,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAmB,CAAC,MAAM,CAAC;YACzC,UAAU,CAAC,CAAC,CAAC,kBAAmB,CAAC,MAAM,CAAC,CACzC,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,SAAA;QACP,KAAK,OAAA;KACN,CAAC;AACJ,CAAC;AAED,kBAAe;IACb,EAAE,EAAE,sBAAsB;IAC1B,KAAK,EAAE,mDAAmD;IAC1D,KAAK,EAAE,qBAAqB;IAC5B,cAAc,EAAE,KAAK;IACrB,KAAK,OAAA;CACE,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
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 database_1 = require("../database");
|
|
15
|
+
var Options = /** @class */ (function () {
|
|
16
|
+
function Options() {
|
|
17
|
+
this.warningLimit = 5;
|
|
18
|
+
this.errorLimit = 10;
|
|
19
|
+
}
|
|
20
|
+
return Options;
|
|
21
|
+
}());
|
|
22
|
+
// TODO: clean up according to https://github.com/applandinc/scanner/issues/43
|
|
23
|
+
function build(options) {
|
|
24
|
+
var sqlCount = {};
|
|
25
|
+
function matcher(command, _appMap, eventFilter) {
|
|
26
|
+
var e_1, _a;
|
|
27
|
+
try {
|
|
28
|
+
for (var _b = __values((0, database_1.sqlStrings)(command, eventFilter)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
29
|
+
var sqlEvent = _c.value;
|
|
30
|
+
var occurrence = sqlCount[sqlEvent.sql];
|
|
31
|
+
if (!occurrence) {
|
|
32
|
+
occurrence = {
|
|
33
|
+
count: 1,
|
|
34
|
+
events: [sqlEvent.event],
|
|
35
|
+
};
|
|
36
|
+
sqlCount[sqlEvent.sql] = occurrence;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
occurrence.count += 1;
|
|
40
|
+
occurrence.events.push(sqlEvent.event);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
45
|
+
finally {
|
|
46
|
+
try {
|
|
47
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
48
|
+
}
|
|
49
|
+
finally { if (e_1) throw e_1.error; }
|
|
50
|
+
}
|
|
51
|
+
return Object.keys(sqlCount).reduce(function (matchResults, sql) {
|
|
52
|
+
var occurrence = sqlCount[sql];
|
|
53
|
+
var buildMatchResult = function (level) {
|
|
54
|
+
return {
|
|
55
|
+
level: level,
|
|
56
|
+
event: occurrence.events[0],
|
|
57
|
+
message: occurrence.count + " occurrences of SQL: " + sql,
|
|
58
|
+
groupMessage: sql,
|
|
59
|
+
occurranceCount: occurrence.count,
|
|
60
|
+
relatedEvents: occurrence.events,
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
if (occurrence.count >= options.errorLimit) {
|
|
64
|
+
matchResults.push(buildMatchResult('error'));
|
|
65
|
+
}
|
|
66
|
+
else if (occurrence.count >= options.warningLimit) {
|
|
67
|
+
matchResults.push(buildMatchResult('warning'));
|
|
68
|
+
}
|
|
69
|
+
return matchResults;
|
|
70
|
+
}, []);
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
matcher: matcher,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
exports.default = {
|
|
77
|
+
id: 'n-plus-one-query',
|
|
78
|
+
title: 'N plus 1 SQL query',
|
|
79
|
+
scope: 'command',
|
|
80
|
+
enumerateScope: false,
|
|
81
|
+
Options: Options,
|
|
82
|
+
build: build,
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=nPlusOneQuery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nPlusOneQuery.js","sourceRoot":"","sources":["../../src/rules/nPlusOneQuery.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAGA,wCAAmD;AAEnD;IAAA;QACS,iBAAY,GAAG,CAAC,CAAC;QACjB,eAAU,GAAG,EAAE,CAAC;IACzB,CAAC;IAAD,cAAC;AAAD,CAAC,AAHD,IAGC;AAED,8EAA8E;AAC9E,SAAS,KAAK,CAAC,OAAgB;IAC7B,IAAM,QAAQ,GAA6B,EAAE,CAAC;IAE9C,SAAS,OAAO,CACd,OAAc,EACd,OAAe,EACf,WAAwB;;;YAExB,KAAuB,IAAA,KAAA,SAAA,IAAA,qBAAU,EAAC,OAAO,EAAE,WAAW,CAAC,CAAA,gBAAA,4BAAE;gBAApD,IAAM,QAAQ,WAAA;gBACjB,IAAI,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACxC,IAAI,CAAC,UAAU,EAAE;oBACf,UAAU,GAAG;wBACX,KAAK,EAAE,CAAC;wBACR,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;qBACzB,CAAC;oBACF,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;iBACrC;qBAAM;oBACL,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;oBACtB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;iBACxC;aACF;;;;;;;;;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAC,YAAY,EAAE,GAAG;YACpD,IAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YAEjC,IAAM,gBAAgB,GAAG,UAAC,KAAY;gBACpC,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC3B,OAAO,EAAK,UAAU,CAAC,KAAK,6BAAwB,GAAK;oBACzD,YAAY,EAAE,GAAG;oBACjB,eAAe,EAAE,UAAU,CAAC,KAAK;oBACjC,aAAa,EAAE,UAAU,CAAC,MAAM;iBACjC,CAAC;YACJ,CAAC,CAAC;YAEF,IAAI,UAAU,CAAC,KAAK,IAAI,OAAO,CAAC,UAAU,EAAE;gBAC1C,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;aAC9C;iBAAM,IAAI,UAAU,CAAC,KAAK,IAAI,OAAO,CAAC,YAAY,EAAE;gBACnD,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;aAChD;YACD,OAAO,YAAY,CAAC;QACtB,CAAC,EAAE,EAAmB,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,OAAO,SAAA;KACR,CAAC;AACJ,CAAC;AAED,kBAAe;IACb,EAAE,EAAE,kBAAkB;IACtB,KAAK,EAAE,oBAAoB;IAC3B,KAAK,EAAE,SAAS;IAChB,cAAc,EAAE,KAAK;IACrB,OAAO,SAAA;IACP,KAAK,OAAA;CACE,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var matchPattern_1 = require("./lib/matchPattern");
|
|
4
|
+
// TODO: Use the Query AST for this.
|
|
5
|
+
var WHITELIST = [/\bBEGIN\b/i, /\bCOMMIT\b/i, /\bROLLBACK\b/i, /\bRELEASE\b/i, /\bSAVEPOINT\b/i];
|
|
6
|
+
var Options = /** @class */ (function () {
|
|
7
|
+
function Options() {
|
|
8
|
+
this.allowedPackages = [];
|
|
9
|
+
this.allowedQueries = WHITELIST.map(function (regexp) { return ({ match: regexp }); });
|
|
10
|
+
}
|
|
11
|
+
return Options;
|
|
12
|
+
}());
|
|
13
|
+
function build(options) {
|
|
14
|
+
var allowedPackages = (0, matchPattern_1.buildFilters)(options.allowedPackages);
|
|
15
|
+
var allowedQueries = (0, matchPattern_1.buildFilters)(options.allowedQueries);
|
|
16
|
+
function matcher(e) {
|
|
17
|
+
if (!allowedPackages.some(function (filter) { return filter(e.parent.codeObject.packageOf); })) {
|
|
18
|
+
return e.codeObject.id + " is invoked from illegal package " + e.parent.codeObject.packageOf;
|
|
19
|
+
}
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
function where(e) {
|
|
23
|
+
return !!e.sqlQuery && !!e.parent && !allowedQueries.some(function (pattern) { return pattern(e.sqlQuery); });
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
matcher: matcher,
|
|
27
|
+
where: where,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
exports.default = {
|
|
31
|
+
id: 'query-from-invalid-package',
|
|
32
|
+
title: 'Queries from invalid packages',
|
|
33
|
+
Options: Options,
|
|
34
|
+
enumerateScope: true,
|
|
35
|
+
build: build,
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=queryFromInvalidPackage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryFromInvalidPackage.js","sourceRoot":"","sources":["../../src/rules/queryFromInvalidPackage.ts"],"names":[],"mappings":";;AAIA,mDAAkD;AAElD,oCAAoC;AACpC,IAAM,SAAS,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;AAEnG;IAAA;QACS,oBAAe,GAAyB,EAAE,CAAC;QAC3C,mBAAc,GAAyB,SAAS,CAAC,GAAG,CACzD,UAAC,MAAM,IAAK,OAAA,CAAC,EAAE,KAAK,EAAE,MAAM,EAAyB,CAAA,EAAzC,CAAyC,CACtD,CAAC;IACJ,CAAC;IAAD,cAAC;AAAD,CAAC,AALD,IAKC;AAED,SAAS,KAAK,CAAC,OAAgB;IAC7B,IAAM,eAAe,GAAG,IAAA,2BAAY,EAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9D,IAAM,cAAc,GAAG,IAAA,2BAAY,EAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAE5D,SAAS,OAAO,CAAC,CAAQ;QACvB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAC,MAAM,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,MAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAtC,CAAsC,CAAC,EAAE;YAC7E,OAAU,CAAC,CAAC,UAAU,CAAC,EAAE,yCAAoC,CAAC,CAAC,MAAO,CAAC,UAAU,CAAC,SAAW,CAAC;SAC/F;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,KAAK,CAAC,CAAQ;QACrB,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,CAAC,CAAC,QAAS,CAAC,EAApB,CAAoB,CAAC,CAAC;IAC/F,CAAC;IAED,OAAO;QACL,OAAO,SAAA;QACP,KAAK,OAAA;KACN,CAAC;AACJ,CAAC;AAED,kBAAe;IACb,EAAE,EAAE,4BAA4B;IAChC,KAAK,EAAE,+BAA+B;IACtC,OAAO,SAAA;IACP,cAAc,EAAE,IAAI;IACpB,KAAK,OAAA;CACE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var Options = /** @class */ (function () {
|
|
4
|
+
function Options() {
|
|
5
|
+
this.forbiddenLabel = 'mvc.template';
|
|
6
|
+
}
|
|
7
|
+
return Options;
|
|
8
|
+
}());
|
|
9
|
+
function build(options) {
|
|
10
|
+
if (options === void 0) { options = new Options(); }
|
|
11
|
+
function matcher(e) {
|
|
12
|
+
return e.ancestors().some(function (e) { return e.codeObject.labels.has(options.forbiddenLabel); });
|
|
13
|
+
}
|
|
14
|
+
function where(e) {
|
|
15
|
+
return !!e.sqlQuery;
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
matcher: matcher,
|
|
19
|
+
where: where,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
exports.default = {
|
|
23
|
+
id: 'query-from-view',
|
|
24
|
+
title: 'Queries from view',
|
|
25
|
+
Options: Options,
|
|
26
|
+
enumerateScope: true,
|
|
27
|
+
build: build,
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=queryFromView.js.map
|