mirror of
https://github.com/Unleash/unleash.git
synced 2025-05-26 01:17:00 +02:00
feat: add way to purge all scim groups
This commit is contained in:
parent
d9ac57052e
commit
33e139bce3
@ -11,6 +11,7 @@ import { useScimSettingsApi } from 'hooks/api/actions/useScimSettingsApi/useScim
|
|||||||
import { useScimSettings } from 'hooks/api/getters/useScimSettings/useScimSettings';
|
import { useScimSettings } from 'hooks/api/getters/useScimSettings/useScimSettings';
|
||||||
import { ScimDeleteEntityDialog } from './ScimDeleteUsersDialog';
|
import { ScimDeleteEntityDialog } from './ScimDeleteUsersDialog';
|
||||||
import useAdminUsersApi from 'hooks/api/actions/useAdminUsersApi/useAdminUsersApi';
|
import useAdminUsersApi from 'hooks/api/actions/useAdminUsersApi/useAdminUsersApi';
|
||||||
|
import { useGroupApi } from 'hooks/api/actions/useGroupApi/useGroupApi';
|
||||||
|
|
||||||
const StyledContainer = styled('div')(({ theme }) => ({
|
const StyledContainer = styled('div')(({ theme }) => ({
|
||||||
padding: theme.spacing(3),
|
padding: theme.spacing(3),
|
||||||
@ -32,6 +33,7 @@ export const ScimSettings = () => {
|
|||||||
const [tokenDialog, setTokenDialog] = useState(false);
|
const [tokenDialog, setTokenDialog] = useState(false);
|
||||||
const { settings, refetch } = useScimSettings();
|
const { settings, refetch } = useScimSettings();
|
||||||
const { deleteScimUsers } = useAdminUsersApi();
|
const { deleteScimUsers } = useAdminUsersApi();
|
||||||
|
const { deleteScimGroups } = useGroupApi();
|
||||||
const [enabled, setEnabled] = useState(settings.enabled ?? true);
|
const [enabled, setEnabled] = useState(settings.enabled ?? true);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -46,7 +48,17 @@ export const ScimSettings = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const onDeleteScimGroups = async () => {
|
const onDeleteScimGroups = async () => {
|
||||||
setDeleteGroupsDialog(true);
|
try {
|
||||||
|
await deleteScimGroups();
|
||||||
|
setToastData({
|
||||||
|
text: 'Scim Groups have been deleted',
|
||||||
|
type: 'success',
|
||||||
|
});
|
||||||
|
setDeleteGroupsDialog(false);
|
||||||
|
refetch();
|
||||||
|
} catch (error: unknown) {
|
||||||
|
setToastApiError(formatUnknownError(error));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const onDeleteScimUsers = async () => {
|
const onDeleteScimUsers = async () => {
|
||||||
@ -203,7 +215,9 @@ export const ScimSettings = () => {
|
|||||||
variant='outlined'
|
variant='outlined'
|
||||||
color='error'
|
color='error'
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
onClick={onDeleteScimGroups}
|
onClick={() => {
|
||||||
|
setDeleteGroupsDialog(true);
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
Delete Groups
|
Delete Groups
|
||||||
</Button>
|
</Button>
|
||||||
@ -226,14 +240,14 @@ export const ScimSettings = () => {
|
|||||||
closeDialog={() => setDeleteUsersDialog(false)}
|
closeDialog={() => setDeleteUsersDialog(false)}
|
||||||
deleteEntities={onDeleteScimUsers}
|
deleteEntities={onDeleteScimUsers}
|
||||||
entityType='Users'
|
entityType='Users'
|
||||||
></ScimDeleteEntityDialog>
|
/>
|
||||||
|
|
||||||
<ScimDeleteEntityDialog
|
<ScimDeleteEntityDialog
|
||||||
open={deleteGroupsDialog}
|
open={deleteGroupsDialog}
|
||||||
closeDialog={() => setDeleteGroupsDialog(false)}
|
closeDialog={() => setDeleteGroupsDialog(false)}
|
||||||
deleteEntities={onDeleteScimGroups}
|
deleteEntities={onDeleteScimGroups}
|
||||||
entityType='Groups'
|
entityType='Groups'
|
||||||
></ScimDeleteEntityDialog>
|
/>
|
||||||
</StyledContainer>
|
</StyledContainer>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
@ -46,10 +46,20 @@ export const useGroupApi = () => {
|
|||||||
await makeRequest(req.caller, req.id);
|
await makeRequest(req.caller, req.id);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const deleteScimGroups = async () => {
|
||||||
|
const path = `api/admin/groups/scim-groups`;
|
||||||
|
const req = createRequest(path, {
|
||||||
|
method: 'DELETE',
|
||||||
|
});
|
||||||
|
|
||||||
|
await makeRequest(req.caller, req.id);
|
||||||
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
createGroup,
|
createGroup,
|
||||||
updateGroup,
|
updateGroup,
|
||||||
removeGroup,
|
removeGroup,
|
||||||
|
deleteScimGroups,
|
||||||
errors,
|
errors,
|
||||||
loading,
|
loading,
|
||||||
};
|
};
|
||||||
|
@ -354,4 +354,8 @@ export default class GroupStore implements IGroupStore {
|
|||||||
const { present } = result.rows[0];
|
const { present } = result.rows[0];
|
||||||
return present;
|
return present;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async deleteScimGroups(): Promise<void> {
|
||||||
|
await this.db(T.GROUPS).whereNotNull('scim_id').del();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ import {
|
|||||||
GROUP_CREATED,
|
GROUP_CREATED,
|
||||||
GroupUserAdded,
|
GroupUserAdded,
|
||||||
GroupUserRemoved,
|
GroupUserRemoved,
|
||||||
|
ScimGroupsDeleted,
|
||||||
type IBaseEvent,
|
type IBaseEvent,
|
||||||
} from '../types/events';
|
} from '../types/events';
|
||||||
import NameExistsError from '../error/name-exists-error';
|
import NameExistsError from '../error/name-exists-error';
|
||||||
@ -310,6 +311,16 @@ export class GroupService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async deleteScimGroups(auditUser: IAuditUser): Promise<void> {
|
||||||
|
await this.groupStore.deleteScimGroups();
|
||||||
|
await this.eventService.storeEvent(
|
||||||
|
new ScimGroupsDeleted({
|
||||||
|
data: null,
|
||||||
|
auditUser,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
private mapGroupWithUsers(
|
private mapGroupWithUsers(
|
||||||
group: IGroup,
|
group: IGroup,
|
||||||
allGroupUsers: IGroupUser[],
|
allGroupUsers: IGroupUser[],
|
||||||
|
@ -66,4 +66,6 @@ export interface IGroupStore extends Store<IGroup, number> {
|
|||||||
create(group: IStoreGroup): Promise<IGroup>;
|
create(group: IStoreGroup): Promise<IGroup>;
|
||||||
|
|
||||||
count(): Promise<number>;
|
count(): Promise<number>;
|
||||||
|
|
||||||
|
deleteScimGroups(): Promise<void>;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user