fix: urlencoded form evaluation issues

This commit is contained in:
Andrew Bastin
2022-01-19 23:11:26 +05:30
parent 0efbc58b26
commit 09269b3cec
6 changed files with 58 additions and 18 deletions

View File

@@ -0,0 +1,9 @@
/**
* Logs the current value and returns the same value
* @param x The value to log
* @returns The parameter `x` passed to this
*/
export const trace = <T>(x: T) => {
console.log(x)
return x
}

View File

@@ -0,0 +1,7 @@
export const tupleToRecord = <
KeyType extends string | number | symbol,
ValueType
>(
tuples: [KeyType, ValueType][]
): Record<KeyType, ValueType> =>
(Object.assign as any)(...tuples.map(([key, val]) => ({ [key]: val })))

View File

@@ -122,8 +122,9 @@ const axiosWithoutProxy: NetworkStrategy = (req) =>
)
const axiosStrategy: NetworkStrategy = (req) =>
settingsStore.value.PROXY_ENABLED
? axiosWithProxy(req)
: axiosWithoutProxy(req)
pipe(
req,
settingsStore.value.PROXY_ENABLED ? axiosWithProxy : axiosWithoutProxy
)
export default axiosStrategy

View File

@@ -1,3 +1,7 @@
import * as RA from "fp-ts/ReadonlyArray"
import * as S from "fp-ts/string"
import qs from "qs"
import { pipe, flow } from "fp-ts/function"
import { combineLatest, Observable } from "rxjs"
import { map } from "rxjs/operators"
import {
@@ -6,6 +10,7 @@ import {
HoppRESTRequest,
} from "@hoppscotch/data"
import { parseTemplateString, parseBodyEnvVariables } from "../templating"
import { tupleToRecord } from "../functional/record"
import { Environment, getGlobalVariables } from "~/newstore/environments"
export interface EffectiveHoppRESTRequest extends HoppRESTRequest {
@@ -58,6 +63,25 @@ function getFinalBodyFromRequest(
return null
}
if (request.body.contentType === "application/x-www-form-urlencoded") {
return pipe(
request.body.body,
S.split("\n"),
RA.map(
flow(
// Define how each lines are parsed
S.split(":"), // Split by ":"
RA.map(S.trim), // Remove trailing spaces in key/value begins and ends
([key, value]) => [key, value ?? ""] as [string, string] // Add a default empty by default
)
),
RA.toArray,
tupleToRecord, // Convert the tuple to a record
qs.stringify
)
}
if (request.body.contentType === "multipart/form-data") {
const formData = new FormData()

View File

@@ -94,6 +94,7 @@
"openapi-types": "^10.0.0",
"paho-mqtt": "^1.1.0",
"postman-collection": "^4.1.1",
"qs": "^6.10.3",
"rxjs": "^7.5.2",
"socket.io-client-v2": "npm:socket.io-client@^2.4.0",
"socket.io-client-v3": "npm:socket.io-client@^3.1.3",

28
pnpm-lock.yaml generated
View File

@@ -153,6 +153,7 @@ importers:
paho-mqtt: ^1.1.0
postman-collection: ^4.1.1
prettier: ^2.5.1
qs: ^6.10.3
raw-loader: ^4.0.2
rxjs: ^7.5.2
sass: ^1.47.0
@@ -245,6 +246,7 @@ importers:
openapi-types: 10.0.0
paho-mqtt: 1.1.0
postman-collection: 4.1.1
qs: 6.10.3
rxjs: 7.5.2
socket.io-client-v2: /socket.io-client/2.4.0
socket.io-client-v3: /socket.io-client/3.1.3
@@ -3764,11 +3766,11 @@ packages:
ufo: 0.7.9
dev: false
/@nuxt/kit-edge/3.0.0-27376999.6abf75d:
resolution: {integrity: sha512-9VdJR9s9TXHd+lRRZnZRV+5GwkWKYomIS5NONMVgBDFjxotvqkVsCbpHvUja2I0NlcAxKnFePgqeDC20CBrgHQ==}
/@nuxt/kit-edge/3.0.0-27379437.ed2d26f:
resolution: {integrity: sha512-6rGJDifwA4J/9+sN0yVKU3CLsQmK/fRQUvQLqq830wBI8ORPhNu4gXULoT0cdWPzKcera8e8Hz9iqL9aCjFNBw==}
engines: {node: ^14.16.0 || ^16.11.0 || ^17.0.0}
dependencies:
'@nuxt/schema': /@nuxt/schema-edge/3.0.0-27376999.6abf75d
'@nuxt/schema': /@nuxt/schema-edge/3.0.0-27379437.ed2d26f
consola: 2.15.3
defu: 5.0.1
dotenv: 14.2.0
@@ -3806,8 +3808,8 @@ packages:
node-fetch: 2.6.6
dev: false
/@nuxt/schema-edge/3.0.0-27376999.6abf75d:
resolution: {integrity: sha512-BdoTPuXoHT3aqQL37g/SPk1jOFO4pHbEClsj/5X6cLKwktTcqSbMkwZJF0tTyhvAwiOSFdlTvI34juPhvLNzPw==}
/@nuxt/schema-edge/3.0.0-27379437.ed2d26f:
resolution: {integrity: sha512-2KJ5/cQasFv0nrkwc2+mi9oGRFkU73luRQGA0SFAONsPTa+x+4C2Qdnav7F9KNnl95OCsGgZMblQUyCTLVdHxA==}
engines: {node: ^14.16.0 || ^16.11.0 || ^17.0.0}
dependencies:
create-require: 1.1.1
@@ -8617,7 +8619,7 @@ packages:
is-shared-array-buffer: 1.0.1
is-string: 1.0.7
is-weakref: 1.0.1
object-inspect: 1.11.0
object-inspect: 1.12.0
object-keys: 1.1.1
object.assign: 4.1.2
string.prototype.trimend: 1.0.4
@@ -13547,7 +13549,7 @@ packages:
/nuxt-windicss/2.2.2:
resolution: {integrity: sha512-4tvzk9d2TUFxloty187D+wmO8ZNAvpSmRJ5HQO3/AvZdMMhAl4gomXR9fCgFKQe7Fxcj9nIKNInOx8TWowjiqA==}
dependencies:
'@nuxt/kit': /@nuxt/kit-edge/3.0.0-27376999.6abf75d
'@nuxt/kit': /@nuxt/kit-edge/3.0.0-27379437.ed2d26f
'@windicss/plugin-utils': 1.6.1
consola: 2.15.3
defu: 5.0.0
@@ -13611,12 +13613,8 @@ packages:
define-property: 0.2.5
kind-of: 3.2.2
/object-inspect/1.11.0:
resolution: {integrity: sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==}
/object-inspect/1.12.0:
resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==}
dev: false
/object-keys/1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
@@ -13971,7 +13969,7 @@ packages:
dependencies:
is-ssh: 1.3.3
protocols: 1.4.8
qs: 6.10.1
qs: 6.10.3
query-string: 6.14.1
dev: false
@@ -15209,8 +15207,8 @@ packages:
resolution: {integrity: sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=}
engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
/qs/6.10.1:
resolution: {integrity: sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==}
/qs/6.10.3:
resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==}
engines: {node: '>=0.6'}
dependencies:
side-channel: 1.0.4
@@ -16094,7 +16092,7 @@ packages:
dependencies:
call-bind: 1.0.2
get-intrinsic: 1.1.1
object-inspect: 1.11.0
object-inspect: 1.12.0
/sigmund/1.0.1:
resolution: {integrity: sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=}