faloker/purify

View on GitHub
api/src/auth/generic-auth.guard.ts

Summary

Maintainability
A
0 mins
Test Coverage
B
83%
// import { Injectable } from '@nestjs/common';
// import { AuthGuard } from '@nestjs/passport';

// @Injectable()
// export class GenericAuthGuard extends AuthGuard(['localapikey', 'jwt']) {}
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { JWTAuthGuard } from './jwt-auth.guard';
import { APIKeyAuthGuard } from './apikey-auth.guard';
import { UsersService } from 'src/users/users.service';
import { Observable } from 'rxjs';

@Injectable()
export class GenericAuthGuard implements CanActivate {
  constructor(private readonly usersService: UsersService) {}
  async canActivate(context: ExecutionContext): Promise<any> {
    const request = context.switchToHttp().getRequest();
    const token = request.headers['apikey'] || '';
    if (token) {
      await this.usersService.trackTokenUsage(
        request.ip,
        request.headers['user-agent'],
        token
      );
      return new APIKeyAuthGuard().canActivate(context);
    }
    return new JWTAuthGuard().canActivate(context);
  }
}