Fix missing account

This commit is contained in:
Romaric Mourgues
2023-04-20 14:23:04 +02:00
parent 4d2383ba97
commit 4b08f656da
4 changed files with 1 additions and 352 deletions
@@ -21,15 +21,7 @@ import LocalStorage from '@features/global/framework/local-storage-service';
import Globals from '@features/global/services/globals-tdrive-app-service';
type AccountType = 'remote' | 'internal';
export type LoginState =
| ''
| 'app'
| 'error'
| 'signin'
| 'verify_mail'
| 'forgot_password'
| 'logged_out'
| 'logout';
export type LoginState = '' | 'app' | 'error' | 'signin' | 'logged_out' | 'logout';
type InitState = '' | 'initializing' | 'initialized';
@TdriveService('AuthService')
@@ -1,332 +0,0 @@
import React, { Component } from 'react';
import Languages from '@features/global/services/languages-service';
import LoginService from '@features/auth/login-service';
import AccountService from '@deprecated/login/account.js';
import Emojione from 'components/emojione/emojione';
import StepCounter from 'components/step-counter/step-counter.jsx';
import ButtonWithTimeout from 'components/buttons/button-with-timeout.jsx';
import Input from 'components/inputs/input.jsx';
import { Typography } from 'antd';
export default class ForgotPassword extends Component {
constructor() {
super();
this.state = {
login: LoginService,
i18n: Languages,
email: '',
password1: '',
password2: '',
code: '',
page: 1,
invalidForm: false,
patternRegMail: new RegExp(
"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?",
),
mailAvailable: true,
usernameAvailable: true,
errorPassword: false,
errorCode: false,
};
LoginService.addListener(this);
Languages.addListener(this);
}
componentDidMount() {
if (this.input) {
this.input.focus();
}
}
componentWillUnmount() {
LoginService.removeListener(this);
Languages.removeListener(this);
}
componentDidUpdate(_prevProps, prevState) {
if (prevState.page === this.state.page - 1 || prevState.page === this.state.page + 1) {
if (this.input) {
this.input.focus();
}
if (this.inputcode) {
this.inputcode.focus();
}
if (this.inputpassword) {
this.inputpassword.focus();
}
}
}
displayStep() {
if (this.state.page === 1) {
return (
<div className="">
<div className="subtitle">{this.state.i18n.t('scenes.login.forgot_password.text')}</div>
<Input
refInput={ref => {
this.input = ref;
}}
type="text"
className={
'bottom-margin full_width big ' +
(this.state.login.error_recover_nosuchmail ? 'error' : '')
}
onKeyDown={e => {
if (e.keyCode === 13 && this.checkForm() && !this.state.login.login_loading) {
this.next();
}
}}
value={this.state.email}
id="email_to_recover"
placeholder={this.state.i18n.t('scenes.login.forgot_password.email_to_recover')}
onChange={evt => this.setState({ email: evt.target.value })}
/>
{this.state.login.error_recover_nosuchmail && (
<span className="text error">
{this.state.i18n.t('scenes.login.forgot_password.mail_doesnt_exist')}
</span>
)}
<div className="bottom">
<Typography.Link onClick={() => this.previous()}>
{this.state.i18n.t('general.back')}
</Typography.Link>
<ButtonWithTimeout
id="continue3_btn"
className="medium"
disabled={!this.checkForm() || this.state.login.login_loading}
onClick={() => this.next()}
value={this.state.i18n.t('general.continue')}
loading={this.state.login.login_loading}
loadingTimeout={2000}
/>
</div>
</div>
);
}
if (this.state.page === 2) {
return (
<div className="">
<div className="subtitle">
{this.state.i18n.t('scenes.login.forgot_password.text2')} <Emojione type=":mailbox:" />
</div>
<Input
refInput={ref => {
this.inputcode = ref;
}}
id="code"
type="text"
onKeyDown={e => {
if (
e.keyCode === 13 &&
this.state.code.length > 0 &&
this.checkForm() &&
!this.state.login.login_loading
) {
this.next();
}
}}
placeholder={'123-456-789'}
value={this.state.code}
onChange={evt => this.setState({ code: evt.target.value })}
className={
'bottom-margin full_width big ' +
(this.state.login.error_recover_badcode ? 'error' : '')
}
style={{ textAlign: 'center' }}
/>
<br />
{this.state.login.error_recover_badcode && (
<span id="invalid_code_information" className="text error">
{this.state.i18n.t('scenes.login.forgot_password.invalid_code')}
</span>
)}
<div className="bottom">
<Typography.Link onClick={() => this.previous()}>
{this.state.i18n.t('general.back')}
</Typography.Link>
<ButtonWithTimeout
id="continue4_btn"
className="medium"
disabled={!this.checkForm() || this.state.login.login_loading}
onClick={() => this.next()}
value={this.state.i18n.t('general.continue')}
loading={this.state.login.login_loading}
loadingTimeout={2000}
/>
</div>
</div>
);
}
if (this.state.page === 3) {
this.checkForm();
return (
<div className="">
<div className="subtitle">{this.state.i18n.t('scenes.login.forgot_password.text3')}</div>
<Input
refInput={ref => {
this.inputpassword = ref;
}}
type="password"
onKeyDown={e => {
if (e.keyCode === 13 && this.checkForm() && !this.state.login.login_loading) {
this.next();
}
}}
placeholder={this.state.i18n.t('scenes.login.forgot_password.password')}
value={this.state.password1}
onChange={evt => this.setState({ password1: evt.target.value })}
className={
'bottom-margin full_width medium ' +
((this.state.errorPasswordDoesNotMatch || this.state.errorPassword) &&
this.state.password1.length
? 'error'
: '')
}
/>
<Input
type="password"
onKeyDown={e => {
if (e.keyCode === 13 && this.checkForm() && !this.state.login.login_loading) {
this.next();
}
}}
placeholder={this.state.i18n.t('scenes.login.forgot_password.password2')}
value={this.state.password2}
onChange={evt => this.setState({ password2: evt.target.value })}
className={
'bottom-margin full_width medium ' +
((this.state.errorPasswordDoesNotMatch || this.state.errorPassword) &&
this.state.password1.length
? 'error'
: '')
}
/>
{(this.state.login.error_recover_badpasswords ||
this.state.login.error_recover_unknown ||
this.state.errorPasswordDoesNotMatch ||
this.state.errorPassword) &&
this.state.password1.length > 0 && (
<span className="text error">
{this.state.i18n.t('scenes.login.forgot_password.password_dont_match')}
</span>
)}
<div className="bottom">
<Typography.Link onClick={() => this.previous()}>
{this.state.i18n.t('general.back')}
</Typography.Link>
<ButtonWithTimeout
className="medium"
disabled={
this.state.errorPasswordDoesNotMatch ||
this.state.errorPassword ||
this.state.password1.length === 0 ||
this.state.login.login_loading
}
onClick={() => this.next()}
value={this.state.i18n.t('general.continue')}
loading={this.state.login.login_loading}
loadingTimeout={2000}
/>
</div>
</div>
);
}
if (this.state.page === 4) {
return (
<div className="">
<div className="subtitle">
{this.state.i18n.t('scenes.login.forgot_password.finished')}{' '}
<Emojione type=":raised_hands:" />
</div>
<div className="bottom">
<ButtonWithTimeout
className="medium"
disabled={this.state.exiting}
onClick={() => {
this.setState({ exiting: true });
this.next();
}}
value={this.state.i18n.t('general.continue')}
loading={this.state.login.login_loading}
loadingTimeout={2000}
/>
</div>
</div>
);
}
}
checkForm() {
if (this.state.password1.length < 8) {
this.setState({ errorPassword: true });
} else {
this.setState({ errorPassword: false });
}
if (this.state.password1 !== this.state.password2) {
this.setState({ errorPasswordDoesNotMatch: true });
} else {
this.setState({ errorPasswordDoesNotMatch: false });
}
return (
this.state.patternRegMail.test(this.state.email.toLocaleLowerCase()) &&
this.state.email.length > 0
);
}
previous() {
if (this.state.page <= 1) {
this.state.login.changeState('logged_out');
} else {
this.setState({ page: this.state.page - 1 });
}
}
next() {
if (this.state.page === 1) {
if (this.checkForm()) {
AccountService.recover(this.state.email, () => {
this.setState({ page: this.state.page + 1 });
});
}
} else if (this.state.page === 2) {
if (this.checkForm()) {
AccountService.recoverCode(this.state.code, () => {
this.setState({ page: this.state.page + 1 });
});
}
} else if (this.state.page === 3) {
if (this.checkForm()) {
AccountService.recoverNewPassword(this.state.password1, this.state.password2, () => {
this.setState({ page: this.state.page + 1 });
});
}
} else if (this.state.page === 4) {
this.state.login.init();
} else {
this.setState({ page: this.state.page + 1 });
}
}
render() {
return (
<div className="forgotPassword">
<div className="center_box_container login_view fade_in">
<div className="center_box white_box_with_shadow" style={{ width: '400px' }}>
<StepCounter total={4} current={this.state.page} />
<div className="title">
{this.state.i18n.t('scenes.login.forgot_password.title')} {this.state.page}/4
</div>
{this.displayStep()}
</div>
</div>
</div>
);
}
}
@@ -9,7 +9,6 @@ import Icon from '@components/icon/icon.jsx';
import LoginView from './login-view/login-view';
import Signin from './signin/signin.jsx';
import ForgotPassword from './forgot-password/index.jsx';
import Error from './error';
import './login.scss';
@@ -44,7 +43,6 @@ export default () => {
{LoginService.state === 'error' && <Error />}
{LoginService.state === 'logged_out' && <LoginView />}
{LoginService.state === 'signin' && <Signin />}
{LoginService.state === 'forgot_password' && <ForgotPassword />}
<div className={'app_version_footer '}>
<div className="version_name fade_in">Tdrive {Globals.version.version_name}</div>
@@ -134,15 +134,6 @@ export default class LoginView extends Component {
{this.state.i18n.t('scenes.login.home.create_account')}
</Typography.Link>
)}
{/*
<Typography.Link
onClick={() => this.state.login.changeState('forgot_password')}
id="forgot_password_btn"
className="blue_link"
>
{this.state.i18n.t('scenes.login.home.lost_password')}
</Typography.Link>
*/}
</div>
)}
</div>