insa-check-core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/LICENSE +24 -0
  2. package/dist/annex-b.d.ts +6 -0
  3. package/dist/annex-b.d.ts.map +1 -0
  4. package/dist/annex-b.js +152 -0
  5. package/dist/annex-b.js.map +1 -0
  6. package/dist/checks/content/page.d.ts +7 -0
  7. package/dist/checks/content/page.d.ts.map +1 -0
  8. package/dist/checks/content/page.js +133 -0
  9. package/dist/checks/content/page.js.map +1 -0
  10. package/dist/checks/cookies/cookie-flags.d.ts +3 -0
  11. package/dist/checks/cookies/cookie-flags.d.ts.map +1 -0
  12. package/dist/checks/cookies/cookie-flags.js +41 -0
  13. package/dist/checks/cookies/cookie-flags.js.map +1 -0
  14. package/dist/checks/cookies/cookie-scope.d.ts +6 -0
  15. package/dist/checks/cookies/cookie-scope.d.ts.map +1 -0
  16. package/dist/checks/cookies/cookie-scope.js +60 -0
  17. package/dist/checks/cookies/cookie-scope.js.map +1 -0
  18. package/dist/checks/deployment/server-banner.d.ts +4 -0
  19. package/dist/checks/deployment/server-banner.d.ts.map +1 -0
  20. package/dist/checks/deployment/server-banner.js +60 -0
  21. package/dist/checks/deployment/server-banner.js.map +1 -0
  22. package/dist/checks/deployment/trace.d.ts +3 -0
  23. package/dist/checks/deployment/trace.d.ts.map +1 -0
  24. package/dist/checks/deployment/trace.js +30 -0
  25. package/dist/checks/deployment/trace.js.map +1 -0
  26. package/dist/checks/headers/clickjacking.d.ts +5 -0
  27. package/dist/checks/headers/clickjacking.d.ts.map +1 -0
  28. package/dist/checks/headers/clickjacking.js +57 -0
  29. package/dist/checks/headers/clickjacking.js.map +1 -0
  30. package/dist/checks/headers/content-type-options.d.ts +3 -0
  31. package/dist/checks/headers/content-type-options.d.ts.map +1 -0
  32. package/dist/checks/headers/content-type-options.js +17 -0
  33. package/dist/checks/headers/content-type-options.js.map +1 -0
  34. package/dist/checks/headers/cors.d.ts +4 -0
  35. package/dist/checks/headers/cors.d.ts.map +1 -0
  36. package/dist/checks/headers/cors.js +38 -0
  37. package/dist/checks/headers/cors.js.map +1 -0
  38. package/dist/checks/html.d.ts +11 -0
  39. package/dist/checks/html.d.ts.map +1 -0
  40. package/dist/checks/html.js +30 -0
  41. package/dist/checks/html.js.map +1 -0
  42. package/dist/checks/index.d.ts +7 -0
  43. package/dist/checks/index.d.ts.map +1 -0
  44. package/dist/checks/index.js +48 -0
  45. package/dist/checks/index.js.map +1 -0
  46. package/dist/checks/info-disclosure/directory-listing.d.ts +6 -0
  47. package/dist/checks/info-disclosure/directory-listing.d.ts.map +1 -0
  48. package/dist/checks/info-disclosure/directory-listing.js +60 -0
  49. package/dist/checks/info-disclosure/directory-listing.js.map +1 -0
  50. package/dist/checks/info-disclosure/exposed-files.d.ts +4 -0
  51. package/dist/checks/info-disclosure/exposed-files.d.ts.map +1 -0
  52. package/dist/checks/info-disclosure/exposed-files.js +56 -0
  53. package/dist/checks/info-disclosure/exposed-files.js.map +1 -0
  54. package/dist/checks/info-disclosure/more.d.ts +8 -0
  55. package/dist/checks/info-disclosure/more.d.ts.map +1 -0
  56. package/dist/checks/info-disclosure/more.js +186 -0
  57. package/dist/checks/info-disclosure/more.js.map +1 -0
  58. package/dist/checks/tls/certificate.d.ts +3 -0
  59. package/dist/checks/tls/certificate.d.ts.map +1 -0
  60. package/dist/checks/tls/certificate.js +49 -0
  61. package/dist/checks/tls/certificate.js.map +1 -0
  62. package/dist/checks/tls/hsts.d.ts +5 -0
  63. package/dist/checks/tls/hsts.d.ts.map +1 -0
  64. package/dist/checks/tls/hsts.js +35 -0
  65. package/dist/checks/tls/hsts.js.map +1 -0
  66. package/dist/checks/tls/https-redirect.d.ts +3 -0
  67. package/dist/checks/tls/https-redirect.d.ts.map +1 -0
  68. package/dist/checks/tls/https-redirect.js +46 -0
  69. package/dist/checks/tls/https-redirect.js.map +1 -0
  70. package/dist/checks/tls/legacy-protocols.d.ts +3 -0
  71. package/dist/checks/tls/legacy-protocols.d.ts.map +1 -0
  72. package/dist/checks/tls/legacy-protocols.js +27 -0
  73. package/dist/checks/tls/legacy-protocols.js.map +1 -0
  74. package/dist/checks/util.d.ts +22 -0
  75. package/dist/checks/util.d.ts.map +1 -0
  76. package/dist/checks/util.js +63 -0
  77. package/dist/checks/util.js.map +1 -0
  78. package/dist/code/checks/crypto.d.ts +5 -0
  79. package/dist/code/checks/crypto.d.ts.map +1 -0
  80. package/dist/code/checks/crypto.js +100 -0
  81. package/dist/code/checks/crypto.js.map +1 -0
  82. package/dist/code/checks/django.d.ts +14 -0
  83. package/dist/code/checks/django.d.ts.map +1 -0
  84. package/dist/code/checks/django.js +313 -0
  85. package/dist/code/checks/django.js.map +1 -0
  86. package/dist/code/checks/flask.d.ts +6 -0
  87. package/dist/code/checks/flask.d.ts.map +1 -0
  88. package/dist/code/checks/flask.js +100 -0
  89. package/dist/code/checks/flask.js.map +1 -0
  90. package/dist/code/checks/index.d.ts +9 -0
  91. package/dist/code/checks/index.d.ts.map +1 -0
  92. package/dist/code/checks/index.js +126 -0
  93. package/dist/code/checks/index.js.map +1 -0
  94. package/dist/code/checks/injection.d.ts +27 -0
  95. package/dist/code/checks/injection.d.ts.map +1 -0
  96. package/dist/code/checks/injection.js +189 -0
  97. package/dist/code/checks/injection.js.map +1 -0
  98. package/dist/code/checks/javascript-config.d.ts +14 -0
  99. package/dist/code/checks/javascript-config.d.ts.map +1 -0
  100. package/dist/code/checks/javascript-config.js +251 -0
  101. package/dist/code/checks/javascript-config.js.map +1 -0
  102. package/dist/code/checks/javascript.d.ts +34 -0
  103. package/dist/code/checks/javascript.d.ts.map +1 -0
  104. package/dist/code/checks/javascript.js +333 -0
  105. package/dist/code/checks/javascript.js.map +1 -0
  106. package/dist/code/checks/php.d.ts +27 -0
  107. package/dist/code/checks/php.d.ts.map +1 -0
  108. package/dist/code/checks/php.js +433 -0
  109. package/dist/code/checks/php.js.map +1 -0
  110. package/dist/code/checks/secrets.d.ts +10 -0
  111. package/dist/code/checks/secrets.d.ts.map +1 -0
  112. package/dist/code/checks/secrets.js +140 -0
  113. package/dist/code/checks/secrets.js.map +1 -0
  114. package/dist/code/checks/shared.d.ts +25 -0
  115. package/dist/code/checks/shared.d.ts.map +1 -0
  116. package/dist/code/checks/shared.js +57 -0
  117. package/dist/code/checks/shared.js.map +1 -0
  118. package/dist/code/checks/treesitter.d.ts +15 -0
  119. package/dist/code/checks/treesitter.d.ts.map +1 -0
  120. package/dist/code/checks/treesitter.js +322 -0
  121. package/dist/code/checks/treesitter.js.map +1 -0
  122. package/dist/code/checks/xml.d.ts +9 -0
  123. package/dist/code/checks/xml.d.ts.map +1 -0
  124. package/dist/code/checks/xml.js +78 -0
  125. package/dist/code/checks/xml.js.map +1 -0
  126. package/dist/code/context.d.ts +6 -0
  127. package/dist/code/context.d.ts.map +1 -0
  128. package/dist/code/context.js +92 -0
  129. package/dist/code/context.js.map +1 -0
  130. package/dist/code/detect.d.ts +3 -0
  131. package/dist/code/detect.d.ts.map +1 -0
  132. package/dist/code/detect.js +118 -0
  133. package/dist/code/detect.js.map +1 -0
  134. package/dist/code/django/settings.d.ts +46 -0
  135. package/dist/code/django/settings.d.ts.map +1 -0
  136. package/dist/code/django/settings.js +154 -0
  137. package/dist/code/django/settings.js.map +1 -0
  138. package/dist/code/findings.d.ts +18 -0
  139. package/dist/code/findings.d.ts.map +1 -0
  140. package/dist/code/findings.js +63 -0
  141. package/dist/code/findings.js.map +1 -0
  142. package/dist/code/javascript/ast.d.ts +46 -0
  143. package/dist/code/javascript/ast.d.ts.map +1 -0
  144. package/dist/code/javascript/ast.js +166 -0
  145. package/dist/code/javascript/ast.js.map +1 -0
  146. package/dist/code/javascript/index.d.ts +3 -0
  147. package/dist/code/javascript/index.d.ts.map +1 -0
  148. package/dist/code/javascript/index.js +3 -0
  149. package/dist/code/javascript/index.js.map +1 -0
  150. package/dist/code/javascript/module.d.ts +59 -0
  151. package/dist/code/javascript/module.d.ts.map +1 -0
  152. package/dist/code/javascript/module.js +250 -0
  153. package/dist/code/javascript/module.js.map +1 -0
  154. package/dist/code/php/index.d.ts +92 -0
  155. package/dist/code/php/index.d.ts.map +1 -0
  156. package/dist/code/php/index.js +316 -0
  157. package/dist/code/php/index.js.map +1 -0
  158. package/dist/code/project.d.ts +13 -0
  159. package/dist/code/project.d.ts.map +1 -0
  160. package/dist/code/project.js +69 -0
  161. package/dist/code/project.js.map +1 -0
  162. package/dist/code/python/ast.d.ts +47 -0
  163. package/dist/code/python/ast.d.ts.map +1 -0
  164. package/dist/code/python/ast.js +193 -0
  165. package/dist/code/python/ast.js.map +1 -0
  166. package/dist/code/python/index.d.ts +3 -0
  167. package/dist/code/python/index.d.ts.map +1 -0
  168. package/dist/code/python/index.js +3 -0
  169. package/dist/code/python/index.js.map +1 -0
  170. package/dist/code/python/module.d.ts +55 -0
  171. package/dist/code/python/module.d.ts.map +1 -0
  172. package/dist/code/python/module.js +215 -0
  173. package/dist/code/python/module.js.map +1 -0
  174. package/dist/code/scan.d.ts +24 -0
  175. package/dist/code/scan.d.ts.map +1 -0
  176. package/dist/code/scan.js +159 -0
  177. package/dist/code/scan.js.map +1 -0
  178. package/dist/code/treesitter/index.d.ts +83 -0
  179. package/dist/code/treesitter/index.d.ts.map +1 -0
  180. package/dist/code/treesitter/index.js +243 -0
  181. package/dist/code/treesitter/index.js.map +1 -0
  182. package/dist/code/types.d.ts +48 -0
  183. package/dist/code/types.d.ts.map +1 -0
  184. package/dist/code/types.js +2 -0
  185. package/dist/code/types.js.map +1 -0
  186. package/dist/content/en.d.ts +3 -0
  187. package/dist/content/en.d.ts.map +1 -0
  188. package/dist/content/en.js +722 -0
  189. package/dist/content/en.js.map +1 -0
  190. package/dist/content/index.d.ts +15 -0
  191. package/dist/content/index.d.ts.map +1 -0
  192. package/dist/content/index.js +21 -0
  193. package/dist/content/index.js.map +1 -0
  194. package/dist/content/types.d.ts +87 -0
  195. package/dist/content/types.d.ts.map +1 -0
  196. package/dist/content/types.js +2 -0
  197. package/dist/content/types.js.map +1 -0
  198. package/dist/engine.d.ts +52 -0
  199. package/dist/engine.d.ts.map +1 -0
  200. package/dist/engine.js +120 -0
  201. package/dist/engine.js.map +1 -0
  202. package/dist/index.d.ts +12 -0
  203. package/dist/index.d.ts.map +1 -0
  204. package/dist/index.js +11 -0
  205. package/dist/index.js.map +1 -0
  206. package/dist/meta.d.ts +4 -0
  207. package/dist/meta.d.ts.map +1 -0
  208. package/dist/meta.js +4 -0
  209. package/dist/meta.js.map +1 -0
  210. package/dist/net/context.d.ts +9 -0
  211. package/dist/net/context.d.ts.map +1 -0
  212. package/dist/net/context.js +62 -0
  213. package/dist/net/context.js.map +1 -0
  214. package/dist/net/guard.d.ts +16 -0
  215. package/dist/net/guard.d.ts.map +1 -0
  216. package/dist/net/guard.js +70 -0
  217. package/dist/net/guard.js.map +1 -0
  218. package/dist/net/http.d.ts +22 -0
  219. package/dist/net/http.d.ts.map +1 -0
  220. package/dist/net/http.js +114 -0
  221. package/dist/net/http.js.map +1 -0
  222. package/dist/net/tls.d.ts +15 -0
  223. package/dist/net/tls.d.ts.map +1 -0
  224. package/dist/net/tls.js +103 -0
  225. package/dist/net/tls.js.map +1 -0
  226. package/dist/report/html.d.ts +14 -0
  227. package/dist/report/html.d.ts.map +1 -0
  228. package/dist/report/html.js +210 -0
  229. package/dist/report/html.js.map +1 -0
  230. package/dist/report/index.d.ts +10 -0
  231. package/dist/report/index.d.ts.map +1 -0
  232. package/dist/report/index.js +10 -0
  233. package/dist/report/index.js.map +1 -0
  234. package/dist/report/manual.d.ts +62 -0
  235. package/dist/report/manual.d.ts.map +1 -0
  236. package/dist/report/manual.js +190 -0
  237. package/dist/report/manual.js.map +1 -0
  238. package/dist/report/merge.d.ts +8 -0
  239. package/dist/report/merge.d.ts.map +1 -0
  240. package/dist/report/merge.js +135 -0
  241. package/dist/report/merge.js.map +1 -0
  242. package/dist/report/summary.d.ts +10 -0
  243. package/dist/report/summary.d.ts.map +1 -0
  244. package/dist/report/summary.js +27 -0
  245. package/dist/report/summary.js.map +1 -0
  246. package/dist/report/validate.d.ts +3 -0
  247. package/dist/report/validate.d.ts.map +1 -0
  248. package/dist/report/validate.js +78 -0
  249. package/dist/report/validate.js.map +1 -0
  250. package/dist/types.d.ts +244 -0
  251. package/dist/types.d.ts.map +1 -0
  252. package/dist/types.js +2 -0
  253. package/dist/types.js.map +1 -0
  254. package/dist/validate.d.ts +4 -0
  255. package/dist/validate.d.ts.map +1 -0
  256. package/dist/validate.js +24 -0
  257. package/dist/validate.js.map +1 -0
  258. package/package.json +40 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"treesitter.js","sourceRoot":"","sources":["../../../src/code/checks/treesitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /** #86 XML external entity expansion. */
2
+ export declare const xxe: import("../types.js").CodeCheck;
3
+ /** #87 External DTD parsing. */
4
+ export declare const externalDtd: import("../types.js").CodeCheck;
5
+ /** #88 Extraneous or dangerous XML extensions (XInclude, XSLT). */
6
+ export declare const xmlExtensions: import("../types.js").CodeCheck;
7
+ /** #89 Recursive entity expansion ("billion laughs"). */
8
+ export declare const entityExpansion: import("../types.js").CodeCheck;
9
+ //# sourceMappingURL=xml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.d.ts","sourceRoot":"","sources":["../../../src/code/checks/xml.ts"],"names":[],"mappings":"AAsCA,yCAAyC;AACzC,eAAO,MAAM,GAAG,iCAoBf,CAAC;AAEF,gCAAgC;AAChC,eAAO,MAAM,WAAW,iCAiBvB,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,aAAa,iCASzB,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,eAAe,iCAkB3B,CAAC"}
@@ -0,0 +1,78 @@
1
+ import { pyFinding } from "../findings.js";
2
+ import { callArgs, isTrue, kwarg } from "../python/index.js";
3
+ import { patternCheck } from "./shared.js";
4
+ const STDLIB_PARSE = /^xml\.(etree\.(c?ElementTree)\.(parse|fromstring|XML|iterparse|XMLParser)|dom\.(minidom|pulldom|expatbuilder)\.(parse|parseString)|sax\.(parse|parseString|make_parser))$/;
5
+ const LXML_PARSE = /^lxml\.etree\.(parse|fromstring|XML|iterparse|XMLParser)$/;
6
+ const cache = new WeakMap();
7
+ function xmlUsage(index) {
8
+ let usage = cache.get(index);
9
+ if (!usage) {
10
+ const calls = index.calls();
11
+ usage = {
12
+ stdlib: calls.filter((s) => STDLIB_PARSE.test(s.name ?? "")),
13
+ lxml: calls.filter((s) => LXML_PARSE.test(s.name ?? "")),
14
+ defused: index.imports("defusedxml"),
15
+ };
16
+ cache.set(index, usage);
17
+ }
18
+ return usage;
19
+ }
20
+ const passDetail = (index, what) => {
21
+ const u = xmlUsage(index);
22
+ const total = u.stdlib.length + u.lxml.length;
23
+ return total === 0
24
+ ? `No XML parsing found in ${index.modules.length} Python file(s)${u.defused ? " (defusedxml is used)" : ""}.`
25
+ : `${total} XML parse call(s) found; none ${what}.`;
26
+ };
27
+ /** #86 XML external entity expansion. */
28
+ export const xxe = patternCheck("py-xml-xxe", ["python"], (index) => {
29
+ const out = [];
30
+ for (const s of xmlUsage(index).lxml) {
31
+ if (s.method === "XMLParser" && isTrue(kwarg(s.node, "resolve_entities"))) {
32
+ out.push(pyFinding(s.module, s.node, "lxml-resolve-entities", "high", "resolve_entities=True expands external entities (XXE): file disclosure and SSRF."));
33
+ }
34
+ else if (s.method !== "XMLParser" && !kwarg(s.node, "parser") && !callArgs(s.node)[1] && s.module.isRequestDerived(s.node, s.module.scope(s.fn))) {
35
+ out.push(pyFinding(s.module, s.node, "lxml-default-parser-untrusted", "medium", "lxml's default parser resolves entities in older versions; parse untrusted XML with defusedxml or XMLParser(resolve_entities=False)."));
36
+ }
37
+ }
38
+ for (const s of index.calls()) {
39
+ if (s.method === "setFeature" && /feature_external_(ges|pes)/.test(s.module.line(s.node._l)) && /True|1/.test(s.module.line(s.node._l))) {
40
+ out.push(pyFinding(s.module, s.node, "sax-external-entities", "high", "Enabling external entities on a SAX parser allows XXE."));
41
+ }
42
+ }
43
+ return out;
44
+ }, (_, index) => passDetail(index, "enables external entity resolution"));
45
+ /** #87 External DTD parsing. */
46
+ export const externalDtd = patternCheck("py-xml-dtd", ["python"], (index) => xmlUsage(index)
47
+ .lxml.filter((s) => s.method === "XMLParser")
48
+ .flatMap((s) => {
49
+ const out = [];
50
+ if (isTrue(kwarg(s.node, "load_dtd")) || isTrue(kwarg(s.node, "dtd_validation"))) {
51
+ out.push(pyFinding(s.module, s.node, "lxml-load-dtd", "high", "Loading DTDs lets documents pull external definitions."));
52
+ }
53
+ if (kwarg(s.node, "no_network")?.["value"] === false) {
54
+ out.push(pyFinding(s.module, s.node, "lxml-network", "high", "no_network=False lets the parser fetch external DTDs/entities over the network (SSRF)."));
55
+ }
56
+ return out;
57
+ }), (_, index) => passDetail(index, "loads external DTDs or allows network access"));
58
+ /** #88 Extraneous or dangerous XML extensions (XInclude, XSLT). */
59
+ export const xmlExtensions = patternCheck("py-xml-extensions", ["python"], (index) => index
60
+ .calls()
61
+ .filter((s) => s.method === "xinclude" || /^lxml\.etree\.(XInclude|XSLT)$/.test(s.name ?? ""))
62
+ .map((s) => pyFinding(s.module, s.node, "lxml-xinclude-xslt", "medium", "XInclude/XSLT processing can read local files or run extension functions; disable unless required.")), (_, index) => passDetail(index, "uses XInclude/XSLT"));
63
+ /** #89 Recursive entity expansion ("billion laughs"). */
64
+ export const entityExpansion = patternCheck("py-xml-entity-expansion", ["python"], (index) => {
65
+ const u = xmlUsage(index);
66
+ const out = [];
67
+ for (const s of u.lxml) {
68
+ if (isTrue(kwarg(s.node, "huge_tree"))) {
69
+ out.push(pyFinding(s.module, s.node, "lxml-huge-tree", "medium", "huge_tree=True removes lxml's limits on entity expansion and depth."));
70
+ }
71
+ }
72
+ // Modern CPython bundles expat >= 2.4.1 with expansion limits, so stdlib use is only a review item.
73
+ for (const s of u.stdlib) {
74
+ out.push(pyFinding(s.module, s.node, "stdlib-xml-parser", "low", "Standard-library XML parsers are only protected against entity expansion with expat >= 2.4.1; prefer defusedxml for untrusted XML."));
75
+ }
76
+ return out;
77
+ }, (_, index) => passDetail(index, "disables entity-expansion limits"));
78
+ //# sourceMappingURL=xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.js","sourceRoot":"","sources":["../../../src/code/checks/xml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { CodeContext, ProjectInfo, SourceFile } from "./types.js";
2
+ /** JavaScript/TypeScript source files worth analysing (no type declarations or minified bundles). */
3
+ export declare const isJsSource: (p: string) => boolean;
4
+ /** Filesystem-backed CodeContext. Files are read from disk only; nothing leaves the machine. */
5
+ export declare function createCodeContext(root: string, files: SourceFile[], project: ProjectInfo): CodeContext;
6
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/code/context.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEvE,qGAAqG;AACrG,eAAO,MAAM,UAAU,MAAO,MAAM,YAAwG,CAAC;AAE7I,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,WAAW,GAAG,WAAW,CA6EtG"}
@@ -0,0 +1,92 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { JsIndex, JsModule, parseJs } from "./javascript/index.js";
4
+ import { parsePhp, PhpIndex, PhpModule } from "./php/index.js";
5
+ import { parsePythonFiles, PyModule, PythonIndex } from "./python/index.js";
6
+ import { langOfFile, parseTs, TsIndex } from "./treesitter/index.js";
7
+ /** JavaScript/TypeScript source files worth analysing (no type declarations or minified bundles). */
8
+ export const isJsSource = (p) => /\.(js|mjs|cjs|jsx|ts|mts|cts|tsx)$/.test(p) && !/\.d\.[cm]?ts$|\.min\.js$|[.-]bundle\.js$/.test(p);
9
+ /** Filesystem-backed CodeContext. Files are read from disk only; nothing leaves the machine. */
10
+ export function createCodeContext(root, files, project) {
11
+ const cache = new Map();
12
+ let python;
13
+ let javascript;
14
+ let php;
15
+ let treeSitter;
16
+ const read = (rel) => {
17
+ let pending = cache.get(rel);
18
+ if (!pending) {
19
+ pending = readFile(path.join(root, rel), "utf8");
20
+ cache.set(rel, pending);
21
+ }
22
+ return pending;
23
+ };
24
+ return {
25
+ name: path.basename(root),
26
+ project,
27
+ files,
28
+ read,
29
+ python() {
30
+ python ??= (async () => {
31
+ const pyFiles = files.filter((f) => f.path.endsWith(".py")).map((f) => f.path);
32
+ const { modules, errors } = await parsePythonFiles(root, pyFiles);
33
+ const parsed = await Promise.all([...modules.entries()].map(async ([rel, tree]) => new PyModule(rel, tree, await read(rel))));
34
+ parsed.sort((a, b) => a.path.localeCompare(b.path));
35
+ return new PythonIndex(parsed, errors);
36
+ })();
37
+ return python;
38
+ },
39
+ javascript() {
40
+ javascript ??= (async () => {
41
+ const modules = [];
42
+ const errors = [];
43
+ for (const f of files.filter((x) => isJsSource(x.path))) {
44
+ const source = await read(f.path);
45
+ const { ast, error } = parseJs(source, f.path);
46
+ if (ast)
47
+ modules.push(new JsModule(f.path, ast, source));
48
+ else
49
+ errors.push({ file: f.path, error: error ?? "parse error" });
50
+ }
51
+ return new JsIndex(modules, errors);
52
+ })();
53
+ return javascript;
54
+ },
55
+ php() {
56
+ php ??= (async () => {
57
+ const modules = [];
58
+ const errors = [];
59
+ for (const f of files.filter((x) => x.path.endsWith(".php"))) {
60
+ const source = await read(f.path);
61
+ const { ast, error } = parsePhp(source, f.path);
62
+ if (ast)
63
+ modules.push(new PhpModule(f.path, ast, source));
64
+ else
65
+ errors.push({ file: f.path, error: error ?? "parse error" });
66
+ }
67
+ return new PhpIndex(modules, errors);
68
+ })();
69
+ return php;
70
+ },
71
+ treeSitter() {
72
+ treeSitter ??= (async () => {
73
+ const modules = [];
74
+ const errors = [];
75
+ for (const f of files) {
76
+ const lang = langOfFile(f.path);
77
+ if (!lang)
78
+ continue;
79
+ try {
80
+ modules.push(await parseTs(lang, f.path, await read(f.path)));
81
+ }
82
+ catch (err) {
83
+ errors.push({ file: f.path, error: err.message });
84
+ }
85
+ }
86
+ return new TsIndex(modules, errors);
87
+ })();
88
+ return treeSitter;
89
+ },
90
+ };
91
+ }
92
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/code/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ProjectInfo, SourceFile } from "./types.js";
2
+ export declare function detectProject(files: readonly SourceFile[], read: (p: string) => Promise<string>): Promise<ProjectInfo>;
3
+ //# sourceMappingURL=detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/code/detect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAyB,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAsGjF,wBAAsB,aAAa,CACjC,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GACnC,OAAO,CAAC,WAAW,CAAC,CAiCtB"}
@@ -0,0 +1,118 @@
1
+ import { isJsSource } from "./context.js";
2
+ import { langOfFile } from "./treesitter/index.js";
3
+ const has = (files, re) => files.filter((f) => re.test(f.path));
4
+ async function manifestMentions(files, read, manifest, pkg, label) {
5
+ const evidence = [];
6
+ for (const f of has(files, manifest)) {
7
+ if (pkg.test(await read(f.path)))
8
+ evidence.push(`${f.path} lists ${label}`);
9
+ }
10
+ return evidence;
11
+ }
12
+ const PACKAGE_JSON = /(^|\/)package\.json$/;
13
+ const PY_MANIFEST = /(^|\/)(requirements[^/]*\.(txt|in)|pyproject\.toml|Pipfile|setup\.py|setup\.cfg)$/;
14
+ const DETECTORS = [
15
+ {
16
+ framework: "django",
17
+ language: "python",
18
+ async detect(files, read) {
19
+ const evidence = await manifestMentions(files, read, PY_MANIFEST, /\bdjango\b/i, "Django");
20
+ for (const f of has(files, /(^|\/)manage\.py$/)) {
21
+ if (/DJANGO_SETTINGS_MODULE/.test(await read(f.path)))
22
+ evidence.push(`${f.path} sets DJANGO_SETTINGS_MODULE`);
23
+ }
24
+ for (const f of has(files, /(^|\/)settings(\/[^/]+)?\.py$/)) {
25
+ if (/^\s*INSTALLED_APPS\s*=/m.test(await read(f.path)))
26
+ evidence.push(`${f.path} defines INSTALLED_APPS`);
27
+ }
28
+ return evidence;
29
+ },
30
+ },
31
+ {
32
+ framework: "flask",
33
+ language: "python",
34
+ detect: (files, read) => manifestMentions(files, read, PY_MANIFEST, /\bflask\b/i, "Flask"),
35
+ },
36
+ {
37
+ framework: "fastapi",
38
+ language: "python",
39
+ detect: (files, read) => manifestMentions(files, read, PY_MANIFEST, /\bfastapi\b/i, "FastAPI"),
40
+ },
41
+ ...[
42
+ ["express", /"express"\s*:/, "express"],
43
+ ["koa", /"koa"\s*:/, "koa"],
44
+ ["fastify", /"fastify"\s*:/, "fastify"],
45
+ ["next", /"next"\s*:/, "next"],
46
+ ["nestjs", /"@nestjs\/core"\s*:/, "@nestjs/core"],
47
+ ].map(([framework, pkg, label]) => ({
48
+ framework,
49
+ language: "javascript",
50
+ detect: (files, read) => manifestMentions(files, read, PACKAGE_JSON, pkg, label),
51
+ })),
52
+ {
53
+ framework: "spring",
54
+ language: "java",
55
+ detect: (files, read) => manifestMentions(files, read, /(^|\/)(pom\.xml|build\.gradle(\.kts)?)$/, /spring-boot|springframework/, "Spring"),
56
+ },
57
+ {
58
+ framework: "aspnet",
59
+ language: "csharp",
60
+ detect: (files, read) => manifestMentions(files, read, /\.csproj$/, /Microsoft\.NET\.Sdk\.Web|Microsoft\.AspNetCore/, "ASP.NET Core"),
61
+ },
62
+ {
63
+ framework: "rails",
64
+ language: "ruby",
65
+ detect: (files, read) => manifestMentions(files, read, /(^|\/)Gemfile$/, /^\s*gem\s+["']rails["']/m, "Rails"),
66
+ },
67
+ {
68
+ framework: "gin",
69
+ language: "go",
70
+ detect: (files, read) => manifestMentions(files, read, /(^|\/)go\.mod$/, /gin-gonic\/gin|labstack\/echo|gofiber\/fiber|go-chi\/chi|gorilla\/mux/, "a Go web framework"),
71
+ },
72
+ {
73
+ framework: "laravel",
74
+ language: "php",
75
+ async detect(files, read) {
76
+ const evidence = await manifestMentions(files, read, /(^|\/)composer\.json$/, /"laravel\/framework"\s*:/, "laravel/framework");
77
+ if (has(files, /^artisan$/).length)
78
+ evidence.push("artisan present");
79
+ return evidence;
80
+ },
81
+ },
82
+ ];
83
+ export async function detectProject(files, read) {
84
+ const frameworks = [];
85
+ const evidence = [];
86
+ const languages = new Map();
87
+ for (const d of DETECTORS) {
88
+ const found = await d.detect(files, read);
89
+ if (found.length) {
90
+ frameworks.push(d.framework);
91
+ evidence.push(...found);
92
+ languages.set(d.language, (languages.get(d.language) ?? 0) + 100);
93
+ }
94
+ }
95
+ // Count source files per language; every language present is analysed.
96
+ const present = new Set();
97
+ for (const f of files) {
98
+ const lang = f.path.endsWith(".py")
99
+ ? "python"
100
+ : isJsSource(f.path)
101
+ ? "javascript"
102
+ : f.path.endsWith(".php")
103
+ ? "php"
104
+ : langOfFile(f.path);
105
+ if (!lang)
106
+ continue;
107
+ present.add(lang);
108
+ languages.set(lang, (languages.get(lang) ?? 0) + 1);
109
+ }
110
+ const ordered = [...languages.entries()].sort((a, b) => b[1] - a[1]).map(([l]) => l);
111
+ return {
112
+ language: ordered[0] ?? null,
113
+ languages: ordered.filter((l) => present.has(l)),
114
+ frameworks,
115
+ evidence,
116
+ };
117
+ }
118
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/code/detect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { CodeFinding } from "../../types.js";
2
+ import { type PyModule, type PyNode, type PythonIndex } from "../python/index.js";
3
+ /** Marker for values that are computed at runtime (environment variables, function calls...). */
4
+ export declare const DYNAMIC: unique symbol;
5
+ export type Literal = string | number | boolean | null | Literal[] | {
6
+ [k: string]: Literal;
7
+ };
8
+ export type SettingsFileKind = "base" | "prod" | "dev";
9
+ export interface SettingAssignment {
10
+ name: string;
11
+ module: PyModule;
12
+ node: PyNode;
13
+ line: number;
14
+ op: "=" | "+=";
15
+ value: Literal | typeof DYNAMIC;
16
+ kind: SettingsFileKind;
17
+ }
18
+ export interface EffectiveSetting {
19
+ /** DYNAMIC when computed at runtime; cannot be decided statically. */
20
+ value: Literal | typeof DYNAMIC;
21
+ /** The assignment that determined the value. */
22
+ at: SettingAssignment;
23
+ /** Only development/test settings define it. */
24
+ devOnly: boolean;
25
+ }
26
+ /** Evaluates literal Python expressions; anything else is DYNAMIC. */
27
+ export declare function evalLiteral(node: unknown): Literal | typeof DYNAMIC;
28
+ export declare class DjangoSettings {
29
+ readonly modules: PyModule[];
30
+ private readonly byName;
31
+ constructor(modules: PyModule[]);
32
+ get found(): boolean;
33
+ /** The settings file to cite for settings that are absent (Django defaults apply). */
34
+ get primary(): PyModule | undefined;
35
+ all(name: string): SettingAssignment[];
36
+ /** Production-relevant value: base settings overridden by production settings; dev/test files ignored unless nothing else defines it. */
37
+ get(name: string): EffectiveSetting | undefined;
38
+ /** A finding located at a setting's assignment. */
39
+ findingAt(s: SettingAssignment, rule: string, confidence: CodeFinding["confidence"], why: string): CodeFinding;
40
+ /** A finding for a setting that is not set at all (Django's default applies). */
41
+ findingAbsent(name: string, defaultDesc: string, rule: string, confidence: CodeFinding["confidence"], why: string): CodeFinding;
42
+ }
43
+ /** Settings modules: files defining Django marker settings, or named settings.py / settings/*.py. */
44
+ export declare function djangoSettings(index: PythonIndex): DjangoSettings;
45
+ export declare function describe(value: Literal | typeof DYNAMIC): string;
46
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/code/django/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAAU,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE1F,iGAAiG;AACjG,eAAO,MAAM,OAAO,eAAoB,CAAC;AACzC,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,OAAO,EAAE,GAAG;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAE9F,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,EAAE,OAAO,GAAG,OAAO,OAAO,CAAC;IAChC,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,KAAK,EAAE,OAAO,GAAG,OAAO,OAAO,CAAC;IAChC,gDAAgD;IAChD,EAAE,EAAE,iBAAiB,CAAC;IACtB,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,OAAO,CA6CnE;AAED,qBAAa,cAAc;IAGb,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE;IAFxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IAEjE,YAAqB,OAAO,EAAE,QAAQ,EAAE,EAiBvC;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,sFAAsF;IACtF,IAAI,OAAO,IAAI,QAAQ,GAAG,SAAS,CAElC;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAErC;IAED,yIAAyI;IACzI,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAc9C;IAED,mDAAmD;IACnD,SAAS,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CAE7G;IAED,iFAAiF;IACjF,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CAU9H;CACF;AAID,qGAAqG;AACrG,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,cAAc,CAajE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,OAAO,GAAG,MAAM,CAEhE"}
@@ -0,0 +1,154 @@
1
+ import { snippetOf } from "../findings.js";
2
+ import { isNode } from "../python/index.js";
3
+ /** Marker for values that are computed at runtime (environment variables, function calls...). */
4
+ export const DYNAMIC = Symbol("dynamic");
5
+ const MARKERS = new Set(["INSTALLED_APPS", "MIDDLEWARE", "MIDDLEWARE_CLASSES", "ROOT_URLCONF", "SECRET_KEY"]);
6
+ const DEV_FILE = /(^|[\/_.-])(dev|devel|develop|development|local|test|tests|testing|ci)([\/_.-]|$)/i;
7
+ const PROD_FILE = /(^|[\/_.-])(prod|production|live|deploy|staging)([\/_.-]|$)/i;
8
+ /** Evaluates literal Python expressions; anything else is DYNAMIC. */
9
+ export function evalLiteral(node) {
10
+ if (!isNode(node))
11
+ return DYNAMIC;
12
+ switch (node._t) {
13
+ case "Constant":
14
+ return node["_bytes"] ? DYNAMIC : node["value"];
15
+ case "List":
16
+ case "Tuple":
17
+ case "Set": {
18
+ const items = node["elts"].map(evalLiteral);
19
+ return items.includes(DYNAMIC) ? DYNAMIC : items;
20
+ }
21
+ case "Dict": {
22
+ const out = {};
23
+ const keys = node["keys"];
24
+ const values = node["values"];
25
+ for (let i = 0; i < keys.length; i++) {
26
+ const k = evalLiteral(keys[i]);
27
+ const v = evalLiteral(values[i]);
28
+ if (typeof k !== "string" || v === DYNAMIC)
29
+ return DYNAMIC;
30
+ out[k] = v;
31
+ }
32
+ return out;
33
+ }
34
+ case "UnaryOp": {
35
+ const v = evalLiteral(node["operand"]);
36
+ const op = node["op"]._t;
37
+ if (op === "USub" && typeof v === "number")
38
+ return -v;
39
+ if (op === "Not" && v !== DYNAMIC)
40
+ return !v;
41
+ return DYNAMIC;
42
+ }
43
+ case "BinOp": {
44
+ const l = evalLiteral(node["left"]);
45
+ const r = evalLiteral(node["right"]);
46
+ const op = node["op"]._t;
47
+ if (typeof l === "number" && typeof r === "number") {
48
+ if (op === "Mult")
49
+ return l * r;
50
+ if (op === "Add")
51
+ return l + r;
52
+ if (op === "Sub")
53
+ return l - r;
54
+ }
55
+ if (op === "Add" && Array.isArray(l) && Array.isArray(r))
56
+ return [...l, ...r];
57
+ return DYNAMIC;
58
+ }
59
+ default:
60
+ return DYNAMIC;
61
+ }
62
+ }
63
+ export class DjangoSettings {
64
+ modules;
65
+ byName = new Map();
66
+ constructor(modules) {
67
+ this.modules = modules;
68
+ for (const module of modules) {
69
+ const kind = DEV_FILE.test(module.path) ? "dev" : PROD_FILE.test(module.path) ? "prod" : "base";
70
+ for (const stmt of module.tree["body"]) {
71
+ let target;
72
+ let op = "=";
73
+ if (stmt._t === "Assign" && stmt["targets"].length === 1)
74
+ target = stmt["targets"][0];
75
+ else if (stmt._t === "AnnAssign")
76
+ target = stmt["target"];
77
+ else if (stmt._t === "AugAssign" && stmt["op"]._t === "Add")
78
+ [target, op] = [stmt["target"], "+="];
79
+ if (target?._t !== "Name")
80
+ continue;
81
+ const name = target["id"];
82
+ if (name !== name.toUpperCase())
83
+ continue;
84
+ const list = this.byName.get(name) ?? [];
85
+ list.push({ name, module, node: stmt, line: stmt._l ?? 1, op, value: evalLiteral(stmt["value"]), kind });
86
+ this.byName.set(name, list);
87
+ }
88
+ }
89
+ }
90
+ get found() {
91
+ return this.modules.length > 0;
92
+ }
93
+ /** The settings file to cite for settings that are absent (Django defaults apply). */
94
+ get primary() {
95
+ return this.modules.find((m) => !DEV_FILE.test(m.path) && /settings\.py$|base\.py$/.test(m.path)) ?? this.modules[0];
96
+ }
97
+ all(name) {
98
+ return this.byName.get(name) ?? [];
99
+ }
100
+ /** Production-relevant value: base settings overridden by production settings; dev/test files ignored unless nothing else defines it. */
101
+ get(name) {
102
+ const all = this.all(name);
103
+ if (all.length === 0)
104
+ return undefined;
105
+ const relevant = all.filter((a) => a.kind !== "dev");
106
+ const devOnly = relevant.length === 0;
107
+ const ordered = devOnly ? all : [...relevant.filter((a) => a.kind === "base"), ...relevant.filter((a) => a.kind === "prod")];
108
+ let value = DYNAMIC;
109
+ let at = ordered[0];
110
+ for (const a of ordered) {
111
+ if (a.op === "=")
112
+ value = a.value;
113
+ else
114
+ value = Array.isArray(value) && Array.isArray(a.value) ? [...value, ...a.value] : DYNAMIC;
115
+ at = a;
116
+ }
117
+ return { value, at, devOnly };
118
+ }
119
+ /** A finding located at a setting's assignment. */
120
+ findingAt(s, rule, confidence, why) {
121
+ return { file: s.module.path, line: s.line, snippet: snippetOf(s.module.line(s.line)), why, confidence, method: "ast", rule };
122
+ }
123
+ /** A finding for a setting that is not set at all (Django's default applies). */
124
+ findingAbsent(name, defaultDesc, rule, confidence, why) {
125
+ return {
126
+ file: this.primary?.path ?? "(settings)",
127
+ line: 1,
128
+ snippet: `${name} not set (Django default: ${defaultDesc})`,
129
+ why,
130
+ confidence,
131
+ method: "ast",
132
+ rule,
133
+ };
134
+ }
135
+ }
136
+ const cache = new WeakMap();
137
+ /** Settings modules: files defining Django marker settings, or named settings.py / settings/*.py. */
138
+ export function djangoSettings(index) {
139
+ let settings = cache.get(index);
140
+ if (!settings) {
141
+ const modules = index.modules.filter((m) => {
142
+ if (/(^|\/)settings(\.py$|\/)/.test(m.path))
143
+ return true;
144
+ return m.tree["body"].some((s) => s._t === "Assign" && s["targets"].some((t) => t._t === "Name" && MARKERS.has(t["id"])));
145
+ });
146
+ settings = new DjangoSettings(modules);
147
+ cache.set(index, settings);
148
+ }
149
+ return settings;
150
+ }
151
+ export function describe(value) {
152
+ return value === DYNAMIC ? "computed at runtime" : JSON.stringify(value);
153
+ }
154
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/code/django/settings.ts"],"names":[],"mappings":"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"}