From 5efdc5e224b3e9a5c7ddc3627a53a49a97be4f46 Mon Sep 17 00:00:00 2001 From: Andrii Kostenko Date: Thu, 18 Jun 2026 14:18:13 +0300 Subject: [PATCH] feat: support multiple primary SaaS domains Treat rocket.sitenova.com as a first-party SaaS domain alongside app.rocketadmin.com. Introduce a single PRIMARY_SAAS_DOMAINS constant and reuse it across backend login domain validation and CORS origins, removing the duplicated hardcoded lists and the dead ALLOWED_REQUEST_DOMAIN helper. Add the domain to the frontend saasHostnames so isCustomDomain() classifies it correctly. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../entities/user/use-cases/usual-login-use.case.ts | 2 +- backend/src/helpers/constants/constants.ts | 10 +++------- backend/src/main.ts | 2 +- frontend/src/environments/environment.saas-prod.ts | 2 +- frontend/src/environments/environment.saas.ts | 2 +- 5 files changed, 7 insertions(+), 11 deletions(-) diff --git a/backend/src/entities/user/use-cases/usual-login-use.case.ts b/backend/src/entities/user/use-cases/usual-login-use.case.ts index 2c26bb64a..8c7a2ea96 100644 --- a/backend/src/entities/user/use-cases/usual-login-use.case.ts +++ b/backend/src/entities/user/use-cases/usual-login-use.case.ts @@ -153,7 +153,7 @@ export class UsualLoginUseCase extends AbstractUseCase imp return; } - const allowedDomains: Array = [`saas.rocketadmin.com`, `app.rocketadmin.com`, Constants.APP_DOMAIN_ADDRESS]; + const allowedDomains: Array = [...Constants.PRIMARY_SAAS_DOMAINS, Constants.APP_DOMAIN_ADDRESS]; if (isTest()) { allowedDomains.push(`127.0.0.1`); diff --git a/backend/src/helpers/constants/constants.ts b/backend/src/helpers/constants/constants.ts index d918574e5..02c3cf5f4 100644 --- a/backend/src/helpers/constants/constants.ts +++ b/backend/src/helpers/constants/constants.ts @@ -313,15 +313,11 @@ export const Constants = { }, APP_DOMAIN_ADDRESS: appConfig.app.domainAddress, - ALLOWED_REQUEST_DOMAIN: (): string => { - if (isTest()) { - return Constants.APP_DOMAIN_ADDRESS; - } - return `app.rocketadmin.com`; - }, + + PRIMARY_SAAS_DOMAINS: ['app.rocketadmin.com', 'saas.rocketadmin.com', 'rocket.sitenova.com'], APP_REQUEST_DOMAINS(): Array { - const allowedDomains = ['app.rocketadmin.com', 'saas.rocketadmin.com', Constants.APP_DOMAIN_ADDRESS]; + const allowedDomains = [...Constants.PRIMARY_SAAS_DOMAINS, Constants.APP_DOMAIN_ADDRESS]; if (isTest()) { allowedDomains.push('127.0.0.1', Constants.APP_DOMAIN_ADDRESS); } diff --git a/backend/src/main.ts b/backend/src/main.ts index 417b8439a..b2eb84f28 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -43,8 +43,8 @@ async function bootstrap() { 'https://app.autoadmin.org', 'http://localhost:4200', 'https://app.rocketadmin.org', - 'https://saas.rocketadmin.com', 'https://app-beta.rocketadmin.com', + ...Constants.PRIMARY_SAAS_DOMAINS.map((domain) => `https://${domain}`), Constants.APP_DOMAIN_ADDRESS, ], methods: 'GET,PUT,PATCH,POST,DELETE', diff --git a/frontend/src/environments/environment.saas-prod.ts b/frontend/src/environments/environment.saas-prod.ts index 3810d785f..bbf58cc7d 100644 --- a/frontend/src/environments/environment.saas-prod.ts +++ b/frontend/src/environments/environment.saas-prod.ts @@ -3,7 +3,7 @@ export const environment = { saas: true, apiRoot: '/api', saasURL: '', - saasHostnames: ['app.rocketadmin.com', 'localhost', 'rocketadmin-dev.tail9f8b2.ts.net'], + saasHostnames: ['app.rocketadmin.com', 'rocket.sitenova.com', 'localhost', 'rocketadmin-dev.tail9f8b2.ts.net'], stagingHost: 'rocketadmin-dev.tail9f8b2.ts.net', // Tailscale host version: '0.0.0', turnstileSiteKey: '0x4AAAAAACM2ZuNYhGhncig_', diff --git a/frontend/src/environments/environment.saas.ts b/frontend/src/environments/environment.saas.ts index 0c61886f2..f408ef2b6 100644 --- a/frontend/src/environments/environment.saas.ts +++ b/frontend/src/environments/environment.saas.ts @@ -3,7 +3,7 @@ export const environment = { production: false, apiRoot: 'https://rocketadmin-dev.tail9f8b2.ts.net/api', saasURL: 'https://rocketadmin-dev.tail9f8b2.ts.net', - saasHostnames: ['app.rocketadmin.com', 'localhost', 'rocketadmin-dev.tail9f8b2.ts.net'], + saasHostnames: ['app.rocketadmin.com', 'rocket.sitenova.com', 'localhost', 'rocketadmin-dev.tail9f8b2.ts.net'], stagingHost: 'rocketadmin-dev.tail9f8b2.ts.net', // Tailscale host version: '0.0.0', turnstileSiteKey: '1x00000000000000000000AA', // Test key - always passes