ledgerone_backend/src/public-api/api-key.guard.ts

24 lines
821 B
TypeScript

import { CanActivate, ExecutionContext, Injectable } from "@nestjs/common";
import { Request } from "express";
import { ApiKeyService } from "./api-key.service";
export type ApiKeyRequest = Request & {
apiKeyAuth?: { userId: string; keyId: string; scopes: string[] };
};
@Injectable()
export class ApiKeyGuard implements CanActivate {
constructor(private readonly apiKeyService: ApiKeyService) {}
async canActivate(context: ExecutionContext): Promise<boolean> {
const request = context.switchToHttp().getRequest<ApiKeyRequest>();
const rawKey = request.header("x-ledgerone-api-key") ?? request.header("x-api-key");
if (!rawKey) {
await this.apiKeyService.authenticate("");
return false;
}
request.apiKeyAuth = await this.apiKeyService.authenticate(rawKey);
return true;
}
}