adding ability to reset the password

This commit is contained in:
or-else
2018-09-30 14:22:02 +03:00
parent 7a3212cf36
commit 871a1e5b5b
+76 -3
View File
@@ -1270,7 +1270,8 @@ class LoginView extends React.Component {
<div className="panel-form-row"> <div className="panel-form-row">
<CheckBox id="save-token" name="save-token" checked={this.state.saveToken} <CheckBox id="save-token" name="save-token" checked={this.state.saveToken}
onChange={this.handleToggleSaveToken} /> onChange={this.handleToggleSaveToken} />
<label htmlFor="save-token">&nbsp;Keep me logged in</label> <label htmlFor="save-token">&nbsp;Stay logged in</label>
<a href="#reset">Forgot password?</a>
</div> </div>
<div className="dialog-buttons"> <div className="dialog-buttons">
<button className={submitClasses} type="submit">Sign in</button> <button className={submitClasses} type="submit">Sign in</button>
@@ -1382,7 +1383,7 @@ class CreateAccountView extends React.PureComponent {
<div className="panel-form-row"> <div className="panel-form-row">
<CheckBox id="save-token" name="save-token" checked={this.state.saveToken} <CheckBox id="save-token" name="save-token" checked={this.state.saveToken}
onChange={this.handleToggleSaveToken} /> onChange={this.handleToggleSaveToken} />
<label htmlFor="save-token">&nbsp;Keep me logged in</label> <label htmlFor="save-token">&nbsp;Stay logged in</label>
</div> </div>
<div className="dialog-buttons"> <div className="dialog-buttons">
<button className={submitClasses} type="submit">Sign up</button> <button className={submitClasses} type="submit">Sign up</button>
@@ -1458,6 +1459,51 @@ class AvatarUpload extends React.Component {
}; };
/* END Account registration */ /* END Account registration */
/* BEGIN PasswordResetView: a password reset form */
class PasswordResetView extends React.PureComponent {
constructor(props) {
super(props);
this.state = {
email: '',
};
this.handleSubmit = this.handleSubmit.bind(this);
this.handleEmailChange = this.handleEmailChange.bind(this);
}
handleSubmit(e) {
e.preventDefault();
this.props.onSubmit("email", this.state.email.trim());
}
handleEmailChange(e) {
this.setState({email: e.target.value});
}
render() {
return (
<form id="password-reset-form" onSubmit={this.handleSubmit}>
<p>Email with instructions for resetting your password will be sent
to the following email address:</p>
<input type="email" id="inputEmail"
placeholder="Your registration email"
autoComplete="email"
value={this.state.email}
onChange={this.handleEmailChange}
required autoFocus />
<div className="dialog-buttons">
<button className="blue" type="submit">Send request</button>
</div>
</form>
);
}
}
/* END PasswordResetView */
/* BEGIN Tinode config panel */ /* BEGIN Tinode config panel */
class SettingsView extends React.PureComponent { class SettingsView extends React.PureComponent {
constructor(props) { constructor(props) {
@@ -1622,6 +1668,10 @@ class SidepanelView extends React.Component {
title = "Confirm Credentials"; title = "Confirm Credentials";
onCancel = this.props.onCancel; onCancel = this.props.onCancel;
break; break;
case 'reset':
title = "Reset Password";
onCancel = this.props.onCancel;
break;
default:; default:;
}; };
return ( return (
@@ -1702,6 +1752,9 @@ class SidepanelView extends React.Component {
onCancel={this.props.onCancel} onCancel={this.props.onCancel}
onError={this.props.onError} /> : onError={this.props.onError} /> :
view === 'reset' ?
<PasswordResetView
onSubmit={this.props.onPasswordReset} /> :
null} null}
</div> </div>
); );
@@ -4342,6 +4395,7 @@ class TinodeWeb extends React.Component {
this.handleHideInfoView = this.handleHideInfoView.bind(this); this.handleHideInfoView = this.handleHideInfoView.bind(this);
this.handleMemberUpdateRequest = this.handleMemberUpdateRequest.bind(this); this.handleMemberUpdateRequest = this.handleMemberUpdateRequest.bind(this);
this.handleValidateCredentialsRequest = this.handleValidateCredentialsRequest.bind(this); this.handleValidateCredentialsRequest = this.handleValidateCredentialsRequest.bind(this);
this.handlePasswordResetRequest = this.handlePasswordResetRequest.bind(this);
} }
getBlankState() { getBlankState() {
@@ -4491,7 +4545,7 @@ class TinodeWeb extends React.Component {
var hash = parseUrlHash(window.location.hash); var hash = parseUrlHash(window.location.hash);
if (hash.path && hash.path.length > 0) { if (hash.path && hash.path.length > 0) {
// Left-side panel selector. // Left-side panel selector.
if (['register','settings','edit','cred','newtpk','contacts',''].includes(hash.path[0])) { if (['register','settings','edit','cred','reset','newtpk','contacts',''].includes(hash.path[0])) {
this.setState({sidePanelSelected: hash.path[0]}); this.setState({sidePanelSelected: hash.path[0]});
} else { } else {
console.log("Unknown sidepanel view", hash.path[0]); console.log("Unknown sidepanel view", hash.path[0]);
@@ -5229,6 +5283,24 @@ class TinodeWeb extends React.Component {
this.doLogin(null, null, {meth: cred, resp: code}); this.doLogin(null, null, {meth: cred, resp: code});
} }
handlePasswordResetRequest(method, value) {
if (this.tinode.isConnected()) {
this.tinode.resetAuthSecret("basic", method, value)
.catch((err) => {
this.handleError(err.message, "err");
});
} else {
this.tinode.connect()
.then(() => {
this.tinode.resetAuthSecret("basic", method, value)
})
.catch((err) => {
// Socket error
this.handleError(err.message, "err");
});
}
}
render() { render() {
return ( return (
<div id="app-container"> <div id="app-container">
@@ -5286,6 +5358,7 @@ class TinodeWeb extends React.Component {
onCancel={this.handleSidepanelCancel} onCancel={this.handleSidepanelCancel}
onError={this.handleError} onError={this.handleError}
onValidateCredentials={this.handleValidateCredentialsRequest} onValidateCredentials={this.handleValidateCredentialsRequest}
onPasswordReset={this.handlePasswordResetRequest}
onInitFind={this.tnInitFind} onInitFind={this.tnInitFind}
searchResults={this.state.searchResults} searchResults={this.state.searchResults}