@cicore/cli 1.0.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 (337) hide show
  1. package/bin/ci.js +13 -0
  2. package/dist/commands/addon/api-actions.d.ts +45 -0
  3. package/dist/commands/addon/api-actions.d.ts.map +1 -0
  4. package/dist/commands/addon/api-actions.js +281 -0
  5. package/dist/commands/addon/api-actions.js.map +1 -0
  6. package/dist/commands/addon/build.d.ts +11 -0
  7. package/dist/commands/addon/build.d.ts.map +1 -0
  8. package/dist/commands/addon/build.js +182 -0
  9. package/dist/commands/addon/build.js.map +1 -0
  10. package/dist/commands/addon/create.d.ts +11 -0
  11. package/dist/commands/addon/create.d.ts.map +1 -0
  12. package/dist/commands/addon/create.js +1186 -0
  13. package/dist/commands/addon/create.js.map +1 -0
  14. package/dist/commands/addon/delete.d.ts +13 -0
  15. package/dist/commands/addon/delete.d.ts.map +1 -0
  16. package/dist/commands/addon/delete.js +83 -0
  17. package/dist/commands/addon/delete.js.map +1 -0
  18. package/dist/commands/addon/deploy.d.ts +27 -0
  19. package/dist/commands/addon/deploy.d.ts.map +1 -0
  20. package/dist/commands/addon/deploy.js +459 -0
  21. package/dist/commands/addon/deploy.js.map +1 -0
  22. package/dist/commands/addon/dev-deploy.d.ts +31 -0
  23. package/dist/commands/addon/dev-deploy.d.ts.map +1 -0
  24. package/dist/commands/addon/dev-deploy.js +128 -0
  25. package/dist/commands/addon/dev-deploy.js.map +1 -0
  26. package/dist/commands/addon/dev.d.ts +36 -0
  27. package/dist/commands/addon/dev.d.ts.map +1 -0
  28. package/dist/commands/addon/dev.js +323 -0
  29. package/dist/commands/addon/dev.js.map +1 -0
  30. package/dist/commands/addon/extract-classes.d.ts +23 -0
  31. package/dist/commands/addon/extract-classes.d.ts.map +1 -0
  32. package/dist/commands/addon/extract-classes.js +281 -0
  33. package/dist/commands/addon/extract-classes.js.map +1 -0
  34. package/dist/commands/addon/generate-safelist.d.ts +24 -0
  35. package/dist/commands/addon/generate-safelist.d.ts.map +1 -0
  36. package/dist/commands/addon/generate-safelist.js +276 -0
  37. package/dist/commands/addon/generate-safelist.js.map +1 -0
  38. package/dist/commands/addon/index.d.ts +19 -0
  39. package/dist/commands/addon/index.d.ts.map +1 -0
  40. package/dist/commands/addon/index.js +296 -0
  41. package/dist/commands/addon/index.js.map +1 -0
  42. package/dist/commands/addon/init-repo.d.ts +25 -0
  43. package/dist/commands/addon/init-repo.d.ts.map +1 -0
  44. package/dist/commands/addon/init-repo.js +171 -0
  45. package/dist/commands/addon/init-repo.js.map +1 -0
  46. package/dist/commands/addon/install.d.ts +23 -0
  47. package/dist/commands/addon/install.d.ts.map +1 -0
  48. package/dist/commands/addon/install.js +84 -0
  49. package/dist/commands/addon/install.js.map +1 -0
  50. package/dist/commands/addon/list.d.ts +10 -0
  51. package/dist/commands/addon/list.d.ts.map +1 -0
  52. package/dist/commands/addon/list.js +102 -0
  53. package/dist/commands/addon/list.js.map +1 -0
  54. package/dist/commands/addon/manifest-refresh.d.ts +17 -0
  55. package/dist/commands/addon/manifest-refresh.d.ts.map +1 -0
  56. package/dist/commands/addon/manifest-refresh.js +48 -0
  57. package/dist/commands/addon/manifest-refresh.js.map +1 -0
  58. package/dist/commands/addon/migrate.d.ts +40 -0
  59. package/dist/commands/addon/migrate.d.ts.map +1 -0
  60. package/dist/commands/addon/migrate.js +236 -0
  61. package/dist/commands/addon/migrate.js.map +1 -0
  62. package/dist/commands/addon/publish.d.ts +33 -0
  63. package/dist/commands/addon/publish.d.ts.map +1 -0
  64. package/dist/commands/addon/publish.js +236 -0
  65. package/dist/commands/addon/publish.js.map +1 -0
  66. package/dist/commands/addon/scaffold-quality.d.ts +21 -0
  67. package/dist/commands/addon/scaffold-quality.d.ts.map +1 -0
  68. package/dist/commands/addon/scaffold-quality.js +90 -0
  69. package/dist/commands/addon/scaffold-quality.js.map +1 -0
  70. package/dist/commands/addon/sign.d.ts +9 -0
  71. package/dist/commands/addon/sign.d.ts.map +1 -0
  72. package/dist/commands/addon/sign.js +83 -0
  73. package/dist/commands/addon/sign.js.map +1 -0
  74. package/dist/commands/addon/toggle.d.ts +6 -0
  75. package/dist/commands/addon/toggle.d.ts.map +1 -0
  76. package/dist/commands/addon/toggle.js +46 -0
  77. package/dist/commands/addon/toggle.js.map +1 -0
  78. package/dist/commands/agent/index.d.ts +34 -0
  79. package/dist/commands/agent/index.d.ts.map +1 -0
  80. package/dist/commands/agent/index.js +564 -0
  81. package/dist/commands/agent/index.js.map +1 -0
  82. package/dist/commands/brand/index.d.ts +54 -0
  83. package/dist/commands/brand/index.d.ts.map +1 -0
  84. package/dist/commands/brand/index.js +367 -0
  85. package/dist/commands/brand/index.js.map +1 -0
  86. package/dist/commands/build/index.d.ts +53 -0
  87. package/dist/commands/build/index.d.ts.map +1 -0
  88. package/dist/commands/build/index.js +726 -0
  89. package/dist/commands/build/index.js.map +1 -0
  90. package/dist/commands/cache/flush-local.d.ts +31 -0
  91. package/dist/commands/cache/flush-local.d.ts.map +1 -0
  92. package/dist/commands/cache/flush-local.js +161 -0
  93. package/dist/commands/cache/flush-local.js.map +1 -0
  94. package/dist/commands/cache/index.d.ts +14 -0
  95. package/dist/commands/cache/index.d.ts.map +1 -0
  96. package/dist/commands/cache/index.js +453 -0
  97. package/dist/commands/cache/index.js.map +1 -0
  98. package/dist/commands/check/index.d.ts +8 -0
  99. package/dist/commands/check/index.d.ts.map +1 -0
  100. package/dist/commands/check/index.js +1316 -0
  101. package/dist/commands/check/index.js.map +1 -0
  102. package/dist/commands/cloudflare/index.d.ts +8 -0
  103. package/dist/commands/cloudflare/index.d.ts.map +1 -0
  104. package/dist/commands/cloudflare/index.js +453 -0
  105. package/dist/commands/cloudflare/index.js.map +1 -0
  106. package/dist/commands/core/create.d.ts +12 -0
  107. package/dist/commands/core/create.d.ts.map +1 -0
  108. package/dist/commands/core/create.js +206 -0
  109. package/dist/commands/core/create.js.map +1 -0
  110. package/dist/commands/core/delete.d.ts +11 -0
  111. package/dist/commands/core/delete.d.ts.map +1 -0
  112. package/dist/commands/core/delete.js +64 -0
  113. package/dist/commands/core/delete.js.map +1 -0
  114. package/dist/commands/core/env.d.ts +12 -0
  115. package/dist/commands/core/env.d.ts.map +1 -0
  116. package/dist/commands/core/env.js +95 -0
  117. package/dist/commands/core/env.js.map +1 -0
  118. package/dist/commands/core/health.d.ts +6 -0
  119. package/dist/commands/core/health.d.ts.map +1 -0
  120. package/dist/commands/core/health.js +215 -0
  121. package/dist/commands/core/health.js.map +1 -0
  122. package/dist/commands/core/index.d.ts +15 -0
  123. package/dist/commands/core/index.d.ts.map +1 -0
  124. package/dist/commands/core/index.js +86 -0
  125. package/dist/commands/core/index.js.map +1 -0
  126. package/dist/commands/core/list.d.ts +11 -0
  127. package/dist/commands/core/list.d.ts.map +1 -0
  128. package/dist/commands/core/list.js +58 -0
  129. package/dist/commands/core/list.js.map +1 -0
  130. package/dist/commands/core/rebuild.d.ts +13 -0
  131. package/dist/commands/core/rebuild.d.ts.map +1 -0
  132. package/dist/commands/core/rebuild.js +119 -0
  133. package/dist/commands/core/rebuild.js.map +1 -0
  134. package/dist/commands/db/index.d.ts +23 -0
  135. package/dist/commands/db/index.d.ts.map +1 -0
  136. package/dist/commands/db/index.js +355 -0
  137. package/dist/commands/db/index.js.map +1 -0
  138. package/dist/commands/db/promote-silo.d.ts +320 -0
  139. package/dist/commands/db/promote-silo.d.ts.map +1 -0
  140. package/dist/commands/db/promote-silo.js +930 -0
  141. package/dist/commands/db/promote-silo.js.map +1 -0
  142. package/dist/commands/db/relocate.d.ts +41 -0
  143. package/dist/commands/db/relocate.d.ts.map +1 -0
  144. package/dist/commands/db/relocate.js +482 -0
  145. package/dist/commands/db/relocate.js.map +1 -0
  146. package/dist/commands/db/rollback-silo.d.ts +44 -0
  147. package/dist/commands/db/rollback-silo.d.ts.map +1 -0
  148. package/dist/commands/db/rollback-silo.js +402 -0
  149. package/dist/commands/db/rollback-silo.js.map +1 -0
  150. package/dist/commands/deploy/index.d.ts +26 -0
  151. package/dist/commands/deploy/index.d.ts.map +1 -0
  152. package/dist/commands/deploy/index.js +107 -0
  153. package/dist/commands/deploy/index.js.map +1 -0
  154. package/dist/commands/devops/index.d.ts +6 -0
  155. package/dist/commands/devops/index.d.ts.map +1 -0
  156. package/dist/commands/devops/index.js +220 -0
  157. package/dist/commands/devops/index.js.map +1 -0
  158. package/dist/commands/domain/index.d.ts +8 -0
  159. package/dist/commands/domain/index.d.ts.map +1 -0
  160. package/dist/commands/domain/index.js +386 -0
  161. package/dist/commands/domain/index.js.map +1 -0
  162. package/dist/commands/image/index.d.ts +8 -0
  163. package/dist/commands/image/index.d.ts.map +1 -0
  164. package/dist/commands/image/index.js +308 -0
  165. package/dist/commands/image/index.js.map +1 -0
  166. package/dist/commands/install/factory-reset.d.ts +21 -0
  167. package/dist/commands/install/factory-reset.d.ts.map +1 -0
  168. package/dist/commands/install/factory-reset.js +83 -0
  169. package/dist/commands/install/factory-reset.js.map +1 -0
  170. package/dist/commands/install/index.d.ts +17 -0
  171. package/dist/commands/install/index.d.ts.map +1 -0
  172. package/dist/commands/install/index.js +44 -0
  173. package/dist/commands/install/index.js.map +1 -0
  174. package/dist/commands/install/install.d.ts +35 -0
  175. package/dist/commands/install/install.d.ts.map +1 -0
  176. package/dist/commands/install/install.js +171 -0
  177. package/dist/commands/install/install.js.map +1 -0
  178. package/dist/commands/login/index.d.ts +15 -0
  179. package/dist/commands/login/index.d.ts.map +1 -0
  180. package/dist/commands/login/index.js +58 -0
  181. package/dist/commands/login/index.js.map +1 -0
  182. package/dist/commands/nginx/index.d.ts +11 -0
  183. package/dist/commands/nginx/index.d.ts.map +1 -0
  184. package/dist/commands/nginx/index.js +580 -0
  185. package/dist/commands/nginx/index.js.map +1 -0
  186. package/dist/commands/server/bootstrap.d.ts +25 -0
  187. package/dist/commands/server/bootstrap.d.ts.map +1 -0
  188. package/dist/commands/server/bootstrap.js +260 -0
  189. package/dist/commands/server/bootstrap.js.map +1 -0
  190. package/dist/commands/server/index.d.ts +8 -0
  191. package/dist/commands/server/index.d.ts.map +1 -0
  192. package/dist/commands/server/index.js +2524 -0
  193. package/dist/commands/server/index.js.map +1 -0
  194. package/dist/commands/setup/index.d.ts +34 -0
  195. package/dist/commands/setup/index.d.ts.map +1 -0
  196. package/dist/commands/setup/index.js +423 -0
  197. package/dist/commands/setup/index.js.map +1 -0
  198. package/dist/commands/ssl/index.d.ts +8 -0
  199. package/dist/commands/ssl/index.d.ts.map +1 -0
  200. package/dist/commands/ssl/index.js +275 -0
  201. package/dist/commands/ssl/index.js.map +1 -0
  202. package/dist/commands/superadmin/index.d.ts +16 -0
  203. package/dist/commands/superadmin/index.d.ts.map +1 -0
  204. package/dist/commands/superadmin/index.js +81 -0
  205. package/dist/commands/superadmin/index.js.map +1 -0
  206. package/dist/commands/tenant/index.d.ts +6 -0
  207. package/dist/commands/tenant/index.d.ts.map +1 -0
  208. package/dist/commands/tenant/index.js +192 -0
  209. package/dist/commands/tenant/index.js.map +1 -0
  210. package/dist/index.d.ts +11 -0
  211. package/dist/index.d.ts.map +1 -0
  212. package/dist/index.js +107 -0
  213. package/dist/index.js.map +1 -0
  214. package/dist/lib/addon-sign.d.ts +23 -0
  215. package/dist/lib/addon-sign.d.ts.map +1 -0
  216. package/dist/lib/addon-sign.js +39 -0
  217. package/dist/lib/addon-sign.js.map +1 -0
  218. package/dist/lib/addon-sign.test.d.ts +2 -0
  219. package/dist/lib/addon-sign.test.d.ts.map +1 -0
  220. package/dist/lib/addon-sign.test.js +27 -0
  221. package/dist/lib/addon-sign.test.js.map +1 -0
  222. package/dist/lib/cdn.d.ts +25 -0
  223. package/dist/lib/cdn.d.ts.map +1 -0
  224. package/dist/lib/cdn.js +131 -0
  225. package/dist/lib/cdn.js.map +1 -0
  226. package/dist/lib/cloudflare.d.ts +133 -0
  227. package/dist/lib/cloudflare.d.ts.map +1 -0
  228. package/dist/lib/cloudflare.js +435 -0
  229. package/dist/lib/cloudflare.js.map +1 -0
  230. package/dist/lib/config.d.ts +96 -0
  231. package/dist/lib/config.d.ts.map +1 -0
  232. package/dist/lib/config.js +132 -0
  233. package/dist/lib/config.js.map +1 -0
  234. package/dist/lib/env.d.ts +8 -0
  235. package/dist/lib/env.d.ts.map +1 -0
  236. package/dist/lib/env.js +64 -0
  237. package/dist/lib/env.js.map +1 -0
  238. package/dist/lib/hosts.d.ts +194 -0
  239. package/dist/lib/hosts.d.ts.map +1 -0
  240. package/dist/lib/hosts.js +183 -0
  241. package/dist/lib/hosts.js.map +1 -0
  242. package/dist/lib/logger.d.ts +68 -0
  243. package/dist/lib/logger.d.ts.map +1 -0
  244. package/dist/lib/logger.js +130 -0
  245. package/dist/lib/logger.js.map +1 -0
  246. package/dist/lib/nginx-config.d.ts +78 -0
  247. package/dist/lib/nginx-config.d.ts.map +1 -0
  248. package/dist/lib/nginx-config.js +736 -0
  249. package/dist/lib/nginx-config.js.map +1 -0
  250. package/dist/lib/ops/addon-dev.d.ts +93 -0
  251. package/dist/lib/ops/addon-dev.d.ts.map +1 -0
  252. package/dist/lib/ops/addon-dev.js +237 -0
  253. package/dist/lib/ops/addon-dev.js.map +1 -0
  254. package/dist/lib/ops/addon-quality.d.ts +38 -0
  255. package/dist/lib/ops/addon-quality.d.ts.map +1 -0
  256. package/dist/lib/ops/addon-quality.js +338 -0
  257. package/dist/lib/ops/addon-quality.js.map +1 -0
  258. package/dist/lib/ops/addon-routes.d.ts +49 -0
  259. package/dist/lib/ops/addon-routes.d.ts.map +1 -0
  260. package/dist/lib/ops/addon-routes.js +189 -0
  261. package/dist/lib/ops/addon-routes.js.map +1 -0
  262. package/dist/lib/ops/addon.d.ts +120 -0
  263. package/dist/lib/ops/addon.d.ts.map +1 -0
  264. package/dist/lib/ops/addon.js +260 -0
  265. package/dist/lib/ops/addon.js.map +1 -0
  266. package/dist/lib/ops/cdn.d.ts +87 -0
  267. package/dist/lib/ops/cdn.d.ts.map +1 -0
  268. package/dist/lib/ops/cdn.js +170 -0
  269. package/dist/lib/ops/cdn.js.map +1 -0
  270. package/dist/lib/ops/cf.d.ts +36 -0
  271. package/dist/lib/ops/cf.d.ts.map +1 -0
  272. package/dist/lib/ops/cf.js +114 -0
  273. package/dist/lib/ops/cf.js.map +1 -0
  274. package/dist/lib/ops/compose.d.ts +95 -0
  275. package/dist/lib/ops/compose.d.ts.map +1 -0
  276. package/dist/lib/ops/compose.js +165 -0
  277. package/dist/lib/ops/compose.js.map +1 -0
  278. package/dist/lib/ops/core.d.ts +117 -0
  279. package/dist/lib/ops/core.d.ts.map +1 -0
  280. package/dist/lib/ops/core.js +322 -0
  281. package/dist/lib/ops/core.js.map +1 -0
  282. package/dist/lib/ops/db.d.ts +116 -0
  283. package/dist/lib/ops/db.d.ts.map +1 -0
  284. package/dist/lib/ops/db.js +351 -0
  285. package/dist/lib/ops/db.js.map +1 -0
  286. package/dist/lib/ops/dns.d.ts +111 -0
  287. package/dist/lib/ops/dns.d.ts.map +1 -0
  288. package/dist/lib/ops/dns.js +306 -0
  289. package/dist/lib/ops/dns.js.map +1 -0
  290. package/dist/lib/ops/image.d.ts +94 -0
  291. package/dist/lib/ops/image.d.ts.map +1 -0
  292. package/dist/lib/ops/image.js +159 -0
  293. package/dist/lib/ops/image.js.map +1 -0
  294. package/dist/lib/ops/nginx.d.ts +114 -0
  295. package/dist/lib/ops/nginx.d.ts.map +1 -0
  296. package/dist/lib/ops/nginx.js +388 -0
  297. package/dist/lib/ops/nginx.js.map +1 -0
  298. package/dist/lib/ops/redis.d.ts +7 -0
  299. package/dist/lib/ops/redis.d.ts.map +1 -0
  300. package/dist/lib/ops/redis.js +35 -0
  301. package/dist/lib/ops/redis.js.map +1 -0
  302. package/dist/lib/ops/ssh.d.ts +127 -0
  303. package/dist/lib/ops/ssh.d.ts.map +1 -0
  304. package/dist/lib/ops/ssh.js +269 -0
  305. package/dist/lib/ops/ssh.js.map +1 -0
  306. package/dist/lib/prompts.d.ts +46 -0
  307. package/dist/lib/prompts.d.ts.map +1 -0
  308. package/dist/lib/prompts.js +113 -0
  309. package/dist/lib/prompts.js.map +1 -0
  310. package/dist/lib/sast.d.ts +43 -0
  311. package/dist/lib/sast.d.ts.map +1 -0
  312. package/dist/lib/sast.js +79 -0
  313. package/dist/lib/sast.js.map +1 -0
  314. package/dist/lib/sast.test.d.ts +2 -0
  315. package/dist/lib/sast.test.d.ts.map +1 -0
  316. package/dist/lib/sast.test.js +33 -0
  317. package/dist/lib/sast.test.js.map +1 -0
  318. package/dist/lib/shell.d.ts +61 -0
  319. package/dist/lib/shell.d.ts.map +1 -0
  320. package/dist/lib/shell.js +183 -0
  321. package/dist/lib/shell.js.map +1 -0
  322. package/dist/lib/ssh-config.d.ts +37 -0
  323. package/dist/lib/ssh-config.d.ts.map +1 -0
  324. package/dist/lib/ssh-config.js +122 -0
  325. package/dist/lib/ssh-config.js.map +1 -0
  326. package/dist/lib/tenant-scope.d.ts +38 -0
  327. package/dist/lib/tenant-scope.d.ts.map +1 -0
  328. package/dist/lib/tenant-scope.js +129 -0
  329. package/dist/lib/tenant-scope.js.map +1 -0
  330. package/dist/lib/tenant-scope.test.d.ts +2 -0
  331. package/dist/lib/tenant-scope.test.d.ts.map +1 -0
  332. package/dist/lib/tenant-scope.test.js +223 -0
  333. package/dist/lib/tenant-scope.test.js.map +1 -0
  334. package/package.json +58 -0
  335. package/templates/bootstrap/.env.template +54 -0
  336. package/templates/bootstrap/docker-compose.yml +145 -0
  337. package/templates/vhost.conf.tmpl +446 -0
