Skip to content

Commit c620125

Browse files
bugraoz93vincbeck
andauthored
Add Keycloak Refresh Token Endpoint to Core and Keycloak Provider (apache#51657)
* Add refresh_token to base_auth_manager.py and include KeycloakAuthManager integration * Add Refresh Token Middleware to core Airflow * Create refresh_token flow in UI in the request/response interceptors * Fix UI tests, remove unused method from Keycloak user and fix route tests * Only refresh when needed, change user to typevar, minimize ui changes and change refresh_token * Only refresh when needed, change user to typevar, minimize ui changes and change refresh_token * Execute refresh_token only for UI request via checking cors, update docs * Execute refresh_token only for UI request via checking cors, update docs and add tests * Update airflow-core/src/airflow/api_fastapi/auth/managers/base_auth_manager.py Co-authored-by: Vincent <[email protected]> * Remove print * Rebase and remove duplicate get_keycloak_client * Remove cors check * Add unit test for middleware dispatch * Add assert for refresh_token method * Fix async part and added to db tests due to client created and used * Add jwt expiration time lower than sleep * feat(keycloak): Revert Middleware and Expose an Endpoint * feat(keycloak): add refresh handle next and update to user userdep with refresh_token * feat(keycloak): implement /refresh tests fully, add None to auth and update comments * feat(keycloak): rebase UI files * feat(keycloak): fallback to logout URL rather than getting from auth_manager, update access_token for user and fix test_routes --------- Co-authored-by: Vincent <[email protected]>
1 parent 8881579 commit c620125

File tree

16 files changed

+328
-4
lines changed

16 files changed

+328
-4
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ airflow-core/src/airflow/ui/public/i18n/locales/fr/ @pierrejeambrun @vincbeck
8282
/providers/edge3/ @jscheffl
8383
/providers/fab/ @vincbeck
8484
/providers/hashicorp/ @hussein-awala
85-
/providers/keycloak/ @vincbeck
85+
/providers/keycloak/ @vincbeck @bugraoz93
8686
/providers/openlineage/ @mobuchowski
8787
/providers/slack/ @eladkal
8888
/providers/smtp/ @hussein-awala

airflow-core/src/airflow/api_fastapi/auth/managers/base_auth_manager.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,15 @@ def get_url_logout(self) -> str | None:
132132
"""
133133
return None
134134

135+
def get_url_refresh(self) -> str | None:
136+
"""
137+
Return the URL to refresh the authentication token.
138+
139+
This is used to refresh the authentication token when it expires.
140+
The default implementation returns None, which means that the auth manager does not support refresh token.
141+
"""
142+
return None
143+
135144
@abstractmethod
136145
def is_authorized_configuration(
137146
self,

airflow-core/src/airflow/api_fastapi/core_api/openapi/v2-rest-api-generated.yaml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7772,6 +7772,40 @@ paths:
77727772
application/json:
77737773
schema:
77747774
$ref: '#/components/schemas/HTTPValidationError'
7775+
/api/v2/auth/refresh:
7776+
get:
7777+
tags:
7778+
- Login
7779+
summary: Refresh
7780+
description: Refresh the authentication token.
7781+
operationId: refresh
7782+
parameters:
7783+
- name: next
7784+
in: query
7785+
required: false
7786+
schema:
7787+
anyOf:
7788+
- type: string
7789+
- type: 'null'
7790+
title: Next
7791+
responses:
7792+
'200':
7793+
description: Successful Response
7794+
content:
7795+
application/json:
7796+
schema: {}
7797+
'307':
7798+
content:
7799+
application/json:
7800+
schema:
7801+
$ref: '#/components/schemas/HTTPExceptionResponse'
7802+
description: Temporary Redirect
7803+
'422':
7804+
description: Validation Error
7805+
content:
7806+
application/json:
7807+
schema:
7808+
$ref: '#/components/schemas/HTTPValidationError'
77757809
components:
77767810
schemas:
77777811
AppBuilderMenuItemResponse:

airflow-core/src/airflow/api_fastapi/core_api/routes/public/auth.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from airflow.api_fastapi.common.router import AirflowRouter
2323
from airflow.api_fastapi.core_api.openapi.exceptions import create_openapi_http_exception_doc
2424
from airflow.api_fastapi.core_api.security import is_safe_url
25+
from airflow.configuration import conf
2526

2627
auth_router = AirflowRouter(tags=["Login"], prefix="/auth")
2728

@@ -55,3 +56,23 @@ def logout(request: Request, next: None | str = None) -> RedirectResponse:
5556
logout_url = request.app.state.auth_manager.get_url_login()
5657

5758
return RedirectResponse(logout_url)
59+
60+
61+
@auth_router.get(
62+
"/refresh",
63+
responses=create_openapi_http_exception_doc([status.HTTP_307_TEMPORARY_REDIRECT]),
64+
)
65+
def refresh(request: Request, next: None | str = None) -> RedirectResponse:
66+
"""Refresh the authentication token."""
67+
refresh_url = request.app.state.auth_manager.get_url_refresh()
68+
69+
if not refresh_url:
70+
return RedirectResponse(f"{conf.get('api', 'base_url', fallback='/')}auth/logout")
71+
72+
if next and not is_safe_url(next, request=request):
73+
raise HTTPException(status_code=400, detail="Invalid or unsafe next URL")
74+
75+
if next:
76+
refresh_url += f"?next={next}"
77+
78+
return RedirectResponse(refresh_url)

airflow-core/src/airflow/ui/openapi-gen/queries/common.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -678,6 +678,12 @@ export const useLoginServiceLogoutKey = "LoginServiceLogout";
678678
export const UseLoginServiceLogoutKeyFn = ({ next }: {
679679
next?: string;
680680
} = {}, queryKey?: Array<unknown>) => [useLoginServiceLogoutKey, ...(queryKey ?? [{ next }])];
681+
export type LoginServiceRefreshDefaultResponse = Awaited<ReturnType<typeof LoginService.refresh>>;
682+
export type LoginServiceRefreshQueryResult<TData = LoginServiceRefreshDefaultResponse, TError = unknown> = UseQueryResult<TData, TError>;
683+
export const useLoginServiceRefreshKey = "LoginServiceRefresh";
684+
export const UseLoginServiceRefreshKeyFn = ({ next }: {
685+
next?: string;
686+
} = {}, queryKey?: Array<unknown>) => [useLoginServiceRefreshKey, ...(queryKey ?? [{ next }])];
681687
export type AuthLinksServiceGetAuthMenusDefaultResponse = Awaited<ReturnType<typeof AuthLinksService.getAuthMenus>>;
682688
export type AuthLinksServiceGetAuthMenusQueryResult<TData = AuthLinksServiceGetAuthMenusDefaultResponse, TError = unknown> = UseQueryResult<TData, TError>;
683689
export const useAuthLinksServiceGetAuthMenusKey = "AuthLinksServiceGetAuthMenus";

airflow-core/src/airflow/ui/openapi-gen/queries/ensureQueryData.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1279,6 +1279,17 @@ export const ensureUseLoginServiceLogoutData = (queryClient: QueryClient, { next
12791279
next?: string;
12801280
} = {}) => queryClient.ensureQueryData({ queryKey: Common.UseLoginServiceLogoutKeyFn({ next }), queryFn: () => LoginService.logout({ next }) });
12811281
/**
1282+
* Refresh
1283+
* Refresh the authentication token.
1284+
* @param data The data for the request.
1285+
* @param data.next
1286+
* @returns unknown Successful Response
1287+
* @throws ApiError
1288+
*/
1289+
export const ensureUseLoginServiceRefreshData = (queryClient: QueryClient, { next }: {
1290+
next?: string;
1291+
} = {}) => queryClient.ensureQueryData({ queryKey: Common.UseLoginServiceRefreshKeyFn({ next }), queryFn: () => LoginService.refresh({ next }) });
1292+
/**
12821293
* Get Auth Menus
12831294
* @returns MenuItemCollectionResponse Successful Response
12841295
* @throws ApiError

airflow-core/src/airflow/ui/openapi-gen/queries/prefetch.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1279,6 +1279,17 @@ export const prefetchUseLoginServiceLogout = (queryClient: QueryClient, { next }
12791279
next?: string;
12801280
} = {}) => queryClient.prefetchQuery({ queryKey: Common.UseLoginServiceLogoutKeyFn({ next }), queryFn: () => LoginService.logout({ next }) });
12811281
/**
1282+
* Refresh
1283+
* Refresh the authentication token.
1284+
* @param data The data for the request.
1285+
* @param data.next
1286+
* @returns unknown Successful Response
1287+
* @throws ApiError
1288+
*/
1289+
export const prefetchUseLoginServiceRefresh = (queryClient: QueryClient, { next }: {
1290+
next?: string;
1291+
} = {}) => queryClient.prefetchQuery({ queryKey: Common.UseLoginServiceRefreshKeyFn({ next }), queryFn: () => LoginService.refresh({ next }) });
1292+
/**
12821293
* Get Auth Menus
12831294
* @returns MenuItemCollectionResponse Successful Response
12841295
* @throws ApiError

airflow-core/src/airflow/ui/openapi-gen/queries/queries.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1279,6 +1279,17 @@ export const useLoginServiceLogout = <TData = Common.LoginServiceLogoutDefaultRe
12791279
next?: string;
12801280
} = {}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useQuery<TData, TError>({ queryKey: Common.UseLoginServiceLogoutKeyFn({ next }, queryKey), queryFn: () => LoginService.logout({ next }) as TData, ...options });
12811281
/**
1282+
* Refresh
1283+
* Refresh the authentication token.
1284+
* @param data The data for the request.
1285+
* @param data.next
1286+
* @returns unknown Successful Response
1287+
* @throws ApiError
1288+
*/
1289+
export const useLoginServiceRefresh = <TData = Common.LoginServiceRefreshDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[]>({ next }: {
1290+
next?: string;
1291+
} = {}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useQuery<TData, TError>({ queryKey: Common.UseLoginServiceRefreshKeyFn({ next }, queryKey), queryFn: () => LoginService.refresh({ next }) as TData, ...options });
1292+
/**
12821293
* Get Auth Menus
12831294
* @returns MenuItemCollectionResponse Successful Response
12841295
* @throws ApiError

airflow-core/src/airflow/ui/openapi-gen/queries/suspense.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1279,6 +1279,17 @@ export const useLoginServiceLogoutSuspense = <TData = Common.LoginServiceLogoutD
12791279
next?: string;
12801280
} = {}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useSuspenseQuery<TData, TError>({ queryKey: Common.UseLoginServiceLogoutKeyFn({ next }, queryKey), queryFn: () => LoginService.logout({ next }) as TData, ...options });
12811281
/**
1282+
* Refresh
1283+
* Refresh the authentication token.
1284+
* @param data The data for the request.
1285+
* @param data.next
1286+
* @returns unknown Successful Response
1287+
* @throws ApiError
1288+
*/
1289+
export const useLoginServiceRefreshSuspense = <TData = Common.LoginServiceRefreshDefaultResponse, TError = unknown, TQueryKey extends Array<unknown> = unknown[]>({ next }: {
1290+
next?: string;
1291+
} = {}, queryKey?: TQueryKey, options?: Omit<UseQueryOptions<TData, TError>, "queryKey" | "queryFn">) => useSuspenseQuery<TData, TError>({ queryKey: Common.UseLoginServiceRefreshKeyFn({ next }, queryKey), queryFn: () => LoginService.refresh({ next }) as TData, ...options });
1292+
/**
12821293
* Get Auth Menus
12831294
* @returns MenuItemCollectionResponse Successful Response
12841295
* @throws ApiError

airflow-core/src/airflow/ui/openapi-gen/requests/services.gen.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import type { CancelablePromise } from './core/CancelablePromise';
44
import { OpenAPI } from './core/OpenAPI';
55
import { request as __request } from './core/request';
6-
import type { GetAssetsData, GetAssetsResponse, GetAssetAliasesData, GetAssetAliasesResponse, GetAssetAliasData, GetAssetAliasResponse, GetAssetEventsData, GetAssetEventsResponse, CreateAssetEventData, CreateAssetEventResponse, MaterializeAssetData, MaterializeAssetResponse, GetAssetQueuedEventsData, GetAssetQueuedEventsResponse, DeleteAssetQueuedEventsData, DeleteAssetQueuedEventsResponse, GetAssetData, GetAssetResponse, GetDagAssetQueuedEventsData, GetDagAssetQueuedEventsResponse, DeleteDagAssetQueuedEventsData, DeleteDagAssetQueuedEventsResponse, GetDagAssetQueuedEventData, GetDagAssetQueuedEventResponse, DeleteDagAssetQueuedEventData, DeleteDagAssetQueuedEventResponse, NextRunAssetsData, NextRunAssetsResponse, ListBackfillsData, ListBackfillsResponse, CreateBackfillData, CreateBackfillResponse, GetBackfillData, GetBackfillResponse, PauseBackfillData, PauseBackfillResponse, UnpauseBackfillData, UnpauseBackfillResponse, CancelBackfillData, CancelBackfillResponse, CreateBackfillDryRunData, CreateBackfillDryRunResponse, ListBackfillsUiData, ListBackfillsUiResponse, DeleteConnectionData, DeleteConnectionResponse, GetConnectionData, GetConnectionResponse, PatchConnectionData, PatchConnectionResponse, GetConnectionsData, GetConnectionsResponse, PostConnectionData, PostConnectionResponse, BulkConnectionsData, BulkConnectionsResponse, TestConnectionData, TestConnectionResponse, CreateDefaultConnectionsResponse, HookMetaDataResponse, GetDagRunData, GetDagRunResponse, DeleteDagRunData, DeleteDagRunResponse, PatchDagRunData, PatchDagRunResponse, GetUpstreamAssetEventsData, GetUpstreamAssetEventsResponse, ClearDagRunData, ClearDagRunResponse, GetDagRunsData, GetDagRunsResponse, TriggerDagRunData, TriggerDagRunResponse, WaitDagRunUntilFinishedData, WaitDagRunUntilFinishedResponse, GetListDagRunsBatchData, GetListDagRunsBatchResponse, GetDagSourceData, GetDagSourceResponse, GetDagStatsData, GetDagStatsResponse, GetDagReportsData, GetDagReportsResponse, GetConfigData, GetConfigResponse, GetConfigValueData, GetConfigValueResponse, GetConfigsResponse, ListDagWarningsData, ListDagWarningsResponse, GetDagsData, GetDagsResponse, PatchDagsData, PatchDagsResponse, GetDagData, GetDagResponse, PatchDagData, PatchDagResponse, DeleteDagData, DeleteDagResponse, GetDagDetailsData, GetDagDetailsResponse, FavoriteDagData, FavoriteDagResponse, UnfavoriteDagData, UnfavoriteDagResponse, GetDagTagsData, GetDagTagsResponse, GetDagsUiData, GetDagsUiResponse, GetLatestRunInfoData, GetLatestRunInfoResponse, GetEventLogData, GetEventLogResponse, GetEventLogsData, GetEventLogsResponse, GetExtraLinksData, GetExtraLinksResponse, GetTaskInstanceData, GetTaskInstanceResponse, PatchTaskInstanceData, PatchTaskInstanceResponse, DeleteTaskInstanceData, DeleteTaskInstanceResponse, GetMappedTaskInstancesData, GetMappedTaskInstancesResponse, GetTaskInstanceDependenciesByMapIndexData, GetTaskInstanceDependenciesByMapIndexResponse, GetTaskInstanceDependenciesData, GetTaskInstanceDependenciesResponse, GetTaskInstanceTriesData, GetTaskInstanceTriesResponse, GetMappedTaskInstanceTriesData, GetMappedTaskInstanceTriesResponse, GetMappedTaskInstanceData, GetMappedTaskInstanceResponse, PatchTaskInstanceByMapIndexData, PatchTaskInstanceByMapIndexResponse, GetTaskInstancesData, GetTaskInstancesResponse, BulkTaskInstancesData, BulkTaskInstancesResponse, GetTaskInstancesBatchData, GetTaskInstancesBatchResponse, GetTaskInstanceTryDetailsData, GetTaskInstanceTryDetailsResponse, GetMappedTaskInstanceTryDetailsData, GetMappedTaskInstanceTryDetailsResponse, PostClearTaskInstancesData, PostClearTaskInstancesResponse, PatchTaskInstanceDryRunByMapIndexData, PatchTaskInstanceDryRunByMapIndexResponse, PatchTaskInstanceDryRunData, PatchTaskInstanceDryRunResponse, GetLogData, GetLogResponse, GetExternalLogUrlData, GetExternalLogUrlResponse, GetImportErrorData, GetImportErrorResponse, GetImportErrorsData, GetImportErrorsResponse, GetJobsData, GetJobsResponse, GetPluginsData, GetPluginsResponse, ImportErrorsResponse, DeletePoolData, DeletePoolResponse, GetPoolData, GetPoolResponse, PatchPoolData, PatchPoolResponse, GetPoolsData, GetPoolsResponse, PostPoolData, PostPoolResponse, BulkPoolsData, BulkPoolsResponse, GetProvidersData, GetProvidersResponse, GetXcomEntryData, GetXcomEntryResponse, UpdateXcomEntryData, UpdateXcomEntryResponse, GetXcomEntriesData, GetXcomEntriesResponse, CreateXcomEntryData, CreateXcomEntryResponse, GetTasksData, GetTasksResponse, GetTaskData, GetTaskResponse, DeleteVariableData, DeleteVariableResponse, GetVariableData, GetVariableResponse, PatchVariableData, PatchVariableResponse, GetVariablesData, GetVariablesResponse, PostVariableData, PostVariableResponse, BulkVariablesData, BulkVariablesResponse, ReparseDagFileData, ReparseDagFileResponse, GetDagVersionData, GetDagVersionResponse, GetDagVersionsData, GetDagVersionsResponse, UpdateHitlDetailData, UpdateHitlDetailResponse, GetHitlDetailData, GetHitlDetailResponse, UpdateMappedTiHitlDetailData, UpdateMappedTiHitlDetailResponse, GetMappedTiHitlDetailData, GetMappedTiHitlDetailResponse, GetHitlDetailsData, GetHitlDetailsResponse, GetHealthResponse, GetVersionResponse, LoginData, LoginResponse, LogoutData, LogoutResponse, GetAuthMenusResponse, GetDependenciesData, GetDependenciesResponse, HistoricalMetricsData, HistoricalMetricsResponse, DagStatsResponse2, StructureDataData, StructureDataResponse2, GetDagStructureData, GetDagStructureResponse, GetGridRunsData, GetGridRunsResponse, GetGridTiSummariesData, GetGridTiSummariesResponse, GetLatestRunData, GetLatestRunResponse, GetCalendarData, GetCalendarResponse } from './types.gen';
6+
import type { GetAssetsData, GetAssetsResponse, GetAssetAliasesData, GetAssetAliasesResponse, GetAssetAliasData, GetAssetAliasResponse, GetAssetEventsData, GetAssetEventsResponse, CreateAssetEventData, CreateAssetEventResponse, MaterializeAssetData, MaterializeAssetResponse, GetAssetQueuedEventsData, GetAssetQueuedEventsResponse, DeleteAssetQueuedEventsData, DeleteAssetQueuedEventsResponse, GetAssetData, GetAssetResponse, GetDagAssetQueuedEventsData, GetDagAssetQueuedEventsResponse, DeleteDagAssetQueuedEventsData, DeleteDagAssetQueuedEventsResponse, GetDagAssetQueuedEventData, GetDagAssetQueuedEventResponse, DeleteDagAssetQueuedEventData, DeleteDagAssetQueuedEventResponse, NextRunAssetsData, NextRunAssetsResponse, ListBackfillsData, ListBackfillsResponse, CreateBackfillData, CreateBackfillResponse, GetBackfillData, GetBackfillResponse, PauseBackfillData, PauseBackfillResponse, UnpauseBackfillData, UnpauseBackfillResponse, CancelBackfillData, CancelBackfillResponse, CreateBackfillDryRunData, CreateBackfillDryRunResponse, ListBackfillsUiData, ListBackfillsUiResponse, DeleteConnectionData, DeleteConnectionResponse, GetConnectionData, GetConnectionResponse, PatchConnectionData, PatchConnectionResponse, GetConnectionsData, GetConnectionsResponse, PostConnectionData, PostConnectionResponse, BulkConnectionsData, BulkConnectionsResponse, TestConnectionData, TestConnectionResponse, CreateDefaultConnectionsResponse, HookMetaDataResponse, GetDagRunData, GetDagRunResponse, DeleteDagRunData, DeleteDagRunResponse, PatchDagRunData, PatchDagRunResponse, GetUpstreamAssetEventsData, GetUpstreamAssetEventsResponse, ClearDagRunData, ClearDagRunResponse, GetDagRunsData, GetDagRunsResponse, TriggerDagRunData, TriggerDagRunResponse, WaitDagRunUntilFinishedData, WaitDagRunUntilFinishedResponse, GetListDagRunsBatchData, GetListDagRunsBatchResponse, GetDagSourceData, GetDagSourceResponse, GetDagStatsData, GetDagStatsResponse, GetDagReportsData, GetDagReportsResponse, GetConfigData, GetConfigResponse, GetConfigValueData, GetConfigValueResponse, GetConfigsResponse, ListDagWarningsData, ListDagWarningsResponse, GetDagsData, GetDagsResponse, PatchDagsData, PatchDagsResponse, GetDagData, GetDagResponse, PatchDagData, PatchDagResponse, DeleteDagData, DeleteDagResponse, GetDagDetailsData, GetDagDetailsResponse, FavoriteDagData, FavoriteDagResponse, UnfavoriteDagData, UnfavoriteDagResponse, GetDagTagsData, GetDagTagsResponse, GetDagsUiData, GetDagsUiResponse, GetLatestRunInfoData, GetLatestRunInfoResponse, GetEventLogData, GetEventLogResponse, GetEventLogsData, GetEventLogsResponse, GetExtraLinksData, GetExtraLinksResponse, GetTaskInstanceData, GetTaskInstanceResponse, PatchTaskInstanceData, PatchTaskInstanceResponse, DeleteTaskInstanceData, DeleteTaskInstanceResponse, GetMappedTaskInstancesData, GetMappedTaskInstancesResponse, GetTaskInstanceDependenciesByMapIndexData, GetTaskInstanceDependenciesByMapIndexResponse, GetTaskInstanceDependenciesData, GetTaskInstanceDependenciesResponse, GetTaskInstanceTriesData, GetTaskInstanceTriesResponse, GetMappedTaskInstanceTriesData, GetMappedTaskInstanceTriesResponse, GetMappedTaskInstanceData, GetMappedTaskInstanceResponse, PatchTaskInstanceByMapIndexData, PatchTaskInstanceByMapIndexResponse, GetTaskInstancesData, GetTaskInstancesResponse, BulkTaskInstancesData, BulkTaskInstancesResponse, GetTaskInstancesBatchData, GetTaskInstancesBatchResponse, GetTaskInstanceTryDetailsData, GetTaskInstanceTryDetailsResponse, GetMappedTaskInstanceTryDetailsData, GetMappedTaskInstanceTryDetailsResponse, PostClearTaskInstancesData, PostClearTaskInstancesResponse, PatchTaskInstanceDryRunByMapIndexData, PatchTaskInstanceDryRunByMapIndexResponse, PatchTaskInstanceDryRunData, PatchTaskInstanceDryRunResponse, GetLogData, GetLogResponse, GetExternalLogUrlData, GetExternalLogUrlResponse, GetImportErrorData, GetImportErrorResponse, GetImportErrorsData, GetImportErrorsResponse, GetJobsData, GetJobsResponse, GetPluginsData, GetPluginsResponse, ImportErrorsResponse, DeletePoolData, DeletePoolResponse, GetPoolData, GetPoolResponse, PatchPoolData, PatchPoolResponse, GetPoolsData, GetPoolsResponse, PostPoolData, PostPoolResponse, BulkPoolsData, BulkPoolsResponse, GetProvidersData, GetProvidersResponse, GetXcomEntryData, GetXcomEntryResponse, UpdateXcomEntryData, UpdateXcomEntryResponse, GetXcomEntriesData, GetXcomEntriesResponse, CreateXcomEntryData, CreateXcomEntryResponse, GetTasksData, GetTasksResponse, GetTaskData, GetTaskResponse, DeleteVariableData, DeleteVariableResponse, GetVariableData, GetVariableResponse, PatchVariableData, PatchVariableResponse, GetVariablesData, GetVariablesResponse, PostVariableData, PostVariableResponse, BulkVariablesData, BulkVariablesResponse, ReparseDagFileData, ReparseDagFileResponse, GetDagVersionData, GetDagVersionResponse, GetDagVersionsData, GetDagVersionsResponse, UpdateHitlDetailData, UpdateHitlDetailResponse, GetHitlDetailData, GetHitlDetailResponse, UpdateMappedTiHitlDetailData, UpdateMappedTiHitlDetailResponse, GetMappedTiHitlDetailData, GetMappedTiHitlDetailResponse, GetHitlDetailsData, GetHitlDetailsResponse, GetHealthResponse, GetVersionResponse, LoginData, LoginResponse, LogoutData, LogoutResponse, RefreshData, RefreshResponse, GetAuthMenusResponse, GetDependenciesData, GetDependenciesResponse, HistoricalMetricsData, HistoricalMetricsResponse, DagStatsResponse2, StructureDataData, StructureDataResponse2, GetDagStructureData, GetDagStructureResponse, GetGridRunsData, GetGridRunsResponse, GetGridTiSummariesData, GetGridTiSummariesResponse, GetLatestRunData, GetLatestRunResponse, GetCalendarData, GetCalendarResponse } from './types.gen';
77

88
export class AssetService {
99
/**
@@ -3626,6 +3626,28 @@ export class LoginService {
36263626
});
36273627
}
36283628

3629+
/**
3630+
* Refresh
3631+
* Refresh the authentication token.
3632+
* @param data The data for the request.
3633+
* @param data.next
3634+
* @returns unknown Successful Response
3635+
* @throws ApiError
3636+
*/
3637+
public static refresh(data: RefreshData = {}): CancelablePromise<RefreshResponse> {
3638+
return __request(OpenAPI, {
3639+
method: 'GET',
3640+
url: '/api/v2/auth/refresh',
3641+
query: {
3642+
next: data.next
3643+
},
3644+
errors: {
3645+
307: 'Temporary Redirect',
3646+
422: 'Validation Error'
3647+
}
3648+
});
3649+
}
3650+
36293651
}
36303652

36313653
export class AuthLinksService {

0 commit comments

Comments
 (0)