Support Server requests for MFA, Render failed UI statuses to user, C… (#4483)

* Support Server requests for MFA, Render failed UI statuses to user, Connect to KnownHosts component
This commit is contained in:
Zach H
2021-11-23 02:45:08 -05:00
committed by GitHub
parent 73c5956ece
commit 0683d1aced
12 changed files with 168 additions and 91 deletions

View File

@@ -1,66 +1,66 @@
// eslint-disable-next-line
// eslint-disable-next-line
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { Form, Field, reduxForm, change } from 'redux-form'
import Button from '@material-ui/core/Button';
import { InputField, KnownHosts } from 'components';
import { FormKey } from 'types';
import './RegisterForm.css';
const RegisterForm = (props) => {
const { dispatch, handleSubmit } = props;
const onHostChange = ({ host, port }) => {
dispatch(change(FormKey.REGISTER, 'host', host));
dispatch(change(FormKey.REGISTER, 'port', port));
}
return (
<Form className="registerForm row" onSubmit={handleSubmit} autoComplete="off">
<div className="leftRegisterForm column" >
<div className="registerForm-item">
<KnownHosts onChange={onHostChange} />
{ /* Padding is off */ }
</div>
<div className="registerForm-item">
<Field label="Country" name="country" component={InputField} />
</div>
<div className="registerForm-item">
<Field label="Real Name" name="realName" component={InputField} />
</div>
<div className="registerForm-item">
<Field label="Email" name="email" type="email" component={InputField} />
</div>
</div>
<div className="rightRegisterForm column">
<div className="registerForm-item">
<Field label="Player Name" name="user" component={InputField} />
</div>
<div className="registerForm-item">
<Field label="Password" name="pass" type="password" component={InputField} />
</div>
<div className="registerForm-item">
<Field label="Password (again)" name="passwordConfirm" type="password" component={InputField} />
</div>
<Button className="registerForm-submit tall" color="primary" variant="contained" type="submit">
Register
</Button>
</div>
</Form >
);
};
const propsMap = {
form: FormKey.REGISTER,
};
const mapStateToProps = () => ({
initialValues: {
}
});
export default connect(mapStateToProps)(reduxForm(propsMap)(RegisterForm));
import { connect } from 'react-redux';
import { Form, Field, reduxForm, change } from 'redux-form'
import Button from '@material-ui/core/Button';
import { InputField, KnownHosts } from 'components';
import { FormKey } from 'types';
import './RegisterForm.css';
const RegisterForm = (props) => {
const { dispatch, handleSubmit } = props;
const onHostChange = ({ host, port }) => {
dispatch(change(FormKey.REGISTER, 'host', host));
dispatch(change(FormKey.REGISTER, 'port', port));
}
return (
<Form className="registerForm row" onSubmit={handleSubmit} autoComplete="off">
<div className="leftRegisterForm column" >
<div className="registerForm-item">
<KnownHosts onChange={onHostChange} />
{ /* Padding is off */ }
</div>
<div className="registerForm-item">
<Field label="Country" name="country" component={InputField} />
</div>
<div className="registerForm-item">
<Field label="Real Name" name="realName" component={InputField} />
</div>
<div className="registerForm-item">
<Field label="Email" name="email" type="email" component={InputField} />
</div>
</div>
<div className="rightRegisterForm column">
<div className="registerForm-item">
<Field label="Player Name" name="user" component={InputField} />
</div>
<div className="registerForm-item">
<Field label="Password" name="pass" type="password" component={InputField} />
</div>
<div className="registerForm-item">
<Field label="Password (again)" name="passwordConfirm" type="password" component={InputField} />
</div>
<Button className="registerForm-submit tall" color="primary" variant="contained" type="submit">
Register
</Button>
</div>
</Form >
);
};
const propsMap = {
form: FormKey.REGISTER,
};
const mapStateToProps = () => ({
initialValues: {
}
});
export default connect(mapStateToProps)(reduxForm(propsMap)(RegisterForm));

View File

@@ -2,6 +2,14 @@
width: 100%;
}
.RequestPasswordResetForm-MFA-Message {
margin-top: -20px;
}
.RequestPasswordResetForm-Error {
margin-bottom: 10px;
}
.RequestPasswordResetForm-item {
margin-bottom: 20px;
}

View File

@@ -1,5 +1,5 @@
// eslint-disable-next-line
import React from "react";
import React, { useState } from "react";
import { connect } from 'react-redux';
import { Form, Field, reduxForm, change } from 'redux-form'
@@ -9,21 +9,47 @@ import { InputField, KnownHosts } from 'components';
import { FormKey } from 'types';
import './RequestPasswordResetForm.css';
import { useReduxEffect } from 'hooks';
import { ServerTypes } from 'store';
const RequestPasswordResetForm = (props) => {
const { dispatch, handleSubmit } = props;
const [errorMessage, setErrorMessage] = useState(false);
const [isMFA, setIsMFA] = useState(false);
const onHostChange = ({ host, port }) => {
dispatch(change(FormKey.RESET_PASSWORD_REQUEST, 'host', host));
dispatch(change(FormKey.RESET_PASSWORD_REQUEST, 'port', port));
}
useReduxEffect(() => {
setErrorMessage(true);
}, ServerTypes.RESET_PASSWORD_FAILED, []);
useReduxEffect(() => {
setIsMFA(true);
}, ServerTypes.RESET_PASSWORD_CHALLENGE, []);
const onSubmit = (event) => {
setErrorMessage(false);
handleSubmit(event);
}
return (
<Form className="RequestPasswordResetForm" onSubmit={handleSubmit}>
<Form className="RequestPasswordResetForm" onSubmit={onSubmit}>
<div className="RequestPasswordResetForm-items">
{errorMessage ? (
<div className="RequestPasswordResetForm-Error">Request Password Reset Failed, please try again</div>
) : null}
<div className="RequestPasswordResetForm-item">
<Field label="Username" name="user" component={InputField} autoComplete="username" />
</div>
{isMFA ? (
<div className="RequestPasswordResetForm-item">
<div className="RequestPasswordResetForm-MFA-Message">Server has multi-factor authentication enabled</div>
<Field label="Email" name="email" component={InputField} autoComplete="email" />
</div>
) : null}
<div className="RequestPasswordResetForm-item">
<KnownHosts onChange={onHostChange} />
</div>

View File

@@ -1,5 +1,5 @@
// eslint-disable-next-line
import React from "react";
import React, {useState} from "react";
import { connect } from 'react-redux';
import { Form, Field, reduxForm, change } from 'redux-form'
@@ -9,18 +9,31 @@ import { InputField, KnownHosts } from 'components';
import { FormKey } from 'types';
import './ResetPasswordForm.css';
import { useReduxEffect } from '../../hooks';
import { ServerTypes } from '../../store';
const ResetPasswordForm = (props) => {
const { dispatch, handleSubmit } = props;
const [errorMessage, setErrorMessage] = useState(false);
const onHostChange = ({ host, port }) => {
dispatch(change(FormKey.RESET_PASSWORD, 'host', host));
dispatch(change(FormKey.RESET_PASSWORD, 'port', port));
}
useReduxEffect(() => {
setErrorMessage(true);
}, ServerTypes.RESET_PASSWORD_FAILED, []);
return (
<Form className="ResetPasswordForm" onSubmit={handleSubmit}>
<div className="ResetPasswordForm-items">
{errorMessage ? (
<div><h3>Password Reset Failed, please try again</h3></div>
) : null}
<div className="ResetPasswordForm-item">
<Field label="Username" name="user" component={InputField} autoComplete="username" />
</div>