24 lines
821 B
TypeScript
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;
|
|
}
|
|
}
|