diff --git a/src/Signup.js b/src/Signup.js index 5aadd94701..7a46005d11 100644 --- a/src/Signup.js +++ b/src/Signup.js @@ -333,6 +333,26 @@ class Login extends Signup { return flowStep ? flowStep.type : null; } + loginAsGuest() { + MatrixClientPeg.replaceUsingUrls(this._hsUrl, this._isUrl); + return MatrixClientPeg.get().registerGuest().then((creds) => { + return { + userId: creds.user_id, + accessToken: creds.access_token, + homeserverUrl: this._hsUrl, + identityServerUrl: this._isUrl, + guest: true + }; + }, (error) => { + if (error.httpStatus === 403) { + error.friendlyText = "Guest access is disabled on this Home Server."; + } else { + error.friendlyText = "Failed to register as guest: " + error.data; + } + throw error; + }); + } + loginViaPassword(username, pass) { var self = this; var isEmail = username.indexOf("@") > 0; diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index ecd3ed1ab6..ffd4ad0a70 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -207,34 +207,6 @@ module.exports = React.createClass({ } }, - _registerAsGuest: function(showWarning) { - var self = this; - console.log("Doing guest login on %s", this.getCurrentHsUrl()); - var hsUrl = this.getCurrentHsUrl(); - var isUrl = this.getCurrentIsUrl(); - - MatrixClientPeg.replaceUsingUrls(hsUrl, isUrl); - MatrixClientPeg.get().registerGuest().done(function(creds) { - console.log("Registered as guest: %s", creds.user_id); - Lifecycle.setLoggedIn({ - userId: creds.user_id, - accessToken: creds.access_token, - homeserverUrl: hsUrl, - identityServerUrl: isUrl, - guest: true - }); - }, function(err) { - if (showWarning) { - var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); - Modal.createDialog(ErrorDialog, { - title: "Failed to login as guest", - description: err.data - }); - } - console.error("Failed to register as guest: " + err + " " + err.data); - }); - }, - onAction: function(payload) { var roomIndexDelta = 1; @@ -1106,7 +1078,7 @@ module.exports = React.createClass({ customIsUrl={this.getCurrentIsUrl()} fallbackHsUrl={this.getFallbackHsUrl()} onForgotPasswordClick={this.onForgotPasswordClick} - onLoginAsGuestClick={this.props.enableGuest && this.props.config && this._registerAsGuest.bind(this, true)} + enableGuest={this.props.enableGuest} onCancelClick={this.guestCreds ? this.onReturnToGuestClick : null} /> ); diff --git a/src/components/structures/login/Login.js b/src/components/structures/login/Login.js index 74edc4ecd9..f7468a745b 100644 --- a/src/components/structures/login/Login.js +++ b/src/components/structures/login/Login.js @@ -27,10 +27,14 @@ var ServerConfig = require("../../views/login/ServerConfig"); /** * A wire component which glues together login UI components and Signup logic */ -module.exports = React.createClass({displayName: 'Login', +module.exports = React.createClass({ + displayName: 'Login', + propTypes: { onLoggedIn: React.PropTypes.func.isRequired, + enableGuest: React.PropTypes.bool, + customHsUrl: React.PropTypes.string, customIsUrl: React.PropTypes.string, defaultHsUrl: React.PropTypes.string, @@ -45,7 +49,6 @@ 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, }, @@ -82,7 +85,26 @@ module.exports = React.createClass({displayName: 'Login', self.setState({ busy: false }); + }).done(); + }, + + _onLoginAsGuestClick: function() { + var self = this; + self.setState({ + busy: true, + errorText: null, + loginIncorrect: false, }); + + this._loginLogic.loginAsGuest().then(function(data) { + self.props.onLoggedIn(data); + }, function(error) { + self._setStateFromError(error, true); + }).finally(function() { + self.setState({ + busy: false + }); + }).done(); }, onUsernameChanged: function(username) { @@ -221,9 +243,9 @@ module.exports = React.createClass({displayName: 'Login', var loader = this.state.busy ?
: null; var loginAsGuestJsx; - if (this.props.onLoginAsGuestClick) { + if (this.props.enableGuest) { loginAsGuestJsx = - + Login as guest }