Skip to content

Commit 9e04658

Browse files
committed
Expose getConsoleRequestHeaders function via Console plugin API
1 parent 0a2f026 commit 9e04658

File tree

4 files changed

+55
-12
lines changed

4 files changed

+55
-12
lines changed

frontend/packages/console-dynamic-plugin-sdk/docs/api.md

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
| API kind | Exposed APIs |
44
| -------- | ------------ |
5-
| Variable (82) | [ActionServiceProvider](#actionserviceprovider), [BlueInfoCircleIcon](#blueinfocircleicon), [CamelCaseWrap](#camelcasewrap), [checkAccess](#checkaccess), [CodeEditor](#codeeditor), [consoleFetch](#consolefetch), [consoleFetchJSON](#consolefetchjson), [consoleFetchText](#consolefetchtext), [DocumentTitle](#documenttitle), [ErrorBoundaryFallbackPage](#errorboundaryfallbackpage), [ErrorStatus](#errorstatus), [GenericStatus](#genericstatus), [getAPIVersionForModel](#getapiversionformodel), [getGroupVersionKindForModel](#getgroupversionkindformodel), [getGroupVersionKindForResource](#getgroupversionkindforresource), [GreenCheckCircleIcon](#greencheckcircleicon), [HorizontalNav](#horizontalnav), [InfoStatus](#infostatus), [InventoryItem](#inventoryitem), [InventoryItemBody](#inventoryitembody), [InventoryItemLoading](#inventoryitemloading), [InventoryItemStatus](#inventoryitemstatus), [InventoryItemTitle](#inventoryitemtitle), [isAllNamespacesKey](#isallnamespaceskey), [k8sCreate](#k8screate), [k8sDelete](#k8sdelete), [k8sGet](#k8sget), [k8sList](#k8slist), [k8sListItems](#k8slistitems), [k8sPatch](#k8spatch), [k8sUpdate](#k8supdate), [ListPageBody](#listpagebody), [ListPageCreate](#listpagecreate), [ListPageCreateButton](#listpagecreatebutton), [ListPageCreateDropdown](#listpagecreatedropdown), [ListPageCreateLink](#listpagecreatelink), [ListPageHeader](#listpageheader), [NamespaceBar](#namespacebar), [Overview](#overview), [OverviewGrid](#overviewgrid), [PopoverStatus](#popoverstatus), [ProgressStatus](#progressstatus), [QueryBrowser](#querybrowser), [RedExclamationCircleIcon](#redexclamationcircleicon), [ResourceEventStream](#resourceeventstream), [ResourceIcon](#resourceicon), [ResourceLink](#resourcelink), [ResourceStatus](#resourcestatus), [ResourceYAMLEditor](#resourceyamleditor), [StatusComponent](#statuscomponent), [StatusIconAndText](#statusiconandtext), [StatusPopupItem](#statuspopupitem), [StatusPopupSection](#statuspopupsection), [SuccessStatus](#successstatus), [TableData](#tabledata), [Timestamp](#timestamp), [useAccessReview](#useaccessreview), [useActiveColumns](#useactivecolumns), [useActiveNamespace](#useactivenamespace), [useActivePerspective](#useactiveperspective), [useAnnotationsModal](#useannotationsmodal), [useDeleteModal](#usedeletemodal), [useFlag](#useflag), [useK8sModel](#usek8smodel), [useK8sModels](#usek8smodels), [useK8sWatchResource](#usek8swatchresource), [useK8sWatchResources](#usek8swatchresources), [useLabelsModal](#uselabelsmodal), [useOverlay](#useoverlay), [usePrometheusPoll](#useprometheuspoll), [useQuickStartContext](#usequickstartcontext), [useResolvedExtensions](#useresolvedextensions), [useUserSettings](#useusersettings), [YellowExclamationTriangleIcon](#yellowexclamationtriangleicon), [ListPageFilter](#listpagefilter), [PerspectiveContext](#perspectivecontext), [useAccessReviewAllowed](#useaccessreviewallowed), [useListPageFilter](#uselistpagefilter), [useModal](#usemodal), [useSafetyFirst](#usesafetyfirst), [VirtualizedTable](#virtualizedtable), [YAMLEditor](#yamleditor) |
5+
| Variable (83) | [ActionServiceProvider](#actionserviceprovider), [BlueInfoCircleIcon](#blueinfocircleicon), [CamelCaseWrap](#camelcasewrap), [checkAccess](#checkaccess), [CodeEditor](#codeeditor), [consoleFetch](#consolefetch), [consoleFetchJSON](#consolefetchjson), [consoleFetchText](#consolefetchtext), [DocumentTitle](#documenttitle), [ErrorBoundaryFallbackPage](#errorboundaryfallbackpage), [ErrorStatus](#errorstatus), [GenericStatus](#genericstatus), [getAPIVersionForModel](#getapiversionformodel), [getConsoleRequestHeaders](#getconsolerequestheaders), [getGroupVersionKindForModel](#getgroupversionkindformodel), [getGroupVersionKindForResource](#getgroupversionkindforresource), [GreenCheckCircleIcon](#greencheckcircleicon), [HorizontalNav](#horizontalnav), [InfoStatus](#infostatus), [InventoryItem](#inventoryitem), [InventoryItemBody](#inventoryitembody), [InventoryItemLoading](#inventoryitemloading), [InventoryItemStatus](#inventoryitemstatus), [InventoryItemTitle](#inventoryitemtitle), [isAllNamespacesKey](#isallnamespaceskey), [k8sCreate](#k8screate), [k8sDelete](#k8sdelete), [k8sGet](#k8sget), [k8sList](#k8slist), [k8sListItems](#k8slistitems), [k8sPatch](#k8spatch), [k8sUpdate](#k8supdate), [ListPageBody](#listpagebody), [ListPageCreate](#listpagecreate), [ListPageCreateButton](#listpagecreatebutton), [ListPageCreateDropdown](#listpagecreatedropdown), [ListPageCreateLink](#listpagecreatelink), [ListPageHeader](#listpageheader), [NamespaceBar](#namespacebar), [Overview](#overview), [OverviewGrid](#overviewgrid), [PopoverStatus](#popoverstatus), [ProgressStatus](#progressstatus), [QueryBrowser](#querybrowser), [RedExclamationCircleIcon](#redexclamationcircleicon), [ResourceEventStream](#resourceeventstream), [ResourceIcon](#resourceicon), [ResourceLink](#resourcelink), [ResourceStatus](#resourcestatus), [ResourceYAMLEditor](#resourceyamleditor), [StatusComponent](#statuscomponent), [StatusIconAndText](#statusiconandtext), [StatusPopupItem](#statuspopupitem), [StatusPopupSection](#statuspopupsection), [SuccessStatus](#successstatus), [TableData](#tabledata), [Timestamp](#timestamp), [useAccessReview](#useaccessreview), [useActiveColumns](#useactivecolumns), [useActiveNamespace](#useactivenamespace), [useActivePerspective](#useactiveperspective), [useAnnotationsModal](#useannotationsmodal), [useDeleteModal](#usedeletemodal), [useFlag](#useflag), [useK8sModel](#usek8smodel), [useK8sModels](#usek8smodels), [useK8sWatchResource](#usek8swatchresource), [useK8sWatchResources](#usek8swatchresources), [useLabelsModal](#uselabelsmodal), [useOverlay](#useoverlay), [usePrometheusPoll](#useprometheuspoll), [useQuickStartContext](#usequickstartcontext), [useResolvedExtensions](#useresolvedextensions), [useUserSettings](#useusersettings), [YellowExclamationTriangleIcon](#yellowexclamationtriangleicon), [ListPageFilter](#listpagefilter), [PerspectiveContext](#perspectivecontext), [useAccessReviewAllowed](#useaccessreviewallowed), [useListPageFilter](#uselistpagefilter), [useModal](#usemodal), [useSafetyFirst](#usesafetyfirst), [VirtualizedTable](#virtualizedtable), [YAMLEditor](#yamleditor) |
66
| TypeAlias (28) | [Alert](#alert), [Alerts](#alerts), [AlwaysOnExtension](#alwaysonextension), [ColoredIconProps](#colorediconprops), [DiscoveryResources](#discoveryresources), [ExtensionHook](#extensionhook), [ExtensionHookResult](#extensionhookresult), [ExtensionK8sGroupKindModel](#extensionk8sgroupkindmodel), [ExtensionK8sGroupModel](#extensionk8sgroupmodel), [ExtensionK8sKindVersionModel](#extensionk8skindversionmodel), [ExtensionK8sModel](#extensionk8smodel), [K8sModel](#k8smodel), [K8sVerb](#k8sverb), [MatchExpression](#matchexpression), [MatchLabels](#matchlabels), [ModalComponent](#modalcomponent), [OverlayComponent](#overlaycomponent), [PerspectiveContextType](#perspectivecontexttype), [PrometheusAlert](#prometheusalert), [PrometheusLabels](#prometheuslabels), [PrometheusRule](#prometheusrule), [PrometheusRulesResponse](#prometheusrulesresponse), [PrometheusValue](#prometheusvalue), [ResolvedExtension](#resolvedextension), [Rule](#rule), [Selector](#selector), [Silence](#silence), [K8sKind](#k8skind) |
77
| Interface (1) | [ModelDefinition](#modeldefinition) |
88
| Enum (6) | [AlertSeverity](#alertseverity), [AlertStates](#alertstates), [Operator](#operator), [PrometheusEndpoint](#prometheusendpoint), [RuleStates](#rulestates), [SilenceStates](#silencestates) |
@@ -667,6 +667,32 @@ The apiVersion for the model i.e `group/version`.
667667

668668
---
669669

670+
## `getConsoleRequestHeaders`
671+
672+
### Summary
673+
674+
Creates an HTTP headers object for use with API requests, impersonating the currently<br/>logged in user/group.
675+
676+
677+
### Example
678+
679+
```tsx
680+
const headers = getConsoleRequestHeaders();
681+
const options: RequestInit = { method: 'GET', headers };
682+
const response = await consoleFetch(url, options);
683+
```
684+
685+
686+
687+
688+
689+
690+
### Source
691+
692+
[`frontend/packages/console-dynamic-plugin-sdk/src/api/dynamic-core-api.ts`](https://github.com/openshift/console/tree/main/frontend/packages/console-dynamic-plugin-sdk/src/api/dynamic-core-api.ts)
693+
694+
---
695+
670696
## `getGroupVersionKindForModel`
671697

672698
### Summary

frontend/packages/console-dynamic-plugin-sdk/src/api/dynamic-core-api.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
CodeEditorRef,
77
DocumentTitleProps,
88
ErrorBoundaryFallbackProps,
9+
GetConsoleRequestHeaders,
910
HorizontalNavProps,
1011
InventoryItemBodyProps,
1112
InventoryItemStatusProps,
@@ -398,6 +399,20 @@ export {
398399

399400
export { consoleFetch, consoleFetchJSON, consoleFetchText } from '../utils/fetch';
400401

402+
/**
403+
* Creates an HTTP headers object for use with API requests, including the CSRF token.
404+
* If the user is currently impersonating another user/group, the appropriate impersonation
405+
* headers will be included as well.
406+
* @example
407+
* ```tsx
408+
* const headers = getConsoleRequestHeaders();
409+
* const options: RequestInit = { method: 'GET', headers };
410+
* const response = await consoleFetch(url, options);
411+
* ```
412+
*/
413+
export const getConsoleRequestHeaders: GetConsoleRequestHeaders = require('@console/dynamic-plugin-sdk/src/utils/fetch')
414+
.getConsoleRequestHeaders;
415+
401416
// Expose K8s CRUD utilities as below
402417
export {
403418
k8sGetResource as k8sGet,

frontend/packages/console-dynamic-plugin-sdk/src/extensions/console-types.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,14 @@ export type ConsoleFetchJSON<T = any> = {
276276

277277
export type ConsoleFetchText<T = any> = (...args: Parameters<ConsoleFetch>) => Promise<T>;
278278

279+
export type ConsoleRequestHeaders = {
280+
'Impersonate-Group'?: string;
281+
'Impersonate-User'?: string;
282+
'X-CSRFToken'?: string;
283+
};
284+
285+
export type GetConsoleRequestHeaders = () => ConsoleRequestHeaders;
286+
279287
/* Horizontal Nav Types */
280288
export type NavPage = {
281289
href?: string;

frontend/packages/console-dynamic-plugin-sdk/src/utils/fetch/console-fetch-utils.ts

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1+
import {
2+
ConsoleRequestHeaders,
3+
GetConsoleRequestHeaders,
4+
} from '@console/dynamic-plugin-sdk/src/extensions/console-types';
15
import { getImpersonate } from '../../app/core/reducers';
26
import storeHandler from '../../app/storeHandler';
37

4-
type ConsoleRequestHeaders = {
5-
'Impersonate-Group'?: string;
6-
'Impersonate-User'?: string;
7-
'X-CSRFToken'?: string;
8-
};
9-
108
export const getCSRFToken = () => {
119
const cookiePrefix = 'csrf-token=';
1210
return (
@@ -21,11 +19,7 @@ export const getCSRFToken = () => {
2119
);
2220
};
2321

24-
/**
25-
* A function that creates impersonation headers for API requests using current redux state.
26-
* @returns an object containing the appropriate impersonation requst headers, based on redux state
27-
*/
28-
export const getConsoleRequestHeaders = (): ConsoleRequestHeaders => {
22+
export const getConsoleRequestHeaders: GetConsoleRequestHeaders = () => {
2923
const store = storeHandler.getStore();
3024
if (!store) return undefined;
3125
const state = store.getState();

0 commit comments

Comments
 (0)