fix(#338): Validate DEFAULT_WORKSPACE_ID as UUID

- Add federation.config.ts with UUID v4 validation for DEFAULT_WORKSPACE_ID
- Validate at module initialization (fail fast if misconfigured)
- Replace hardcoded "default" fallback with proper validation
- Add 18 tests covering valid UUIDs, invalid formats, and missing values
- Clear error messages with expected UUID format

Refs #338

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Jason Woltje
2026-02-05 16:55:48 -06:00
parent 970cc9f606
commit 5ae07f7a84
4 changed files with 247 additions and 4 deletions

View File

@@ -3,9 +3,10 @@
*
* Provides instance identity and federation management with DoS protection via rate limiting.
* Issue #272: Rate limiting added to prevent DoS attacks on federation endpoints
* Issue #338: Validate DEFAULT_WORKSPACE_ID at startup
*/
import { Module } from "@nestjs/common";
import { Module, Logger, OnModuleInit } from "@nestjs/common";
import { ConfigModule } from "@nestjs/config";
import { HttpModule } from "@nestjs/axios";
import { ThrottlerModule } from "@nestjs/throttler";
@@ -20,6 +21,7 @@ import { OIDCService } from "./oidc.service";
import { CommandService } from "./command.service";
import { QueryService } from "./query.service";
import { FederationAgentService } from "./federation-agent.service";
import { validateFederationConfig } from "./federation.config";
import { PrismaModule } from "../prisma/prisma.module";
import { TasksModule } from "../tasks/tasks.module";
import { EventsModule } from "../events/events.module";
@@ -83,4 +85,22 @@ import { RedisProvider } from "../common/providers/redis.provider";
FederationAgentService,
],
})
export class FederationModule {}
export class FederationModule implements OnModuleInit {
private readonly logger = new Logger(FederationModule.name);
/**
* Validate federation configuration at module initialization.
* Issue #338: Fail fast if DEFAULT_WORKSPACE_ID is not a valid UUID.
*/
onModuleInit(): void {
try {
validateFederationConfig();
this.logger.log("Federation configuration validated successfully");
} catch (error) {
this.logger.error(
`Federation configuration validation failed: ${error instanceof Error ? error.message : String(error)}`
);
throw error;
}
}
}