fix(api): Allow trusted portal domains to use demo master API key seamlessly
This commit is contained in:
@@ -13,16 +13,28 @@ export class ApiKeyGuard implements CanActivate {
|
||||
async canActivate(context: ExecutionContext): Promise<boolean> {
|
||||
const request = context.switchToHttp().getRequest();
|
||||
|
||||
// Extract API key from custom header
|
||||
const apiKeyHeader = request.headers['x-api-key'] || request.query['api_key'];
|
||||
// Extract Origin and Referer for domain-level security
|
||||
const origin = request.headers['origin'] || '';
|
||||
const referer = request.headers['referer'] || '';
|
||||
|
||||
// Extract API key from custom header or query params, with public demo fallback
|
||||
let apiKeyHeader = request.headers['x-api-key'] || request.query['api_key'] || request.query['key'];
|
||||
|
||||
if (!apiKeyHeader) {
|
||||
throw new UnauthorizedException('API Key (x-api-key) is missing');
|
||||
}
|
||||
const isInternalDomain =
|
||||
origin.includes('intaleqapp.com') ||
|
||||
referer.includes('intaleqapp.com') ||
|
||||
origin.includes('localhost') ||
|
||||
referer.includes('localhost') ||
|
||||
origin.includes('188.68.36.205') ||
|
||||
referer.includes('188.68.36.205');
|
||||
|
||||
// Extract Origin and Referer for domain-level security
|
||||
const origin = request.headers['origin'];
|
||||
const referer = request.headers['referer'];
|
||||
if (isInternalDomain) {
|
||||
apiKeyHeader = process.env.MAP_API_KEY || 'zP9vL5mK2nQ8xR7jT4wS1yB6hG3fV0cX';
|
||||
} else {
|
||||
throw new UnauthorizedException('API Key (x-api-key) is missing');
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
// Validate key via AuthService (includes Redis caching and domain checks)
|
||||
|
||||
Reference in New Issue
Block a user