@shadow-dev/core
Version:
A modular core framework for Discord bot development, providing commands, buttons, menus, middleware, and more.
34 lines (27 loc) • 1.02 kB
text/typescript
import { CanActivate, ExecutionContext, Inject, Injectable } from "@nestjs/common";
import { API_KEY_PROVIDER } from "../tokens/api-key.token";
import { ApiKeyProvider } from "../../types/apikey.type";
import { Reflector } from "@nestjs/core";
()
export class ApiKeyGuard implements CanActivate {
constructor(
private readonly provider: ApiKeyProvider,
private readonly reflector: Reflector,
) {}
(API_KEY_PROVIDER) async canActivate(context: ExecutionContext): Promise<boolean> {
const req = context.switchToHttp().getRequest();
const rawKey = req.headers["x-api-key"]
if(!rawKey) {
return false; // No API key provided
}
const key = await this.provider.validate(rawKey);
if (!key || key.revoked) return false;
const required = this.reflector.get<string[]>(
"api_key_permissions",
context.getHandler(),
) || [];
if(!required.every(p => key.permissions.includes(p))) return false;
req.apiKey = key;
return true;
}
}