refactor: inherited auth and header for req runner

This commit is contained in:
nivedin
2023-11-28 23:26:03 +05:30
committed by Andrew Bastin
parent d326063659
commit a48d7e879f
3 changed files with 65 additions and 21 deletions

View File

@@ -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

View File

@@ -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) => {

View File

@@ -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,
})), })),