+
+ onKeyDown={this.handleKeyDown} />
{this.state.visible ? 'visibility' : 'visibility_off'}
@@ -1531,14 +1578,20 @@ class PasswordResetView extends React.PureComponent {
this.handleSubmit = this.handleSubmit.bind(this);
this.handleEmailChange = this.handleEmailChange.bind(this);
+ this.handlePasswordChange = this.handlePasswordChange.bind(this);
+ }
+
+ componentDidMount() {
+ let parsed = parseUrlHash(window.location.hash);
+ this.setState({token: parsed.params.token, scheme: parsed.params.scheme});
}
handleSubmit(e) {
e.preventDefault();
- if (this.props.token) {
- this.props.onSubmit(null, this.state.password.trim());
+ if (this.state.token) {
+ this.props.onReset(this.state.scheme, this.state.password.trim(), this.state.token);
} else {
- this.props.onSubmit("email", this.state.email.trim());
+ this.props.onRequest("email", this.state.email.trim());
}
}
@@ -1551,10 +1604,17 @@ class PasswordResetView extends React.PureComponent {
}
render() {
- let buttonText = this.props.token ? "Reset" : "Send request";
+ let reset = (this.state.token && this.state.scheme);
return (
);
@@ -1832,7 +1885,8 @@ class SidepanelView extends React.Component {
view === 'reset' ?
:
+ onRequest={this.props.onPasswordResetRequest}
+ onReset={this.props.onResetPassword} /> :
null}
);
@@ -1890,8 +1944,8 @@ class EditAccountView extends React.Component {
this.state = {
fullName: me.public ? me.public.fn : undefined,
avatar: makeImageUrl(me.public ? me.public.photo : null),
- auth: defacs.auth,
- anon: defacs.anon,
+ auth: defacs ? defacs.auth : null,
+ anon: defacs ? defacs.anon : null,
tags: fnd.tags(),
previousOnTags: fnd.onTagsUpdated
};
@@ -4474,6 +4528,7 @@ class TinodeWeb extends React.Component {
this.handleMemberUpdateRequest = this.handleMemberUpdateRequest.bind(this);
this.handleValidateCredentialsRequest = this.handleValidateCredentialsRequest.bind(this);
this.handlePasswordResetRequest = this.handlePasswordResetRequest.bind(this);
+ this.handleResetPassword = this.handleResetPassword.bind(this);
}
getBlankState() {
@@ -4571,11 +4626,11 @@ class TinodeWeb extends React.Component {
this.tinode.enableLogging(true, true);
this.tinode.onConnect = this.handleConnected;
this.tinode.onDisconnect = this.handleDisconnect;
- let token, firebasePushToken;
- if (localStorage.getObject("keep-logged-in")) {
- token = localStorage.getObject("auth-token");
- }
+ let token = localStorage.getObject("keep-logged-in") ?
+ localStorage.getObject("auth-token") : undefined;
+
+ let parsedNav = parseUrlHash(window.location.hash);
if (token) {
// When reading from storage, date is returned as string.
token.expires = new Date(token.expires);
@@ -4584,12 +4639,11 @@ class TinodeWeb extends React.Component {
// Socket error
this.handleError(err.message, "err");
});
- var parsed = parseUrlHash(window.location.hash);
- delete parsed.params.info;
- delete parsed.params.tab;
- parsed.path[0] = '';
- navigateTo(composeUrlHash(parsed.path, parsed.params));
- } else {
+ delete parsedNav.params.info;
+ delete parsedNav.params.tab;
+ parsedNav.path[0] = '';
+ navigateTo(composeUrlHash(parsedNav.path, parsedNav.params));
+ } else if (!parsedNav.params.token) {
navigateTo("");
}
@@ -5365,7 +5419,7 @@ class TinodeWeb extends React.Component {
// If already connected, connnect() will return a resolved promise.
this.tinode.connect()
.then(() => {
- this.tinode.requestResetAuthSecret("basic", method, value)
+ return this.tinode.requestResetAuthSecret("basic", method, value)
})
.catch((err) => {
// Socket error
@@ -5373,6 +5427,22 @@ class TinodeWeb extends React.Component {
});
}
+ handleResetPassword(scheme, newPassword, token) {
+ token = base64ReEncode(token);
+ if (!token) {
+ this.handleError("Invalid security token", "err");
+ } else {
+ this.tinode.connect()
+ .then(() => {
+ return this.tinode.updateAccountBasic(null, null, newPassword, {token: token});
+ })
+ .catch((err) => {
+ // Socket error
+ this.handleError(err.message, "err");
+ });
+ }
+ }
+
render() {
return (
@@ -5430,7 +5500,8 @@ class TinodeWeb extends React.Component {
onCancel={this.handleSidepanelCancel}
onError={this.handleError}
onValidateCredentials={this.handleValidateCredentialsRequest}
- onPasswordReset={this.handlePasswordResetRequest}
+ onPasswordResetRequest={this.handlePasswordResetRequest}
+ onResetPassword={this.handleResetPassword}
onInitFind={this.tnInitFind}
searchResults={this.state.searchResults}