refactor: inherit header from multiple collecions
This commit is contained in:
@@ -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,
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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]
|
||||
}[]
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user