Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/resources/scripts/components/dashboard/forms/DisableTOTPDialog.tsx
7461 views
1
import React, { useContext, useEffect, useState } from 'react';
2
import asDialog from '@/hoc/asDialog';
3
import { Dialog, DialogWrapperContext } from '@/components/elements/dialog';
4
import { Button } from '@/components/elements/button/index';
5
import { Input } from '@/components/elements/inputs';
6
import Tooltip from '@/components/elements/tooltip/Tooltip';
7
import disableAccountTwoFactor from '@/api/account/disableAccountTwoFactor';
8
import { useFlashKey } from '@/plugins/useFlash';
9
import { useStoreActions } from '@/state/hooks';
10
import FlashMessageRender from '@/components/FlashMessageRender';
11
12
const DisableTOTPDialog = () => {
13
const [submitting, setSubmitting] = useState(false);
14
const [password, setPassword] = useState('');
15
const { clearAndAddHttpError } = useFlashKey('account:two-step');
16
const { close, setProps } = useContext(DialogWrapperContext);
17
const updateUserData = useStoreActions((actions) => actions.user.updateUserData);
18
19
useEffect(() => {
20
setProps((state) => ({ ...state, preventExternalClose: submitting }));
21
}, [submitting]);
22
23
const submit = (e: React.FormEvent<HTMLFormElement>) => {
24
e.preventDefault();
25
e.stopPropagation();
26
27
if (submitting) return;
28
29
setSubmitting(true);
30
clearAndAddHttpError();
31
disableAccountTwoFactor(password)
32
.then(() => {
33
updateUserData({ useTotp: false });
34
close();
35
})
36
.catch(clearAndAddHttpError)
37
.then(() => setSubmitting(false));
38
};
39
40
return (
41
<form id={'disable-totp-form'} className={'mt-6'} onSubmit={submit}>
42
<FlashMessageRender byKey={'account:two-step'} className={'-mt-2 mb-6'} />
43
<label className={'block pb-1'} htmlFor={'totp-password'}>
44
Password
45
</label>
46
<Input.Text
47
id={'totp-password'}
48
type={'password'}
49
variant={Input.Text.Variants.Loose}
50
value={password}
51
onChange={(e) => setPassword(e.currentTarget.value)}
52
/>
53
<Dialog.Footer>
54
<Button.Text onClick={close}>Cancel</Button.Text>
55
<Tooltip
56
delay={100}
57
disabled={password.length > 0}
58
content={'You must enter your account password to continue.'}
59
>
60
<Button.Danger type={'submit'} form={'disable-totp-form'} disabled={submitting || !password.length}>
61
Disable
62
</Button.Danger>
63
</Tooltip>
64
</Dialog.Footer>
65
</form>
66
);
67
};
68
69
export default asDialog({
70
title: 'Disable Two-Step Verification',
71
description: 'Disabling two-step verification will make your account less secure.',
72
})(DisableTOTPDialog);
73
74