diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index df27d38172..5780e04ec2 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -226,10 +226,14 @@ module.exports = React.createClass({ switch (payload.action) { case 'logout': if (window.localStorage) { + var hsUrl = this.getCurrentHsUrl(); + var isUrl = this.getCurrentIsUrl(); window.localStorage.clear(); // preserve our HS & IS URLs for convenience - window.localStorage.setItem("mx_hs_url", this.getCurrentHsUrl()); - window.localStorage.setItem("mx_is_url", this.getCurrentIsUrl()); + // N.B. we cache them in hsUrl/isUrl and can't really inline them + // as getCurrentHsUrl() may call through to localStorage. + window.localStorage.setItem("mx_hs_url", hsUrl); + window.localStorage.setItem("mx_is_url", isUrl); } Notifier.stop(); UserActivity.stop(); @@ -275,11 +279,31 @@ module.exports = React.createClass({ screen: 'post_registration' }); break; + case 'start_login_from_guest': + this.replaceState({ + screen: 'login', + guestCreds: { // stash our guest creds so we can backout if needed + userId: MatrixClientPeg.get().credentials.userId, + accessToken: MatrixClientPeg.get().getAccessToken(), + homeserverUrl: MatrixClientPeg.get().getHomeserverUrl(), + identityServerUrl: MatrixClientPeg.get().getIdentityServerUrl(), + guest: true + } + }); + this.notifyNewScreen('login'); + break; case 'start_upgrade_registration': this.replaceState({ screen: "register", upgradeUsername: MatrixClientPeg.get().getUserIdLocalpart(), - guestAccessToken: MatrixClientPeg.get().getAccessToken() + guestAccessToken: MatrixClientPeg.get().getAccessToken(), + guestCreds: { // stash our guest creds so we can backout if needed + userId: MatrixClientPeg.get().credentials.userId, + accessToken: MatrixClientPeg.get().getAccessToken(), + homeserverUrl: MatrixClientPeg.get().getHomeserverUrl(), + identityServerUrl: MatrixClientPeg.get().getIdentityServerUrl(), + guest: true + } }); this.notifyNewScreen('register'); break; @@ -858,6 +882,11 @@ module.exports = React.createClass({ this.showScreen("forgot_password"); }, + onReturnToGuestClick: function() { + // reanimate our guest login + this.onLoggedIn(this.state.guestCreds); + }, + onRegistered: function(credentials) { this.onLoggedIn(credentials); // do post-registration stuff @@ -1042,7 +1071,9 @@ module.exports = React.createClass({ registrationUrl={this.props.registrationUrl} onLoggedIn={this.onRegistered} onLoginClick={this.onLoginClick} - onRegisterClick={this.onRegisterClick} /> + onRegisterClick={this.onRegisterClick} + onCancelClick={ MatrixClientPeg.get() && MatrixClientPeg.get().isGuest() ? this.onReturnToGuestClick : null } + /> ); } else if (this.state.screen == 'forgot_password') { return ( @@ -1065,6 +1096,7 @@ module.exports = React.createClass({ customIsUrl={this.getCurrentIsUrl()} onForgotPasswordClick={this.onForgotPasswordClick} onLoginAsGuestClick={this.props.enableGuest && this.props.config && this.props.config.default_hs_url ? this._registerAsGuest: undefined} + onCancelClick={ MatrixClientPeg.get() && MatrixClientPeg.get().isGuest() ? this.onReturnToGuestClick : null } /> ); } diff --git a/src/components/structures/login/Login.js b/src/components/structures/login/Login.js index 1b881187f8..d127c7ed78 100644 --- a/src/components/structures/login/Login.js +++ b/src/components/structures/login/Login.js @@ -42,6 +42,7 @@ module.exports = React.createClass({displayName: 'Login', // login shouldn't care how password recovery is done. onForgotPasswordClick: React.PropTypes.func, onLoginAsGuestClick: React.PropTypes.func, + onCancelClick: React.PropTypes.func, }, getInitialState: function() { @@ -211,6 +212,15 @@ module.exports = React.createClass({displayName: 'Login', Login as guest } + + var returnToAppJsx; + if (this.props.onCancelClick) { + returnToAppJsx = + + Return to app + + } + return (