All files / src/auth-stratgies jwt-stratgies.ts

90.9% Statements 20/22
66.66% Branches 4/6
100% Functions 3/3
90.9% Lines 20/22

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46  1x           1x 1x 1x 1x   1x 46x   1x         46x 45x 44x         46x 46x 1x   45x   45x     45x 45x     45x 45x        
import {AuthenticationStrategy} from '@loopback/authentication';
import {inject} from '@loopback/core';
import {RedirectRoute} from '@loopback/rest';
import {UserProfile} from '@loopback/security';
import {Request} from 'express';
import {ParamsDictionary} from 'express-serve-static-core';
import {ParsedQs} from 'qs';
import {TokenServiceBindings} from '../keys';
import {JWTService} from '../services/jwt-service';
import errorMessages from '../utils/errorMessages';
let {authorizationMissing, notBearer, notBearerType} = errorMessages
 
export class JWTStrategy implements AuthenticationStrategy {
  name: string = 'jwt';
  @inject(TokenServiceBindings.TOKEN_SERVICE)
  public jwtService: JWTService;
 
  async authenticate(request: Request<ParamsDictionary, any, any, ParsedQs>):
    Promise<UserProfile | RedirectRoute | undefined> {
 
    const token: string = this.extractCredentials(request);
    const userProfile = await this.jwtService.verifyToken(token);
    return Promise.resolve(userProfile);
 
  }
 
  extractCredentials(request: Request<ParamsDictionary, any, any, ParsedQs>): string {
    let methodName = "extractCredentials"
    if (!request.headers.authorization) {
      throw {code: 401, message: authorizationMissing, methodName,className:JWTStrategy.name}
    }
    const authHeaderValue = request.headers.authorization;
 
    Iif (!authHeaderValue.startsWith('Bearer')) {
      throw {code: 401, message: notBearer, methodName,className:JWTStrategy.name}
    }
    const parts = authHeaderValue.split(' ');
    Iif (parts.length !== 2) {
      throw {code: 401, message: notBearerType, methodName,className:JWTStrategy.name}
    }
    const token = parts[1];
    return token;
  }
 
}