fix: graphql authorization headers (#3136)

This commit is contained in:
Anwarul Islam
2023-06-23 00:02:23 +06:00
committed by GitHub
parent f67b366b90
commit 039de8015f
8 changed files with 105 additions and 27 deletions

View File

@@ -99,7 +99,7 @@ export class GQLConnection {
private timeoutSubscription: any
public connect(url: string, headers: GQLHeader[]) {
public connect(url: string, headers: GQLHeader[], auth: HoppGQLAuth) {
if (this.connected$.value) {
throw new Error(
"A connection is already running. Close it before starting another."
@@ -110,7 +110,7 @@ export class GQLConnection {
this.connected$.next(true)
const poll = async () => {
await this.getSchema(url, headers)
await this.getSchema(url, headers, auth)
this.timeoutSubscription = setTimeout(() => {
poll()
}, GQL_SCHEMA_POLL_INTERVAL)
@@ -135,7 +135,11 @@ export class GQLConnection {
this.schema$.next(null)
}
private async getSchema(url: string, headers: GQLHeader[]) {
private async getSchema(
url: string,
reqHeaders: GQLHeader[],
auth: HoppGQLAuth
) {
try {
this.isLoading$.next(true)
@@ -143,10 +147,38 @@ export class GQLConnection {
query: getIntrospectionQuery(),
})
const headers = reqHeaders.filter((x) => x.active && x.key !== "")
// TODO: Support a better b64 implementation than btoa ?
if (auth.authType === "basic") {
const username = auth.username
const password = auth.password
headers.push({
active: true,
key: "Authorization",
value: `Basic ${btoa(`${username}:${password}`)}`,
})
} else if (auth.authType === "bearer" || auth.authType === "oauth-2") {
headers.push({
active: true,
key: "Authorization",
value: `Bearer ${auth.token}`,
})
} else if (auth.authType === "api-key") {
const { key, value, addTo } = auth
if (addTo === "Headers") {
headers.push({
active: true,
key,
value,
})
}
}
const finalHeaders: Record<string, string> = {}
headers
.filter((x) => x.active && x.key !== "")
.forEach((x) => (finalHeaders[x.key] = x.value))
headers.forEach((x) => (finalHeaders[x.key] = x.value))
const reqOptions = {
method: "POST",