From 28db994bb731fdd8565dde33515883f8cbb55ec0 Mon Sep 17 00:00:00 2001 From: Thijs Schreijer Date: Tue, 27 Apr 2021 03:18:04 +0200 Subject: [PATCH] [o2k] fix parameter default styles (#3327) Co-authored-by: Opender Singh --- .../src/__fixtures__/httpbin.expected.json | 2 +- .../request-validator-plugin.expected.json | 32 ++++++++++++++++--- .../request-validator-plugin.yaml | 19 +++++++++-- .../src/declarative-config/plugins.js | 15 ++++++++- 4 files changed, 60 insertions(+), 8 deletions(-) diff --git a/packages/openapi-2-kong/src/__fixtures__/httpbin.expected.json b/packages/openapi-2-kong/src/__fixtures__/httpbin.expected.json index 178bc77c59..0e0d38587a 100644 --- a/packages/openapi-2-kong/src/__fixtures__/httpbin.expected.json +++ b/packages/openapi-2-kong/src/__fixtures__/httpbin.expected.json @@ -177,7 +177,7 @@ "parameter_schema": [ { "schema": "{\"anyOf\":[{\"type\":\"string\"}]}", - "style": "form", + "style": "simple", "in": "path", "name": "human_timestamp", "required": true, diff --git a/packages/openapi-2-kong/src/__fixtures__/request-validator-plugin.expected.json b/packages/openapi-2-kong/src/__fixtures__/request-validator-plugin.expected.json index 1051338bfa..049c38b551 100644 --- a/packages/openapi-2-kong/src/__fixtures__/request-validator-plugin.expected.json +++ b/packages/openapi-2-kong/src/__fixtures__/request-validator-plugin.expected.json @@ -77,9 +77,9 @@ "methods": [ "GET" ], - "name": "Example-params-get", + "name": "Example-params_pathid-get", "paths": [ - "/params$" + "/params/(?[^\\/\\s]+)/$" ], "plugins": [ { @@ -87,11 +87,35 @@ "parameter_schema": [ { "explode": false, - "in": "path", - "name": "userId", + "in": "query", + "name": "queryid", "required": true, "schema": "{\"type\":\"integer\"}", "style": "form" + }, + { + "explode": false, + "in": "header", + "name": "User-Id", + "required": true, + "schema": "{\"type\":\"integer\"}", + "style": "simple" + }, + { + "explode": false, + "in": "cookie", + "name": "cookieid", + "required": true, + "schema": "{\"type\":\"integer\"}", + "style": "form" + }, + { + "explode": false, + "in": "path", + "name": "pathid", + "required": true, + "schema": "{\"type\":\"integer\"}", + "style": "simple" } ], "version": "draft4" diff --git a/packages/openapi-2-kong/src/__fixtures__/request-validator-plugin.yaml b/packages/openapi-2-kong/src/__fixtures__/request-validator-plugin.yaml index 3e4eda3779..7f76d8efb7 100644 --- a/packages/openapi-2-kong/src/__fixtures__/request-validator-plugin.yaml +++ b/packages/openapi-2-kong/src/__fixtures__/request-validator-plugin.yaml @@ -17,15 +17,30 @@ paths: application/json: schema: $ref: '#/components/schemas/jsonSchema' - /params: + /params/{pathid}/: get: x-kong-plugin-request-validator: enabled: true config: body_scheme: '{}' parameters: + - in: query + name: queryid + schema: + type: integer + required: true + - in: header + name: User-Id + schema: + type: integer + required: true + - in: cookie + name: cookieid + schema: + type: integer + required: true - in: path - name: userId + name: pathid schema: type: integer required: true diff --git a/packages/openapi-2-kong/src/declarative-config/plugins.js b/packages/openapi-2-kong/src/declarative-config/plugins.js index 31d841e39c..a63ede87c6 100644 --- a/packages/openapi-2-kong/src/declarative-config/plugins.js +++ b/packages/openapi-2-kong/src/declarative-config/plugins.js @@ -38,6 +38,13 @@ function generatePlugin([key, value]: [string, Object]): DCPlugin { */ const ALLOW_ALL_SCHEMA = '{}'; +const DEFAULT_PARAM_STYLE = { + header: 'simple', + cookie: 'form', + query: 'form', + path: 'simple', +}; + function generateParameterSchema(operation?: OA3Operation): Array | typeof undefined { let parameterSchema; @@ -56,13 +63,19 @@ function generateParameterSchema(operation?: OA3Operation): Array | type schema = ALLOW_ALL_SCHEMA; } + const paramStyle = (p: Object).style ?? DEFAULT_PARAM_STYLE[(p: Object).in]; + if (typeof paramStyle === 'undefined') { + const name = (p: Object).name; + throw new Error(`invalid 'in' property (parameter '${name}')`); + } + parameterSchema.push({ in: (p: Object).in, explode: !!(p: Object).explode, required: !!(p: Object).required, name: (p: Object).name, schema, - style: (p: Object).style ?? 'form', + style: paramStyle, }); } }