@@ -0,0 +1,736 @@
1
+ /**
2
+ * CiCore CLI - Nginx Configuration Manager
3
+ *
4
+ * Dynamically manages nginx config for multi-domain setup:
5
+ * - CORS origin mapping
6
+ * - Domain to Core mapping
7
+ * - SSL certificates
8
+ * - Server blocks
9
+ */
10
+ // ============================================
11
+ // PARSER - Extract current domains from config
12
+ // ============================================
13
+ /**
14
+ * Parse existing nginx config and extract domain configurations
15
+ */
16
+ export function parseNginxConfig(configContent) {
17
+ const domains = [];
18
+ // Extract from CORS map
19
+ const corsRegex = /"\~\^https\?:\/\/\(www\\\.\)\?([a-zA-Z0-9.-]+)\$"/g;
20
+ let match;
21
+ const foundDomains = new Set();
22
+ while ((match = corsRegex.exec(configContent)) !== null) {
23
+ foundDomains.add(match[1].replace(/\\\./g, '.'));
24
+ }
25
+ // Extract domain-core mappings
26
+ const domainCoreRegex = /^\s+([a-zA-Z0-9.-]+)\s+(core\d+);/gm;
27
+ const domainCoreMap = new Map();
28
+ while ((match = domainCoreRegex.exec(configContent)) !== null) {
29
+ const domain = match[1];
30
+ const core = match[2];
31
+ if (!domain.startsWith('www.') && !domain.startsWith('api.') && !domain.startsWith('~')) {
32
+ domainCoreMap.set(domain, core);
33
+ }
34
+ }
35
+ // Extract SSL cert name
36
+ const sslRegex = /ssl_certificate\s+\/etc\/nginx\/ssl\/([a-zA-Z0-9-]+)\.crt/;
37
+ const sslMatch = configContent.match(sslRegex);
38
+ const defaultSslCert = sslMatch ? sslMatch[1] : 'default';
39
+ // Build domain configs
40
+ for (const [domain, core] of domainCoreMap) {
41
+ domains.push({
42
+ domain,
43
+ coreName: core,
44
+ sslCertName: defaultSslCert,
45
+ });
46
+ }
47
+ return domains;
48
+ }
49
+ /**
50
+ * List domains currently configured in nginx
51
+ */
52
+ export function listDomainsFromConfig(configContent) {
53
+ const domains = [];
54
+ // Extract domain-core mappings from map block
55
+ const mapBlockRegex = /map \$host \$target_core \{([\s\S]*?)\}/;
56
+ const mapMatch = configContent.match(mapBlockRegex);
57
+ if (mapMatch) {
58
+ const mapContent = mapMatch[1];
59
+ const domainRegex = /^\s+([a-zA-Z0-9.-]+)\s+(core\d+);/gm;
60
+ let match;
61
+ while ((match = domainRegex.exec(mapContent)) !== null) {
62
+ const domain = match[1];
63
+ const core = match[2];
64
+ // Only include root domains (not www., api., or regex patterns)
65
+ if (!domain.startsWith('www.') && !domain.startsWith('api.') && !domain.startsWith('~')) {
66
+ domains.push({ domain, core });
67
+ }
68
+ }
69
+ }
70
+ return domains;
71
+ }
72
+ // ============================================
73
+ // GENERATOR - Create config sections
74
+ // ============================================
75
+ /**
76
+ * Generate CORS origin map entries for a domain
77
+ */
78
+ export function generateCorsEntries(domain) {
79
+ const escaped = domain.replace(/\./g, '\\.');
80
+ return ` "~^https?://(www\\.)?${escaped}$" $http_origin;
81
+ "~^https?://api\\.${escaped}$" $http_origin;
82
+ "~^https?://.*\\.${escaped}$" $http_origin;`;
83
+ }
84
+ /**
85
+ * Generate domain-to-core map entries
86
+ */
87
+ export function generateDomainCoreEntries(domain, coreName) {
88
+ return ` ${domain} ${coreName};
89
+ www.${domain} ${coreName};
90
+ api.${domain} ${coreName};`;
91
+ }
92
+ /**
93
+ * Generate tenant subdomain regex entry
94
+ */
95
+ export function generateTenantRegex(domain, coreName) {
96
+ const escaped = domain.replace(/\./g, '\\.');
97
+ return ` ~^.+\\.${escaped}$ ${coreName};`;
98
+ }
99
+ /**
100
+ * Generate core path map entry
101
+ */
102
+ export function generateCorePathEntry(coreName) {
103
+ return ` ${coreName} /var/www/cores/${coreName};`;
104
+ }
105
+ // ============================================
106
+ // MODIFIER - Add/Remove domains
107
+ // ============================================
108
+ /**
109
+ * Add a new domain to nginx config
110
+ */
111
+ export function addDomainToConfig(configContent, domain, coreName, sslCertName) {
112
+ let newConfig = configContent;
113
+ // 1. Add CORS entries
114
+ const corsMapEnd = newConfig.indexOf(' "" "https://');
115
+ if (corsMapEnd > 0) {
116
+ const corsEntries = generateCorsEntries(domain);
117
+ newConfig = newConfig.slice(0, corsMapEnd) + corsEntries + '\n' + newConfig.slice(corsMapEnd);
118
+ }
119
+ // 2. Add domain-core mapping
120
+ const domainMapRegex = /(map \$host \$target_core \{[\s\S]*?)( default\s+core\d+;)/;
121
+ const domainMapMatch = newConfig.match(domainMapRegex);
122
+ if (domainMapMatch) {
123
+ const domainEntries = `\n ${domain} ${coreName};\n www.${domain} ${coreName};\n api.${domain} ${coreName};\n\n # Tenant subdomainleri\n ~^.+\\.${domain.replace(/\./g, '\\.')}$ ${coreName};\n\n`;
124
+ newConfig = newConfig.replace(domainMapRegex, `$1${domainEntries} default ${coreName};`);
125
+ }
126
+ // 3. Add core path if new core
127
+ const corePathRegex = new RegExp(`${coreName} /var/www/cores/${coreName};`);
128
+ if (!corePathRegex.test(newConfig)) {
129
+ const corePathMapEnd = newConfig.indexOf('}\n\n# ======', newConfig.indexOf('map $target_core $core_path'));
130
+ if (corePathMapEnd > 0) {
131
+ const corePathEntry = ` ${coreName} /var/www/cores/${coreName};\n`;
132
+ newConfig = newConfig.slice(0, corePathMapEnd) + corePathEntry + newConfig.slice(corePathMapEnd);
133
+ }
134
+ }
135
+ // 4. Add to API server block server_name
136
+ const apiServerNameRegex = /(server_name\s+)(api\.[a-zA-Z0-9.-]+(?:\s+api\.[a-zA-Z0-9.-]+)*)(;)/;
137
+ const apiMatch = newConfig.match(apiServerNameRegex);
138
+ if (apiMatch && !apiMatch[2].includes(`api.${domain}`)) {
139
+ newConfig = newConfig.replace(apiServerNameRegex, `$1$2 api.${domain}$3`);
140
+ }
141
+ // 5. Add to tenant subdomain server block
142
+ const tenantServerRegex = /(server_name\s+)(~\^\(\?!api\\\.\)\(\?<subdomain>\[\^.\]\+\)\\\.[\w.-]+\\\.\w+\$(?:\s+~\^\(\?!api\\\.\)\(\?<subdomain>\[\^.\]\+\)\\\.[\w.-]+\\\.\w+\$)*)(;)/;
143
+ const tenantMatch = newConfig.match(tenantServerRegex);
144
+ if (tenantMatch) {
145
+ const escapedDomain = domain.replace(/\./g, '\\.');
146
+ if (!tenantMatch[2].includes(escapedDomain)) {
147
+ const newTenantRegex = `~^(?!api\\.)(?<subdomain>[^.]+)\\.${escapedDomain}$`;
148
+ newConfig = newConfig.replace(tenantServerRegex, `$1$2\n ${newTenantRegex}$3`);
149
+ }
150
+ }
151
+ // 6. Add to main web server block
152
+ const mainServerRegex = /(# 9\. ANA WEB SERVER[\s\S]*?server_name\s+)([a-zA-Z0-9.-]+(?:\s+[a-zA-Z0-9.-]+)*)(;)/;
153
+ const mainMatch = newConfig.match(mainServerRegex);
154
+ if (mainMatch && !mainMatch[2].includes(domain)) {
155
+ newConfig = newConfig.replace(mainServerRegex, `$1$2 ${domain} www.${domain}$3`);
156
+ }
157
+ return newConfig;
158
+ }
159
+ /**
160
+ * Remove a domain from nginx config
161
+ */
162
+ export function removeDomainFromConfig(configContent, domain) {
163
+ let newConfig = configContent;
164
+ const escaped = domain.replace(/\./g, '\\.');
165
+ // 1. Remove CORS entries
166
+ const corsRegex = new RegExp(`\\s*"~\\^https\\?://\\(www\\\\\\.\\)\\?${escaped}\\$" \\$http_origin;\\n`, 'g');
167
+ newConfig = newConfig.replace(corsRegex, '');
168
+ const corsApiRegex = new RegExp(`\\s*"~\\^https\\?://api\\\\.${escaped}\\$" \\$http_origin;\\n`, 'g');
169
+ newConfig = newConfig.replace(corsApiRegex, '');
170
+ const corsWildcardRegex = new RegExp(`\\s*"~\\^https\\?://\\.\\*\\\\.${escaped}\\$" \\$http_origin;\\n`, 'g');
171
+ newConfig = newConfig.replace(corsWildcardRegex, '');
172
+ // 2. Remove domain-core mapping
173
+ const domainMapRegex = new RegExp(`\\s*${domain}\\s+core\\d+;\\n`, 'g');
174
+ newConfig = newConfig.replace(domainMapRegex, '');
175
+ const wwwMapRegex = new RegExp(`\\s*www\\.${domain}\\s+core\\d+;\\n`, 'g');
176
+ newConfig = newConfig.replace(wwwMapRegex, '');
177
+ const apiMapRegex = new RegExp(`\\s*api\\.${domain}\\s+core\\d+;\\n`, 'g');
178
+ newConfig = newConfig.replace(apiMapRegex, '');
179
+ // 3. Remove tenant regex
180
+ const tenantRegex = new RegExp(`\\s*~\\^\\.\+\\\\.${escaped}\\$\\s+core\\d+;\\n`, 'g');
181
+ newConfig = newConfig.replace(tenantRegex, '');
182
+ // 4. Remove from API server_name
183
+ const apiServerRegex = new RegExp(`\\s*api\\.${domain}`, 'g');
184
+ newConfig = newConfig.replace(apiServerRegex, '');
185
+ // 5. Remove from tenant server_name
186
+ const tenantServerRegex = new RegExp(`\\s*~\\^\\(\\?!api\\\\.\\)\\(\\?<subdomain>\\[\\^.\\]\\+\\)\\\\.${escaped}\\$`, 'g');
187
+ newConfig = newConfig.replace(tenantServerRegex, '');
188
+ // 6. Remove from main server_name
189
+ const mainServerRegex = new RegExp(`\\s*${domain}`, 'g');
190
+ newConfig = newConfig.replace(mainServerRegex, '');
191
+ const wwwServerRegex = new RegExp(`\\s*www\\.${domain}`, 'g');
192
+ newConfig = newConfig.replace(wwwServerRegex, '');
193
+ return newConfig;
194
+ }
195
+ /**
196
+ * Update SSL certificate references in config
197
+ */
198
+ export function updateSSLCertInConfig(configContent, certName) {
199
+ let newConfig = configContent;
200
+ // Update all ssl_certificate directives
201
+ newConfig = newConfig.replace(/ssl_certificate\s+\/etc\/nginx\/ssl\/[a-zA-Z0-9-]+\.crt;/g, `ssl_certificate /etc/nginx/ssl/${certName}.crt;`);
202
+ newConfig = newConfig.replace(/ssl_certificate_key\s+\/etc\/nginx\/ssl\/[a-zA-Z0-9-]+\.key;/g, `ssl_certificate_key /etc/nginx/ssl/${certName}.key;`);
203
+ return newConfig;
204
+ }
205
+ /**
206
+ * Update default CORS origin in config
207
+ */
208
+ export function updateDefaultCorsOrigin(configContent, domain) {
209
+ let newConfig = configContent;
210
+ // Update default in CORS map
211
+ newConfig = newConfig.replace(/default "https:\/\/[a-zA-Z0-9.-]+";/, `default "https://${domain}";`);
212
+ // Update empty origin fallback
213
+ newConfig = newConfig.replace(/"" "https:\/\/[a-zA-Z0-9.-]+";/, `"" "https://${domain}";`);
214
+ return newConfig;
215
+ }
216
+ // ============================================
217
+ // VALIDATOR
218
+ // ============================================
219
+ /**
220
+ * Validate nginx config syntax (basic check)
221
+ */
222
+ export function validateNginxConfig(configContent) {
223
+ const errors = [];
224
+ // Check for balanced braces
225
+ const openBraces = (configContent.match(/{/g) || []).length;
226
+ const closeBraces = (configContent.match(/}/g) || []).length;
227
+ if (openBraces !== closeBraces) {
228
+ errors.push(`Unbalanced braces: ${openBraces} open, ${closeBraces} close`);
229
+ }
230
+ // Check for required sections
231
+ if (!configContent.includes('map $http_origin $cors_origin')) {
232
+ errors.push('Missing CORS origin map');
233
+ }
234
+ if (!configContent.includes('map $host $target_core')) {
235
+ errors.push('Missing domain-core map');
236
+ }
237
+ if (!configContent.includes('upstream php_backend')) {
238
+ errors.push('Missing PHP upstream');
239
+ }
240
+ if (!configContent.includes('upstream nuxt_frontend')) {
241
+ errors.push('Missing Nuxt upstream');
242
+ }
243
+ return {
244
+ valid: errors.length === 0,
245
+ errors,
246
+ };
247
+ }
248
+ // ============================================
249
+ // FULL CONFIG GENERATOR
250
+ // ============================================
251
+ /**
252
+ * Generate a complete nginx config from domain list
253
+ */
254
+ export function generateFullNginxConfig(domains) {
255
+ if (domains.length === 0) {
256
+ throw new Error('At least one domain is required');
257
+ }
258
+ const primaryDomain = domains[0].domain;
259
+ const primaryCert = domains[0].sslCertName;
260
+ // Generate CORS entries
261
+ const corsEntries = domains.map(d => generateCorsEntries(d.domain)).join('\n');
262
+ // Generate domain-core map entries
263
+ const domainCoreEntries = domains.map(d => {
264
+ return ` # ${d.domain} → ${d.coreName}
265
+ ${d.domain} ${d.coreName};
266
+ www.${d.domain} ${d.coreName};
267
+ api.${d.domain} ${d.coreName};`;
268
+ }).join('\n\n');
269
+ // Generate tenant regex entries
270
+ const tenantRegexEntries = domains.map(d => {
271
+ const escaped = d.domain.replace(/\./g, '\\.');
272
+ return ` ~^.+\\.${escaped}$ ${d.coreName};`;
273
+ }).join('\n');
274
+ // Generate core paths
275
+ const uniqueCores = [...new Set(domains.map(d => d.coreName))];
276
+ const corePathEntries = uniqueCores.map(c => ` ${c} /var/www/cores/${c};`).join('\n');
277
+ // Generate server_name lists
278
+ const apiServerNames = domains.map(d => `api.${d.domain}`).join(' ');
279
+ const tenantServerNames = domains.map(d => {
280
+ const escaped = d.domain.replace(/\./g, '\\.');
281
+ return `~^(?!api\\.)(?<subdomain>[^.]+)\\.${escaped}$`;
282
+ }).join('\n ');
283
+ const mainServerNames = domains.flatMap(d => [d.domain, `www.${d.domain}`]).join(' ');
284
+ return `##
285
+ ## VUCORE GLOBAL NGINX ROUTER
286
+ ## Multi-Core + Multi-Tenant Yönetim Sistemi
287
+ ## Generated by CiCore CLI
288
+ ##
289
+
290
+ # ======================================================
291
+ # 0. CORS Origin Mapping (Dynamic CORS Support)
292
+ # ======================================================
293
+ map $http_origin $cors_origin {
294
+ default "https://${primaryDomain}";
295
+ ${corsEntries}
296
+ "" "https://${primaryDomain}";
297
+ "null" "null";
298
+ }
299
+
300
+ # ======================================================
301
+ # 0.1. Addon Cache Control Map
302
+ # ======================================================
303
+ map $uri $addon_cache_control {
304
+ default "public, max-age=31536000, immutable";
305
+ "~*entry\\.js$" "no-cache, no-store, must-revalidate";
306
+ "~*addon\\.json$" "no-cache, no-store, must-revalidate";
307
+ }
308
+
309
+ # ======================================================
310
+ # 1. Cloudflare Real-IP Ayarları
311
+ # ======================================================
312
+ set_real_ip_from 173.245.48.0/20;
313
+ set_real_ip_from 103.21.244.0/22;
314
+ set_real_ip_from 103.22.200.0/22;
315
+ set_real_ip_from 103.31.4.0/22;
316
+ set_real_ip_from 141.101.64.0/18;
317
+ set_real_ip_from 108.162.192.0/18;
318
+ set_real_ip_from 190.93.240.0/20;
319
+ set_real_ip_from 188.114.96.0/20;
320
+ set_real_ip_from 197.234.240.0/22;
321
+ set_real_ip_from 198.41.128.0/17;
322
+ set_real_ip_from 162.158.0.0/15;
323
+ set_real_ip_from 104.16.0.0/13;
324
+ set_real_ip_from 104.24.0.0/14;
325
+ set_real_ip_from 172.64.0.0/13;
326
+ set_real_ip_from 131.0.72.0/22;
327
+ set_real_ip_from 2400:cb00::/32;
328
+ set_real_ip_from 2606:4700::/32;
329
+ set_real_ip_from 2803:f800::/32;
330
+ set_real_ip_from 2405:b500::/32;
331
+ set_real_ip_from 2405:8100::/32;
332
+ set_real_ip_from 2a06:98c0::/29;
333
+ set_real_ip_from 2c0f:f248::/32;
334
+ real_ip_header CF-Connecting-IP;
335
+
336
+ # ======================================================
337
+ # 1.1. WebSocket Connection Upgrade Map
338
+ # ======================================================
339
+ map $http_upgrade $connection_upgrade {
340
+ default upgrade;
341
+ '' close;
342
+ }
343
+
344
+ # ======================================================
345
+ # 2. PORT 80 → HTTPS YÖNLENDİRMESİ
346
+ # ======================================================
347
+ server {
348
+ listen 80;
349
+ server_name _;
350
+
351
+ location /health {
352
+ access_log off;
353
+ return 200 "healthy\\n";
354
+ add_header Content-Type text/plain;
355
+ }
356
+
357
+ location / {
358
+ return 301 https://$host$request_uri;
359
+ }
360
+ }
361
+
362
+ # ======================================================
363
+ # 3. DOMAIN → CORE MAP
364
+ # ======================================================
365
+ map $host $target_core {
366
+ ${domainCoreEntries}
367
+
368
+ # Tenant subdomainleri
369
+ ${tenantRegexEntries}
370
+
371
+ default ${domains[0].coreName};
372
+ }
373
+
374
+ # ======================================================
375
+ # 4. CORE → PATH MAP
376
+ # ======================================================
377
+ map $target_core $core_path {
378
+ ${corePathEntries}
379
+ }
380
+
381
+ # ======================================================
382
+ # 5. Tenant Host Pass-through
383
+ # ======================================================
384
+ map $host $tenant_api_host {
385
+ default $host;
386
+ }
387
+
388
+ # ======================================================
389
+ # 6. UPSTREAM TANIMLARI
390
+ # ======================================================
391
+ upstream php_backend {
392
+ server cicore_php:9000;
393
+ keepalive 32;
394
+ }
395
+
396
+ upstream nuxt_frontend {
397
+ server cicore_nuxt:3000;
398
+ keepalive 64;
399
+ }
400
+
401
+ # ======================================================
402
+ # 7. API SUBDOMAIN SERVER
403
+ # ======================================================
404
+ server {
405
+ listen 443 ssl http2;
406
+ server_name ${apiServerNames};
407
+
408
+ ssl_certificate /etc/nginx/ssl/${primaryCert}.crt;
409
+ ssl_certificate_key /etc/nginx/ssl/${primaryCert}.key;
410
+ ssl_protocols TLSv1.2 TLSv1.3;
411
+ ssl_prefer_server_ciphers on;
412
+ ssl_session_cache shared:SSL:10m;
413
+ ssl_session_timeout 10m;
414
+
415
+ client_max_body_size 25m;
416
+
417
+ location / {
418
+ if ($request_method = 'OPTIONS') {
419
+ add_header 'Access-Control-Allow-Origin' $cors_origin always;
420
+ add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, PATCH, DELETE, OPTIONS' always;
421
+ add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, X-Requested-With, X-CSRF-Token, X-Core-Path, X-Tenant-Host, Cache-Control, Accept' always;
422
+ add_header 'Access-Control-Allow-Credentials' 'true' always;
423
+ add_header 'Access-Control-Max-Age' '86400' always;
424
+ add_header 'Content-Type' 'text/plain; charset=utf-8' always;
425
+ add_header 'Content-Length' '0' always;
426
+ return 204;
427
+ }
428
+
429
+ add_header 'Access-Control-Allow-Origin' $cors_origin always;
430
+ add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, PATCH, DELETE, OPTIONS' always;
431
+ add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, X-Requested-With, X-CSRF-Token, X-Core-Path, X-Tenant-Host, Accept' always;
432
+ add_header 'Access-Control-Allow-Credentials' 'true' always;
433
+ add_header 'Access-Control-Expose-Headers' 'X-CSRF-Token' always;
434
+
435
+ fastcgi_pass php_backend;
436
+
437
+ fastcgi_param SCRIPT_FILENAME /var/www/public/index.php;
438
+ fastcgi_param CORE_PATH $core_path;
439
+
440
+ include fastcgi_params;
441
+
442
+ fastcgi_param REQUEST_URI $request_uri;
443
+ fastcgi_param SCRIPT_NAME /index.php;
444
+ fastcgi_param HTTP_HOST $host;
445
+ fastcgi_param HTTP_TENANT_HOST $tenant_api_host;
446
+ fastcgi_param HTTPS on;
447
+ fastcgi_param HTTP_X_FORWARDED_PROTO https;
448
+
449
+ fastcgi_connect_timeout 300s;
450
+ fastcgi_send_timeout 300s;
451
+ fastcgi_read_timeout 300s;
452
+ fastcgi_buffer_size 128k;
453
+ fastcgi_buffers 4 256k;
454
+ fastcgi_busy_buffers_size 256k;
455
+ fastcgi_temp_file_write_size 256k;
456
+ }
457
+ }
458
+
459
+ # ======================================================
460
+ # 8. TENANT SUBDOMAIN SERVER
461
+ # ======================================================
462
+ server {
463
+ listen 443 ssl http2;
464
+ server_name ${tenantServerNames};
465
+
466
+ ssl_certificate /etc/nginx/ssl/${primaryCert}.crt;
467
+ ssl_certificate_key /etc/nginx/ssl/${primaryCert}.key;
468
+ ssl_protocols TLSv1.2 TLSv1.3;
469
+ ssl_prefer_server_ciphers on;
470
+ ssl_session_cache shared:SSL:10m;
471
+ ssl_session_timeout 10m;
472
+
473
+ client_max_body_size 25m;
474
+ client_body_timeout 60s;
475
+ client_header_timeout 60s;
476
+
477
+ access_log /var/log/nginx/tenant-access.log;
478
+ error_log /var/log/nginx/tenant-error.log warn;
479
+
480
+ add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
481
+ add_header X-Content-Type-Options "nosniff" always;
482
+ add_header X-Frame-Options "SAMEORIGIN" always;
483
+ add_header X-XSS-Protection "1; mode=block" always;
484
+
485
+ gzip on;
486
+ gzip_vary on;
487
+ gzip_proxied any;
488
+ gzip_comp_level 6;
489
+ gzip_min_length 1000;
490
+ gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss application/rss+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml;
491
+
492
+ server_tokens off;
493
+
494
+ location /health {
495
+ access_log off;
496
+ return 200 "healthy\\n";
497
+ add_header Content-Type text/plain;
498
+ }
499
+
500
+ location ^~ /shared/ {
501
+ alias /home/cores/$target_core/shared/;
502
+ autoindex off;
503
+ types {
504
+ application/javascript js mjs;
505
+ application/json json;
506
+ }
507
+ default_type application/javascript;
508
+ add_header 'Access-Control-Allow-Origin' $cors_origin always;
509
+ add_header 'Access-Control-Allow-Credentials' 'true' always;
510
+ add_header 'Cache-Control' 'public, max-age=3600, immutable' always;
511
+ try_files $uri =404;
512
+ }
513
+
514
+ location ^~ /vendor/ {
515
+ alias /home/cores/$target_core/shared/vendor/;
516
+ autoindex off;
517
+ types {
518
+ application/javascript js mjs;
519
+ }
520
+ default_type application/javascript;
521
+ add_header 'Access-Control-Allow-Origin' $cors_origin always;
522
+ add_header 'Access-Control-Allow-Credentials' 'true' always;
523
+ add_header 'Cache-Control' 'public, max-age=31536000, immutable' always;
524
+ try_files $uri =404;
525
+ }
526
+
527
+ location ^~ /cores/ {
528
+ alias /home/cores/;
529
+ autoindex off;
530
+ types {
531
+ application/javascript js mjs;
532
+ application/json json;
533
+ text/css css;
534
+ text/html html vue;
535
+ image/svg+xml svg;
536
+ }
537
+ default_type application/javascript;
538
+ add_header 'Access-Control-Allow-Origin' $cors_origin always;
539
+ add_header 'Access-Control-Allow-Credentials' 'true' always;
540
+ add_header 'Cache-Control' $addon_cache_control always;
541
+ add_header 'X-Content-Type-Options' 'nosniff' always;
542
+ open_file_cache off;
543
+ try_files $uri =404;
544
+ }
545
+
546
+ location / {
547
+ proxy_pass http://nuxt_frontend;
548
+
549
+ proxy_set_header Host $host;
550
+ proxy_set_header X-Real-IP $remote_addr;
551
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
552
+ proxy_set_header X-Forwarded-Proto https;
553
+ proxy_set_header X-Forwarded-Host $host;
554
+ proxy_set_header X-Core-Path $core_path;
555
+ proxy_set_header X-Tenant-Host $host;
556
+ proxy_set_header X-Tenant-Subdomain $subdomain;
557
+ proxy_http_version 1.1;
558
+
559
+ proxy_set_header Upgrade $http_upgrade;
560
+ proxy_set_header Connection $connection_upgrade;
561
+
562
+ proxy_connect_timeout 300s;
563
+ proxy_send_timeout 300s;
564
+ proxy_read_timeout 300s;
565
+
566
+ proxy_buffering off;
567
+ proxy_cache_bypass $http_upgrade;
568
+ }
569
+
570
+ location ~ /\\.(?!well-known) {
571
+ deny all;
572
+ access_log off;
573
+ log_not_found off;
574
+ }
575
+ }
576
+
577
+ # ======================================================
578
+ # 9. ANA WEB SERVER
579
+ # ======================================================
580
+ server {
581
+ listen 443 ssl http2;
582
+ server_name ${mainServerNames};
583
+
584
+ ssl_certificate /etc/nginx/ssl/${primaryCert}.crt;
585
+ ssl_certificate_key /etc/nginx/ssl/${primaryCert}.key;
586
+ ssl_protocols TLSv1.2 TLSv1.3;
587
+ ssl_prefer_server_ciphers on;
588
+ ssl_session_cache shared:SSL:10m;
589
+ ssl_session_timeout 10m;
590
+
591
+ client_max_body_size 25m;
592
+ client_body_timeout 60s;
593
+ client_header_timeout 60s;
594
+
595
+ access_log /var/log/nginx/access.log;
596
+ error_log /var/log/nginx/error.log warn;
597
+
598
+ add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
599
+ add_header X-Content-Type-Options "nosniff" always;
600
+ add_header X-Frame-Options "SAMEORIGIN" always;
601
+ add_header X-XSS-Protection "1; mode=block" always;
602
+
603
+ gzip on;
604
+ gzip_vary on;
605
+ gzip_proxied any;
606
+ gzip_comp_level 6;
607
+ gzip_min_length 1000;
608
+ gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss application/rss+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml;
609
+
610
+ server_tokens off;
611
+
612
+ location /health {
613
+ access_log off;
614
+ return 200 "healthy\\n";
615
+ add_header Content-Type text/plain;
616
+ }
617
+
618
+ location ^~ /shared/ {
619
+ alias /home/cores/$target_core/shared/;
620
+ autoindex off;
621
+ types {
622
+ application/javascript js mjs;
623
+ application/json json;
624
+ }
625
+ default_type application/javascript;
626
+ add_header 'Access-Control-Allow-Origin' $cors_origin always;
627
+ add_header 'Access-Control-Allow-Credentials' 'true' always;
628
+ add_header 'Cache-Control' 'public, max-age=3600, immutable' always;
629
+ try_files $uri =404;
630
+ }
631
+
632
+ location ^~ /vendor/ {
633
+ alias /home/cores/$target_core/shared/vendor/;
634
+ autoindex off;
635
+ types {
636
+ application/javascript js mjs;
637
+ }
638
+ default_type application/javascript;
639
+ add_header 'Access-Control-Allow-Origin' $cors_origin always;
640
+ add_header 'Access-Control-Allow-Credentials' 'true' always;
641
+ add_header 'Cache-Control' 'public, max-age=31536000, immutable' always;
642
+ try_files $uri =404;
643
+ }
644
+
645
+ location ^~ /cores/ {
646
+ alias /home/cores/;
647
+ autoindex off;
648
+ types {
649
+ application/javascript js mjs;
650
+ application/json json;
651
+ text/css css;
652
+ text/html html vue;
653
+ image/svg+xml svg;
654
+ }
655
+ default_type application/javascript;
656
+ add_header 'Access-Control-Allow-Origin' $cors_origin always;
657
+ add_header 'Access-Control-Allow-Credentials' 'true' always;
658
+ add_header 'Cache-Control' $addon_cache_control always;
659
+ add_header 'X-Content-Type-Options' 'nosniff' always;
660
+ open_file_cache off;
661
+ try_files $uri =404;
662
+ }
663
+
664
+ location ~ ^/(api|v1|v2|auth|system|system-settings|upload|addons|core_addons|core|analyzer|summary|metrics|jobs|worker|setup|tenant-manager) {
665
+ if ($request_method = 'OPTIONS') {
666
+ add_header 'Access-Control-Allow-Origin' $cors_origin always;
667
+ add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, PATCH, DELETE, OPTIONS' always;
668
+ add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, X-Requested-With, X-CSRF-Token, X-Core-Path, X-Tenant-Host, Cache-Control, Accept' always;
669
+ add_header 'Access-Control-Allow-Credentials' 'true' always;
670
+ add_header 'Access-Control-Max-Age' '86400' always;
671
+ add_header 'Content-Type' 'text/plain; charset=utf-8' always;
672
+ add_header 'Content-Length' '0' always;
673
+ return 204;
674
+ }
675
+
676
+ add_header 'Access-Control-Allow-Origin' $cors_origin always;
677
+ add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, PATCH, DELETE, OPTIONS' always;
678
+ add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, X-Requested-With, X-CSRF-Token, X-Core-Path, X-Tenant-Host, Accept' always;
679
+ add_header 'Access-Control-Allow-Credentials' 'true' always;
680
+ add_header 'Access-Control-Expose-Headers' 'X-CSRF-Token' always;
681
+
682
+ fastcgi_pass php_backend;
683
+
684
+ fastcgi_param SCRIPT_FILENAME /var/www/public/index.php;
685
+ fastcgi_param CORE_PATH $core_path;
686
+
687
+ include fastcgi_params;
688
+
689
+ fastcgi_param REQUEST_URI $request_uri;
690
+ fastcgi_param SCRIPT_NAME /index.php;
691
+ fastcgi_param HTTP_HOST $host;
692
+ fastcgi_param HTTP_TENANT_HOST $tenant_api_host;
693
+ fastcgi_param HTTPS on;
694
+ fastcgi_param HTTP_X_FORWARDED_PROTO https;
695
+
696
+ fastcgi_connect_timeout 300s;
697
+ fastcgi_send_timeout 300s;
698
+ fastcgi_read_timeout 300s;
699
+ fastcgi_buffer_size 128k;
700
+ fastcgi_buffers 4 256k;
701
+ fastcgi_busy_buffers_size 256k;
702
+ fastcgi_temp_file_write_size 256k;
703
+ }
704
+
705
+ location / {
706
+ proxy_pass http://nuxt_frontend;
707
+
708
+ proxy_set_header Host $host;
709
+ proxy_set_header X-Real-IP $remote_addr;
710
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
711
+ proxy_set_header X-Forwarded-Proto https;
712
+ proxy_set_header X-Forwarded-Host $host;
713
+ proxy_set_header X-Core-Path $core_path;
714
+ proxy_set_header X-Tenant-Host $tenant_api_host;
715
+ proxy_http_version 1.1;
716
+
717
+ proxy_set_header Upgrade $http_upgrade;
718
+ proxy_set_header Connection $connection_upgrade;
719
+
720
+ proxy_connect_timeout 300s;
721
+ proxy_send_timeout 300s;
722
+ proxy_read_timeout 300s;
723
+
724
+ proxy_buffering off;
725
+ proxy_cache_bypass $http_upgrade;
726
+ }
727
+
728
+ location ~ /\\.(?!well-known) {
729
+ deny all;
730
+ access_log off;
731
+ log_not_found off;
732
+ }
733
+ }
734
+ `;
735
+ }
736
+ //# sourceMappingURL=nginx-config.js.map