From ee090260b4c819bbb3fd938dfc0ca436d277b6b0 Mon Sep 17 00:00:00 2001 From: Alex Lapa Date: Thu, 9 May 2019 09:12:34 +1200 Subject: [PATCH 1/4] Add support for security --- src/DefinitionGenerator.ts | 15 ++++++++++++--- src/types.ts | 3 +++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/DefinitionGenerator.ts b/src/DefinitionGenerator.ts index 5f95147..f391c2f 100644 --- a/src/DefinitionGenerator.ts +++ b/src/DefinitionGenerator.ts @@ -40,7 +40,9 @@ export class DefinitionGenerator { title = "", description = "", version = uuid.v4(), - models + models, + security, + securitySchemes } = this.config; _.merge(this.definition, { @@ -48,11 +50,18 @@ export class DefinitionGenerator { info: { title, description, version }, paths: {}, components: { - schemas: {}, - securitySchemes: {} + schemas: {} } }); + if (security) { + this.definition.security = security; + } + + if (securitySchemes) { + this.definition.components.securitySchemes = securitySchemes; + } + this.definition.components.schemas = await parseModels(models, this.root); return this; diff --git a/src/types.ts b/src/types.ts index d61f109..792969a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,5 @@ import { JSONSchema7 } from "json-schema"; +import { OpenAPIV3 } from "openapi-types"; export interface Model { name: string; @@ -13,6 +14,8 @@ export interface DefinitionConfig { title: string; description: string; version?: string; + securitySchemes: OpenAPIV3.SecuritySchemeObject; + security: Array; models: Array; } From a89b1f95674faec6fd342b92544ac0dabba60ad5 Mon Sep 17 00:00:00 2001 From: Alex Lapa Date: Thu, 9 May 2019 09:12:48 +1200 Subject: [PATCH 2/4] Add example with security to test project --- test/project/openapi.yml | 17 +++++++++++++++-- test/project/serverless.doc.yml | 15 +++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/test/project/openapi.yml b/test/project/openapi.yml index 1e658e3..7b189af 100644 --- a/test/project/openapi.yml +++ b/test/project/openapi.yml @@ -185,11 +185,20 @@ components: properties: data: $ref: '#/components/schemas/data' - securitySchemes: {} + securitySchemes: + bearerAuth: + type: oauth2 + flows: + implicit: + authorizationUrl: 'https://example.com/oauth/authorize' + scopes: + read: Grants read access + write: Grants write access + admin: Grants access to admin operations info: title: '' description: '' - version: 96d3d004-1a24-4384-9df7-1e7416393223 + version: 1a08e671-e4b5-4d13-babe-a00c86ec8b5d paths: /create: post: @@ -239,3 +248,7 @@ paths: application/json: schema: $ref: '#/components/schemas/ErrorResponse' +security: + - bearerAuth: + - read + - write diff --git a/test/project/serverless.doc.yml b/test/project/serverless.doc.yml index 2cf6675..7d46167 100644 --- a/test/project/serverless.doc.yml +++ b/test/project/serverless.doc.yml @@ -1,4 +1,19 @@ documentation: + components: + securitySchemes: + bearerAuth: + type: oauth2 + flows: + implicit: + authorizationUrl: https://example.com/oauth/authorize + scopes: + read: Grants read access + write: Grants write access + admin: Grants access to admin operations + security: + - bearerAuth: + - read + - write models: - name: ErrorResponse description: This is an error From 51ae0e0f2b8992cf21bbeb302aabf9b1f3ca2c89 Mon Sep 17 00:00:00 2001 From: Alex Lapa Date: Thu, 9 May 2019 09:14:15 +1200 Subject: [PATCH 3/4] Add missing path parameter to prevent openapi validatino errors --- test/project/openapi.yml | 4 ++-- test/project/serverless.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/project/openapi.yml b/test/project/openapi.yml index 7b189af..316adea 100644 --- a/test/project/openapi.yml +++ b/test/project/openapi.yml @@ -198,9 +198,9 @@ components: info: title: '' description: '' - version: 1a08e671-e4b5-4d13-babe-a00c86ec8b5d + version: 6e48be1a-d9be-41ef-95eb-41ffad58eac3 paths: - /create: + '/create/{username}': post: operationId: createUser summary: Create User diff --git a/test/project/serverless.yml b/test/project/serverless.yml index f9738fe..532498d 100644 --- a/test/project/serverless.yml +++ b/test/project/serverless.yml @@ -14,7 +14,7 @@ functions: handler: handler.create events: - http: - path: create + path: create/{username} method: post documentation: summary: Create User From 8a19881279fab9ebd7d458ff69ff1e8af9aeb5f1 Mon Sep 17 00:00:00 2001 From: Alex Lapa Date: Thu, 9 May 2019 09:24:23 +1200 Subject: [PATCH 4/4] Fix test --- src/__tests__/DefinitionGenerator.spec.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/__tests__/DefinitionGenerator.spec.ts b/src/__tests__/DefinitionGenerator.spec.ts index cd66dac..4e91b6d 100644 --- a/src/__tests__/DefinitionGenerator.spec.ts +++ b/src/__tests__/DefinitionGenerator.spec.ts @@ -62,7 +62,8 @@ describe("OpenAPI Documentation Generator", () => { docGen.readFunctions(funcConfigs); // get the parameters from the `/create POST' endpoint - const actual = docGen.definition.paths["/create"].post.parameters; + const actual = + docGen.definition.paths["/create/{username}"].post.parameters; const expected = [ { description: "The username for a user to create",