diff --git a/src/domain/definitions.ts b/src/domain/definitions.ts index ddf98127..83bc06a8 100644 --- a/src/domain/definitions.ts +++ b/src/domain/definitions.ts @@ -1,8 +1,6 @@ import type { Validation } from '^/integrations/validation'; -export const TENANT_BY_ORIGIN_PATH = 'domain/tenant/getByOriginConverted'; - export const SortOrders = { POPULAR: 'popular', RECENT: 'recent' diff --git a/src/integrations/runtime/authenticationMiddleware.ts b/src/integrations/runtime/authenticationMiddleware.ts index db4475e1..c969eaac 100644 --- a/src/integrations/runtime/authenticationMiddleware.ts +++ b/src/integrations/runtime/authenticationMiddleware.ts @@ -1,8 +1,6 @@ import identityProvider from '^/integrations/authentication'; -import { TENANT_BY_ORIGIN_PATH } from '^/domain/definitions'; - import AuthenticationMiddleware from './middlewares/AuthenticationMiddleware'; const authProcedures = { @@ -13,6 +11,8 @@ const authProcedures = { const redirectPath = process.env.AUTHENTICATION_CLIENT_PATH || 'undefined'; -const whiteList: string[] = [TENANT_BY_ORIGIN_PATH]; +const whiteList: string[] = [ + 'domain/tenant/getByOriginConverted' +]; export default new AuthenticationMiddleware(identityProvider, authProcedures, redirectPath, whiteList); diff --git a/src/integrations/runtime/middlewares/TenantMiddleware.ts b/src/integrations/runtime/middlewares/TenantMiddleware.ts index 6fa5e36d..28d5102f 100644 --- a/src/integrations/runtime/middlewares/TenantMiddleware.ts +++ b/src/integrations/runtime/middlewares/TenantMiddleware.ts @@ -1,62 +1,54 @@ -import type { Middleware, NextHandler, Request, Response } from 'jitar'; +import type { Middleware, NextHandler, Request } from 'jitar'; +import { Response } from 'jitar'; +import type { Tenant } from '^/domain/tenant'; +import getByOrigin from '^/domain/tenant/getByOriginConverted'; + +const GEY_BY_ORIGIN_FQN = 'domain/tenant/getByOriginConverted'; const TENANT_PARAMETER = '*tenant'; export default class TenantMiddleware implements Middleware { - readonly #cache = new Map(); - readonly #getTenantPath: string; - - constructor(tenantPath: string) - { - this.#getTenantPath = tenantPath; - } + readonly #tenants = new Map(); async handle(request: Request, next: NextHandler): Promise { - return request.fqn === this.#getTenantPath - ? this.#getTenant(request, next) + return request.fqn === GEY_BY_ORIGIN_FQN + ? this.#getTenant(request) : this.#handleRequest(request, next); } - async #getTenant(request: Request, next: NextHandler): Promise + async #resolveTenant(request: Request): Promise { - const origin = this.#getOrigin(request); - const cached = this.#cache.get(origin); + const origin = request.getHeader('origin') as string; + const tenant = this.#tenants.get(origin); - if (cached === undefined) + if (tenant === undefined) { - request.setArgument('origin', origin); + const tenant = await getByOrigin(origin); - const response = await next(); + this.#tenants.set(origin, tenant); - if (response.status === 200) - { - this.#cache.set(origin, response); - } - - return response; + return tenant; } - return cached; + return tenant; } - async #handleRequest(request: Request, next: NextHandler): Promise + async #getTenant(request: Request): Promise { - const origin = this.#getOrigin(request); - const cached = this.#cache.get(origin); - - if (cached !== undefined) - { - request.setArgument(TENANT_PARAMETER, cached.result); - } + const tenant = await this.#resolveTenant(request); - return next(); + return new Response(200, tenant); } - #getOrigin(request: Request): string + async #handleRequest(request: Request, next: NextHandler): Promise { - return request.getHeader('origin') as string; + const tenant = await this.#resolveTenant(request); + + request.setArgument(TENANT_PARAMETER, tenant); + + return next(); } } diff --git a/src/integrations/runtime/tearDownWorker.ts b/src/integrations/runtime/tearDownWorker.ts index fdc81ce8..b7e4024f 100644 --- a/src/integrations/runtime/tearDownWorker.ts +++ b/src/integrations/runtime/tearDownWorker.ts @@ -1,14 +1,10 @@ import database from '^/integrations/database'; -import eventBroker from '^/integrations/eventbroker'; import fileStore from '^/integrations/filestore'; -import notificationService from '^/integrations/notification'; const disconnections = []; if (database.connected) disconnections.push(database.disconnect()); -if (eventBroker.connected) disconnections.push(eventBroker.disconnect()); if (fileStore.connected) disconnections.push(fileStore.disconnect()); -if (notificationService.connected) disconnections.push(notificationService.disconnect()); await Promise.allSettled(disconnections); diff --git a/src/integrations/runtime/tenantMiddleware.ts b/src/integrations/runtime/tenantMiddleware.ts index 3d4bc2c8..0d8d6704 100644 --- a/src/integrations/runtime/tenantMiddleware.ts +++ b/src/integrations/runtime/tenantMiddleware.ts @@ -1,8 +1,4 @@ -import { TENANT_BY_ORIGIN_PATH } from '^/domain/definitions'; - import TenantMiddleware from './middlewares/TenantMiddleware'; -const tenantPath = TENANT_BY_ORIGIN_PATH; - -export default new TenantMiddleware(tenantPath); +export default new TenantMiddleware();