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/__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", 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; } diff --git a/test/project/openapi.yml b/test/project/openapi.yml index 1e658e3..316adea 100644 --- a/test/project/openapi.yml +++ b/test/project/openapi.yml @@ -185,13 +185,22 @@ 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: 6e48be1a-d9be-41ef-95eb-41ffad58eac3 paths: - /create: + '/create/{username}': post: operationId: createUser summary: Create User @@ -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 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