@etcsec-com/etc-collector 1.4.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 (617) hide show
  1. package/.env.example +60 -0
  2. package/.env.test.example +33 -0
  3. package/.github/workflows/ci.yml +83 -0
  4. package/.github/workflows/release.yml +246 -0
  5. package/.prettierrc.json +10 -0
  6. package/CHANGELOG.md +15 -0
  7. package/Dockerfile +57 -0
  8. package/LICENSE +190 -0
  9. package/README.md +194 -0
  10. package/dist/api/controllers/audit.controller.d.ts +21 -0
  11. package/dist/api/controllers/audit.controller.d.ts.map +1 -0
  12. package/dist/api/controllers/audit.controller.js +179 -0
  13. package/dist/api/controllers/audit.controller.js.map +1 -0
  14. package/dist/api/controllers/auth.controller.d.ts +16 -0
  15. package/dist/api/controllers/auth.controller.d.ts.map +1 -0
  16. package/dist/api/controllers/auth.controller.js +146 -0
  17. package/dist/api/controllers/auth.controller.js.map +1 -0
  18. package/dist/api/controllers/export.controller.d.ts +27 -0
  19. package/dist/api/controllers/export.controller.d.ts.map +1 -0
  20. package/dist/api/controllers/export.controller.js +80 -0
  21. package/dist/api/controllers/export.controller.js.map +1 -0
  22. package/dist/api/controllers/health.controller.d.ts +5 -0
  23. package/dist/api/controllers/health.controller.d.ts.map +1 -0
  24. package/dist/api/controllers/health.controller.js +16 -0
  25. package/dist/api/controllers/health.controller.js.map +1 -0
  26. package/dist/api/controllers/jobs.controller.d.ts +13 -0
  27. package/dist/api/controllers/jobs.controller.d.ts.map +1 -0
  28. package/dist/api/controllers/jobs.controller.js +125 -0
  29. package/dist/api/controllers/jobs.controller.js.map +1 -0
  30. package/dist/api/controllers/providers.controller.d.ts +15 -0
  31. package/dist/api/controllers/providers.controller.d.ts.map +1 -0
  32. package/dist/api/controllers/providers.controller.js +112 -0
  33. package/dist/api/controllers/providers.controller.js.map +1 -0
  34. package/dist/api/dto/AuditRequest.dto.d.ts +6 -0
  35. package/dist/api/dto/AuditRequest.dto.d.ts.map +1 -0
  36. package/dist/api/dto/AuditRequest.dto.js +3 -0
  37. package/dist/api/dto/AuditRequest.dto.js.map +1 -0
  38. package/dist/api/dto/AuditResponse.dto.d.ts +17 -0
  39. package/dist/api/dto/AuditResponse.dto.d.ts.map +1 -0
  40. package/dist/api/dto/AuditResponse.dto.js +3 -0
  41. package/dist/api/dto/AuditResponse.dto.js.map +1 -0
  42. package/dist/api/dto/TokenRequest.dto.d.ts +6 -0
  43. package/dist/api/dto/TokenRequest.dto.d.ts.map +1 -0
  44. package/dist/api/dto/TokenRequest.dto.js +3 -0
  45. package/dist/api/dto/TokenRequest.dto.js.map +1 -0
  46. package/dist/api/dto/TokenResponse.dto.d.ts +12 -0
  47. package/dist/api/dto/TokenResponse.dto.d.ts.map +1 -0
  48. package/dist/api/dto/TokenResponse.dto.js +3 -0
  49. package/dist/api/dto/TokenResponse.dto.js.map +1 -0
  50. package/dist/api/middlewares/authenticate.d.ts +12 -0
  51. package/dist/api/middlewares/authenticate.d.ts.map +1 -0
  52. package/dist/api/middlewares/authenticate.js +141 -0
  53. package/dist/api/middlewares/authenticate.js.map +1 -0
  54. package/dist/api/middlewares/errorHandler.d.ts +3 -0
  55. package/dist/api/middlewares/errorHandler.d.ts.map +1 -0
  56. package/dist/api/middlewares/errorHandler.js +30 -0
  57. package/dist/api/middlewares/errorHandler.js.map +1 -0
  58. package/dist/api/middlewares/rateLimit.d.ts +3 -0
  59. package/dist/api/middlewares/rateLimit.d.ts.map +1 -0
  60. package/dist/api/middlewares/rateLimit.js +34 -0
  61. package/dist/api/middlewares/rateLimit.js.map +1 -0
  62. package/dist/api/middlewares/validate.d.ts +4 -0
  63. package/dist/api/middlewares/validate.d.ts.map +1 -0
  64. package/dist/api/middlewares/validate.js +31 -0
  65. package/dist/api/middlewares/validate.js.map +1 -0
  66. package/dist/api/routes/audit.routes.d.ts +5 -0
  67. package/dist/api/routes/audit.routes.d.ts.map +1 -0
  68. package/dist/api/routes/audit.routes.js +24 -0
  69. package/dist/api/routes/audit.routes.js.map +1 -0
  70. package/dist/api/routes/auth.routes.d.ts +6 -0
  71. package/dist/api/routes/auth.routes.d.ts.map +1 -0
  72. package/dist/api/routes/auth.routes.js +22 -0
  73. package/dist/api/routes/auth.routes.js.map +1 -0
  74. package/dist/api/routes/export.routes.d.ts +5 -0
  75. package/dist/api/routes/export.routes.d.ts.map +1 -0
  76. package/dist/api/routes/export.routes.js +16 -0
  77. package/dist/api/routes/export.routes.js.map +1 -0
  78. package/dist/api/routes/health.routes.d.ts +4 -0
  79. package/dist/api/routes/health.routes.d.ts.map +1 -0
  80. package/dist/api/routes/health.routes.js +11 -0
  81. package/dist/api/routes/health.routes.js.map +1 -0
  82. package/dist/api/routes/index.d.ts +10 -0
  83. package/dist/api/routes/index.d.ts.map +1 -0
  84. package/dist/api/routes/index.js +20 -0
  85. package/dist/api/routes/index.js.map +1 -0
  86. package/dist/api/routes/providers.routes.d.ts +5 -0
  87. package/dist/api/routes/providers.routes.d.ts.map +1 -0
  88. package/dist/api/routes/providers.routes.js +13 -0
  89. package/dist/api/routes/providers.routes.js.map +1 -0
  90. package/dist/api/validators/audit.schemas.d.ts +60 -0
  91. package/dist/api/validators/audit.schemas.d.ts.map +1 -0
  92. package/dist/api/validators/audit.schemas.js +55 -0
  93. package/dist/api/validators/audit.schemas.js.map +1 -0
  94. package/dist/api/validators/auth.schemas.d.ts +17 -0
  95. package/dist/api/validators/auth.schemas.d.ts.map +1 -0
  96. package/dist/api/validators/auth.schemas.js +21 -0
  97. package/dist/api/validators/auth.schemas.js.map +1 -0
  98. package/dist/app.d.ts +3 -0
  99. package/dist/app.d.ts.map +1 -0
  100. package/dist/app.js +62 -0
  101. package/dist/app.js.map +1 -0
  102. package/dist/config/config.schema.d.ts +65 -0
  103. package/dist/config/config.schema.d.ts.map +1 -0
  104. package/dist/config/config.schema.js +95 -0
  105. package/dist/config/config.schema.js.map +1 -0
  106. package/dist/config/index.d.ts +4 -0
  107. package/dist/config/index.d.ts.map +1 -0
  108. package/dist/config/index.js +75 -0
  109. package/dist/config/index.js.map +1 -0
  110. package/dist/container.d.ts +47 -0
  111. package/dist/container.d.ts.map +1 -0
  112. package/dist/container.js +137 -0
  113. package/dist/container.js.map +1 -0
  114. package/dist/data/database.d.ts +13 -0
  115. package/dist/data/database.d.ts.map +1 -0
  116. package/dist/data/database.js +68 -0
  117. package/dist/data/database.js.map +1 -0
  118. package/dist/data/jobs/token-cleanup.job.d.ts +23 -0
  119. package/dist/data/jobs/token-cleanup.job.d.ts.map +1 -0
  120. package/dist/data/jobs/token-cleanup.job.js +96 -0
  121. package/dist/data/jobs/token-cleanup.job.js.map +1 -0
  122. package/dist/data/migrations/migration.runner.d.ts +13 -0
  123. package/dist/data/migrations/migration.runner.d.ts.map +1 -0
  124. package/dist/data/migrations/migration.runner.js +136 -0
  125. package/dist/data/migrations/migration.runner.js.map +1 -0
  126. package/dist/data/models/Token.model.d.ts +30 -0
  127. package/dist/data/models/Token.model.d.ts.map +1 -0
  128. package/dist/data/models/Token.model.js +3 -0
  129. package/dist/data/models/Token.model.js.map +1 -0
  130. package/dist/data/repositories/token.repository.d.ts +16 -0
  131. package/dist/data/repositories/token.repository.d.ts.map +1 -0
  132. package/dist/data/repositories/token.repository.js +97 -0
  133. package/dist/data/repositories/token.repository.js.map +1 -0
  134. package/dist/providers/azure/auth.provider.d.ts +5 -0
  135. package/dist/providers/azure/auth.provider.d.ts.map +1 -0
  136. package/dist/providers/azure/auth.provider.js +13 -0
  137. package/dist/providers/azure/auth.provider.js.map +1 -0
  138. package/dist/providers/azure/azure-errors.d.ts +40 -0
  139. package/dist/providers/azure/azure-errors.d.ts.map +1 -0
  140. package/dist/providers/azure/azure-errors.js +121 -0
  141. package/dist/providers/azure/azure-errors.js.map +1 -0
  142. package/dist/providers/azure/azure-retry.d.ts +41 -0
  143. package/dist/providers/azure/azure-retry.d.ts.map +1 -0
  144. package/dist/providers/azure/azure-retry.js +85 -0
  145. package/dist/providers/azure/azure-retry.js.map +1 -0
  146. package/dist/providers/azure/graph-client.d.ts +26 -0
  147. package/dist/providers/azure/graph-client.d.ts.map +1 -0
  148. package/dist/providers/azure/graph-client.js +146 -0
  149. package/dist/providers/azure/graph-client.js.map +1 -0
  150. package/dist/providers/azure/graph.provider.d.ts +23 -0
  151. package/dist/providers/azure/graph.provider.d.ts.map +1 -0
  152. package/dist/providers/azure/graph.provider.js +161 -0
  153. package/dist/providers/azure/graph.provider.js.map +1 -0
  154. package/dist/providers/azure/queries/app.queries.d.ts +6 -0
  155. package/dist/providers/azure/queries/app.queries.d.ts.map +1 -0
  156. package/dist/providers/azure/queries/app.queries.js +9 -0
  157. package/dist/providers/azure/queries/app.queries.js.map +1 -0
  158. package/dist/providers/azure/queries/policy.queries.d.ts +6 -0
  159. package/dist/providers/azure/queries/policy.queries.d.ts.map +1 -0
  160. package/dist/providers/azure/queries/policy.queries.js +9 -0
  161. package/dist/providers/azure/queries/policy.queries.js.map +1 -0
  162. package/dist/providers/azure/queries/user.queries.d.ts +7 -0
  163. package/dist/providers/azure/queries/user.queries.d.ts.map +1 -0
  164. package/dist/providers/azure/queries/user.queries.js +10 -0
  165. package/dist/providers/azure/queries/user.queries.js.map +1 -0
  166. package/dist/providers/interfaces/IGraphProvider.d.ts +31 -0
  167. package/dist/providers/interfaces/IGraphProvider.d.ts.map +1 -0
  168. package/dist/providers/interfaces/IGraphProvider.js +3 -0
  169. package/dist/providers/interfaces/IGraphProvider.js.map +1 -0
  170. package/dist/providers/interfaces/ILDAPProvider.d.ts +37 -0
  171. package/dist/providers/interfaces/ILDAPProvider.d.ts.map +1 -0
  172. package/dist/providers/interfaces/ILDAPProvider.js +3 -0
  173. package/dist/providers/interfaces/ILDAPProvider.js.map +1 -0
  174. package/dist/providers/ldap/acl-parser.d.ts +8 -0
  175. package/dist/providers/ldap/acl-parser.d.ts.map +1 -0
  176. package/dist/providers/ldap/acl-parser.js +157 -0
  177. package/dist/providers/ldap/acl-parser.js.map +1 -0
  178. package/dist/providers/ldap/ad-mappers.d.ts +8 -0
  179. package/dist/providers/ldap/ad-mappers.d.ts.map +1 -0
  180. package/dist/providers/ldap/ad-mappers.js +162 -0
  181. package/dist/providers/ldap/ad-mappers.js.map +1 -0
  182. package/dist/providers/ldap/ldap-client.d.ts +33 -0
  183. package/dist/providers/ldap/ldap-client.d.ts.map +1 -0
  184. package/dist/providers/ldap/ldap-client.js +195 -0
  185. package/dist/providers/ldap/ldap-client.js.map +1 -0
  186. package/dist/providers/ldap/ldap-errors.d.ts +48 -0
  187. package/dist/providers/ldap/ldap-errors.d.ts.map +1 -0
  188. package/dist/providers/ldap/ldap-errors.js +120 -0
  189. package/dist/providers/ldap/ldap-errors.js.map +1 -0
  190. package/dist/providers/ldap/ldap-retry.d.ts +14 -0
  191. package/dist/providers/ldap/ldap-retry.d.ts.map +1 -0
  192. package/dist/providers/ldap/ldap-retry.js +102 -0
  193. package/dist/providers/ldap/ldap-retry.js.map +1 -0
  194. package/dist/providers/ldap/ldap-sanitizer.d.ts +12 -0
  195. package/dist/providers/ldap/ldap-sanitizer.d.ts.map +1 -0
  196. package/dist/providers/ldap/ldap-sanitizer.js +104 -0
  197. package/dist/providers/ldap/ldap-sanitizer.js.map +1 -0
  198. package/dist/providers/ldap/ldap.provider.d.ts +21 -0
  199. package/dist/providers/ldap/ldap.provider.d.ts.map +1 -0
  200. package/dist/providers/ldap/ldap.provider.js +165 -0
  201. package/dist/providers/ldap/ldap.provider.js.map +1 -0
  202. package/dist/providers/ldap/queries/computer.queries.d.ts +6 -0
  203. package/dist/providers/ldap/queries/computer.queries.d.ts.map +1 -0
  204. package/dist/providers/ldap/queries/computer.queries.js +9 -0
  205. package/dist/providers/ldap/queries/computer.queries.js.map +1 -0
  206. package/dist/providers/ldap/queries/group.queries.d.ts +6 -0
  207. package/dist/providers/ldap/queries/group.queries.d.ts.map +1 -0
  208. package/dist/providers/ldap/queries/group.queries.js +9 -0
  209. package/dist/providers/ldap/queries/group.queries.js.map +1 -0
  210. package/dist/providers/ldap/queries/user.queries.d.ts +7 -0
  211. package/dist/providers/ldap/queries/user.queries.d.ts.map +1 -0
  212. package/dist/providers/ldap/queries/user.queries.js +10 -0
  213. package/dist/providers/ldap/queries/user.queries.js.map +1 -0
  214. package/dist/providers/smb/smb.provider.d.ts +68 -0
  215. package/dist/providers/smb/smb.provider.d.ts.map +1 -0
  216. package/dist/providers/smb/smb.provider.js +382 -0
  217. package/dist/providers/smb/smb.provider.js.map +1 -0
  218. package/dist/server.d.ts +2 -0
  219. package/dist/server.d.ts.map +1 -0
  220. package/dist/server.js +44 -0
  221. package/dist/server.js.map +1 -0
  222. package/dist/services/audit/ad-audit.service.d.ts +70 -0
  223. package/dist/services/audit/ad-audit.service.d.ts.map +1 -0
  224. package/dist/services/audit/ad-audit.service.js +1019 -0
  225. package/dist/services/audit/ad-audit.service.js.map +1 -0
  226. package/dist/services/audit/attack-graph.service.d.ts +62 -0
  227. package/dist/services/audit/attack-graph.service.d.ts.map +1 -0
  228. package/dist/services/audit/attack-graph.service.js +702 -0
  229. package/dist/services/audit/attack-graph.service.js.map +1 -0
  230. package/dist/services/audit/audit.service.d.ts +4 -0
  231. package/dist/services/audit/audit.service.d.ts.map +1 -0
  232. package/dist/services/audit/audit.service.js +10 -0
  233. package/dist/services/audit/audit.service.js.map +1 -0
  234. package/dist/services/audit/azure-audit.service.d.ts +37 -0
  235. package/dist/services/audit/azure-audit.service.d.ts.map +1 -0
  236. package/dist/services/audit/azure-audit.service.js +153 -0
  237. package/dist/services/audit/azure-audit.service.js.map +1 -0
  238. package/dist/services/audit/detectors/ad/accounts.detector.d.ts +37 -0
  239. package/dist/services/audit/detectors/ad/accounts.detector.d.ts.map +1 -0
  240. package/dist/services/audit/detectors/ad/accounts.detector.js +881 -0
  241. package/dist/services/audit/detectors/ad/accounts.detector.js.map +1 -0
  242. package/dist/services/audit/detectors/ad/adcs.detector.d.ts +21 -0
  243. package/dist/services/audit/detectors/ad/adcs.detector.d.ts.map +1 -0
  244. package/dist/services/audit/detectors/ad/adcs.detector.js +227 -0
  245. package/dist/services/audit/detectors/ad/adcs.detector.js.map +1 -0
  246. package/dist/services/audit/detectors/ad/advanced.detector.d.ts +63 -0
  247. package/dist/services/audit/detectors/ad/advanced.detector.d.ts.map +1 -0
  248. package/dist/services/audit/detectors/ad/advanced.detector.js +867 -0
  249. package/dist/services/audit/detectors/ad/advanced.detector.js.map +1 -0
  250. package/dist/services/audit/detectors/ad/attack-paths.detector.d.ts +16 -0
  251. package/dist/services/audit/detectors/ad/attack-paths.detector.d.ts.map +1 -0
  252. package/dist/services/audit/detectors/ad/attack-paths.detector.js +369 -0
  253. package/dist/services/audit/detectors/ad/attack-paths.detector.js.map +1 -0
  254. package/dist/services/audit/detectors/ad/compliance.detector.d.ts +28 -0
  255. package/dist/services/audit/detectors/ad/compliance.detector.d.ts.map +1 -0
  256. package/dist/services/audit/detectors/ad/compliance.detector.js +896 -0
  257. package/dist/services/audit/detectors/ad/compliance.detector.js.map +1 -0
  258. package/dist/services/audit/detectors/ad/computers.detector.d.ts +30 -0
  259. package/dist/services/audit/detectors/ad/computers.detector.d.ts.map +1 -0
  260. package/dist/services/audit/detectors/ad/computers.detector.js +799 -0
  261. package/dist/services/audit/detectors/ad/computers.detector.js.map +1 -0
  262. package/dist/services/audit/detectors/ad/gpo.detector.d.ts +17 -0
  263. package/dist/services/audit/detectors/ad/gpo.detector.d.ts.map +1 -0
  264. package/dist/services/audit/detectors/ad/gpo.detector.js +257 -0
  265. package/dist/services/audit/detectors/ad/gpo.detector.js.map +1 -0
  266. package/dist/services/audit/detectors/ad/groups.detector.d.ts +19 -0
  267. package/dist/services/audit/detectors/ad/groups.detector.d.ts.map +1 -0
  268. package/dist/services/audit/detectors/ad/groups.detector.js +488 -0
  269. package/dist/services/audit/detectors/ad/groups.detector.js.map +1 -0
  270. package/dist/services/audit/detectors/ad/index.d.ts +15 -0
  271. package/dist/services/audit/detectors/ad/index.d.ts.map +1 -0
  272. package/dist/services/audit/detectors/ad/index.js +51 -0
  273. package/dist/services/audit/detectors/ad/index.js.map +1 -0
  274. package/dist/services/audit/detectors/ad/kerberos.detector.d.ts +17 -0
  275. package/dist/services/audit/detectors/ad/kerberos.detector.d.ts.map +1 -0
  276. package/dist/services/audit/detectors/ad/kerberos.detector.js +293 -0
  277. package/dist/services/audit/detectors/ad/kerberos.detector.js.map +1 -0
  278. package/dist/services/audit/detectors/ad/monitoring.detector.d.ts +23 -0
  279. package/dist/services/audit/detectors/ad/monitoring.detector.d.ts.map +1 -0
  280. package/dist/services/audit/detectors/ad/monitoring.detector.js +328 -0
  281. package/dist/services/audit/detectors/ad/monitoring.detector.js.map +1 -0
  282. package/dist/services/audit/detectors/ad/network.detector.d.ts +39 -0
  283. package/dist/services/audit/detectors/ad/network.detector.d.ts.map +1 -0
  284. package/dist/services/audit/detectors/ad/network.detector.js +257 -0
  285. package/dist/services/audit/detectors/ad/network.detector.js.map +1 -0
  286. package/dist/services/audit/detectors/ad/password.detector.d.ts +14 -0
  287. package/dist/services/audit/detectors/ad/password.detector.d.ts.map +1 -0
  288. package/dist/services/audit/detectors/ad/password.detector.js +235 -0
  289. package/dist/services/audit/detectors/ad/password.detector.js.map +1 -0
  290. package/dist/services/audit/detectors/ad/permissions.detector.d.ts +20 -0
  291. package/dist/services/audit/detectors/ad/permissions.detector.d.ts.map +1 -0
  292. package/dist/services/audit/detectors/ad/permissions.detector.js +392 -0
  293. package/dist/services/audit/detectors/ad/permissions.detector.js.map +1 -0
  294. package/dist/services/audit/detectors/ad/trusts.detector.d.ts +11 -0
  295. package/dist/services/audit/detectors/ad/trusts.detector.d.ts.map +1 -0
  296. package/dist/services/audit/detectors/ad/trusts.detector.js +186 -0
  297. package/dist/services/audit/detectors/ad/trusts.detector.js.map +1 -0
  298. package/dist/services/audit/detectors/azure/app-security.detector.d.ts +11 -0
  299. package/dist/services/audit/detectors/azure/app-security.detector.d.ts.map +1 -0
  300. package/dist/services/audit/detectors/azure/app-security.detector.js +184 -0
  301. package/dist/services/audit/detectors/azure/app-security.detector.js.map +1 -0
  302. package/dist/services/audit/detectors/azure/conditional-access.detector.d.ts +10 -0
  303. package/dist/services/audit/detectors/azure/conditional-access.detector.d.ts.map +1 -0
  304. package/dist/services/audit/detectors/azure/conditional-access.detector.js +130 -0
  305. package/dist/services/audit/detectors/azure/conditional-access.detector.js.map +1 -0
  306. package/dist/services/audit/detectors/azure/privilege-security.detector.d.ts +8 -0
  307. package/dist/services/audit/detectors/azure/privilege-security.detector.d.ts.map +1 -0
  308. package/dist/services/audit/detectors/azure/privilege-security.detector.js +113 -0
  309. package/dist/services/audit/detectors/azure/privilege-security.detector.js.map +1 -0
  310. package/dist/services/audit/detectors/azure/user-security.detector.d.ts +14 -0
  311. package/dist/services/audit/detectors/azure/user-security.detector.d.ts.map +1 -0
  312. package/dist/services/audit/detectors/azure/user-security.detector.js +198 -0
  313. package/dist/services/audit/detectors/azure/user-security.detector.js.map +1 -0
  314. package/dist/services/audit/detectors/index.d.ts +2 -0
  315. package/dist/services/audit/detectors/index.d.ts.map +1 -0
  316. package/dist/services/audit/detectors/index.js +38 -0
  317. package/dist/services/audit/detectors/index.js.map +1 -0
  318. package/dist/services/audit/response-formatter.d.ts +176 -0
  319. package/dist/services/audit/response-formatter.d.ts.map +1 -0
  320. package/dist/services/audit/response-formatter.js +240 -0
  321. package/dist/services/audit/response-formatter.js.map +1 -0
  322. package/dist/services/audit/scoring.service.d.ts +15 -0
  323. package/dist/services/audit/scoring.service.d.ts.map +1 -0
  324. package/dist/services/audit/scoring.service.js +139 -0
  325. package/dist/services/audit/scoring.service.js.map +1 -0
  326. package/dist/services/auth/crypto.service.d.ts +19 -0
  327. package/dist/services/auth/crypto.service.d.ts.map +1 -0
  328. package/dist/services/auth/crypto.service.js +135 -0
  329. package/dist/services/auth/crypto.service.js.map +1 -0
  330. package/dist/services/auth/errors.d.ts +19 -0
  331. package/dist/services/auth/errors.d.ts.map +1 -0
  332. package/dist/services/auth/errors.js +46 -0
  333. package/dist/services/auth/errors.js.map +1 -0
  334. package/dist/services/auth/token.service.d.ts +41 -0
  335. package/dist/services/auth/token.service.d.ts.map +1 -0
  336. package/dist/services/auth/token.service.js +208 -0
  337. package/dist/services/auth/token.service.js.map +1 -0
  338. package/dist/services/config/config.service.d.ts +6 -0
  339. package/dist/services/config/config.service.d.ts.map +1 -0
  340. package/dist/services/config/config.service.js +64 -0
  341. package/dist/services/config/config.service.js.map +1 -0
  342. package/dist/services/export/export.service.d.ts +28 -0
  343. package/dist/services/export/export.service.d.ts.map +1 -0
  344. package/dist/services/export/export.service.js +28 -0
  345. package/dist/services/export/export.service.js.map +1 -0
  346. package/dist/services/export/formatters/csv.formatter.d.ts +8 -0
  347. package/dist/services/export/formatters/csv.formatter.d.ts.map +1 -0
  348. package/dist/services/export/formatters/csv.formatter.js +46 -0
  349. package/dist/services/export/formatters/csv.formatter.js.map +1 -0
  350. package/dist/services/export/formatters/json.formatter.d.ts +40 -0
  351. package/dist/services/export/formatters/json.formatter.d.ts.map +1 -0
  352. package/dist/services/export/formatters/json.formatter.js +58 -0
  353. package/dist/services/export/formatters/json.formatter.js.map +1 -0
  354. package/dist/services/jobs/azure-job-runner.d.ts +38 -0
  355. package/dist/services/jobs/azure-job-runner.d.ts.map +1 -0
  356. package/dist/services/jobs/azure-job-runner.js +199 -0
  357. package/dist/services/jobs/azure-job-runner.js.map +1 -0
  358. package/dist/services/jobs/index.d.ts +4 -0
  359. package/dist/services/jobs/index.d.ts.map +1 -0
  360. package/dist/services/jobs/index.js +20 -0
  361. package/dist/services/jobs/index.js.map +1 -0
  362. package/dist/services/jobs/job-runner.d.ts +64 -0
  363. package/dist/services/jobs/job-runner.d.ts.map +1 -0
  364. package/dist/services/jobs/job-runner.js +952 -0
  365. package/dist/services/jobs/job-runner.js.map +1 -0
  366. package/dist/services/jobs/job-store.d.ts +27 -0
  367. package/dist/services/jobs/job-store.d.ts.map +1 -0
  368. package/dist/services/jobs/job-store.js +261 -0
  369. package/dist/services/jobs/job-store.js.map +1 -0
  370. package/dist/services/jobs/job.types.d.ts +67 -0
  371. package/dist/services/jobs/job.types.d.ts.map +1 -0
  372. package/dist/services/jobs/job.types.js +36 -0
  373. package/dist/services/jobs/job.types.js.map +1 -0
  374. package/dist/types/ad.types.d.ts +74 -0
  375. package/dist/types/ad.types.d.ts.map +1 -0
  376. package/dist/types/ad.types.js +3 -0
  377. package/dist/types/ad.types.js.map +1 -0
  378. package/dist/types/adcs.types.d.ts +58 -0
  379. package/dist/types/adcs.types.d.ts.map +1 -0
  380. package/dist/types/adcs.types.js +38 -0
  381. package/dist/types/adcs.types.js.map +1 -0
  382. package/dist/types/attack-graph.types.d.ts +135 -0
  383. package/dist/types/attack-graph.types.d.ts.map +1 -0
  384. package/dist/types/attack-graph.types.js +58 -0
  385. package/dist/types/attack-graph.types.js.map +1 -0
  386. package/dist/types/audit.types.d.ts +34 -0
  387. package/dist/types/audit.types.d.ts.map +1 -0
  388. package/dist/types/audit.types.js +3 -0
  389. package/dist/types/audit.types.js.map +1 -0
  390. package/dist/types/azure.types.d.ts +61 -0
  391. package/dist/types/azure.types.d.ts.map +1 -0
  392. package/dist/types/azure.types.js +3 -0
  393. package/dist/types/azure.types.js.map +1 -0
  394. package/dist/types/config.types.d.ts +63 -0
  395. package/dist/types/config.types.d.ts.map +1 -0
  396. package/dist/types/config.types.js +3 -0
  397. package/dist/types/config.types.js.map +1 -0
  398. package/dist/types/error.types.d.ts +33 -0
  399. package/dist/types/error.types.d.ts.map +1 -0
  400. package/dist/types/error.types.js +70 -0
  401. package/dist/types/error.types.js.map +1 -0
  402. package/dist/types/finding.types.d.ts +133 -0
  403. package/dist/types/finding.types.d.ts.map +1 -0
  404. package/dist/types/finding.types.js +3 -0
  405. package/dist/types/finding.types.js.map +1 -0
  406. package/dist/types/gpo.types.d.ts +39 -0
  407. package/dist/types/gpo.types.d.ts.map +1 -0
  408. package/dist/types/gpo.types.js +15 -0
  409. package/dist/types/gpo.types.js.map +1 -0
  410. package/dist/types/token.types.d.ts +26 -0
  411. package/dist/types/token.types.d.ts.map +1 -0
  412. package/dist/types/token.types.js +3 -0
  413. package/dist/types/token.types.js.map +1 -0
  414. package/dist/types/trust.types.d.ts +45 -0
  415. package/dist/types/trust.types.d.ts.map +1 -0
  416. package/dist/types/trust.types.js +71 -0
  417. package/dist/types/trust.types.js.map +1 -0
  418. package/dist/utils/entity-converter.d.ts +17 -0
  419. package/dist/utils/entity-converter.d.ts.map +1 -0
  420. package/dist/utils/entity-converter.js +285 -0
  421. package/dist/utils/entity-converter.js.map +1 -0
  422. package/dist/utils/graph.util.d.ts +66 -0
  423. package/dist/utils/graph.util.d.ts.map +1 -0
  424. package/dist/utils/graph.util.js +382 -0
  425. package/dist/utils/graph.util.js.map +1 -0
  426. package/dist/utils/logger.d.ts +7 -0
  427. package/dist/utils/logger.d.ts.map +1 -0
  428. package/dist/utils/logger.js +86 -0
  429. package/dist/utils/logger.js.map +1 -0
  430. package/dist/utils/type-name-normalizer.d.ts +5 -0
  431. package/dist/utils/type-name-normalizer.d.ts.map +1 -0
  432. package/dist/utils/type-name-normalizer.js +218 -0
  433. package/dist/utils/type-name-normalizer.js.map +1 -0
  434. package/docker-compose.yml +26 -0
  435. package/docs/api/README.md +178 -0
  436. package/docs/api/openapi.yaml +1524 -0
  437. package/eslint.config.js +54 -0
  438. package/jest.config.js +38 -0
  439. package/package.json +97 -0
  440. package/scripts/fetch-ad-cert.sh +142 -0
  441. package/src/.gitkeep +0 -0
  442. package/src/api/.gitkeep +0 -0
  443. package/src/api/controllers/.gitkeep +0 -0
  444. package/src/api/controllers/audit.controller.ts +313 -0
  445. package/src/api/controllers/auth.controller.ts +258 -0
  446. package/src/api/controllers/export.controller.ts +153 -0
  447. package/src/api/controllers/health.controller.ts +16 -0
  448. package/src/api/controllers/jobs.controller.ts +187 -0
  449. package/src/api/controllers/providers.controller.ts +165 -0
  450. package/src/api/dto/.gitkeep +0 -0
  451. package/src/api/dto/AuditRequest.dto.ts +8 -0
  452. package/src/api/dto/AuditResponse.dto.ts +19 -0
  453. package/src/api/dto/TokenRequest.dto.ts +8 -0
  454. package/src/api/dto/TokenResponse.dto.ts +14 -0
  455. package/src/api/middlewares/.gitkeep +0 -0
  456. package/src/api/middlewares/authenticate.ts +203 -0
  457. package/src/api/middlewares/errorHandler.ts +54 -0
  458. package/src/api/middlewares/rateLimit.ts +35 -0
  459. package/src/api/middlewares/validate.ts +32 -0
  460. package/src/api/routes/.gitkeep +0 -0
  461. package/src/api/routes/audit.routes.ts +77 -0
  462. package/src/api/routes/auth.routes.ts +71 -0
  463. package/src/api/routes/export.routes.ts +34 -0
  464. package/src/api/routes/health.routes.ts +14 -0
  465. package/src/api/routes/index.ts +40 -0
  466. package/src/api/routes/providers.routes.ts +24 -0
  467. package/src/api/validators/.gitkeep +0 -0
  468. package/src/api/validators/audit.schemas.ts +59 -0
  469. package/src/api/validators/auth.schemas.ts +59 -0
  470. package/src/app.ts +87 -0
  471. package/src/config/.gitkeep +0 -0
  472. package/src/config/config.schema.ts +108 -0
  473. package/src/config/index.ts +82 -0
  474. package/src/container.ts +221 -0
  475. package/src/data/.gitkeep +0 -0
  476. package/src/data/database.ts +78 -0
  477. package/src/data/jobs/token-cleanup.job.ts +166 -0
  478. package/src/data/migrations/.gitkeep +0 -0
  479. package/src/data/migrations/001_initial_schema.sql +47 -0
  480. package/src/data/migrations/migration.runner.ts +125 -0
  481. package/src/data/models/.gitkeep +0 -0
  482. package/src/data/models/Token.model.ts +35 -0
  483. package/src/data/repositories/.gitkeep +0 -0
  484. package/src/data/repositories/token.repository.ts +160 -0
  485. package/src/providers/.gitkeep +0 -0
  486. package/src/providers/azure/.gitkeep +0 -0
  487. package/src/providers/azure/auth.provider.ts +14 -0
  488. package/src/providers/azure/azure-errors.ts +189 -0
  489. package/src/providers/azure/azure-retry.ts +168 -0
  490. package/src/providers/azure/graph-client.ts +315 -0
  491. package/src/providers/azure/graph.provider.ts +294 -0
  492. package/src/providers/azure/queries/app.queries.ts +9 -0
  493. package/src/providers/azure/queries/policy.queries.ts +9 -0
  494. package/src/providers/azure/queries/user.queries.ts +10 -0
  495. package/src/providers/interfaces/.gitkeep +0 -0
  496. package/src/providers/interfaces/IGraphProvider.ts +117 -0
  497. package/src/providers/interfaces/ILDAPProvider.ts +142 -0
  498. package/src/providers/ldap/.gitkeep +0 -0
  499. package/src/providers/ldap/acl-parser.ts +231 -0
  500. package/src/providers/ldap/ad-mappers.ts +280 -0
  501. package/src/providers/ldap/ldap-client.ts +259 -0
  502. package/src/providers/ldap/ldap-errors.ts +188 -0
  503. package/src/providers/ldap/ldap-retry.ts +267 -0
  504. package/src/providers/ldap/ldap-sanitizer.ts +273 -0
  505. package/src/providers/ldap/ldap.provider.ts +293 -0
  506. package/src/providers/ldap/queries/computer.queries.ts +9 -0
  507. package/src/providers/ldap/queries/group.queries.ts +9 -0
  508. package/src/providers/ldap/queries/user.queries.ts +10 -0
  509. package/src/providers/smb/smb.provider.ts +653 -0
  510. package/src/server.ts +60 -0
  511. package/src/services/.gitkeep +0 -0
  512. package/src/services/audit/.gitkeep +0 -0
  513. package/src/services/audit/ad-audit.service.ts +1481 -0
  514. package/src/services/audit/attack-graph.service.ts +1104 -0
  515. package/src/services/audit/audit.service.ts +12 -0
  516. package/src/services/audit/azure-audit.service.ts +286 -0
  517. package/src/services/audit/detectors/ad/accounts.detector.ts +1232 -0
  518. package/src/services/audit/detectors/ad/adcs.detector.ts +449 -0
  519. package/src/services/audit/detectors/ad/advanced.detector.ts +1270 -0
  520. package/src/services/audit/detectors/ad/attack-paths.detector.ts +600 -0
  521. package/src/services/audit/detectors/ad/compliance.detector.ts +1421 -0
  522. package/src/services/audit/detectors/ad/computers.detector.ts +1188 -0
  523. package/src/services/audit/detectors/ad/gpo.detector.ts +485 -0
  524. package/src/services/audit/detectors/ad/groups.detector.ts +685 -0
  525. package/src/services/audit/detectors/ad/index.ts +84 -0
  526. package/src/services/audit/detectors/ad/kerberos.detector.ts +424 -0
  527. package/src/services/audit/detectors/ad/monitoring.detector.ts +501 -0
  528. package/src/services/audit/detectors/ad/network.detector.ts +538 -0
  529. package/src/services/audit/detectors/ad/password.detector.ts +324 -0
  530. package/src/services/audit/detectors/ad/permissions.detector.ts +637 -0
  531. package/src/services/audit/detectors/ad/trusts.detector.ts +315 -0
  532. package/src/services/audit/detectors/azure/app-security.detector.ts +246 -0
  533. package/src/services/audit/detectors/azure/conditional-access.detector.ts +186 -0
  534. package/src/services/audit/detectors/azure/privilege-security.detector.ts +176 -0
  535. package/src/services/audit/detectors/azure/user-security.detector.ts +280 -0
  536. package/src/services/audit/detectors/index.ts +18 -0
  537. package/src/services/audit/response-formatter.ts +604 -0
  538. package/src/services/audit/scoring.service.ts +234 -0
  539. package/src/services/auth/.gitkeep +0 -0
  540. package/src/services/auth/crypto.service.ts +230 -0
  541. package/src/services/auth/errors.ts +47 -0
  542. package/src/services/auth/token.service.ts +420 -0
  543. package/src/services/config/.gitkeep +0 -0
  544. package/src/services/config/config.service.ts +75 -0
  545. package/src/services/export/.gitkeep +0 -0
  546. package/src/services/export/export.service.ts +99 -0
  547. package/src/services/export/formatters/csv.formatter.ts +124 -0
  548. package/src/services/export/formatters/json.formatter.ts +160 -0
  549. package/src/services/jobs/azure-job-runner.ts +312 -0
  550. package/src/services/jobs/index.ts +9 -0
  551. package/src/services/jobs/job-runner.ts +1280 -0
  552. package/src/services/jobs/job-store.ts +384 -0
  553. package/src/services/jobs/job.types.ts +182 -0
  554. package/src/types/.gitkeep +0 -0
  555. package/src/types/ad.types.ts +91 -0
  556. package/src/types/adcs.types.ts +107 -0
  557. package/src/types/attack-graph.types.ts +260 -0
  558. package/src/types/audit.types.ts +42 -0
  559. package/src/types/azure.types.ts +68 -0
  560. package/src/types/config.types.ts +79 -0
  561. package/src/types/error.types.ts +69 -0
  562. package/src/types/finding.types.ts +284 -0
  563. package/src/types/gpo.types.ts +72 -0
  564. package/src/types/smb2.d.ts +73 -0
  565. package/src/types/token.types.ts +32 -0
  566. package/src/types/trust.types.ts +140 -0
  567. package/src/utils/.gitkeep +0 -0
  568. package/src/utils/entity-converter.ts +453 -0
  569. package/src/utils/graph.util.ts +609 -0
  570. package/src/utils/logger.ts +111 -0
  571. package/src/utils/type-name-normalizer.ts +302 -0
  572. package/tests/.gitkeep +0 -0
  573. package/tests/e2e/.gitkeep +0 -0
  574. package/tests/fixtures/.gitkeep +0 -0
  575. package/tests/integration/.gitkeep +0 -0
  576. package/tests/integration/README.md +156 -0
  577. package/tests/integration/ad-audit.integration.test.ts +216 -0
  578. package/tests/integration/api/.gitkeep +0 -0
  579. package/tests/integration/api/endpoints.integration.test.ts +431 -0
  580. package/tests/integration/auth/jwt-authentication.integration.test.ts +358 -0
  581. package/tests/integration/providers/.gitkeep +0 -0
  582. package/tests/integration/providers/azure-basic.integration.test.ts +167 -0
  583. package/tests/integration/providers/ldap-basic.integration.test.ts +152 -0
  584. package/tests/integration/providers/ldap-connectivity.test.ts +44 -0
  585. package/tests/integration/providers/ldap-provider.integration.test.ts +347 -0
  586. package/tests/mocks/.gitkeep +0 -0
  587. package/tests/setup.ts +16 -0
  588. package/tests/unit/.gitkeep +0 -0
  589. package/tests/unit/api/middlewares/authenticate.test.ts +446 -0
  590. package/tests/unit/providers/.gitkeep +0 -0
  591. package/tests/unit/providers/azure/azure-errors.test.ts +193 -0
  592. package/tests/unit/providers/azure/azure-retry.test.ts +254 -0
  593. package/tests/unit/providers/azure/graph-provider.test.ts +313 -0
  594. package/tests/unit/providers/ldap/ad-mappers.test.ts +392 -0
  595. package/tests/unit/providers/ldap/ldap-provider.test.ts +376 -0
  596. package/tests/unit/providers/ldap/ldap-retry.test.ts +377 -0
  597. package/tests/unit/providers/ldap/ldap-sanitizer.test.ts +301 -0
  598. package/tests/unit/sample.test.ts +19 -0
  599. package/tests/unit/services/.gitkeep +0 -0
  600. package/tests/unit/services/audit/detectors/ad/accounts.detector.test.ts +393 -0
  601. package/tests/unit/services/audit/detectors/ad/advanced.detector.test.ts +380 -0
  602. package/tests/unit/services/audit/detectors/ad/computers.detector.test.ts +440 -0
  603. package/tests/unit/services/audit/detectors/ad/groups.detector.test.ts +276 -0
  604. package/tests/unit/services/audit/detectors/ad/kerberos.detector.test.ts +215 -0
  605. package/tests/unit/services/audit/detectors/ad/password.detector.test.ts +226 -0
  606. package/tests/unit/services/audit/detectors/ad/permissions.detector.test.ts +244 -0
  607. package/tests/unit/services/audit/detectors/azure/app-security.detector.test.ts +349 -0
  608. package/tests/unit/services/audit/detectors/azure/conditional-access.detector.test.ts +374 -0
  609. package/tests/unit/services/audit/detectors/azure/privilege-security.detector.test.ts +374 -0
  610. package/tests/unit/services/audit/detectors/azure/user-security.detector.test.ts +297 -0
  611. package/tests/unit/services/auth/crypto.service.test.ts +296 -0
  612. package/tests/unit/services/auth/token.service.test.ts +579 -0
  613. package/tests/unit/services/export/export.service.test.ts +241 -0
  614. package/tests/unit/services/export/formatters/csv.formatter.test.ts +270 -0
  615. package/tests/unit/services/export/formatters/json.formatter.test.ts +258 -0
  616. package/tests/unit/utils/.gitkeep +0 -0
  617. package/tsconfig.json +50 -0
