Merge pull request #407 from matrix-org/rav/refactor_guest_registration

Move guest registration into the login logic
This commit is contained in:
David Baker 2016-08-11 13:13:51 +01:00 committed by GitHub
commit 4f76398b29
3 changed files with 47 additions and 33 deletions

View file

@ -333,6 +333,26 @@ class Login extends Signup {
return flowStep ? flowStep.type : null; 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) { loginViaPassword(username, pass) {
var self = this; var self = this;
var isEmail = username.indexOf("@") > 0; var isEmail = username.indexOf("@") > 0;

View file

@ -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) { onAction: function(payload) {
var roomIndexDelta = 1; var roomIndexDelta = 1;
@ -1106,7 +1078,7 @@ module.exports = React.createClass({
customIsUrl={this.getCurrentIsUrl()} customIsUrl={this.getCurrentIsUrl()}
fallbackHsUrl={this.getFallbackHsUrl()} fallbackHsUrl={this.getFallbackHsUrl()}
onForgotPasswordClick={this.onForgotPasswordClick} 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} onCancelClick={this.guestCreds ? this.onReturnToGuestClick : null}
/> />
); );

View file

@ -27,10 +27,14 @@ var ServerConfig = require("../../views/login/ServerConfig");
/** /**
* A wire component which glues together login UI components and Signup logic * 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: { propTypes: {
onLoggedIn: React.PropTypes.func.isRequired, onLoggedIn: React.PropTypes.func.isRequired,
enableGuest: React.PropTypes.bool,
customHsUrl: React.PropTypes.string, customHsUrl: React.PropTypes.string,
customIsUrl: React.PropTypes.string, customIsUrl: React.PropTypes.string,
defaultHsUrl: 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. // login shouldn't care how password recovery is done.
onForgotPasswordClick: React.PropTypes.func, onForgotPasswordClick: React.PropTypes.func,
onLoginAsGuestClick: React.PropTypes.func,
onCancelClick: React.PropTypes.func, onCancelClick: React.PropTypes.func,
}, },
@ -82,7 +85,26 @@ module.exports = React.createClass({displayName: 'Login',
self.setState({ self.setState({
busy: false 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) { onUsernameChanged: function(username) {
@ -221,9 +243,9 @@ module.exports = React.createClass({displayName: 'Login',
var loader = this.state.busy ? <div className="mx_Login_loader"><Loader /></div> : null; var loader = this.state.busy ? <div className="mx_Login_loader"><Loader /></div> : null;
var loginAsGuestJsx; var loginAsGuestJsx;
if (this.props.onLoginAsGuestClick) { if (this.props.enableGuest) {
loginAsGuestJsx = loginAsGuestJsx =
<a className="mx_Login_create" onClick={this.props.onLoginAsGuestClick} href="#"> <a className="mx_Login_create" onClick={this._onLoginAsGuestClick} href="#">
Login as guest Login as guest
</a> </a>
} }