From d43a9d98650cf2e9d95fe99cee115d045bead6aa Mon Sep 17 00:00:00 2001 From: Maurice Yap Date: Wed, 29 Jan 2025 09:33:54 +0000 Subject: [PATCH] Authenticate requests for scheduling reports (#4170) On the Lookout UI, the fetch requests for scheduling reports require authentication via the user's access token. --- .../lookoutV2/useGetJobSchedulingReport.ts | 16 ++++++++++++++-- .../lookoutV2/useGetQueueSchedulingReport.ts | 16 ++++++++++++++-- .../services/lookoutV2/useGetSchedulingReport.ts | 14 +++++++++++++- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/internal/lookout/ui/src/services/lookoutV2/useGetJobSchedulingReport.ts b/internal/lookout/ui/src/services/lookoutV2/useGetJobSchedulingReport.ts index f1de0ff73d3..f295ceef064 100644 --- a/internal/lookout/ui/src/services/lookoutV2/useGetJobSchedulingReport.ts +++ b/internal/lookout/ui/src/services/lookoutV2/useGetJobSchedulingReport.ts @@ -1,21 +1,33 @@ import { useQuery } from "@tanstack/react-query" import { useGetUiConfig } from "./useGetUiConfig" +import { getAccessToken, getAuthorizationHeaders, useUserManager } from "../../oidc" import { SchedulerReportingApi, Configuration, SchedulerobjectsJobReport } from "../../openapi/schedulerobjects" import { getErrorMessage } from "../../utils" export const useGetJobSchedulingReport = (jobId: string, enabled = true) => { + const userManager = useUserManager() + const { data: uiConfig } = useGetUiConfig(enabled) const armadaApiBaseUrl = uiConfig?.armadaApiBaseUrl - const schedulerReportingApiConfiguration: Configuration = new Configuration({ basePath: armadaApiBaseUrl }) + const schedulerReportingApiConfiguration: Configuration = new Configuration({ + basePath: armadaApiBaseUrl, + credentials: "include", + }) const schedulerReportingApi = new SchedulerReportingApi(schedulerReportingApiConfiguration) return useQuery({ queryKey: ["getJobSchedulingReport", jobId], queryFn: async ({ signal }) => { try { - return await schedulerReportingApi.getJobReport({ jobId }, { signal }) + const headers: HeadersInit = {} + + if (userManager !== undefined) { + Object.assign(headers, getAuthorizationHeaders(await getAccessToken(userManager))) + } + + return await schedulerReportingApi.getJobReport({ jobId }, { headers, signal }) } catch (e) { throw await getErrorMessage(e) } diff --git a/internal/lookout/ui/src/services/lookoutV2/useGetQueueSchedulingReport.ts b/internal/lookout/ui/src/services/lookoutV2/useGetQueueSchedulingReport.ts index 3612c03189e..664da0cda13 100644 --- a/internal/lookout/ui/src/services/lookoutV2/useGetQueueSchedulingReport.ts +++ b/internal/lookout/ui/src/services/lookoutV2/useGetQueueSchedulingReport.ts @@ -1,21 +1,33 @@ import { useQuery } from "@tanstack/react-query" import { useGetUiConfig } from "./useGetUiConfig" +import { getAccessToken, getAuthorizationHeaders, useUserManager } from "../../oidc" import { SchedulerReportingApi, Configuration, SchedulerobjectsQueueReport } from "../../openapi/schedulerobjects" import { getErrorMessage } from "../../utils" export const useGetQueueSchedulingReport = (queueName: string, verbosity: number, enabled = true) => { + const userManager = useUserManager() + const { data: uiConfig } = useGetUiConfig(enabled) const armadaApiBaseUrl = uiConfig?.armadaApiBaseUrl - const schedulerReportingApiConfiguration: Configuration = new Configuration({ basePath: armadaApiBaseUrl }) + const schedulerReportingApiConfiguration: Configuration = new Configuration({ + basePath: armadaApiBaseUrl, + credentials: "include", + }) const schedulerReportingApi = new SchedulerReportingApi(schedulerReportingApiConfiguration) return useQuery({ queryKey: ["getQueueSchedulingReport", queueName, verbosity], queryFn: async ({ signal }) => { try { - return await schedulerReportingApi.getQueueReport({ queueName, verbosity }, { signal }) + const headers: HeadersInit = {} + + if (userManager !== undefined) { + Object.assign(headers, getAuthorizationHeaders(await getAccessToken(userManager))) + } + + return await schedulerReportingApi.getQueueReport({ queueName, verbosity }, { headers, signal }) } catch (e) { throw await getErrorMessage(e) } diff --git a/internal/lookout/ui/src/services/lookoutV2/useGetSchedulingReport.ts b/internal/lookout/ui/src/services/lookoutV2/useGetSchedulingReport.ts index c9c46caa868..1f171748d36 100644 --- a/internal/lookout/ui/src/services/lookoutV2/useGetSchedulingReport.ts +++ b/internal/lookout/ui/src/services/lookoutV2/useGetSchedulingReport.ts @@ -1,20 +1,32 @@ import { useQuery } from "@tanstack/react-query" import { useGetUiConfig } from "./useGetUiConfig" +import { getAccessToken, getAuthorizationHeaders, useUserManager } from "../../oidc" import { SchedulerReportingApi, Configuration, SchedulerobjectsSchedulingReport } from "../../openapi/schedulerobjects" import { getErrorMessage } from "../../utils" export const useGetSchedulingReport = (verbosity: number, enabled = true) => { + const userManager = useUserManager() + const { data: uiConfig } = useGetUiConfig(enabled) const armadaApiBaseUrl = uiConfig?.armadaApiBaseUrl - const schedulerReportingApiConfiguration: Configuration = new Configuration({ basePath: armadaApiBaseUrl }) + const schedulerReportingApiConfiguration: Configuration = new Configuration({ + basePath: armadaApiBaseUrl, + credentials: "include", + }) const schedulerReportingApi = new SchedulerReportingApi(schedulerReportingApiConfiguration) return useQuery({ queryKey: ["getSchedulingReport", verbosity], queryFn: async ({ signal }) => { try { + const headers: HeadersInit = {} + + if (userManager !== undefined) { + Object.assign(headers, getAuthorizationHeaders(await getAccessToken(userManager))) + } + return await schedulerReportingApi.getSchedulingReport({ verbosity }, { signal }) } catch (e) { throw await getErrorMessage(e)