Added impersonation tokens for admins

Closes #32
This commit is contained in:
2022-09-06 15:33:54 +02:00
parent 24bf069f49
commit 05c207daae
4 changed files with 35 additions and 0 deletions

View File

@@ -54,5 +54,11 @@ export const disable_tfa = (
token
);
export const impersonate = (
user: number,
token: string
): Promise<Responses.Login | Responses.Error> =>
get_token(`/api/admin/get_token/${user}`, token);
export const is_admin = async (token: string): Promise<boolean> =>
!isErrorResponse(await get_token('/api/admin/is_admin', token));

View File

@@ -48,6 +48,16 @@ const setRole = loadingMsgWrapper(
}
);
const impersonate = loadingMsgWrapper(message, async (user: number) => {
const token = await check_token(jwt);
if (!token) return;
const res = await Admin.impersonate(user, token);
if (isErrorResponse(res)) return console.error(res.message);
jwt.setToken(res.jwt);
await router.push({ path: '/' });
});
const action = (
func: (
user: number,
@@ -122,6 +132,9 @@ const columns: DataTableColumn<Responses.GetUsersEntry>[] = [
render(user) {
return (
<NButtonGroup>
<NButton onClick={() => impersonate(user.id)}>
Impersonate
</NButton>
<NButton onClick={() => logoutUser(user.id)}>
Logout all
</NButton>