2024-08-05 04:10:36 +00:00
|
|
|
import React, { useState } from 'react';
|
|
|
|
import PropTypes from 'prop-types';
|
2024-12-24 03:20:40 +00:00
|
|
|
import { Modal, ModalBody, ModalFooter, Button, Form, Alert } from 'reactstrap';
|
2024-08-05 04:10:36 +00:00
|
|
|
import toaster from '../../toast';
|
|
|
|
import PasswordInput from './password-input';
|
|
|
|
import { userAPI } from '../../../utils/user-api';
|
|
|
|
import { gettext } from '../../../utils/constants';
|
|
|
|
import { Utils, validatePassword } from '../../../utils/utils';
|
2024-12-24 03:20:40 +00:00
|
|
|
import SeahubModalHeader from '@/components/common/seahub-modal-header';
|
2024-08-05 04:10:36 +00:00
|
|
|
|
|
|
|
const propTypes = {
|
|
|
|
toggle: PropTypes.func,
|
|
|
|
};
|
|
|
|
|
|
|
|
const UserSetPassword = ({ toggle }) => {
|
|
|
|
const [password, setPassword] = useState('');
|
|
|
|
const [confirmedPassword, setConfirmedPassword] = useState('');
|
|
|
|
const [errorMessage, setErrorMessage] = useState('');
|
|
|
|
const [canSubmit, setCanSubmit] = useState(true);
|
|
|
|
|
|
|
|
const submitPassword = () => {
|
|
|
|
if (!password) {
|
|
|
|
setErrorMessage(gettext('Password cannot be blank'));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (!confirmedPassword) {
|
|
|
|
setErrorMessage(gettext('Please enter the password again'));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (password !== confirmedPassword) {
|
|
|
|
setErrorMessage(gettext('Passwords don\'t match'));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (!validatePassword(password)) {
|
2024-12-16 04:15:11 +00:00
|
|
|
setErrorMessage(gettext('Password strength should be strong or very strong'));
|
2024-08-05 04:10:36 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
setErrorMessage('');
|
|
|
|
setCanSubmit(false);
|
|
|
|
userAPI.resetPassword(null, password).then(() => {
|
2024-10-16 06:09:14 +00:00
|
|
|
toaster.success(gettext('Password set'));
|
2024-08-05 04:10:36 +00:00
|
|
|
location.reload();
|
|
|
|
toggle();
|
|
|
|
}).catch(error => {
|
|
|
|
const errMessage = Utils.getErrorMsg(error);
|
|
|
|
toaster.danger(errMessage);
|
|
|
|
setCanSubmit(true);
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
return (
|
|
|
|
<Modal centered={true} isOpen={true} toggle={toggle}>
|
2024-12-24 03:20:40 +00:00
|
|
|
<SeahubModalHeader toggle={toggle}>{gettext('Set password')}</SeahubModalHeader>
|
2024-08-05 04:10:36 +00:00
|
|
|
<ModalBody>
|
|
|
|
<Form>
|
|
|
|
<PasswordInput
|
|
|
|
value={password}
|
|
|
|
labelValue={gettext('Password')}
|
|
|
|
onChangeValue={setPassword}
|
|
|
|
/>
|
|
|
|
<PasswordInput
|
|
|
|
value={confirmedPassword}
|
|
|
|
labelValue={gettext('Confirm password')}
|
|
|
|
onChangeValue={setConfirmedPassword}
|
2024-09-06 09:39:13 +00:00
|
|
|
enableCheckStrength={false}
|
2024-08-05 04:10:36 +00:00
|
|
|
/>
|
|
|
|
</Form>
|
|
|
|
{errorMessage && (
|
|
|
|
<Alert color='danger'>{errorMessage}</Alert>
|
|
|
|
)}
|
|
|
|
</ModalBody>
|
|
|
|
<ModalFooter>
|
|
|
|
<Button color='secondary' onClick={toggle}>{gettext('Cancel')}</Button>
|
|
|
|
<Button color="primary" disabled={!canSubmit} onClick={submitPassword}>{gettext('Submit')}</Button>
|
|
|
|
</ModalFooter>
|
|
|
|
</Modal>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
UserSetPassword.propTypes = propTypes;
|
|
|
|
|
|
|
|
export default UserSetPassword;
|