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