@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,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.rpcRequestForEvent = void 0;
|
|
4
|
+
var url_1 = require("url");
|
|
5
|
+
var util_1 = require("./util");
|
|
6
|
+
var ServerRPCRequest = /** @class */ (function () {
|
|
7
|
+
function ServerRPCRequest(event) {
|
|
8
|
+
this.event = event;
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(ServerRPCRequest.prototype, "status", {
|
|
11
|
+
get: function () {
|
|
12
|
+
return this.event.httpServerResponse.status;
|
|
13
|
+
},
|
|
14
|
+
enumerable: false,
|
|
15
|
+
configurable: true
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperty(ServerRPCRequest.prototype, "parameters", {
|
|
18
|
+
get: function () {
|
|
19
|
+
return this.event.parameters || [];
|
|
20
|
+
},
|
|
21
|
+
enumerable: false,
|
|
22
|
+
configurable: true
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(ServerRPCRequest.prototype, "requestHeaders", {
|
|
25
|
+
get: function () {
|
|
26
|
+
var _a;
|
|
27
|
+
return ((_a = this.event.httpServerRequest) === null || _a === void 0 ? void 0 : _a.headers) || {};
|
|
28
|
+
},
|
|
29
|
+
enumerable: false,
|
|
30
|
+
configurable: true
|
|
31
|
+
});
|
|
32
|
+
Object.defineProperty(ServerRPCRequest.prototype, "responseHeaders", {
|
|
33
|
+
get: function () {
|
|
34
|
+
var _a;
|
|
35
|
+
return ((_a = this.event.httpServerResponse) === null || _a === void 0 ? void 0 : _a.headers) || {};
|
|
36
|
+
},
|
|
37
|
+
enumerable: false,
|
|
38
|
+
configurable: true
|
|
39
|
+
});
|
|
40
|
+
Object.defineProperty(ServerRPCRequest.prototype, "contentType", {
|
|
41
|
+
get: function () {
|
|
42
|
+
return (this.event.httpServerResponse.headers || {})['Content-Type'];
|
|
43
|
+
},
|
|
44
|
+
enumerable: false,
|
|
45
|
+
configurable: true
|
|
46
|
+
});
|
|
47
|
+
Object.defineProperty(ServerRPCRequest.prototype, "requestMethod", {
|
|
48
|
+
get: function () {
|
|
49
|
+
return this.event.httpServerRequest.request_method.toLowerCase();
|
|
50
|
+
},
|
|
51
|
+
enumerable: false,
|
|
52
|
+
configurable: true
|
|
53
|
+
});
|
|
54
|
+
Object.defineProperty(ServerRPCRequest.prototype, "requestPath", {
|
|
55
|
+
get: function () {
|
|
56
|
+
return (0, util_1.ensureString)(this.event.httpServerRequest.normalized_path_info || this.event.httpServerRequest.path_info);
|
|
57
|
+
},
|
|
58
|
+
enumerable: false,
|
|
59
|
+
configurable: true
|
|
60
|
+
});
|
|
61
|
+
return ServerRPCRequest;
|
|
62
|
+
}());
|
|
63
|
+
var ClientRPCRequest = /** @class */ (function () {
|
|
64
|
+
function ClientRPCRequest(event) {
|
|
65
|
+
this.event = event;
|
|
66
|
+
}
|
|
67
|
+
Object.defineProperty(ClientRPCRequest.prototype, "status", {
|
|
68
|
+
get: function () {
|
|
69
|
+
return this.event.httpClientResponse.status;
|
|
70
|
+
},
|
|
71
|
+
enumerable: false,
|
|
72
|
+
configurable: true
|
|
73
|
+
});
|
|
74
|
+
Object.defineProperty(ClientRPCRequest.prototype, "parameters", {
|
|
75
|
+
get: function () {
|
|
76
|
+
return this.event.parameters || [];
|
|
77
|
+
},
|
|
78
|
+
enumerable: false,
|
|
79
|
+
configurable: true
|
|
80
|
+
});
|
|
81
|
+
Object.defineProperty(ClientRPCRequest.prototype, "requestHeaders", {
|
|
82
|
+
get: function () {
|
|
83
|
+
var _a;
|
|
84
|
+
return ((_a = this.event.httpClientRequest) === null || _a === void 0 ? void 0 : _a.headers) || {};
|
|
85
|
+
},
|
|
86
|
+
enumerable: false,
|
|
87
|
+
configurable: true
|
|
88
|
+
});
|
|
89
|
+
Object.defineProperty(ClientRPCRequest.prototype, "responseHeaders", {
|
|
90
|
+
get: function () {
|
|
91
|
+
var _a;
|
|
92
|
+
return ((_a = this.event.httpClientResponse) === null || _a === void 0 ? void 0 : _a.headers) || {};
|
|
93
|
+
},
|
|
94
|
+
enumerable: false,
|
|
95
|
+
configurable: true
|
|
96
|
+
});
|
|
97
|
+
Object.defineProperty(ClientRPCRequest.prototype, "contentType", {
|
|
98
|
+
get: function () {
|
|
99
|
+
return (this.event.httpClientResponse.headers || {})['Content-Type'];
|
|
100
|
+
},
|
|
101
|
+
enumerable: false,
|
|
102
|
+
configurable: true
|
|
103
|
+
});
|
|
104
|
+
Object.defineProperty(ClientRPCRequest.prototype, "requestMethod", {
|
|
105
|
+
get: function () {
|
|
106
|
+
return this.event.httpClientRequest.request_method.toLowerCase();
|
|
107
|
+
},
|
|
108
|
+
enumerable: false,
|
|
109
|
+
configurable: true
|
|
110
|
+
});
|
|
111
|
+
Object.defineProperty(ClientRPCRequest.prototype, "requestPath", {
|
|
112
|
+
get: function () {
|
|
113
|
+
// TODO: Back-substitute query parameters into the URL.
|
|
114
|
+
return new url_1.URL(this.event.httpClientRequest.url).pathname;
|
|
115
|
+
},
|
|
116
|
+
enumerable: false,
|
|
117
|
+
configurable: true
|
|
118
|
+
});
|
|
119
|
+
return ClientRPCRequest;
|
|
120
|
+
}());
|
|
121
|
+
function rpcRequestForEvent(event) {
|
|
122
|
+
if (event.httpServerRequest && event.httpServerResponse) {
|
|
123
|
+
return new ServerRPCRequest(event);
|
|
124
|
+
}
|
|
125
|
+
else if (event.httpClientRequest && event.httpClientResponse) {
|
|
126
|
+
return new ClientRPCRequest(event);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.rpcRequestForEvent = rpcRequestForEvent;
|
|
130
|
+
//# sourceMappingURL=rpcRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpcRequest.js","sourceRoot":"","sources":["../../src/openapi/rpcRequest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var util_1 = require("./util");
|
|
4
|
+
var Schema = /** @class */ (function () {
|
|
5
|
+
function Schema() {
|
|
6
|
+
this.examples = [];
|
|
7
|
+
}
|
|
8
|
+
Schema.prototype.addExample = function (message) {
|
|
9
|
+
if (!message.name) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
this.examples.push(message);
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(Schema.prototype, "empty", {
|
|
15
|
+
get: function () {
|
|
16
|
+
return this.examples.length > 0;
|
|
17
|
+
},
|
|
18
|
+
enumerable: false,
|
|
19
|
+
configurable: true
|
|
20
|
+
});
|
|
21
|
+
Schema.prototype.schema = function () {
|
|
22
|
+
var properties = {};
|
|
23
|
+
this.examples
|
|
24
|
+
.sort(function (a, b) { return a.name.localeCompare(b.name); })
|
|
25
|
+
.forEach(function (message) {
|
|
26
|
+
if (properties[message.name]) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
properties[message.name] = (0, util_1.messageToOpenAPISchema)(message);
|
|
30
|
+
});
|
|
31
|
+
if (Object.keys(properties).length === 0) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
type: 'object',
|
|
36
|
+
properties: properties,
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
return Schema;
|
|
40
|
+
}());
|
|
41
|
+
exports.default = Schema;
|
|
42
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/openapi/schema.ts"],"names":[],"mappings":";;AACA,+BAAgD;AAEhD;IAGE;QACE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,2BAAU,GAAV,UAAW,OAAwB;QACjC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YACjB,OAAO;SACR;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,sBAAI,yBAAK;aAAT;YACE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAClC,CAAC;;;OAAA;IAED,uBAAM,GAAN;QACE,IAAM,UAAU,GAAwB,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ;aACV,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,IAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAK,CAAC,EAA9B,CAA8B,CAAC;aAC9C,OAAO,CAAC,UAAC,OAAO;YACf,IAAI,UAAU,CAAC,OAAO,CAAC,IAAK,CAAC,EAAE;gBAC7B,OAAO;aACR;YACD,UAAU,CAAC,OAAO,CAAC,IAAK,CAAC,GAAG,IAAA,6BAAsB,EAAC,OAAO,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QACL,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YACxC,OAAO,IAAI,CAAC;SACb;QAED,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,YAAA;SACX,CAAC;IACJ,CAAC;IACH,aAAC;AAAD,CAAC,AArCD,IAqCC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var util_1 = require("./util");
|
|
4
|
+
var SecuritySchemes = /** @class */ (function () {
|
|
5
|
+
function SecuritySchemes() {
|
|
6
|
+
this.rpcRequests = [];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Adds an event to the security schemes, and assigns a security scheme id.
|
|
10
|
+
* If the event has no detectable security scheme, this function returns null.
|
|
11
|
+
*
|
|
12
|
+
* @returns the security scheme id for the event, or null.
|
|
13
|
+
*/
|
|
14
|
+
SecuritySchemes.prototype.addRpcRequest = function (rpcRequest) {
|
|
15
|
+
this.rpcRequests.push(rpcRequest);
|
|
16
|
+
};
|
|
17
|
+
SecuritySchemes.prototype.openapi = function () {
|
|
18
|
+
return this.rpcRequests
|
|
19
|
+
.map(function (rpcRequest) { return rpcRequest.requestHeaders['Authorization']; })
|
|
20
|
+
.filter(function (authorization) { return authorization; })
|
|
21
|
+
.reduce(function (memo, authorization) {
|
|
22
|
+
var scheme = (0, util_1.parseScheme)(authorization);
|
|
23
|
+
if (!memo[scheme.schemeId]) {
|
|
24
|
+
memo[scheme.schemeId] = scheme.scheme;
|
|
25
|
+
}
|
|
26
|
+
return memo;
|
|
27
|
+
}, {});
|
|
28
|
+
};
|
|
29
|
+
return SecuritySchemes;
|
|
30
|
+
}());
|
|
31
|
+
exports.default = SecuritySchemes;
|
|
32
|
+
//# sourceMappingURL=securitySchemes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"securitySchemes.js","sourceRoot":"","sources":["../../src/openapi/securitySchemes.ts"],"names":[],"mappings":";;AAEA,+BAAqC;AAErC;IAAA;QACE,gBAAW,GAAiB,EAAE,CAAC;IAwBjC,CAAC;IAtBC;;;;;OAKG;IACH,uCAAa,GAAb,UAAc,UAAsB;QAClC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,iCAAO,GAAP;QACE,OAAO,IAAI,CAAC,WAAW;aACpB,GAAG,CAAC,UAAC,UAAU,IAAK,OAAA,UAAU,CAAC,cAAc,CAAC,eAAe,CAAC,EAA1C,CAA0C,CAAC;aAC/D,MAAM,CAAC,UAAC,aAAa,IAAK,OAAA,aAAa,EAAb,CAAa,CAAC;aACxC,MAAM,CAAC,UAAC,IAAI,EAAE,aAAa;YAC1B,IAAM,MAAM,GAAG,IAAA,kBAAW,EAAC,aAAa,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;gBAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;aACvC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,EAAE,EAAoD,CAAC,CAAC;IAC7D,CAAC;IACH,sBAAC;AAAD,CAAC,AAzBD,IAyBC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
// https://github.com/nodejs/node/blob/f1653cc9b80b521ef5b129537ce1df9098bbdc1b/lib/_http_server.js#L18-L81
|
|
4
|
+
exports.default = {
|
|
5
|
+
100: 'Continue',
|
|
6
|
+
101: 'Switching Protocols',
|
|
7
|
+
102: 'Processing',
|
|
8
|
+
200: 'OK',
|
|
9
|
+
201: 'Created',
|
|
10
|
+
202: 'Accepted',
|
|
11
|
+
203: 'Non-Authoritative Information',
|
|
12
|
+
204: 'No Content',
|
|
13
|
+
205: 'Reset Content',
|
|
14
|
+
206: 'Partial Content',
|
|
15
|
+
207: 'Multi-Status',
|
|
16
|
+
208: 'Already Reported',
|
|
17
|
+
226: 'IM Used',
|
|
18
|
+
300: 'Multiple Choices',
|
|
19
|
+
301: 'Moved Permanently',
|
|
20
|
+
302: 'Found',
|
|
21
|
+
303: 'See Other',
|
|
22
|
+
304: 'Not Modified',
|
|
23
|
+
305: 'Use Proxy',
|
|
24
|
+
307: 'Temporary Redirect',
|
|
25
|
+
308: 'Permanent Redirect',
|
|
26
|
+
400: 'Bad Request',
|
|
27
|
+
401: 'Unauthorized',
|
|
28
|
+
402: 'Payment Required',
|
|
29
|
+
403: 'Forbidden',
|
|
30
|
+
404: 'Not Found',
|
|
31
|
+
405: 'Method Not Allowed',
|
|
32
|
+
406: 'Not Acceptable',
|
|
33
|
+
407: 'Proxy Authentication Required',
|
|
34
|
+
408: 'Request Timeout',
|
|
35
|
+
409: 'Conflict',
|
|
36
|
+
410: 'Gone',
|
|
37
|
+
411: 'Length Required',
|
|
38
|
+
412: 'Precondition Failed',
|
|
39
|
+
413: 'Payload Too Large',
|
|
40
|
+
414: 'URI Too Long',
|
|
41
|
+
415: 'Unsupported Media Type',
|
|
42
|
+
416: 'Range Not Satisfiable',
|
|
43
|
+
417: 'Expectation Failed',
|
|
44
|
+
418: "I'm a teapot",
|
|
45
|
+
421: 'Misdirected Request',
|
|
46
|
+
422: 'Unprocessable Entity',
|
|
47
|
+
423: 'Locked',
|
|
48
|
+
424: 'Failed Dependency',
|
|
49
|
+
425: 'Unordered Collection',
|
|
50
|
+
426: 'Upgrade Required',
|
|
51
|
+
428: 'Precondition Required',
|
|
52
|
+
429: 'Too Many Requests',
|
|
53
|
+
431: 'Request Header Fields Too Large',
|
|
54
|
+
451: 'Unavailable For Legal Reasons',
|
|
55
|
+
500: 'Internal Server Error',
|
|
56
|
+
501: 'Not Implemented',
|
|
57
|
+
502: 'Bad Gateway',
|
|
58
|
+
503: 'Service Unavailable',
|
|
59
|
+
504: 'Gateway Timeout',
|
|
60
|
+
505: 'HTTP Version Not Supported',
|
|
61
|
+
506: 'Variant Also Negotiates',
|
|
62
|
+
507: 'Insufficient Storage',
|
|
63
|
+
508: 'Loop Detected',
|
|
64
|
+
509: 'Bandwidth Limit Exceeded',
|
|
65
|
+
510: 'Not Extended',
|
|
66
|
+
511: 'Network Authentication Required',
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=statusCodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusCodes.js","sourceRoot":"","sources":["../../src/openapi/statusCodes.ts"],"names":[],"mappings":";;AAAA,2GAA2G;AAC3G,kBAAe;IACb,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,qBAAqB;IAC1B,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,+BAA+B;IACpC,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,kBAAkB;IACvB,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,kBAAkB;IACvB,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,oBAAoB;IACzB,GAAG,EAAE,oBAAoB;IACzB,GAAG,EAAE,aAAa;IAClB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,kBAAkB;IACvB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,oBAAoB;IACzB,GAAG,EAAE,gBAAgB;IACrB,GAAG,EAAE,+BAA+B;IACpC,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,qBAAqB;IAC1B,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,wBAAwB;IAC7B,GAAG,EAAE,uBAAuB;IAC5B,GAAG,EAAE,oBAAoB;IACzB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,qBAAqB;IAC1B,GAAG,EAAE,sBAAsB;IAC3B,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,sBAAsB;IAC3B,GAAG,EAAE,kBAAkB;IACvB,GAAG,EAAE,uBAAuB;IAC5B,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,iCAAiC;IACtC,GAAG,EAAE,+BAA+B;IACpC,GAAG,EAAE,uBAAuB;IAC5B,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,aAAa;IAClB,GAAG,EAAE,qBAAqB;IAC1B,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,4BAA4B;IACjC,GAAG,EAAE,yBAAyB;IAC9B,GAAG,EAAE,sBAAsB;IAC3B,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,0BAA0B;IAC/B,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,iCAAiC;CACb,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseScheme = exports.messageToOpenAPISchema = exports.ensureString = void 0;
|
|
4
|
+
function parseScheme(authorization) {
|
|
5
|
+
var tokens = authorization.split(/\s/);
|
|
6
|
+
if (tokens.length === 1) {
|
|
7
|
+
return {
|
|
8
|
+
schemeId: 'api_key',
|
|
9
|
+
scheme: {
|
|
10
|
+
type: 'apiKey',
|
|
11
|
+
name: 'authorization',
|
|
12
|
+
in: 'header',
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
var schemeId = tokens[0].toLowerCase();
|
|
17
|
+
return {
|
|
18
|
+
schemeId: schemeId,
|
|
19
|
+
scheme: {
|
|
20
|
+
type: 'http',
|
|
21
|
+
scheme: schemeId,
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
exports.parseScheme = parseScheme;
|
|
26
|
+
function classNameToOpenAPIType(className) {
|
|
27
|
+
var typeName = className;
|
|
28
|
+
if (!typeName || typeName === '') {
|
|
29
|
+
return 'string';
|
|
30
|
+
}
|
|
31
|
+
typeName = typeName.toLowerCase();
|
|
32
|
+
switch (typeName) {
|
|
33
|
+
case 'hash':
|
|
34
|
+
case 'activesupport::hashwithindifferentaccess':
|
|
35
|
+
return 'object';
|
|
36
|
+
case 'nilclass':
|
|
37
|
+
return 'string';
|
|
38
|
+
case 'trueclass':
|
|
39
|
+
case 'falseclass':
|
|
40
|
+
return 'boolean';
|
|
41
|
+
default:
|
|
42
|
+
return typeName;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function messageToOpenAPISchema(message) {
|
|
46
|
+
var type = classNameToOpenAPIType(message.class);
|
|
47
|
+
var result = { type: type };
|
|
48
|
+
/*
|
|
49
|
+
if (message.value) {
|
|
50
|
+
let example;
|
|
51
|
+
try {
|
|
52
|
+
example = JSON.parse(message.value);
|
|
53
|
+
} catch (e) {
|
|
54
|
+
example = message.value;
|
|
55
|
+
}
|
|
56
|
+
if (example && example !== '') {
|
|
57
|
+
result.example = example.toString();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
*/
|
|
61
|
+
if (type === 'array') {
|
|
62
|
+
// This is our best guess right now.
|
|
63
|
+
result.items = { type: 'string' };
|
|
64
|
+
}
|
|
65
|
+
else if (type === 'object' && message.properties) {
|
|
66
|
+
result.properties = message.properties.reduce(function (memo, msgProperty) {
|
|
67
|
+
var type = classNameToOpenAPIType(msgProperty.class);
|
|
68
|
+
if (type === 'array') {
|
|
69
|
+
// eslint-disable-next-line no-param-reassign
|
|
70
|
+
memo[msgProperty.name] = {};
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
// eslint-disable-next-line no-param-reassign
|
|
74
|
+
memo[msgProperty.name] = {
|
|
75
|
+
type: type,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return memo;
|
|
79
|
+
}, {});
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
exports.messageToOpenAPISchema = messageToOpenAPISchema;
|
|
84
|
+
function ensureString(value) {
|
|
85
|
+
if (Array.isArray(value)) {
|
|
86
|
+
return value.join('');
|
|
87
|
+
}
|
|
88
|
+
return value.toString();
|
|
89
|
+
}
|
|
90
|
+
exports.ensureString = ensureString;
|
|
91
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/openapi/util.ts"],"names":[],"mappings":";;;AAQA,SAAS,WAAW,CAAC,aAAqB;IACxC,IAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,OAAO;YACL,QAAQ,EAAE,SAAS;YACnB,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,eAAe;gBACrB,EAAE,EAAE,QAAQ;aACqB;SACpC,CAAC;KACH;IAED,IAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACzC,OAAO;QACL,QAAQ,UAAA;QACR,MAAM,EAAE;YACN,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,QAAQ;SACe;KAClC,CAAC;AACJ,CAAC;AAsE8C,kCAAW;AApE1D,SAAS,sBAAsB,CAC7B,SAAiB;IAEjB,IAAI,QAAQ,GAAG,SAAS,CAAC;IACzB,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,EAAE,EAAE;QAChC,OAAO,QAAQ,CAAC;KACjB;IACD,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAElC,QAAQ,QAAQ,EAAE;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,0CAA0C;YAC7C,OAAO,QAAQ,CAAC;QAClB,KAAK,UAAU;YACb,OAAO,QAAQ,CAAC;QAClB,KAAK,WAAW,CAAC;QACjB,KAAK,YAAY;YACf,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,QAAgF,CAAC;KAC3F;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAwB;IACtD,IAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnD,IAAM,MAAM,GAAG,EAAE,IAAI,MAAA,EAAS,CAAC;IAC/B;;;;;;;;;;;;MAYE;IACF,IAAI,IAAI,KAAK,OAAO,EAAE;QACpB,oCAAoC;QACpC,MAAM,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;KACnC;SAAM,IAAI,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE;QAClD,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,WAA8B;YACjF,IAAM,IAAI,GAAG,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACvD,IAAI,IAAI,KAAK,OAAO,EAAE;gBACpB,6CAA6C;gBAC7C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAiC,CAAC;aAC5D;iBAAM;gBACL,6CAA6C;gBAC7C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG;oBACvB,IAAI,MAAA;iBAC6B,CAAC;aACrC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,EAAE,EAAkF,CAAC,CAAC;KACxF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AASsB,wDAAsB;AAP7C,SAAS,YAAY,CAAC,KAAU;IAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACvB;IACD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAEQ,oCAAY"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appMapMetadata.js","sourceRoot":"","sources":["../../src/report/appMapMetadata.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findingSummary.js","sourceRoot":"","sources":["../../src/report/findingSummary.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
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 chalk_1 = __importDefault(require("chalk"));
|
|
7
|
+
var util_1 = require("../rules/util");
|
|
8
|
+
function writeln(text) {
|
|
9
|
+
if (text === void 0) { text = ''; }
|
|
10
|
+
process.stdout.write(text);
|
|
11
|
+
process.stdout.write('\n');
|
|
12
|
+
}
|
|
13
|
+
function default_1(findings, appMapMetadata, ide) {
|
|
14
|
+
if (findings.length === 0) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
console.log();
|
|
18
|
+
findings.forEach(function (finding) {
|
|
19
|
+
var filePath = ide && finding.appMapFile
|
|
20
|
+
? (0, util_1.ideLink)(finding.appMapFile, ide, finding.event.id)
|
|
21
|
+
: finding.appMapFile;
|
|
22
|
+
var eventMsg = "\tEvent:\t" + finding.event.id + " - " + finding.event.toString();
|
|
23
|
+
if (finding.event.elapsedTime !== undefined) {
|
|
24
|
+
eventMsg += " (" + finding.event.elapsedTime + "s)";
|
|
25
|
+
}
|
|
26
|
+
var message = finding.message;
|
|
27
|
+
writeln(chalk_1.default.magenta(message));
|
|
28
|
+
writeln("\tLink:\t" + chalk_1.default.blue(filePath));
|
|
29
|
+
writeln("\tRule:\t" + finding.ruleId);
|
|
30
|
+
writeln("\tAppMap name:\t" + appMapMetadata[finding.appMapFile].name);
|
|
31
|
+
writeln(eventMsg);
|
|
32
|
+
writeln("\tScope:\t" + finding.scope.id + " - " + finding.scope.toString());
|
|
33
|
+
writeln();
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
exports.default = default_1;
|
|
37
|
+
//# sourceMappingURL=findingsReport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findingsReport.js","sourceRoot":"","sources":["../../src/report/findingsReport.ts"],"names":[],"mappings":";;;;;AACA,gDAA0B;AAC1B,sCAAwC;AAGxC,SAAS,OAAO,CAAC,IAAS;IAAT,qBAAA,EAAA,SAAS;IACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,mBACE,QAAmB,EACnB,cAAwC,EACxC,GAAY;IAEZ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;QACzB,OAAO;KACR;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,QAAQ,CAAC,OAAO,CAAC,UAAC,OAAO;QACvB,IAAM,QAAQ,GACZ,GAAG,IAAI,OAAO,CAAC,UAAU;YACvB,CAAC,CAAC,IAAA,cAAO,EAAC,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QACzB,IAAI,QAAQ,GAAG,eAAa,OAAO,CAAC,KAAK,CAAC,EAAE,WAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAI,CAAC;QAC7E,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE;YAC3C,QAAQ,IAAI,OAAK,OAAO,CAAC,KAAK,CAAC,WAAW,OAAI,CAAC;SAChD;QAED,IAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,OAAO,CAAC,eAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAChC,OAAO,CAAC,cAAY,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAG,CAAC,CAAC;QAC5C,OAAO,CAAC,cAAY,OAAO,CAAC,MAAQ,CAAC,CAAC;QACtC,OAAO,CAAC,qBAAmB,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAM,CAAC,CAAC;QACtE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClB,OAAO,CAAC,eAAa,OAAO,CAAC,KAAK,CAAC,EAAE,WAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAI,CAAC,CAAC;QACvE,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AA5BD,4BA4BC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.ScanResults = void 0;
|
|
29
|
+
function collectMetadata(metadata) {
|
|
30
|
+
var uniqueApps = new Set();
|
|
31
|
+
var uniqueLabels = new Set();
|
|
32
|
+
var uniqueClients = new Set();
|
|
33
|
+
var uniqueFrameworks = new Set();
|
|
34
|
+
var uniqueGit = new Set();
|
|
35
|
+
var uniqueLanguages = new Set();
|
|
36
|
+
var uniqueRecorders = new Set();
|
|
37
|
+
var uniqueExceptions = new Set();
|
|
38
|
+
function pushDistinctItem(unique, members, item) {
|
|
39
|
+
if (item === undefined) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
var key = JSON.stringify(item);
|
|
43
|
+
if (!unique.has(key)) {
|
|
44
|
+
unique.add(key);
|
|
45
|
+
members.push(item);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function pushDistinctItems(unique, members, items) {
|
|
49
|
+
(items || []).forEach(function (item) { return pushDistinctItem(unique, members, item); });
|
|
50
|
+
}
|
|
51
|
+
return metadata.reduce(function (memo, appMapMetadata) {
|
|
52
|
+
pushDistinctItem(uniqueApps, memo.apps, appMapMetadata.app);
|
|
53
|
+
pushDistinctItems(uniqueLabels, memo.labels, appMapMetadata.labels);
|
|
54
|
+
pushDistinctItem(uniqueClients, memo.clients, appMapMetadata.client);
|
|
55
|
+
pushDistinctItems(uniqueFrameworks, memo.frameworks, appMapMetadata.frameworks);
|
|
56
|
+
pushDistinctItem(uniqueGit, memo.git, appMapMetadata.git);
|
|
57
|
+
pushDistinctItem(uniqueLanguages, memo.languages, appMapMetadata.language);
|
|
58
|
+
pushDistinctItem(uniqueRecorders, memo.recorders, appMapMetadata.recorder);
|
|
59
|
+
pushDistinctItem(uniqueExceptions, memo.recorders, appMapMetadata.exception);
|
|
60
|
+
return memo;
|
|
61
|
+
}, {
|
|
62
|
+
labels: [],
|
|
63
|
+
apps: [],
|
|
64
|
+
clients: [],
|
|
65
|
+
frameworks: [],
|
|
66
|
+
git: [],
|
|
67
|
+
languages: [],
|
|
68
|
+
recorders: [],
|
|
69
|
+
testStatuses: [],
|
|
70
|
+
exceptions: [],
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* ScannerSummary summarizes the results of the entire scan.
|
|
75
|
+
* It's used for printing a user-friendly summary report, it's not used for machine-readable program output.
|
|
76
|
+
*/
|
|
77
|
+
var ScanResults = /** @class */ (function () {
|
|
78
|
+
function ScanResults(configuration, appMapMetadata, findings, checks) {
|
|
79
|
+
this.summary = {
|
|
80
|
+
numAppMaps: Object.keys(appMapMetadata).length,
|
|
81
|
+
numChecks: checks.length * Object.keys(appMapMetadata).length,
|
|
82
|
+
rules: __spreadArray([], __read(new Set(checks.map(function (check) { return check.rule.id; }))), false).sort(),
|
|
83
|
+
ruleLabels: __spreadArray([], __read(new Set(checks.map(function (check) { return check.rule.labels || []; }).flat())), false).sort(),
|
|
84
|
+
numFindings: findings.length,
|
|
85
|
+
appMapMetadata: collectMetadata(Object.values(appMapMetadata)),
|
|
86
|
+
};
|
|
87
|
+
this.configuration = configuration;
|
|
88
|
+
var appMapFiles = new Set(findings.map(function (finding) { return finding.appMapFile; }));
|
|
89
|
+
this.appMaps = __spreadArray([], __read(appMapFiles), false).reduce(function (memo, appMapFile) {
|
|
90
|
+
memo[appMapFile] = appMapMetadata[appMapFile];
|
|
91
|
+
return memo;
|
|
92
|
+
}, {});
|
|
93
|
+
this.findings = findings;
|
|
94
|
+
this.appMapMetadata = appMapMetadata;
|
|
95
|
+
this.checks = checks;
|
|
96
|
+
}
|
|
97
|
+
ScanResults.prototype.withFindings = function (findings) {
|
|
98
|
+
return new ScanResults(this.configuration, this.appMapMetadata, findings, this.checks);
|
|
99
|
+
};
|
|
100
|
+
return ScanResults;
|
|
101
|
+
}());
|
|
102
|
+
exports.ScanResults = ScanResults;
|
|
103
|
+
//# sourceMappingURL=scanResults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanResults.js","sourceRoot":"","sources":["../../src/report/scanResults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanSummary.js","sourceRoot":"","sources":["../../src/report/scanSummary.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,70 @@
|
|
|
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 chalk_1 = __importDefault(require("chalk"));
|
|
32
|
+
function summarizeFindings(findings) {
|
|
33
|
+
var result = findings.reduce(function (memo, finding) {
|
|
34
|
+
var findingSummary = memo[finding.ruleId];
|
|
35
|
+
if (findingSummary) {
|
|
36
|
+
findingSummary.findingTotal += 1;
|
|
37
|
+
findingSummary.messages.add(finding.message);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
findingSummary = {
|
|
41
|
+
ruleId: finding.ruleId,
|
|
42
|
+
ruleTitle: finding.ruleTitle,
|
|
43
|
+
findingTotal: 1,
|
|
44
|
+
messages: new Set([finding.message]),
|
|
45
|
+
};
|
|
46
|
+
memo[finding.ruleId] = findingSummary;
|
|
47
|
+
}
|
|
48
|
+
return memo;
|
|
49
|
+
}, {});
|
|
50
|
+
return Object.values(result);
|
|
51
|
+
}
|
|
52
|
+
function default_1(summary, colorize) {
|
|
53
|
+
var matchedStr = summary.summary.numFindings + " finding" + (summary.summary.numFindings === 1 ? '' : 's');
|
|
54
|
+
var colouredMatchedStr = colorize ? chalk_1.default.stderr.magenta(matchedStr) : matchedStr;
|
|
55
|
+
console.log();
|
|
56
|
+
console.log(summary.summary.numChecks + " checks (" + [colouredMatchedStr].join(', ') + ")");
|
|
57
|
+
summarizeFindings(summary.findings)
|
|
58
|
+
.sort(function (a, b) { return a.ruleTitle.localeCompare(b.ruleTitle); })
|
|
59
|
+
.forEach(function (finding) {
|
|
60
|
+
var casesStr = "\t- " + finding.ruleTitle + " (" + finding.ruleId + ") : " + finding.findingTotal + " case(s)";
|
|
61
|
+
console.log(colorize ? chalk_1.default.stderr.magenta(casesStr) : casesStr);
|
|
62
|
+
var uniqueMessages = __spreadArray([], __read(new Set(finding.messages)), false).sort();
|
|
63
|
+
uniqueMessages.forEach(function (message) {
|
|
64
|
+
var messageStr = "\t\t" + message;
|
|
65
|
+
console.log(colorize ? chalk_1.default.stderr.magenta(messageStr) : messageStr);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
exports.default = default_1;
|
|
70
|
+
//# sourceMappingURL=summaryReport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summaryReport.js","sourceRoot":"","sources":["../../src/report/summaryReport.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAA0B;AAK1B,SAAS,iBAAiB,CAAC,QAAmB;IAC5C,IAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,OAAO;QAC3C,IAAI,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,cAAc,EAAE;YAClB,cAAc,CAAC,YAAY,IAAI,CAAC,CAAC;YACjC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SAC9C;aAAM;YACL,cAAc,GAAG;gBACf,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,YAAY,EAAE,CAAC;gBACf,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;aACnB,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC;SACvC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,EAAoC,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,mBAAyB,OAAoB,EAAE,QAAiB;IAC9D,IAAM,UAAU,GAAM,OAAO,CAAC,OAAO,CAAC,WAAW,iBAC/C,OAAO,CAAC,OAAO,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAC5C,CAAC;IACH,IAAM,kBAAkB,GAAG,QAAQ,CAAC,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAEpF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAI,OAAO,CAAC,OAAO,CAAC,SAAS,iBAAY,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAG,CAAC,CAAC;IAExF,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC;SAChC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,EAAtC,CAAsC,CAAC;SACtD,OAAO,CAAC,UAAC,OAAO;QACf,IAAM,QAAQ,GAAG,SAAO,OAAO,CAAC,SAAS,UAAK,OAAO,CAAC,MAAM,YAAO,OAAO,CAAC,YAAY,aAAU,CAAC;QAClG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAM,cAAc,GAAG,yBAAI,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAE,IAAI,EAAE,CAAC;QAC7D,cAAc,CAAC,OAAO,CAAC,UAAC,OAAO;YAC7B,IAAM,UAAU,GAAG,SAAO,OAAS,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AApBD,4BAoBC"}
|