From 62b14ae378899485b8649b0cd8051126c4b1e318 Mon Sep 17 00:00:00 2001 From: Panu Horsmalahti Date: Thu, 21 Oct 2021 14:30:36 +0300 Subject: [PATCH] Make getRequestOptions async. Signed-off-by: Panu Horsmalahti --- src/common/k8s-api/json-api.ts | 20 +++++++++++++++----- src/common/k8s-api/kube-api.ts | 15 ++++++++------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/common/k8s-api/json-api.ts b/src/common/k8s-api/json-api.ts index 5ed9d9406f..e4940f3ddf 100644 --- a/src/common/k8s-api/json-api.ts +++ b/src/common/k8s-api/json-api.ts @@ -52,7 +52,7 @@ export interface JsonApiConfig { apiBase: string; serverAddress: string; debug?: boolean; - getRequestOptions?: () => RequestInit; + getRequestOptions?: () => Promise; } export class JsonApi { static reqInitDefault: RequestInit = { @@ -75,15 +75,20 @@ export class JsonApi { public onData = new EventEmitter<[D, Response]>(); public onError = new EventEmitter<[JsonApiErrorParsed, Response]>(); - private getRequestOptions?: () => RequestInit; + private getRequestOptions?: () => Promise; get(path: string, params?: P, reqInit: RequestInit = {}) { return this.request(path, params, { ...reqInit, method: "get" }); } - getResponse(path: string, params?: P, init: RequestInit = {}): Promise { + async getResponse(path: string, params?: P, init: RequestInit = {}): Promise { let reqUrl = `${this.config.serverAddress}${this.config.apiBase}${path}`; - const reqInit: RequestInit = merge({}, this.reqInit, this.getRequestOptions?.(), init); + const reqInit: RequestInit = merge( + {}, + this.reqInit, + this.getRequestOptions ? (await this.getRequestOptions()) : {}, + init + ); const { query } = params || {} as P; if (!reqInit.method) { @@ -117,7 +122,12 @@ export class JsonApi { protected async request(path: string, params?: P, init: RequestInit = {}) { let reqUrl = `${this.config.serverAddress}${this.config.apiBase}${path}`; - const reqInit: RequestInit = merge({}, this.reqInit, this.getRequestOptions?.(), init); + const reqInit: RequestInit = merge( + {}, + this.reqInit, + this.getRequestOptions ? (await this.getRequestOptions()) : {}, + init + ); const { data, query } = params || {} as P; if (data && !reqInit.body) { diff --git a/src/common/k8s-api/kube-api.ts b/src/common/k8s-api/kube-api.ts index 1f2ebb339b..e9fc072fa4 100644 --- a/src/common/k8s-api/kube-api.ts +++ b/src/common/k8s-api/kube-api.ts @@ -109,7 +109,7 @@ export interface IRemoteKubeApiConfig { skipTLSVerify?: boolean; } user: { - token?: string | (() => string); + token?: string | (() => Promise); clientCertificateData?: string; clientKeyData?: string; } @@ -133,14 +133,15 @@ export function forCluster(cluster: ILocalKubeApiConfig, k }); } -const getToken = (token: string | (() => string)) => isFunction(token) ? token() : token; +// const getToken = (token: string | (() => Promise)) => isFunction(token) ? token() : token; export function forRemoteCluster(config: IRemoteKubeApiConfig, kubeClass: KubeObjectConstructor): KubeApi { const reqInit: RequestInit = {}; + const token = config.user.token; - if (config.user.token) { + if (!isFunction(token)) { reqInit.headers = { - "Authorization": `Bearer ${getToken(config.user.token)}` + "Authorization": `Bearer ${token}` }; } @@ -170,10 +171,10 @@ export function forRemoteCluster(config: IRemoteKubeApiCon serverAddress: config.cluster.server, apiBase: "", debug: isDevelopment, - ...(config.user.token ? { - getRequestOptions: () => ({ + ...(isFunction(token) ? { + getRequestOptions: async () => ({ headers: { - "Authorization": `Bearer ${getToken(config.user.token)}` + "Authorization": `Bearer ${await token()}` } }) } : {})