@@ -0,0 +1,1524 @@
1
+ openapi: 3.0.3
2
+ info:
3
+ title: ETC Collector API
4
+ description: |
5
+ API REST pour ETC Collector - Audit de sécurité Active Directory et Azure AD/Entra ID
6
+
7
+ ## Authentification
8
+ Tous les endpoints (sauf `/health`) nécessitent un JWT Bearer token.
9
+
10
+ ## Rate Limiting
11
+ - Endpoints généraux: 100 requêtes/minute
12
+ - Endpoints d'audit: 10 audits/5 minutes
13
+
14
+ version: 1.0.0
15
+ contact:
16
+ name: ETC Collector
17
+ url: https://github.com/etcsec-com/etc-collector
18
+
19
+ servers:
20
+ - url: "{serverUrl}"
21
+ description: Custom server URL
22
+ variables:
23
+ serverUrl:
24
+ default: ""
25
+ description: "Enter full URL (e.g. https://api.example.com)"
26
+
27
+ tags:
28
+ - name: Health
29
+ description: Health check endpoint
30
+ - name: Authentication
31
+ description: JWT token management
32
+ - name: Providers
33
+ description: Provider configuration info (requires PROVIDERS_INFO_ENABLED=true)
34
+ - name: Audit
35
+ description: Security audit operations (AD & Azure)
36
+ - name: Jobs
37
+ description: Async audit job management (polling architecture)
38
+ - name: Export
39
+ description: Export audit results (JSON & CSV)
40
+
41
+ paths:
42
+ /health:
43
+ get:
44
+ summary: Health check
45
+ description: Check if the API is running and healthy
46
+ tags:
47
+ - Health
48
+ security: []
49
+ responses:
50
+ '200':
51
+ description: API is healthy
52
+ content:
53
+ application/json:
54
+ schema:
55
+ type: object
56
+ properties:
57
+ status:
58
+ type: string
59
+ example: healthy
60
+ timestamp:
61
+ type: string
62
+ format: date-time
63
+
64
+ /api/v1/auth/token:
65
+ post:
66
+ summary: Generate JWT token
67
+ description: Create a new JWT token with optional usage quotas
68
+ tags:
69
+ - Authentication
70
+ security: []
71
+ requestBody:
72
+ required: true
73
+ content:
74
+ application/json:
75
+ schema:
76
+ type: object
77
+ properties:
78
+ name:
79
+ type: string
80
+ description: Token name/label
81
+ example: my-automation-token
82
+ expiresIn:
83
+ type: number
84
+ description: Expiration time in seconds
85
+ example: 3600
86
+ default: 3600
87
+ maxUses:
88
+ type: number
89
+ description: Maximum number of uses (0 = unlimited)
90
+ example: 10
91
+ default: 0
92
+ metadata:
93
+ type: object
94
+ description: Optional metadata
95
+ additionalProperties: true
96
+ required:
97
+ - name
98
+ responses:
99
+ '200':
100
+ description: Token generated successfully
101
+ content:
102
+ application/json:
103
+ schema:
104
+ type: object
105
+ properties:
106
+ success:
107
+ type: boolean
108
+ example: true
109
+ token:
110
+ type: string
111
+ example: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
112
+ jti:
113
+ type: string
114
+ format: uuid
115
+ expiresAt:
116
+ type: string
117
+ format: date-time
118
+ '400':
119
+ $ref: '#/components/responses/ValidationError'
120
+ '429':
121
+ $ref: '#/components/responses/RateLimitError'
122
+
123
+ /api/v1/auth/validate:
124
+ post:
125
+ summary: Validate JWT token
126
+ description: Check if a token is valid without incrementing usage count
127
+ tags:
128
+ - Authentication
129
+ security:
130
+ - bearerAuth: []
131
+ responses:
132
+ '200':
133
+ description: Token validation result
134
+ content:
135
+ application/json:
136
+ schema:
137
+ type: object
138
+ properties:
139
+ valid:
140
+ type: boolean
141
+ jti:
142
+ type: string
143
+ format: uuid
144
+ expiresAt:
145
+ type: string
146
+ format: date-time
147
+ '401':
148
+ $ref: '#/components/responses/UnauthorizedError'
149
+
150
+ /api/v1/auth/revoke:
151
+ post:
152
+ summary: Revoke JWT token
153
+ description: Revoke the current token (identified by JWT)
154
+ tags:
155
+ - Authentication
156
+ security:
157
+ - bearerAuth: []
158
+ requestBody:
159
+ required: false
160
+ content:
161
+ application/json:
162
+ schema:
163
+ type: object
164
+ properties:
165
+ reason:
166
+ type: string
167
+ description: Optional revocation reason
168
+ example: Token compromised
169
+ responses:
170
+ '200':
171
+ description: Token revoked successfully
172
+ content:
173
+ application/json:
174
+ schema:
175
+ type: object
176
+ properties:
177
+ success:
178
+ type: boolean
179
+ example: true
180
+ message:
181
+ type: string
182
+ example: Token revoked successfully
183
+ '401':
184
+ $ref: '#/components/responses/UnauthorizedError'
185
+
186
+ /api/v1/auth/tokens:
187
+ get:
188
+ summary: List all tokens
189
+ description: Get list of all active tokens
190
+ tags:
191
+ - Authentication
192
+ security:
193
+ - bearerAuth: []
194
+ responses:
195
+ '200':
196
+ description: List of tokens
197
+ content:
198
+ application/json:
199
+ schema:
200
+ type: object
201
+ properties:
202
+ tokens:
203
+ type: array
204
+ items:
205
+ $ref: '#/components/schemas/TokenInfo'
206
+ '401':
207
+ $ref: '#/components/responses/UnauthorizedError'
208
+
209
+ /api/v1/auth/token/info:
210
+ get:
211
+ summary: Get current token info
212
+ description: |
213
+ Get detailed information about the current token from Authorization header.
214
+
215
+ **Requires:** `TOKEN_INFO_ENABLED=true` environment variable.
216
+
217
+ Returns token usage statistics and status.
218
+ tags:
219
+ - Authentication
220
+ security:
221
+ - bearerAuth: []
222
+ responses:
223
+ '200':
224
+ description: Current token information
225
+ content:
226
+ application/json:
227
+ schema:
228
+ type: object
229
+ properties:
230
+ success:
231
+ type: boolean
232
+ example: true
233
+ token:
234
+ type: object
235
+ properties:
236
+ jti:
237
+ type: string
238
+ format: uuid
239
+ createdAt:
240
+ type: string
241
+ format: date-time
242
+ expiresAt:
243
+ type: string
244
+ format: date-time
245
+ maxUses:
246
+ type: integer
247
+ example: 10
248
+ usageCount:
249
+ type: integer
250
+ example: 3
251
+ remainingUses:
252
+ oneOf:
253
+ - type: integer
254
+ - type: string
255
+ enum: [unlimited]
256
+ example: 7
257
+ revoked:
258
+ type: boolean
259
+ example: false
260
+ revokedAt:
261
+ type: string
262
+ format: date-time
263
+ nullable: true
264
+ revokedReason:
265
+ type: string
266
+ nullable: true
267
+ '401':
268
+ $ref: '#/components/responses/UnauthorizedError'
269
+ '404':
270
+ description: Endpoint not available (TOKEN_INFO_ENABLED=false)
271
+ content:
272
+ application/json:
273
+ schema:
274
+ $ref: '#/components/schemas/ErrorResponse'
275
+
276
+ /api/v1/providers/info:
277
+ get:
278
+ summary: Get providers configuration
279
+ description: |
280
+ Get information about all configured providers.
281
+
282
+ **Requires:** `PROVIDERS_INFO_ENABLED=true` environment variable.
283
+
284
+ Returns non-sensitive configuration details for each provider (LDAP/AD, Azure).
285
+ tags:
286
+ - Providers
287
+ security: []
288
+ responses:
289
+ '200':
290
+ description: Providers information
291
+ content:
292
+ application/json:
293
+ schema:
294
+ type: object
295
+ properties:
296
+ success:
297
+ type: boolean
298
+ example: true
299
+ providers:
300
+ type: array
301
+ items:
302
+ $ref: '#/components/schemas/ProviderInfo'
303
+ summary:
304
+ type: object
305
+ properties:
306
+ total:
307
+ type: integer
308
+ example: 2
309
+ enabled:
310
+ type: integer
311
+ example: 1
312
+ configured:
313
+ type: integer
314
+ example: 1
315
+ '404':
316
+ description: Endpoint not available (PROVIDERS_INFO_ENABLED=false)
317
+ content:
318
+ application/json:
319
+ schema:
320
+ $ref: '#/components/schemas/ErrorResponse'
321
+
322
+ /api/v1/audit/ad:
323
+ post:
324
+ summary: Run AD audit
325
+ description: |
326
+ Execute security audit on Active Directory domain (PRD FR55 structure).
327
+
328
+ **Async Mode:** Add `?async=true` to run the audit asynchronously.
329
+ Returns a job_id that can be polled via `GET /api/v1/audit/jobs/{job_id}`.
330
+
331
+ **Sync Mode (default):** Waits for audit completion and returns full results.
332
+ tags:
333
+ - Audit
334
+ security:
335
+ - bearerAuth: []
336
+ parameters:
337
+ - name: async
338
+ in: query
339
+ description: Run audit asynchronously (returns job_id for polling)
340
+ required: false
341
+ schema:
342
+ type: boolean
343
+ default: false
344
+ requestBody:
345
+ required: false
346
+ content:
347
+ application/json:
348
+ schema:
349
+ type: object
350
+ properties:
351
+ includeDetails:
352
+ type: boolean
353
+ description: Include affected entity names in findings
354
+ default: false
355
+ maxUsers:
356
+ type: integer
357
+ minimum: 1
358
+ description: Maximum number of users to audit
359
+ maxGroups:
360
+ type: integer
361
+ minimum: 1
362
+ description: Maximum number of groups to audit
363
+ maxComputers:
364
+ type: integer
365
+ minimum: 1
366
+ description: Maximum number of computers to audit
367
+ responses:
368
+ '200':
369
+ description: Audit completed successfully (sync mode)
370
+ content:
371
+ application/json:
372
+ schema:
373
+ $ref: '#/components/schemas/ADAuditResponse'
374
+ '202':
375
+ description: Audit started (async mode) - poll job status via /api/v1/audit/jobs/{job_id}
376
+ content:
377
+ application/json:
378
+ schema:
379
+ $ref: '#/components/schemas/JobProgress'
380
+ '400':
381
+ $ref: '#/components/responses/ValidationError'
382
+ '401':
383
+ $ref: '#/components/responses/UnauthorizedError'
384
+ '429':
385
+ $ref: '#/components/responses/AuditRateLimitError'
386
+ '500':
387
+ $ref: '#/components/responses/ServerError'
388
+
389
+ /api/v1/audit/ad/status:
390
+ get:
391
+ summary: Test LDAP connection
392
+ description: Check if LDAP connection to Active Directory is working
393
+ tags:
394
+ - Audit
395
+ security:
396
+ - bearerAuth: []
397
+ responses:
398
+ '200':
399
+ description: Connection test result
400
+ content:
401
+ application/json:
402
+ schema:
403
+ type: object
404
+ properties:
405
+ success:
406
+ type: boolean
407
+ message:
408
+ type: string
409
+ example: Successfully connected to LDAP server
410
+ details:
411
+ type: object
412
+ properties:
413
+ url:
414
+ type: string
415
+ baseDN:
416
+ type: string
417
+ '401':
418
+ $ref: '#/components/responses/UnauthorizedError'
419
+ '500':
420
+ $ref: '#/components/responses/ServerError'
421
+
422
+ /api/v1/audit/azure:
423
+ post:
424
+ summary: Run Azure audit
425
+ description: Execute security audit on Azure AD/Entra ID tenant
426
+ tags:
427
+ - Audit
428
+ security:
429
+ - bearerAuth: []
430
+ requestBody:
431
+ required: false
432
+ content:
433
+ application/json:
434
+ schema:
435
+ type: object
436
+ properties:
437
+ includeDetails:
438
+ type: boolean
439
+ description: Include affected entity names in findings
440
+ default: false
441
+ maxUsers:
442
+ type: integer
443
+ minimum: 1
444
+ description: Maximum number of users to audit
445
+ maxGroups:
446
+ type: integer
447
+ minimum: 1
448
+ description: Maximum number of groups to audit
449
+ maxApps:
450
+ type: integer
451
+ minimum: 1
452
+ description: Maximum number of applications to audit
453
+ responses:
454
+ '200':
455
+ description: Audit completed successfully
456
+ content:
457
+ application/json:
458
+ schema:
459
+ type: object
460
+ properties:
461
+ success:
462
+ type: boolean
463
+ example: true
464
+ data:
465
+ $ref: '#/components/schemas/AuditResult'
466
+ '400':
467
+ $ref: '#/components/responses/ValidationError'
468
+ '401':
469
+ $ref: '#/components/responses/UnauthorizedError'
470
+ '429':
471
+ $ref: '#/components/responses/AuditRateLimitError'
472
+ '500':
473
+ $ref: '#/components/responses/ServerError'
474
+
475
+ /api/v1/audit/azure/status:
476
+ get:
477
+ summary: Test Microsoft Graph connection
478
+ description: Check if Microsoft Graph API connection is working
479
+ tags:
480
+ - Audit
481
+ security:
482
+ - bearerAuth: []
483
+ responses:
484
+ '200':
485
+ description: Connection test result
486
+ content:
487
+ application/json:
488
+ schema:
489
+ type: object
490
+ properties:
491
+ success:
492
+ type: boolean
493
+ message:
494
+ type: string
495
+ example: Successfully connected to Microsoft Graph API
496
+ '401':
497
+ $ref: '#/components/responses/UnauthorizedError'
498
+ '500':
499
+ $ref: '#/components/responses/ServerError'
500
+
501
+ /api/v1/audit/jobs:
502
+ get:
503
+ summary: List all jobs
504
+ description: |
505
+ Get list of all audit jobs.
506
+
507
+ Supports filtering by status with `?status=` query parameter.
508
+ tags:
509
+ - Jobs
510
+ security:
511
+ - bearerAuth: []
512
+ parameters:
513
+ - name: status
514
+ in: query
515
+ description: Filter jobs by status
516
+ required: false
517
+ schema:
518
+ type: string
519
+ enum: [pending, running, completed, failed]
520
+ responses:
521
+ '200':
522
+ description: List of jobs
523
+ content:
524
+ application/json:
525
+ schema:
526
+ type: object
527
+ properties:
528
+ success:
529
+ type: boolean
530
+ example: true
531
+ data:
532
+ type: object
533
+ properties:
534
+ jobs:
535
+ type: array
536
+ items:
537
+ $ref: '#/components/schemas/JobSummary'
538
+ total:
539
+ type: integer
540
+ '401':
541
+ $ref: '#/components/responses/UnauthorizedError'
542
+
543
+ /api/v1/audit/jobs/{jobId}:
544
+ get:
545
+ summary: Get job status
546
+ description: |
547
+ Get current status and progress of an async audit job.
548
+
549
+ **Progress Tracking:** The response includes progress percentage (0-100)
550
+ and detailed step-by-step progress with counts and findings.
551
+
552
+ **Completed Jobs:** When status is "completed", the full audit result
553
+ is included in the response (same structure as sync audit).
554
+ tags:
555
+ - Jobs
556
+ security:
557
+ - bearerAuth: []
558
+ parameters:
559
+ - name: jobId
560
+ in: path
561
+ required: true
562
+ description: Job ID returned from async audit request
563
+ schema:
564
+ type: string
565
+ example: ad-audit-1704067200000-abc12345
566
+ responses:
567
+ '200':
568
+ description: Job status and progress (or full result if completed)
569
+ content:
570
+ application/json:
571
+ schema:
572
+ $ref: '#/components/schemas/JobStatusResponse'
573
+ '401':
574
+ $ref: '#/components/responses/UnauthorizedError'
575
+ '404':
576
+ description: Job not found
577
+ content:
578
+ application/json:
579
+ schema:
580
+ $ref: '#/components/schemas/Error'
581
+ example:
582
+ success: false
583
+ error:
584
+ code: JOB_NOT_FOUND
585
+ message: Job ad-audit-xxx not found
586
+
587
+ delete:
588
+ summary: Delete job
589
+ description: Delete/cancel an audit job
590
+ tags:
591
+ - Jobs
592
+ security:
593
+ - bearerAuth: []
594
+ parameters:
595
+ - name: jobId
596
+ in: path
597
+ required: true
598
+ description: Job ID to delete
599
+ schema:
600
+ type: string
601
+ responses:
602
+ '200':
603
+ description: Job deleted
604
+ content:
605
+ application/json:
606
+ schema:
607
+ type: object
608
+ properties:
609
+ success:
610
+ type: boolean
611
+ example: true
612
+ message:
613
+ type: string
614
+ example: Job ad-audit-xxx deleted
615
+ '401':
616
+ $ref: '#/components/responses/UnauthorizedError'
617
+ '404':
618
+ description: Job not found
619
+ content:
620
+ application/json:
621
+ schema:
622
+ $ref: '#/components/schemas/Error'
623
+
624
+ /api/v1/export/ad:
625
+ post:
626
+ summary: Export AD audit results
627
+ description: Export Active Directory audit results in JSON or CSV format
628
+ tags:
629
+ - Export
630
+ security:
631
+ - bearerAuth: []
632
+ requestBody:
633
+ required: true
634
+ content:
635
+ application/json:
636
+ schema:
637
+ $ref: '#/components/schemas/ExportRequest'
638
+ responses:
639
+ '200':
640
+ description: Export file
641
+ content:
642
+ application/json:
643
+ schema:
644
+ description: JSON export with full audit structure
645
+ text/csv:
646
+ schema:
647
+ type: string
648
+ description: CSV export with findings table
649
+ headers:
650
+ Content-Disposition:
651
+ schema:
652
+ type: string
653
+ example: attachment; filename="audit-ad-EXAMPLE-2026-01-12T10-30-00Z.json"
654
+ '400':
655
+ $ref: '#/components/responses/ValidationError'
656
+ '401':
657
+ $ref: '#/components/responses/UnauthorizedError'
658
+
659
+ /api/v1/export/azure:
660
+ post:
661
+ summary: Export Azure audit results
662
+ description: Export Azure AD/Entra ID audit results in JSON or CSV format
663
+ tags:
664
+ - Export
665
+ security:
666
+ - bearerAuth: []
667
+ requestBody:
668
+ required: true
669
+ content:
670
+ application/json:
671
+ schema:
672
+ $ref: '#/components/schemas/ExportRequest'
673
+ responses:
674
+ '200':
675
+ description: Export file
676
+ content:
677
+ application/json:
678
+ schema:
679
+ description: JSON export with full audit structure
680
+ text/csv:
681
+ schema:
682
+ type: string
683
+ description: CSV export with findings table
684
+ headers:
685
+ Content-Disposition:
686
+ schema:
687
+ type: string
688
+ example: attachment; filename="audit-azure-tenant-123-2026-01-12T10-30-00Z.csv"
689
+ '400':
690
+ $ref: '#/components/responses/ValidationError'
691
+ '401':
692
+ $ref: '#/components/responses/UnauthorizedError'
693
+
694
+ components:
695
+ securitySchemes:
696
+ bearerAuth:
697
+ type: http
698
+ scheme: bearer
699
+ bearerFormat: JWT
700
+ description: JWT token obtained from /api/v1/auth/token
701
+
702
+ schemas:
703
+ TokenInfo:
704
+ type: object
705
+ properties:
706
+ jti:
707
+ type: string
708
+ format: uuid
709
+ created_at:
710
+ type: string
711
+ format: date-time
712
+ expires_at:
713
+ type: string
714
+ format: date-time
715
+ max_uses:
716
+ type: integer
717
+ used_count:
718
+ type: integer
719
+ remaining_uses:
720
+ type: integer
721
+ revoked:
722
+ type: boolean
723
+ revoked_at:
724
+ type: string
725
+ format: date-time
726
+ nullable: true
727
+ revoked_reason:
728
+ type: string
729
+ nullable: true
730
+
731
+ ProviderInfo:
732
+ type: object
733
+ description: Provider configuration information (non-sensitive)
734
+ properties:
735
+ name:
736
+ type: string
737
+ description: Provider identifier
738
+ enum: [active-directory, azure-entra-id]
739
+ example: active-directory
740
+ enabled:
741
+ type: boolean
742
+ description: Whether the provider is enabled and configured
743
+ example: true
744
+ status:
745
+ type: string
746
+ description: Configuration status
747
+ enum: [configured, not_configured, partial]
748
+ example: configured
749
+ details:
750
+ type: object
751
+ description: Provider-specific configuration details (non-sensitive)
752
+ additionalProperties: true
753
+
754
+ ADProviderDetails:
755
+ type: object
756
+ description: Active Directory provider details
757
+ properties:
758
+ server:
759
+ type: string
760
+ example: ldaps://dc.example.com:636
761
+ baseDN:
762
+ type: string
763
+ example: DC=example,DC=com
764
+ tlsVerify:
765
+ type: boolean
766
+ example: true
767
+ timeout:
768
+ type: integer
769
+ example: 30000
770
+ hasCACert:
771
+ type: boolean
772
+ example: true
773
+
774
+ AzureProviderDetails:
775
+ type: object
776
+ description: Azure Entra ID provider details
777
+ properties:
778
+ tenantName:
779
+ type: string
780
+ description: Tenant display name (from AZURE_TENANT_NAME env var or Graph API)
781
+ example: Groupe IJNEXT
782
+ tenantId:
783
+ type: string
784
+ description: Azure tenant ID (GUID)
785
+ example: 6fb52d35-3c45-4ca9-93b3-5bc3eadc5828
786
+ verifiedDomains:
787
+ type: array
788
+ items:
789
+ type: string
790
+ description: List of verified domains (from Graph API)
791
+ example: [example.com, example.onmicrosoft.com]
792
+ clientId:
793
+ type: string
794
+ description: Application client ID (masked)
795
+ example: 0ba0...9e21
796
+ hasClientSecret:
797
+ type: boolean
798
+ description: Whether client secret is configured
799
+ example: true
800
+
801
+ ADAuditResponse:
802
+ type: object
803
+ description: AD Audit response (PRD FR55 structure)
804
+ properties:
805
+ success:
806
+ type: boolean
807
+ example: true
808
+ provider:
809
+ type: string
810
+ enum: [active-directory]
811
+ example: active-directory
812
+ audit:
813
+ type: object
814
+ properties:
815
+ metadata:
816
+ $ref: '#/components/schemas/AuditMetadata'
817
+ summary:
818
+ $ref: '#/components/schemas/AuditSummary'
819
+ security:
820
+ $ref: '#/components/schemas/SecuritySection'
821
+ accounts:
822
+ $ref: '#/components/schemas/AccountsSection'
823
+ groups:
824
+ $ref: '#/components/schemas/FindingsSection'
825
+ computers:
826
+ $ref: '#/components/schemas/FindingsSection'
827
+ permissions:
828
+ $ref: '#/components/schemas/FindingsSection'
829
+ temporal:
830
+ $ref: '#/components/schemas/FindingsSection'
831
+ extendedConfig:
832
+ $ref: '#/components/schemas/FindingsSection'
833
+ adcs:
834
+ $ref: '#/components/schemas/ADCSSection'
835
+ gpoSecurity:
836
+ $ref: '#/components/schemas/GPOSecuritySection'
837
+ trustsAnalysis:
838
+ $ref: '#/components/schemas/TrustsAnalysisSection'
839
+ domainConfig:
840
+ $ref: '#/components/schemas/DomainConfig'
841
+
842
+ AuditMetadata:
843
+ type: object
844
+ properties:
845
+ provider:
846
+ type: string
847
+ example: active-directory
848
+ domain:
849
+ type: object
850
+ properties:
851
+ name:
852
+ type: string
853
+ example: example.com
854
+ baseDN:
855
+ type: string
856
+ example: DC=example,DC=com
857
+ ldapUrl:
858
+ type: string
859
+ example: ldaps://dc.example.com:636
860
+ options:
861
+ type: object
862
+ properties:
863
+ includeDetails:
864
+ type: boolean
865
+ includeComputers:
866
+ type: boolean
867
+ includeConfig:
868
+ type: boolean
869
+ execution:
870
+ type: object
871
+ properties:
872
+ timestamp:
873
+ type: string
874
+ format: date-time
875
+ duration:
876
+ type: string
877
+ example: "3.87s"
878
+
879
+ AuditSummary:
880
+ type: object
881
+ properties:
882
+ objects:
883
+ type: object
884
+ properties:
885
+ users:
886
+ type: integer
887
+ groups:
888
+ type: integer
889
+ ous:
890
+ type: integer
891
+ computers:
892
+ type: integer
893
+ risk:
894
+ type: object
895
+ properties:
896
+ score:
897
+ type: number
898
+ minimum: 0
899
+ maximum: 100
900
+ rating:
901
+ type: string
902
+ enum: [excellent, good, fair, poor, critical]
903
+ findings:
904
+ type: object
905
+ properties:
906
+ critical:
907
+ type: integer
908
+ high:
909
+ type: integer
910
+ medium:
911
+ type: integer
912
+ low:
913
+ type: integer
914
+ total:
915
+ type: integer
916
+
917
+ SecuritySection:
918
+ type: object
919
+ properties:
920
+ passwords:
921
+ $ref: '#/components/schemas/FindingsSection'
922
+ kerberos:
923
+ $ref: '#/components/schemas/FindingsSection'
924
+ advanced:
925
+ $ref: '#/components/schemas/FindingsSection'
926
+
927
+ AccountsSection:
928
+ type: object
929
+ properties:
930
+ status:
931
+ $ref: '#/components/schemas/FindingsSection'
932
+ privileged:
933
+ $ref: '#/components/schemas/FindingsSection'
934
+ service:
935
+ $ref: '#/components/schemas/FindingsSection'
936
+ dangerous:
937
+ $ref: '#/components/schemas/FindingsSection'
938
+
939
+ FindingsSection:
940
+ type: object
941
+ properties:
942
+ total:
943
+ type: integer
944
+ description: Total count of affected entities
945
+ findings:
946
+ type: array
947
+ items:
948
+ $ref: '#/components/schemas/Finding'
949
+
950
+ ADCSSection:
951
+ type: object
952
+ description: AD Certificate Services (ADCS) security findings (ESC1-ESC8)
953
+ properties:
954
+ total:
955
+ type: integer
956
+ description: Total count of ADCS vulnerabilities
957
+ findings:
958
+ type: array
959
+ items:
960
+ $ref: '#/components/schemas/Finding'
961
+ description: |
962
+ ADCS vulnerability findings including:
963
+ - ESC1_VULNERABLE_TEMPLATE: Template allows enrollee to supply SAN + has client auth
964
+ - ESC2_ANY_PURPOSE: Template has "Any Purpose" EKU
965
+ - ESC3_ENROLLMENT_AGENT: Template allows enrollment agent certificate
966
+ - ESC4_VULNERABLE_TEMPLATE_ACL: Non-admin can modify vulnerable template
967
+ - ESC5_PKI_OBJECT_ACL: Vulnerable PKI object ACLs
968
+ - ESC6_EDITF_FLAG: CA allows requestor-specified SAN
969
+ - ESC7_CA_VULNERABLE_ACL: Non-admin can manage CA
970
+ - ESC8_HTTP_ENROLLMENT: HTTP web enrollment (NTLM relay risk)
971
+
972
+ GPOSecuritySection:
973
+ type: object
974
+ description: Group Policy Object (GPO) security findings
975
+ properties:
976
+ total:
977
+ type: integer
978
+ description: Total count of GPO security issues
979
+ findings:
980
+ type: array
981
+ items:
982
+ $ref: '#/components/schemas/Finding'
983
+ description: |
984
+ GPO security findings including:
985
+ - GPO_DANGEROUS_PERMISSIONS: Non-admin can edit GPO linked to sensitive OUs
986
+ - GPO_WEAK_PASSWORD_POLICY: GPO with password length < 12 characters
987
+ - GPO_LAPS_NOT_DEPLOYED: No LAPS deployment GPO found
988
+ - GPO_DISABLED_BUT_LINKED: GPO disabled but still linked
989
+ - GPO_UNLINKED: GPO exists but not linked anywhere
990
+
991
+ TrustsAnalysisSection:
992
+ type: object
993
+ description: Domain trust relationship security analysis
994
+ properties:
995
+ total:
996
+ type: integer
997
+ description: Total count of trust security issues
998
+ findings:
999
+ type: array
1000
+ items:
1001
+ $ref: '#/components/schemas/Finding'
1002
+ description: |
1003
+ Trust security findings including:
1004
+ - TRUST_SID_FILTERING_DISABLED: SID history attacks possible
1005
+ - TRUST_EXTERNAL_NO_SELECTIVE_AUTH: External trust without selective authentication
1006
+ - TRUST_BIDIRECTIONAL: Two-way trust enables lateral movement
1007
+ - TRUST_FOREST_TRANSITIVE: Transitive forest trust increases attack surface
1008
+
1009
+ DomainConfig:
1010
+ type: object
1011
+ description: AD Domain configuration
1012
+ properties:
1013
+ passwordPolicy:
1014
+ type: object
1015
+ properties:
1016
+ minPasswordLength:
1017
+ type: integer
1018
+ passwordHistoryLength:
1019
+ type: integer
1020
+ maxPasswordAge:
1021
+ type: string
1022
+ example: "42 days"
1023
+ minPasswordAge:
1024
+ type: string
1025
+ example: "1 day"
1026
+ lockoutThreshold:
1027
+ type: integer
1028
+ lockoutDuration:
1029
+ type: string
1030
+ example: "30 min"
1031
+ lockoutObservationWindow:
1032
+ type: string
1033
+ example: "30 min"
1034
+ complexity:
1035
+ type: boolean
1036
+ kerberosPolicy:
1037
+ type: object
1038
+ description: |
1039
+ Kerberos policy settings from Default Domain Policy GPO.
1040
+ Note: Requires SMB_ENABLED=true to read actual values from SYSVOL.
1041
+ If SMB is disabled, values will be "N/A (GPO)".
1042
+ properties:
1043
+ maxTicketAge:
1044
+ type: string
1045
+ description: Maximum lifetime for service ticket
1046
+ example: "10 hours"
1047
+ maxRenewAge:
1048
+ type: string
1049
+ description: Maximum lifetime for ticket renewal
1050
+ example: "7 days"
1051
+ maxServiceAge:
1052
+ type: string
1053
+ description: Maximum lifetime for service ticket
1054
+ example: "600 min"
1055
+ maxClockSkew:
1056
+ type: string
1057
+ description: Maximum tolerance for computer clock synchronization
1058
+ example: "5 min"
1059
+ ticketValidateClient:
1060
+ type: boolean
1061
+ description: Enforce user logon restrictions
1062
+ example: true
1063
+ domainInfo:
1064
+ type: object
1065
+ properties:
1066
+ forestName:
1067
+ type: string
1068
+ domainName:
1069
+ type: string
1070
+ domainMode:
1071
+ type: string
1072
+ example: Windows2016Domain
1073
+ forestMode:
1074
+ type: string
1075
+ example: Windows2016Forest
1076
+ domainControllers:
1077
+ type: array
1078
+ items:
1079
+ type: string
1080
+ fsmoRoles:
1081
+ type: object
1082
+ properties:
1083
+ schemaMaster:
1084
+ type: string
1085
+ domainNamingMaster:
1086
+ type: string
1087
+ pdcEmulator:
1088
+ type: string
1089
+ ridMaster:
1090
+ type: string
1091
+ infrastructureMaster:
1092
+ type: string
1093
+ trusts:
1094
+ type: array
1095
+ items:
1096
+ type: object
1097
+ properties:
1098
+ name:
1099
+ type: string
1100
+ direction:
1101
+ type: string
1102
+ enum: [inbound, outbound, bidirectional]
1103
+ type:
1104
+ type: string
1105
+ enum: [forest, external, realm, shortcut]
1106
+ transitive:
1107
+ type: boolean
1108
+ gpoSummary:
1109
+ type: object
1110
+ properties:
1111
+ totalGPOs:
1112
+ type: integer
1113
+ linkedGPOs:
1114
+ type: integer
1115
+
1116
+ AuditResult:
1117
+ type: object
1118
+ properties:
1119
+ score:
1120
+ $ref: '#/components/schemas/SecurityScore'
1121
+ findings:
1122
+ type: array
1123
+ items:
1124
+ $ref: '#/components/schemas/Finding'
1125
+ stats:
1126
+ type: object
1127
+ properties:
1128
+ totalUsers:
1129
+ type: integer
1130
+ totalGroups:
1131
+ type: integer
1132
+ totalComputers:
1133
+ type: integer
1134
+ totalApps:
1135
+ type: integer
1136
+ totalPolicies:
1137
+ type: integer
1138
+ totalFindings:
1139
+ type: integer
1140
+ executionTimeMs:
1141
+ type: integer
1142
+ timestamp:
1143
+ type: string
1144
+ format: date-time
1145
+
1146
+ SecurityScore:
1147
+ type: object
1148
+ properties:
1149
+ score:
1150
+ type: number
1151
+ format: float
1152
+ minimum: 0
1153
+ maximum: 100
1154
+ example: 75.5
1155
+ rating:
1156
+ type: string
1157
+ enum: [excellent, good, fair, poor, critical]
1158
+ example: good
1159
+ weightedPoints:
1160
+ type: number
1161
+ totalUsers:
1162
+ type: integer
1163
+ findings:
1164
+ type: object
1165
+ properties:
1166
+ critical:
1167
+ type: integer
1168
+ high:
1169
+ type: integer
1170
+ medium:
1171
+ type: integer
1172
+ low:
1173
+ type: integer
1174
+ total:
1175
+ type: integer
1176
+ categories:
1177
+ type: object
1178
+ additionalProperties:
1179
+ type: integer
1180
+
1181
+ Finding:
1182
+ type: object
1183
+ properties:
1184
+ type:
1185
+ type: string
1186
+ example: PASSWORD_NOT_REQUIRED
1187
+ severity:
1188
+ type: string
1189
+ enum: [critical, high, medium, low]
1190
+ category:
1191
+ type: string
1192
+ enum: [passwords, kerberos, accounts, groups, computers, advanced, permissions, config, adcs, gpo, trusts, identity, applications, conditionalAccess, privilegedAccess]
1193
+ title:
1194
+ type: string
1195
+ example: Password Not Required
1196
+ description:
1197
+ type: string
1198
+ example: User account does not require a password
1199
+ count:
1200
+ type: integer
1201
+ example: 5
1202
+ affectedEntities:
1203
+ type: array
1204
+ items:
1205
+ type: string
1206
+ description: Only included when includeDetails=true
1207
+
1208
+ ExportRequest:
1209
+ type: object
1210
+ required:
1211
+ - auditResult
1212
+ - format
1213
+ properties:
1214
+ auditResult:
1215
+ $ref: '#/components/schemas/AuditResult'
1216
+ format:
1217
+ type: string
1218
+ enum: [json, csv]
1219
+ domain:
1220
+ type: string
1221
+ description: Domain name (for AD) or tenant ID (for Azure)
1222
+ tenantId:
1223
+ type: string
1224
+ description: Azure tenant ID (for Azure exports)
1225
+ includeDetails:
1226
+ type: boolean
1227
+ description: Include affectedEntities in JSON export
1228
+ default: false
1229
+ includeAffectedEntities:
1230
+ type: boolean
1231
+ description: Include affected entities column in CSV export
1232
+ default: false
1233
+ delimiter:
1234
+ type: string
1235
+ minLength: 1
1236
+ maxLength: 1
1237
+ description: CSV delimiter character
1238
+ default: ","
1239
+
1240
+ Error:
1241
+ type: object
1242
+ properties:
1243
+ success:
1244
+ type: boolean
1245
+ example: false
1246
+ error:
1247
+ type: object
1248
+ properties:
1249
+ code:
1250
+ type: string
1251
+ message:
1252
+ type: string
1253
+ details:
1254
+ type: array
1255
+ items:
1256
+ type: object
1257
+ properties:
1258
+ field:
1259
+ type: string
1260
+ message:
1261
+ type: string
1262
+
1263
+ ErrorResponse:
1264
+ type: object
1265
+ properties:
1266
+ success:
1267
+ type: boolean
1268
+ example: false
1269
+ error:
1270
+ type: object
1271
+ properties:
1272
+ code:
1273
+ type: string
1274
+ message:
1275
+ type: string
1276
+
1277
+ JobProgress:
1278
+ type: object
1279
+ description: Job progress returned when starting async audit
1280
+ properties:
1281
+ job_id:
1282
+ type: string
1283
+ example: ad-audit-1704067200000-abc12345
1284
+ status:
1285
+ type: string
1286
+ enum: [pending, running, completed, failed]
1287
+ example: pending
1288
+ progress:
1289
+ type: integer
1290
+ minimum: 0
1291
+ maximum: 100
1292
+ example: 0
1293
+ current_step:
1294
+ type: string
1295
+ example: CONNECTING
1296
+ description:
1297
+ type: string
1298
+ example: Job created, waiting to start
1299
+ started_at:
1300
+ type: string
1301
+ format: date-time
1302
+ steps:
1303
+ type: array
1304
+ items:
1305
+ $ref: '#/components/schemas/JobStep'
1306
+
1307
+ JobSummary:
1308
+ type: object
1309
+ description: Summary of a job (for listing)
1310
+ properties:
1311
+ job_id:
1312
+ type: string
1313
+ example: ad-audit-1704067200000-abc12345
1314
+ type:
1315
+ type: string
1316
+ enum: [ad-audit, azure-audit]
1317
+ status:
1318
+ type: string
1319
+ enum: [pending, running, completed, failed]
1320
+ progress:
1321
+ type: integer
1322
+ minimum: 0
1323
+ maximum: 100
1324
+ current_step:
1325
+ type: string
1326
+ started_at:
1327
+ type: string
1328
+ format: date-time
1329
+ completed_at:
1330
+ type: string
1331
+ format: date-time
1332
+ duration_ms:
1333
+ type: integer
1334
+
1335
+ JobStatusResponse:
1336
+ type: object
1337
+ description: Full job status response
1338
+ properties:
1339
+ job_id:
1340
+ type: string
1341
+ example: ad-audit-1704067200000-abc12345
1342
+ type:
1343
+ type: string
1344
+ enum: [ad-audit, azure-audit]
1345
+ status:
1346
+ type: string
1347
+ enum: [pending, running, completed, failed]
1348
+ progress:
1349
+ type: integer
1350
+ minimum: 0
1351
+ maximum: 100
1352
+ description: Overall progress percentage
1353
+ current_step:
1354
+ type: string
1355
+ description: Current step being executed
1356
+ example: FETCHING_USERS
1357
+ description:
1358
+ type: string
1359
+ description: Human-readable description of current activity
1360
+ started_at:
1361
+ type: string
1362
+ format: date-time
1363
+ updated_at:
1364
+ type: string
1365
+ format: date-time
1366
+ completed_at:
1367
+ type: string
1368
+ format: date-time
1369
+ failed_at:
1370
+ type: string
1371
+ format: date-time
1372
+ duration_ms:
1373
+ type: integer
1374
+ steps:
1375
+ type: array
1376
+ description: Detailed progress for each step
1377
+ items:
1378
+ $ref: '#/components/schemas/JobStep'
1379
+ error:
1380
+ $ref: '#/components/schemas/JobError'
1381
+ result:
1382
+ description: Full audit result (only when status=completed)
1383
+ $ref: '#/components/schemas/ADAuditResponse'
1384
+
1385
+ JobStep:
1386
+ type: object
1387
+ description: Progress information for a single audit step
1388
+ properties:
1389
+ name:
1390
+ type: string
1391
+ description: Step identifier
1392
+ enum:
1393
+ - CONNECTING
1394
+ - FETCHING_USERS
1395
+ - FETCHING_GROUPS
1396
+ - FETCHING_COMPUTERS
1397
+ - FETCHING_DOMAIN
1398
+ - FETCHING_ACLS
1399
+ - DETECTING_PASSWORDS
1400
+ - DETECTING_KERBEROS
1401
+ - DETECTING_ACCOUNTS
1402
+ - DETECTING_GROUPS
1403
+ - DETECTING_COMPUTERS
1404
+ - DETECTING_ADVANCED
1405
+ - DETECTING_PERMISSIONS
1406
+ - CALCULATING_SCORE
1407
+ - FETCHING_CONFIG
1408
+ - FORMATTING
1409
+ - COMPLETED
1410
+ example: FETCHING_USERS
1411
+ status:
1412
+ type: string
1413
+ enum: [pending, running, completed, failed, skipped]
1414
+ description:
1415
+ type: string
1416
+ example: Fetching users from Active Directory
1417
+ started_at:
1418
+ type: string
1419
+ format: date-time
1420
+ completed_at:
1421
+ type: string
1422
+ format: date-time
1423
+ duration_ms:
1424
+ type: integer
1425
+ progress:
1426
+ type: integer
1427
+ minimum: 0
1428
+ maximum: 100
1429
+ description: Step progress percentage
1430
+ count:
1431
+ type: integer
1432
+ description: Number of items processed (users, groups, etc.)
1433
+ example: 150
1434
+ findings:
1435
+ type: integer
1436
+ description: Number of findings detected in this step
1437
+ example: 5
1438
+ error:
1439
+ type: string
1440
+ description: Error message if step failed
1441
+
1442
+ JobError:
1443
+ type: object
1444
+ description: Error details for failed job
1445
+ properties:
1446
+ code:
1447
+ type: string
1448
+ example: LDAP_CONNECTION_FAILED
1449
+ message:
1450
+ type: string
1451
+ example: Failed to connect to LDAP server
1452
+ step:
1453
+ type: string
1454
+ example: CONNECTING
1455
+ details:
1456
+ type: object
1457
+ additionalProperties: true
1458
+
1459
+ responses:
1460
+ ValidationError:
1461
+ description: Request validation failed
1462
+ content:
1463
+ application/json:
1464
+ schema:
1465
+ $ref: '#/components/schemas/Error'
1466
+ example:
1467
+ success: false
1468
+ error:
1469
+ code: VALIDATION_ERROR
1470
+ message: Request validation failed
1471
+ details:
1472
+ - field: maxUsers
1473
+ message: Expected positive integer
1474
+
1475
+ UnauthorizedError:
1476
+ description: Authentication required or token invalid
1477
+ content:
1478
+ application/json:
1479
+ schema:
1480
+ $ref: '#/components/schemas/Error'
1481
+ example:
1482
+ success: false
1483
+ error:
1484
+ code: UNAUTHORIZED
1485
+ message: Invalid or missing authentication token
1486
+
1487
+ RateLimitError:
1488
+ description: Rate limit exceeded
1489
+ content:
1490
+ application/json:
1491
+ schema:
1492
+ $ref: '#/components/schemas/Error'
1493
+ example:
1494
+ success: false
1495
+ error:
1496
+ code: RATE_LIMIT_EXCEEDED
1497
+ message: Too many requests, please try again later
1498
+
1499
+ AuditRateLimitError:
1500
+ description: Audit rate limit exceeded
1501
+ content:
1502
+ application/json:
1503
+ schema:
1504
+ $ref: '#/components/schemas/Error'
1505
+ example:
1506
+ success: false
1507
+ error:
1508
+ code: AUDIT_RATE_LIMIT_EXCEEDED
1509
+ message: Too many audit requests, please try again later
1510
+
1511
+ ServerError:
1512
+ description: Internal server error
1513
+ content:
1514
+ application/json:
1515
+ schema:
1516
+ $ref: '#/components/schemas/Error'
1517
+ example:
1518
+ success: false
1519
+ error:
1520
+ code: INTERNAL_ERROR
1521
+ message: An unexpected error occurred
1522
+
1523
+ security:
1524
+ - bearerAuth: []