diff --git a/src/components/login/CaptchaForm.js b/src/components/login/CaptchaForm.js index 81e5136cef..f82ace8ec3 100644 --- a/src/components/login/CaptchaForm.js +++ b/src/components/login/CaptchaForm.js @@ -40,7 +40,6 @@ module.exports = React.createClass({ componentDidMount: function() { // Just putting a script tag into the returned jsx doesn't work, annoyingly, // so we do this instead. - console.log("CDM"); var self = this; if (this.refs.recaptchaContainer) { console.log("Loading recaptcha script..."); diff --git a/src/components/login/Registration.js b/src/components/login/Registration.js index 627f9b2764..99b58ad145 100644 --- a/src/components/login/Registration.js +++ b/src/components/login/Registration.js @@ -24,6 +24,7 @@ var dis = require('matrix-react-sdk/lib/dispatcher'); var ServerConfig = require("./ServerConfig"); var RegistrationForm = require("./RegistrationForm"); var CaptchaForm = require("./CaptchaForm"); +var Signup = require("matrix-react-sdk/lib/Signup"); var MIN_PASSWORD_LENGTH = 6; module.exports = React.createClass({ @@ -31,7 +32,12 @@ module.exports = React.createClass({ propTypes: { onLoggedIn: React.PropTypes.func.isRequired, - registerLogic: React.PropTypes.any.isRequired, + clientSecret: React.PropTypes.string, + sessionId: React.PropTypes.string, + registrationUrl: React.PropTypes.string, + idSid: React.PropTypes.string, + hsUrl: React.PropTypes.string, + isUrl: React.PropTypes.string, // registration shouldn't know or care how login is done. onLoginClick: React.PropTypes.func.isRequired }, @@ -40,25 +46,43 @@ module.exports = React.createClass({ return { busy: false, errorText: null, - enteredHomeserverUrl: this.props.registerLogic.getHomeserverUrl(), - enteredIdentityServerUrl: this.props.registerLogic.getIdentityServerUrl() + enteredHomeserverUrl: this.props.hsUrl, + enteredIdentityServerUrl: this.props.isUrl }; }, componentWillMount: function() { this.dispatcherRef = dis.register(this.onAction); + // attach this to the instance rather than this.state since it isn't UI + this.registerLogic = new Signup.Register( + this.props.hsUrl, this.props.isUrl + ); + this.registerLogic.setClientSecret(this.props.clientSecret); + this.registerLogic.setSessionId(this.props.sessionId); + this.registerLogic.setRegistrationUrl(this.props.registrationUrl); + this.registerLogic.setIdSid(this.props.idSid); + this.registerLogic.recheckState(); }, componentWillUnmount: function() { dis.unregister(this.dispatcherRef); }, + componentDidMount: function() { + // may have already done an HTTP hit (e.g. redirect from an email) so + // check for any pending response + var promise = this.registerLogic.getPromise(); + if (promise) { + this.onProcessingRegistration(promise); + } + }, + onHsUrlChanged: function(newHsUrl) { - this.props.registerLogic.setHomeserverUrl(newHsUrl); + this.registerLogic.setHomeserverUrl(newHsUrl); }, onIsUrlChanged: function(newIsUrl) { - this.props.registerLogic.setIdentityServerUrl(newIsUrl); + this.registerLogic.setIdentityServerUrl(newIsUrl); }, onAction: function(payload) { @@ -70,14 +94,20 @@ module.exports = React.createClass({ onFormSubmit: function(formVals) { var self = this; - this.props.registerLogic.register(formVals).done(function(response) { + this.onProcessingRegistration(this.registerLogic.register(formVals)); + }, + + // Promise is resolved when the registration process is FULLY COMPLETE + onProcessingRegistration: function(promise) { + var self = this; + promise.done(function(response) { if (!response || !response.access_token) { console.warn( "FIXME: Register fulfilled without a final response, " + "did you break the promise chain?" ); // no matter, we'll grab it direct - response = self.props.registerLogic.getCredentials(); + response = self.registerLogic.getCredentials(); } if (!response || !response.user_id || !response.access_token) { console.error("Final response is missing keys."); @@ -88,8 +118,8 @@ module.exports = React.createClass({ } self.props.onLoggedIn({ userId: response.user_id, - homeserverUrl: self.props.registerLogic.getHomeserverUrl(), - identityServerUrl: self.props.registerLogic.getIdentityServerUrl(), + homeserverUrl: self.registerLogic.getHomeserverUrl(), + identityServerUrl: self.registerLogic.getIdentityServerUrl(), accessToken: response.access_token }); }, function(err) { @@ -125,7 +155,7 @@ module.exports = React.createClass({ }, onCaptchaLoaded: function() { - this.props.registerLogic.tellStage("m.login.recaptcha", "loaded"); + this.registerLogic.tellStage("m.login.recaptcha", "loaded"); }, // TODO: @@ -148,7 +178,7 @@ module.exports = React.createClass({ }, _getRegisterContentJsx: function() { - var currStep = this.props.registerLogic.getStep(); + var currStep = this.registerLogic.getStep(); var registerStep; switch (currStep) { case "Register.COMPLETE": diff --git a/src/skins/vector/views/pages/MatrixChat.js b/src/skins/vector/views/pages/MatrixChat.js index ef02315793..3d5856519e 100644 --- a/src/skins/vector/views/pages/MatrixChat.js +++ b/src/skins/vector/views/pages/MatrixChat.js @@ -27,7 +27,6 @@ var Matrix = require("matrix-js-sdk"); var ContextualMenu = require("../../../../ContextualMenu") var Login = require("../../../../components/login/Login"); var Registration = require("../../../../components/login/Registration"); -var Signup = require("matrix-react-sdk/lib/Signup"); var config = require("../../../../../config.json"); module.exports = React.createClass({ @@ -178,27 +177,16 @@ module.exports = React.createClass({ ); } else if (this.state.screen == 'register') { - /* - return ( - - ); */ - var registerLogic = new Signup.Register( - config.default_hs_url, config.default_is_url - ); - registerLogic.setClientSecret(this.state.register_client_secret); - registerLogic.setSessionId(this.state.register_session_id); - registerLogic.setRegistrationUrl(this.props.registrationUrl); - registerLogic.setIdSid(this.state.register_id_sid); - registerLogic.recheckState(); return ( + onLoginClick={this.onLoginClick} /> ); } else { return (