All files / src/enhancers security-spec-enhancer.ts

63.64% Statements 7/11
100% Branches 0/0
0% Functions 0/2
55.56% Lines 5/9

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 441x 1x                 1x       1x                           1x                              
import { bind } from '@loopback/core';
import {
  asSpecEnhancer,
  mergeOpenAPISpec,
  OASEnhancer,
  OpenApiSpec,
  ReferenceObject,
  SecuritySchemeObject,
} from '@loopback/rest';
 
export const OPERATION_SECURITY_SPEC = [{ jwt: [], hmac: [] }];
export type SecuritySchemeObjects = {
  [securityScheme: string]: SecuritySchemeObject | ReferenceObject;
};
export const SECURITY_SCHEME_SPEC: SecuritySchemeObjects = {
  jwt: {
    type: 'http',
    scheme: 'bearer',
    bearerFormat: 'JWT',
  },
  hmac: {
    type: 'apiKey',
    in: 'header',
    name: 'Authorization',
  },
};
 
@bind(asSpecEnhancer)
export class SecuritySpecEnhancer implements OASEnhancer {
  // give your enhancer a proper name
  name = 'security';
 
  // takes in the current spec, modifies it, and returns a new one
  modifySpec(spec: OpenApiSpec): OpenApiSpec {
    const SecurityPatchSpec = {
      components: { securitySchemes: SECURITY_SCHEME_SPEC },
      security: OPERATION_SECURITY_SPEC,
    };
    // calls a default helper function to merge the fragment spec.
    const mergedSpec = mergeOpenAPISpec(spec, SecurityPatchSpec);
    return mergedSpec;
  }
}