From fe230f87aa23e21521706001b2cd466ee36b7191 Mon Sep 17 00:00:00 2001 From: Douglas McConnachie Date: Mon, 3 Feb 2020 13:59:38 +0000 Subject: [PATCH] feat(openapi-v3): add security enhancer extension add security enhancer to add default security scheme impl. #4386 Signed-off-by: Douglas McConnachie --- .../unit/enhancers/fixtures/application.ts | 7 +++++-- .../spec-enhancer.extensions.unit.ts | 2 +- .../extensions}/security.spec.extension.ts | 19 +++++++++---------- packages/openapi-v3/src/enhancers/index.ts | 1 + 4 files changed, 16 insertions(+), 13 deletions(-) rename packages/openapi-v3/src/{__tests__/unit/enhancers/fixtures => enhancers/extensions}/security.spec.extension.ts (70%) diff --git a/packages/openapi-v3/src/__tests__/unit/enhancers/fixtures/application.ts b/packages/openapi-v3/src/__tests__/unit/enhancers/fixtures/application.ts index 09ab77a13cb9..12399b42a210 100644 --- a/packages/openapi-v3/src/__tests__/unit/enhancers/fixtures/application.ts +++ b/packages/openapi-v3/src/__tests__/unit/enhancers/fixtures/application.ts @@ -4,9 +4,12 @@ // License text available at https://opensource.org/licenses/MIT import {Application, createBindingFromClass} from '@loopback/core'; -import {OASEnhancerService, OAS_ENHANCER_SERVICE} from '../../../..'; +import { + OASEnhancerService, + OAS_ENHANCER_SERVICE, + SecuritySpecEnhancer, +} from '../../../..'; import {InfoSpecEnhancer} from './info.spec.extension'; -import {SecuritySpecEnhancer} from './security.spec.extension'; export class SpecServiceApplication extends Application { constructor() { diff --git a/packages/openapi-v3/src/__tests__/unit/enhancers/spec-enhancer.extensions.unit.ts b/packages/openapi-v3/src/__tests__/unit/enhancers/spec-enhancer.extensions.unit.ts index a3993cb31b53..f5cc76055291 100644 --- a/packages/openapi-v3/src/__tests__/unit/enhancers/spec-enhancer.extensions.unit.ts +++ b/packages/openapi-v3/src/__tests__/unit/enhancers/spec-enhancer.extensions.unit.ts @@ -34,7 +34,7 @@ describe('spec-enhancer-extension-point', () => { // the security scheme entry is added by the security enhancer components: { securitySchemes: { - bearerAuth: { + jwt: { type: 'http', scheme: 'bearer', bearerFormat: 'JWT', diff --git a/packages/openapi-v3/src/__tests__/unit/enhancers/fixtures/security.spec.extension.ts b/packages/openapi-v3/src/enhancers/extensions/security.spec.extension.ts similarity index 70% rename from packages/openapi-v3/src/__tests__/unit/enhancers/fixtures/security.spec.extension.ts rename to packages/openapi-v3/src/enhancers/extensions/security.spec.extension.ts index 9eb4eda9d283..f341909982d3 100644 --- a/packages/openapi-v3/src/__tests__/unit/enhancers/fixtures/security.spec.extension.ts +++ b/packages/openapi-v3/src/enhancers/extensions/security.spec.extension.ts @@ -6,13 +6,9 @@ import {bind} from '@loopback/core'; import debugModule from 'debug'; import {inspect} from 'util'; -import { - mergeOpenAPISpec, - ReferenceObject, - SecuritySchemeObject, -} from '../../../..'; -import {asSpecEnhancer, OASEnhancer} from '../../../../enhancers/types'; -import {OpenApiSpec} from '../../../../types'; +import {mergeOpenAPISpec, ReferenceObject, SecuritySchemeObject} from '../..'; +import {OpenApiSpec} from '../../types'; +import {asSpecEnhancer, OASEnhancer} from '../types'; const debug = debugModule('loopback:openapi:spec-enhancer'); export type SecuritySchemeObjects = { @@ -20,7 +16,7 @@ export type SecuritySchemeObjects = { }; export const SECURITY_SCHEME_SPEC: SecuritySchemeObjects = { - bearerAuth: { + jwt: { type: 'http', scheme: 'bearer', bearerFormat: 'JWT', @@ -28,7 +24,7 @@ export const SECURITY_SCHEME_SPEC: SecuritySchemeObjects = { }; /** - * A spec enhancer to add bearer token OpenAPI security entry to + * A spec enhancer to add jwt bearer token OpenAPI security entry to * `spec.component.securitySchemes` */ @bind(asSpecEnhancer) @@ -36,7 +32,10 @@ export class SecuritySpecEnhancer implements OASEnhancer { name = 'security'; modifySpec(spec: OpenApiSpec): OpenApiSpec { - const patchSpec = {components: {securitySchemes: SECURITY_SCHEME_SPEC}}; + if (spec?.components?.securitySchemes?.jwt) return spec; + const patchSpec = { + components: {securitySchemes: SECURITY_SCHEME_SPEC}, + }; const mergedSpec = mergeOpenAPISpec(spec, patchSpec); debug(`security spec extension, merged spec: ${inspect(mergedSpec)}`); return mergedSpec; diff --git a/packages/openapi-v3/src/enhancers/index.ts b/packages/openapi-v3/src/enhancers/index.ts index 6df3b5cb32b8..53d6a05c6604 100644 --- a/packages/openapi-v3/src/enhancers/index.ts +++ b/packages/openapi-v3/src/enhancers/index.ts @@ -3,6 +3,7 @@ // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT +export * from './extensions/security.spec.extension'; export * from './keys'; export * from './spec-enhancer.service'; export * from './types';