{"version":3,"file":"ApiKeysPage.12b0cd511f7b1e9c50dc.js","mappings":"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","sources":["webpack://grafana/./public/app/features/api-keys/ApiKeysActionBar.tsx","webpack://grafana/./public/app/features/api-keys/ApiKeysTable.tsx","webpack://grafana/./public/app/features/api-keys/MigrateToServiceAccountsCard.tsx","webpack://grafana/./public/app/features/api-keys/state/actions.ts","webpack://grafana/./public/app/features/api-keys/state/selectors.ts","webpack://grafana/./public/app/features/api-keys/ApiKeysPage.tsx"],"sourcesContent":["import React from 'react';\n\nimport { FilterInput, InlineField } from '@grafana/ui';\n\ninterface Props {\n searchQuery: string;\n disabled: boolean;\n onSearchChange: (value: string) => void;\n}\n\nexport const ApiKeysActionBar = ({ searchQuery, disabled, onSearchChange }: Props) => {\n return (\n
\n \n \n \n
\n );\n};\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { dateTimeFormat, GrafanaTheme2, TimeZone } from '@grafana/data';\nimport { Button, DeleteButton, HorizontalGroup, Icon, Tooltip, useTheme2 } from '@grafana/ui';\nimport { contextSrv } from 'app/core/core';\nimport { AccessControlAction } from 'app/types';\n\nimport { ApiKey } from '../../types';\n\ninterface Props {\n apiKeys: ApiKey[];\n timeZone: TimeZone;\n onDelete: (apiKey: ApiKey) => void;\n onMigrate: (apiKey: ApiKey) => void;\n}\n\nexport const ApiKeysTable = ({ apiKeys, timeZone, onDelete, onMigrate }: Props) => {\n const theme = useTheme2();\n const styles = getStyles(theme);\n\n return (\n \n \n \n \n \n \n \n \n \n {apiKeys.length > 0 ? (\n \n {apiKeys.map((key) => {\n const isExpired = Boolean(key.expiration && Date.now() > new Date(key.expiration).getTime());\n return (\n \n \n \n \n \n \n \n );\n })}\n \n ) : null}\n
NameRoleExpiresLast used at\n
{key.name}{key.role}\n {formatDate(key.expiration, timeZone)}\n {isExpired && (\n \n \n \n \n \n )}\n {formatLastUsedAtDate(timeZone, key.lastUsedAt)}\n \n \n onDelete(key)}\n disabled={!contextSrv.hasPermissionInMetadata(AccessControlAction.ActionAPIKeysDelete, key)}\n />\n \n
\n );\n};\n\nfunction formatLastUsedAtDate(timeZone: TimeZone, lastUsedAt?: string): string {\n if (!lastUsedAt) {\n return 'Never';\n }\n return dateTimeFormat(lastUsedAt, { timeZone });\n}\n\nfunction formatDate(expiration: string | undefined, timeZone: TimeZone): string {\n if (!expiration) {\n return 'No expiration date';\n }\n return dateTimeFormat(expiration, { timeZone });\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n tableRow: (isExpired: boolean) => css`\n color: ${isExpired ? theme.colors.text.secondary : theme.colors.text.primary};\n `,\n tooltipContainer: css`\n margin-left: ${theme.spacing(1)};\n `,\n});\n","import { css } from '@emotion/css';\nimport React, { useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Alert, Button, ConfirmModal, useStyles2 } from '@grafana/ui';\n\ninterface Props {\n onMigrate: () => void;\n apikeysCount: number;\n disabled?: boolean;\n}\n\nexport const MigrateToServiceAccountsCard = ({ onMigrate, apikeysCount, disabled }: Props): JSX.Element => {\n const [isModalOpen, setIsModalOpen] = useState(false);\n const styles = useStyles2(getStyles);\n\n const docsLink = (\n \n Find out more about the migration here.\n \n );\n const migrationBoxDesc = (\n \n Migrating all API keys will hide the API keys tab.\n

\n

\n The API keys API will remain available for you to create new API keys, but we strongly encourage you to use\n Service accounts instead.\n
\n );\n\n return (\n <>\n {apikeysCount > 0 && (\n \n
\n We will soon deprecate API keys. Each API key will be migrated into a service account with a token and will\n continue to work as they were. We encourage you to migrate your API keys to service accounts now. {docsLink}\n
\n
\n \n setIsModalOpen(false)}\n confirmVariant=\"primary\"\n confirmButtonVariant=\"primary\"\n />\n
\n
\n )}\n {apikeysCount === 0 && (\n <>\n \n
\n No API keys were found. If you reload the browser, this tab will be not available. If any API keys are\n created, this tab will appear again.\n
\n
\n \n )}\n \n );\n};\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n text: css`\n margin-bottom: ${theme.spacing(2)};\n `,\n actionRow: css`\n display: flex;\n align-items: center;\n `,\n actionButton: css`\n margin-right: ${theme.spacing(2)};\n `,\n});\n","import { getBackendSrv } from 'app/core/services/backend_srv';\nimport { ThunkResult } from 'app/types';\n\nimport { apiKeysLoaded, includeExpiredToggled, isFetching, setMigrationResult } from './reducers';\n\nexport function loadApiKeys(): ThunkResult {\n return async (dispatch) => {\n dispatch(isFetching());\n const [keys, keysIncludingExpired] = await Promise.all([\n getBackendSrv().get('/api/auth/keys?includeExpired=false&accesscontrol=true'),\n getBackendSrv().get('/api/auth/keys?includeExpired=true&accesscontrol=true'),\n ]);\n dispatch(apiKeysLoaded({ keys, keysIncludingExpired }));\n };\n}\n\nexport function deleteApiKey(id: number): ThunkResult {\n return async (dispatch) => {\n getBackendSrv()\n .delete(`/api/auth/keys/${id}`)\n .then(() => dispatch(loadApiKeys()));\n };\n}\n\nexport function migrateApiKey(id: number): ThunkResult {\n return async (dispatch) => {\n try {\n await getBackendSrv().post(`/api/serviceaccounts/migrate/${id}`);\n } finally {\n dispatch(loadApiKeys());\n }\n };\n}\n\nexport function migrateAll(): ThunkResult {\n return async (dispatch) => {\n try {\n const payload = await getBackendSrv().post('/api/serviceaccounts/migrate');\n dispatch(setMigrationResult(payload));\n } finally {\n dispatch(loadApiKeys());\n }\n };\n}\n\nexport function toggleIncludeExpired(): ThunkResult {\n return (dispatch) => {\n dispatch(includeExpiredToggled());\n };\n}\n","import { ApiKeysState } from 'app/types';\n\nexport const getApiKeysCount = (state: ApiKeysState) =>\n state.includeExpired ? state.keysIncludingExpired.length : state.keys.length;\n\nexport const getApiKeys = (state: ApiKeysState) => {\n const regex = RegExp(state.searchQuery, 'i');\n const keysToFilter = state.includeExpired ? state.keysIncludingExpired : state.keys;\n\n return keysToFilter.filter((key) => {\n return regex.test(key.name) || regex.test(key.role);\n });\n};\n\nexport const getIncludeExpired = (state: ApiKeysState) => state.includeExpired;\n\nexport const getIncludeExpiredDisabled = (state: ApiKeysState) =>\n state.keys.length === 0 && state.keysIncludingExpired.length > 0;\n","import React, { PureComponent } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\n// Utils\nimport { InlineField, InlineSwitch, VerticalGroup, Modal, Button } from '@grafana/ui';\nimport { Page } from 'app/core/components/Page/Page';\nimport { contextSrv } from 'app/core/core';\nimport { getTimeZone } from 'app/features/profile/state/selectors';\nimport { AccessControlAction, ApiKey, ApikeyMigrationResult, StoreState } from 'app/types';\n\nimport { ApiKeysActionBar } from './ApiKeysActionBar';\nimport { ApiKeysTable } from './ApiKeysTable';\nimport { MigrateToServiceAccountsCard } from './MigrateToServiceAccountsCard';\nimport { deleteApiKey, migrateApiKey, migrateAll, loadApiKeys, toggleIncludeExpired } from './state/actions';\nimport { setSearchQuery } from './state/reducers';\nimport { getApiKeys, getApiKeysCount, getIncludeExpired, getIncludeExpiredDisabled } from './state/selectors';\n\nfunction mapStateToProps(state: StoreState) {\n const canCreate = contextSrv.hasPermission(AccessControlAction.ActionAPIKeysCreate);\n return {\n apiKeys: getApiKeys(state.apiKeys),\n searchQuery: state.apiKeys.searchQuery,\n apiKeysCount: getApiKeysCount(state.apiKeys),\n hasFetched: state.apiKeys.hasFetched,\n timeZone: getTimeZone(state.user),\n includeExpired: getIncludeExpired(state.apiKeys),\n includeExpiredDisabled: getIncludeExpiredDisabled(state.apiKeys),\n canCreate: canCreate,\n migrationResult: state.apiKeys.migrationResult,\n };\n}\n\nconst defaultPageProps = {\n navId: 'apikeys',\n};\n\nconst mapDispatchToProps = {\n loadApiKeys,\n deleteApiKey,\n migrateApiKey,\n migrateAll,\n setSearchQuery,\n toggleIncludeExpired,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ninterface OwnProps {}\n\nexport type Props = OwnProps & ConnectedProps;\n\ninterface State {\n showMigrationResult: boolean;\n}\n\nexport class ApiKeysPageUnconnected extends PureComponent {\n constructor(props: Props) {\n super(props);\n this.state = {\n showMigrationResult: false,\n };\n }\n\n componentDidMount() {\n this.fetchApiKeys();\n }\n\n async fetchApiKeys() {\n await this.props.loadApiKeys();\n }\n\n onDeleteApiKey = (key: ApiKey) => {\n this.props.deleteApiKey(key.id!);\n };\n\n onMigrateApiKey = (key: ApiKey) => {\n this.props.migrateApiKey(key.id!);\n };\n\n onSearchQueryChange = (value: string) => {\n this.props.setSearchQuery(value);\n };\n\n onIncludeExpiredChange = (event: React.SyntheticEvent) => {\n this.props.toggleIncludeExpired();\n };\n\n onMigrateApiKeys = async () => {\n try {\n await this.props.migrateAll();\n this.setState({\n showMigrationResult: true,\n });\n } catch (err) {\n console.error(err);\n }\n };\n\n dismissModal = async () => {\n this.setState({ showMigrationResult: false });\n };\n\n render() {\n const {\n hasFetched,\n apiKeysCount,\n apiKeys,\n searchQuery,\n timeZone,\n includeExpired,\n includeExpiredDisabled,\n canCreate,\n migrationResult,\n } = this.props;\n\n const showTable = apiKeysCount > 0;\n return (\n \n \n <>\n \n {showTable ? (\n \n ) : null}\n {showTable ? (\n \n \n \n \n \n \n ) : null}\n \n \n {migrationResult && (\n \n )}\n \n );\n }\n}\nexport type MigrationSummaryProps = {\n visible: boolean;\n data: ApikeyMigrationResult;\n onDismiss: () => void;\n};\n\nconst styles: { [key: string]: React.CSSProperties } = {\n migrationSummary: {\n padding: '20px',\n },\n infoText: {\n color: '#007bff',\n },\n summaryDetails: {\n marginTop: '20px',\n },\n summaryParagraph: {\n margin: '10px 0',\n },\n};\n\nexport const MigrationSummary: React.FC = ({ visible, data, onDismiss }) => {\n return (\n \n {data.failedApikeyIDs.length === 0 && (\n
\n

