Listory/src/auth/strategies/api-token.strategy.ts
Julian Tölle 8f7eebb806 feat(api): API tokens for authentication
Create and managed simple API tokens for access to the API from external
tools.
2023-02-19 16:19:40 +01:00

34 lines
852 B
TypeScript

import {
Injectable,
UnauthorizedException,
ForbiddenException,
} from "@nestjs/common";
import { PassportStrategy } from "@nestjs/passport";
import { Strategy } from "passport-http-bearer";
import { User } from "../../users/user.entity";
import { AuthService } from "../auth.service";
import { AuthStrategy } from "./strategies.enum";
@Injectable()
export class ApiTokenStrategy extends PassportStrategy(
Strategy,
AuthStrategy.ApiToken
) {
constructor(private readonly authService: AuthService) {
super();
}
async validate(token: string): Promise<User> {
const apiToken = await this.authService.findApiToken(token);
if (!apiToken) {
throw new UnauthorizedException("TokenNotFound");
}
if (apiToken.revokedAt) {
throw new ForbiddenException("TokenIsRevoked");
}
return apiToken.user;
}
}