Skip to content

Commit aa9c37c

Browse files
committed
add some better descriptions for CORS. Make sue of OWASP
1 parent ad64aef commit aa9c37c

File tree

1 file changed

+32
-6
lines changed

1 file changed

+32
-6
lines changed

src/definitionGenerator.js

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const { v4: uuid } = require('uuid')
66
const validator = require('oas-validator');
77

88
const SchemaHandler = require('./schemaHandler')
9+
const oWASP = require('./owasp')
910

1011
class DefinitionGenerator {
1112
constructor(serverless, options = {}) {
@@ -41,15 +42,15 @@ class DefinitionGenerator {
4142

4243
this.DEFAULT_CORS_HEADERS = {
4344
'Access-Control-Allow-Origin': {
44-
description: 'The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given origin.',
45+
description: 'The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)',
4546
schema: {
4647
type: 'string',
4748
default: '*',
4849
example: 'https://developer.mozilla.org'
4950
}
5051
},
5152
'Access-Control-Allow-Credentials': {
52-
description: `The Access-Control-Allow-Credentials response header tells browsers whether to expose the response to the frontend JavaScript code when the request's credentials mode (Request.credentials) is include`,
53+
description: `The Access-Control-Allow-Credentials response header tells browsers whether to expose the response to the frontend JavaScript code when the request's credentials mode ([Request.credentials](https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials)) is include. - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials)`,
5354
schema: {
5455
type: 'boolean',
5556
default: true
@@ -68,6 +69,8 @@ class DefinitionGenerator {
6869
async parse() {
6970
this.createInfo()
7071

72+
await oWASP.getLatest()
73+
7174
await this.schemaHandler.addModelsToOpenAPI()
7275
.catch(err => {
7376
throw err
@@ -379,21 +382,44 @@ class DefinitionGenerator {
379382
})
380383
}
381384

385+
let owaspHeaders = {}
386+
if (response.owasp) {
387+
if (typeof response.owasp === 'boolean') {
388+
owaspHeaders = await this.createResponseHeaders(oWASP.DEFAULT_OWASP_HEADERS)
389+
.catch(err => {
390+
throw err
391+
})
392+
} else {
393+
owaspHeaders = await this.createResponseHeaders(oWASP.getHeaders(response.owasp))
394+
.catch(err => {
395+
throw err
396+
})
397+
}
398+
}
382399

383400
const corsHeaders = await this.corsHeaders()
384401
.catch(err => {
385402
throw err;
386403
})
387404

388-
if (obj.headers) {
389-
for (const key in corsHeaders) {
405+
const addHeaders = (headers) => {
406+
for (const key in headers) {
390407
if (!(key in obj.headers) && (obj.headers[key] = {})) {
391-
obj.headers[key] = corsHeaders[key]
408+
obj.headers[key] = headers[key]
392409
}
393410
}
411+
}
412+
413+
if (obj.headers) {
414+
addHeaders(corsHeaders)
415+
addHeaders(owaspHeaders)
394416
} else {
395-
if (Object.keys(corsHeaders).length)
417+
if (Object.keys(corsHeaders).length) {
396418
obj.headers = corsHeaders
419+
addHeaders(owaspHeaders)
420+
} else {
421+
obj.headers = owaspHeaders
422+
}
397423
}
398424

399425
Object.assign(responses, { [response.statusCode]: obj })

0 commit comments

Comments
 (0)