Migration Successful!

\n

\n Total: \n {data.total}\n

\n

\n Migrated: \n {data.migrated}\n

\n
\n )}\n {data.failedApikeyIDs.length !== 0 && (\n
\n

\n Migration Complete! Please note, while there might be a few API keys flagged as `failed migrations`, rest\n assured, all of your API keys are fully functional and operational. Please try again or contact support.\n

\n
\n

\n Total: \n {data.total}\n

\n

\n Migrated: \n {data.migrated}\n

\n

\n Failed: \n {data.failed}\n

\n

\n Failed Api Key IDs: \n {data.failedApikeyIDs.join(', ')}\n

\n

\n Failed Details: \n {data.failedDetails.join(', ')}\n

\n
\n )}\n \n \n \n
\n );\n};\n\nconst ApiKeysPage = connector(ApiKeysPageUnconnected);\nexport default ApiKeysPage;\n"],"names":["ApiKeysActionBar","searchQuery","disabled","onSearchChange","InlineField","FilterInput","ApiKeysTable","apiKeys","timeZone","onDelete","onMigrate","theme","styles","getStyles","key","isExpired","formatDate","Tooltip","Icon","formatLastUsedAtDate","Button","DeleteButton","lastUsedAt","expiration","MigrateToServiceAccountsCard","apikeysCount","isModalOpen","setIsModalOpen","docsLink","migrationBoxDesc","Alert","ConfirmModal","loadApiKeys","dispatch","keys","keysIncludingExpired","deleteApiKey","id","migrateApiKey","migrateAll","payload","toggleIncludeExpired","getApiKeysCount","state","getApiKeys","regex","getIncludeExpired","getIncludeExpiredDisabled","mapStateToProps","canCreate","defaultPageProps","mapDispatchToProps","connector","ApiKeysPageUnconnected","props","value","event","err","hasFetched","apiKeysCount","includeExpired","includeExpiredDisabled","migrationResult","showTable","Page","MigrationSummary","visible","data","onDismiss","Modal"],"sourceRoot":""}