From 67baf74edcc168d6e0c8da36b98cf464b29f42fb Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Mon, 3 Jan 2022 11:17:02 +0530 Subject: [PATCH] fix: add body env resolution for har generation --- .../components/http/CodegenModal.vue | 12 ++++--- .../helpers/utils/EffectiveURL.ts | 36 ++++++++++++++++++- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/packages/hoppscotch-app/components/http/CodegenModal.vue b/packages/hoppscotch-app/components/http/CodegenModal.vue index 175162eaa..db672030e 100644 --- a/packages/hoppscotch-app/components/http/CodegenModal.vue +++ b/packages/hoppscotch-app/components/http/CodegenModal.vue @@ -87,7 +87,10 @@ import { computed, ref, watch } from "@nuxtjs/composition-api" import * as O from "fp-ts/Option" import { useCodemirror } from "~/helpers/editor/codemirror" import { copyToClipboard } from "~/helpers/utils/clipboard" -import { getEffectiveRESTRequest } from "~/helpers/utils/EffectiveURL" +import { + getEffectiveRESTRequest, + resolvesEnvsInBody, +} from "~/helpers/utils/EffectiveURL" import { getCurrentEnvironment } from "~/newstore/environments" import { getRESTRequest } from "~/newstore/RESTSession" import { useI18n, useToast } from "~/helpers/utils/composables" @@ -118,10 +121,8 @@ const copyIcon = ref("copy") const errorState = ref(false) const requestCode = computed(() => { - const effectiveRequest = getEffectiveRESTRequest( - request.value, - getCurrentEnvironment() - ) + const env = getCurrentEnvironment() + const effectiveRequest = getEffectiveRESTRequest(request.value, env) if (!props.show) return "" @@ -129,6 +130,7 @@ const requestCode = computed(() => { codegenType.value, makeRESTRequest({ ...effectiveRequest, + body: resolvesEnvsInBody(effectiveRequest.body, env), headers: effectiveRequest.effectiveFinalHeaders.map((header) => ({ ...header, active: true, diff --git a/packages/hoppscotch-app/helpers/utils/EffectiveURL.ts b/packages/hoppscotch-app/helpers/utils/EffectiveURL.ts index ed9bdb1fe..85630f12f 100644 --- a/packages/hoppscotch-app/helpers/utils/EffectiveURL.ts +++ b/packages/hoppscotch-app/helpers/utils/EffectiveURL.ts @@ -1,6 +1,10 @@ import { combineLatest, Observable } from "rxjs" import { map } from "rxjs/operators" -import { FormDataKeyValue, HoppRESTRequest } from "@hoppscotch/data" +import { + FormDataKeyValue, + HoppRESTReqBody, + HoppRESTRequest, +} from "@hoppscotch/data" import { parseTemplateString, parseBodyEnvVariables } from "../templating" import { Environment, getGlobalVariables } from "~/newstore/environments" @@ -16,6 +20,36 @@ export interface EffectiveHoppRESTRequest extends HoppRESTRequest { effectiveFinalBody: FormData | string | null } +// Resolves environment variables in the body +export const resolvesEnvsInBody = ( + body: HoppRESTReqBody, + env: Environment +): HoppRESTReqBody => { + if (!body.contentType) return body + + if (body.contentType === "multipart/form-data") { + return { + contentType: "multipart/form-data", + body: body.body.map( + (entry) => + { + active: entry.active, + isFile: entry.isFile, + key: parseTemplateString(entry.key, env.variables), + value: entry.isFile + ? entry.value + : parseTemplateString(entry.value, env.variables), + } + ), + } + } else { + return { + contentType: body.contentType, + body: parseTemplateString(body.body, env.variables), + } + } +} + function getFinalBodyFromRequest( request: HoppRESTRequest, env: Environment