refactor: inherited auth and header for req runner
This commit is contained in:
@@ -95,13 +95,27 @@ export function runRESTRequest$(
|
|||||||
return E.left("script_fail" as const)
|
return E.left("script_fail" as const)
|
||||||
}
|
}
|
||||||
|
|
||||||
const effectiveRequest = getEffectiveRESTRequest(
|
const requestAuth =
|
||||||
tab.value.document.request,
|
tab.value.document.request.auth.authType === "inherit" &&
|
||||||
{
|
tab.value.document.request.auth.authActive
|
||||||
name: "Env",
|
? tab.value.document.inheritedProperties?.auth
|
||||||
variables: combineEnvVariables(envs.right),
|
: tab.value.document.request.auth
|
||||||
}
|
|
||||||
)
|
const requestHeaders = [
|
||||||
|
...(tab.value.document.inheritedProperties?.headers ?? []),
|
||||||
|
...tab.value.document.request.headers,
|
||||||
|
]
|
||||||
|
|
||||||
|
const finalRequest = {
|
||||||
|
...tab.value.document.request,
|
||||||
|
auth: requestAuth,
|
||||||
|
headers: requestHeaders,
|
||||||
|
}
|
||||||
|
|
||||||
|
const effectiveRequest = getEffectiveRESTRequest(finalRequest, {
|
||||||
|
name: "Env",
|
||||||
|
variables: combineEnvVariables(envs.right),
|
||||||
|
})
|
||||||
|
|
||||||
const [stream, cancelRun] = createRESTNetworkRequestStream(effectiveRequest)
|
const [stream, cancelRun] = createRESTNetworkRequestStream(effectiveRequest)
|
||||||
cancelFunc = cancelRun
|
cancelFunc = cancelRun
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { runGQLQuery } from "../backend/GQLClient"
|
|||||||
import * as E from "fp-ts/Either"
|
import * as E from "fp-ts/Either"
|
||||||
import { getService } from "~/modules/dioc"
|
import { getService } from "~/modules/dioc"
|
||||||
import { RESTTabService } from "~/services/tab/rest"
|
import { RESTTabService } from "~/services/tab/rest"
|
||||||
|
import { HoppInheritedProperty } from "../types/HoppInheritedProperties"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resolve save context on reorder
|
* Resolve save context on reorder
|
||||||
@@ -108,6 +109,30 @@ export function updateSaveContextForAffectedRequests(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function updateInheritedPropertiesForAffectedRequests(
|
||||||
|
path: string,
|
||||||
|
inheritedProperties: HoppInheritedProperty
|
||||||
|
) {
|
||||||
|
const tabService = getService(RESTTabService)
|
||||||
|
const tabs = tabService.getTabsRefTo((tab) => {
|
||||||
|
return (
|
||||||
|
tab.document.saveContext?.originLocation === "user-collection" &&
|
||||||
|
tab.document.saveContext.folderPath.startsWith(path)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
const filteredTabs = tabs.filter((tab) => {
|
||||||
|
return (
|
||||||
|
tab.value.document.inheritedProperties &&
|
||||||
|
tab.value.document.inheritedProperties.parentId === path
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
for (const tab of filteredTabs) {
|
||||||
|
tab.value.document.inheritedProperties = inheritedProperties
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function resetSaveContextForAffectedRequests(folderPath: string) {
|
function resetSaveContextForAffectedRequests(folderPath: string) {
|
||||||
const tabService = getService(RESTTabService)
|
const tabService = getService(RESTTabService)
|
||||||
const tabs = tabService.getTabsRefTo((tab) => {
|
const tabs = tabService.getTabsRefTo((tab) => {
|
||||||
|
|||||||
@@ -42,22 +42,27 @@ export interface EffectiveHoppRESTRequest extends HoppRESTRequest {
|
|||||||
* @param envVars Currently active environment variables
|
* @param envVars Currently active environment variables
|
||||||
* @returns The list of headers
|
* @returns The list of headers
|
||||||
*/
|
*/
|
||||||
const getComputedAuthHeaders = (
|
export const getComputedAuthHeaders = (
|
||||||
req: HoppRESTRequest,
|
envVars: Environment["variables"],
|
||||||
envVars: Environment["variables"]
|
req?: HoppRESTRequest,
|
||||||
|
auth?: HoppRESTRequest["auth"]
|
||||||
) => {
|
) => {
|
||||||
|
const request = auth ? { auth: auth ?? { authActive: false } } : req
|
||||||
|
|
||||||
// If Authorization header is also being user-defined, that takes priority
|
// If Authorization header is also being user-defined, that takes priority
|
||||||
if (req.headers.find((h) => h.key.toLowerCase() === "authorization"))
|
if (req && req.headers.find((h) => h.key.toLowerCase() === "authorization"))
|
||||||
return []
|
return []
|
||||||
|
|
||||||
if (!req.auth.authActive) return []
|
if (!request) return []
|
||||||
|
|
||||||
|
if (!request.auth.authActive) return []
|
||||||
|
|
||||||
const headers: HoppRESTHeader[] = []
|
const headers: HoppRESTHeader[] = []
|
||||||
|
|
||||||
// TODO: Support a better b64 implementation than btoa ?
|
// TODO: Support a better b64 implementation than btoa ?
|
||||||
if (req.auth.authType === "basic") {
|
if (request.auth.authType === "basic") {
|
||||||
const username = parseTemplateString(req.auth.username, envVars)
|
const username = parseTemplateString(request.auth.username, envVars)
|
||||||
const password = parseTemplateString(req.auth.password, envVars)
|
const password = parseTemplateString(request.auth.password, envVars)
|
||||||
|
|
||||||
headers.push({
|
headers.push({
|
||||||
active: true,
|
active: true,
|
||||||
@@ -65,16 +70,16 @@ const getComputedAuthHeaders = (
|
|||||||
value: `Basic ${btoa(`${username}:${password}`)}`,
|
value: `Basic ${btoa(`${username}:${password}`)}`,
|
||||||
})
|
})
|
||||||
} else if (
|
} else if (
|
||||||
req.auth.authType === "bearer" ||
|
request.auth.authType === "bearer" ||
|
||||||
req.auth.authType === "oauth-2"
|
request.auth.authType === "oauth-2"
|
||||||
) {
|
) {
|
||||||
headers.push({
|
headers.push({
|
||||||
active: true,
|
active: true,
|
||||||
key: "Authorization",
|
key: "Authorization",
|
||||||
value: `Bearer ${parseTemplateString(req.auth.token, envVars)}`,
|
value: `Bearer ${parseTemplateString(request.auth.token, envVars)}`,
|
||||||
})
|
})
|
||||||
} else if (req.auth.authType === "api-key") {
|
} else if (request.auth.authType === "api-key") {
|
||||||
const { key, value, addTo } = req.auth
|
const { key, value, addTo } = request.auth
|
||||||
|
|
||||||
if (addTo === "Headers") {
|
if (addTo === "Headers") {
|
||||||
headers.push({
|
headers.push({
|
||||||
@@ -132,7 +137,7 @@ export const getComputedHeaders = (
|
|||||||
req: HoppRESTRequest,
|
req: HoppRESTRequest,
|
||||||
envVars: Environment["variables"]
|
envVars: Environment["variables"]
|
||||||
): ComputedHeader[] => [
|
): ComputedHeader[] => [
|
||||||
...getComputedAuthHeaders(req, envVars).map((header) => ({
|
...getComputedAuthHeaders(envVars, req).map((header) => ({
|
||||||
source: "auth" as const,
|
source: "auth" as const,
|
||||||
header,
|
header,
|
||||||
})),
|
})),
|
||||||
|
|||||||
Reference in New Issue
Block a user