mirror of
https://github.com/grafana/grafana.git
synced 2025-02-15 10:03:33 -06:00
* ServiceAccounts: refactor ServiceAccountRoleRow * Refactor ServiceAccountRoleRow * Refactor ServiceAccountProfile * Refactor components * Change service accounts icon * Refine service accounts page header * Improve service accounts filtering * Change delete button style * Tweak account id * Auto focus name field when create service account * Add disable/enable button * Enable/disable service accounts * Optimize updating service account (do not fetch all) * Remove status column (replace by enable/disable button) * Add banner with service accounts description * Add tokens from main page * Update tokens count when add token from main page * Fix action buttons column * Fix tokens count when change role * Refine table row classes * Fix buttons * Simplify working with state * Show message when service account updated * Able to filter disabled accounts * Mark disabled accounts in a table * Refine disabled account view * Move non-critical components to separate folder * Remove confusing focusing * Fix date picker position when creating new token * DatePicker: able to set minimum date that can be selected * Don't allow to select expiration dates prior today * Set tomorrow as a default token expiration date * Fix displaying expiration period * Rename Add token button * Refine page styles * Show modal when disabling SA from main page * Arrange role picker * Refine SA page styles * Generate default token name * More smooth navigation between SA pages * Stop loading indicator in case of error * Remove legacy styles usage * Tweaks after code review Co-authored-by: Alex Khomenko <Clarity-89@users.noreply.github.com> * Get rid of useDisapatch in favor of mapDispatchToProps * Tests for ServiceAccountsListPage * Tests for service account page * Show new role picker only with license * Get rid of deprecated css classes * Apply suggestion from code review Co-authored-by: Alex Khomenko <Clarity-89@users.noreply.github.com> * Fix service accounts icon * Tests for service account create page * Return service account info when update * Add behaviour tests for ServiceAccountsListPage * Fix disabled cursor on confirm button * More behavior tests for service account page * Temporary disable service account migration banner * Use safe where condition Co-authored-by: Jguer <joao.guerreiro@grafana.com> * Apply review suggestions Co-authored-by: Alex Khomenko <Clarity-89@users.noreply.github.com> * Remove autofocus from search Co-authored-by: Alex Khomenko <Clarity-89@users.noreply.github.com> Co-authored-by: Jguer <joao.guerreiro@grafana.com>
75 lines
2.3 KiB
TypeScript
75 lines
2.3 KiB
TypeScript
import { getBackendSrv, locationService } from '@grafana/runtime';
|
|
import { accessControlQueryParam } from 'app/core/utils/accessControl';
|
|
import { ServiceAccountDTO, ThunkResult } from 'app/types';
|
|
|
|
import { ServiceAccountToken } from '../components/CreateTokenModal';
|
|
|
|
import {
|
|
serviceAccountFetchBegin,
|
|
serviceAccountFetchEnd,
|
|
serviceAccountLoaded,
|
|
serviceAccountTokensLoaded,
|
|
} from './reducers';
|
|
|
|
const BASE_URL = `/api/serviceaccounts`;
|
|
|
|
export function loadServiceAccount(saID: number): ThunkResult<void> {
|
|
return async (dispatch) => {
|
|
dispatch(serviceAccountFetchBegin());
|
|
try {
|
|
const response = await getBackendSrv().get(`${BASE_URL}/${saID}`, accessControlQueryParam());
|
|
dispatch(serviceAccountLoaded(response));
|
|
} catch (error) {
|
|
console.error(error);
|
|
} finally {
|
|
dispatch(serviceAccountFetchEnd());
|
|
}
|
|
};
|
|
}
|
|
|
|
export function updateServiceAccount(serviceAccount: ServiceAccountDTO): ThunkResult<void> {
|
|
return async (dispatch) => {
|
|
await getBackendSrv().patch(`${BASE_URL}/${serviceAccount.id}?accesscontrol=true`, {
|
|
...serviceAccount,
|
|
});
|
|
dispatch(loadServiceAccount(serviceAccount.id));
|
|
};
|
|
}
|
|
|
|
export function deleteServiceAccount(serviceAccountId: number): ThunkResult<void> {
|
|
return async () => {
|
|
await getBackendSrv().delete(`${BASE_URL}/${serviceAccountId}`);
|
|
locationService.push('/org/serviceaccounts');
|
|
};
|
|
}
|
|
|
|
export function createServiceAccountToken(
|
|
saID: number,
|
|
token: ServiceAccountToken,
|
|
onTokenCreated: (key: string) => void
|
|
): ThunkResult<void> {
|
|
return async (dispatch) => {
|
|
const result = await getBackendSrv().post(`${BASE_URL}/${saID}/tokens`, token);
|
|
onTokenCreated(result.key);
|
|
dispatch(loadServiceAccountTokens(saID));
|
|
};
|
|
}
|
|
|
|
export function deleteServiceAccountToken(saID: number, id: number): ThunkResult<void> {
|
|
return async (dispatch) => {
|
|
await getBackendSrv().delete(`${BASE_URL}/${saID}/tokens/${id}`);
|
|
dispatch(loadServiceAccountTokens(saID));
|
|
};
|
|
}
|
|
|
|
export function loadServiceAccountTokens(saID: number): ThunkResult<void> {
|
|
return async (dispatch) => {
|
|
try {
|
|
const response = await getBackendSrv().get(`${BASE_URL}/${saID}/tokens`);
|
|
dispatch(serviceAccountTokensLoaded(response));
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
};
|
|
}
|