refactor: inherit header from multiple collecions

This commit is contained in:
nivedin
2023-11-30 19:43:46 +05:30
committed by Andrew Bastin
parent b893607ad1
commit 0a54455fe7
9 changed files with 145 additions and 89 deletions

View File

@@ -98,17 +98,31 @@ export function runRESTRequest$(
const requestAuth =
tab.value.document.request.auth.authType === "inherit" &&
tab.value.document.request.auth.authActive
? tab.value.document.inheritedProperties?.auth
? tab.value.document.inheritedProperties?.auth.inheritedAuth
: tab.value.document.request.auth
const requestHeaders = [
...(tab.value.document.inheritedProperties?.headers ?? []),
...tab.value.document.request.headers,
]
let requestHeaders
const inheritedHeaders =
tab.value.document.inheritedProperties?.headers.map((header) => {
if (header.inheritedHeader) {
return header.inheritedHeader
}
return []
})
if (inheritedHeaders) {
requestHeaders = [
...inheritedHeaders,
...tab.value.document.request.headers,
]
} else {
requestHeaders = [...tab.value.document.request.headers]
}
const finalRequest = {
...tab.value.document.request,
auth: requestAuth,
auth: requestAuth ?? { authType: "none", authActive: false },
headers: requestHeaders,
}

View File

@@ -121,16 +121,48 @@ export function updateInheritedPropertiesForAffectedRequests(
)
})
const filteredTabs = tabs.filter((tab) => {
const tabsEffectedByAuth = tabs.filter((tab) => {
return (
tab.value.document.inheritedProperties &&
tab.value.document.inheritedProperties.parentId === path
tab.value.document.inheritedProperties.auth.parentID === path
)
})
for (const tab of filteredTabs) {
const tabsEffectedByHeaders = tabs.filter((tab) => {
return (
tab.value.document.inheritedProperties &&
tab.value.document.inheritedProperties.headers.some(
(header) => header.parentID === path
)
)
})
for (const tab of tabsEffectedByAuth) {
tab.value.document.inheritedProperties = inheritedProperties
}
for (const tab of tabsEffectedByHeaders) {
const headers = tab.value.document.inheritedProperties?.headers.map(
(header) => {
if (header.parentID === path) {
return {
...header,
inheritedHeader: inheritedProperties.headers.find(
(inheritedHeader) =>
inheritedHeader.inheritedHeader?.key ===
header.inheritedHeader?.key
)?.inheritedHeader,
}
}
return header
}
)
tab.value.document.inheritedProperties = {
...tab.value.document.inheritedProperties,
headers,
}
}
}
function resetSaveContextForAffectedRequests(folderPath: string) {

View File

@@ -1,8 +1,14 @@
import { HoppRESTRequest } from "@hoppscotch/data"
export type HoppInheritedProperty = {
parentId: string
parentName: string
auth?: HoppRESTRequest["auth"]
headers?: HoppRESTRequest["headers"]
auth: {
parentID: string
parentName: string
inheritedAuth: HoppRESTRequest["auth"]
}
headers: {
parentID: string
parentName: string
inheritedHeader?: HoppRESTRequest["headers"][number]
}[]
}

View File

@@ -48,7 +48,6 @@ export const getComputedAuthHeaders = (
auth?: HoppRESTRequest["auth"]
) => {
const request = auth ? { auth: auth ?? { authActive: false } } : req
// If Authorization header is also being user-defined, that takes priority
if (req && req.headers.find((h) => h.key.toLowerCase() === "authorization"))
return []
@@ -136,16 +135,18 @@ export type ComputedHeader = {
export const getComputedHeaders = (
req: HoppRESTRequest,
envVars: Environment["variables"]
): ComputedHeader[] => [
...getComputedAuthHeaders(envVars, req).map((header) => ({
source: "auth" as const,
header,
})),
...getComputedBodyHeaders(req).map((header) => ({
source: "body" as const,
header,
})),
]
): ComputedHeader[] => {
return [
...getComputedAuthHeaders(envVars, req).map((header) => ({
source: "auth" as const,
header,
})),
...getComputedBodyHeaders(req).map((header) => ({
source: "body" as const,
header,
})),
]
}
export type ComputedParam = {
source: "auth"