From 32bd9d155cfd00e1e0a66d050f1bd2d0e5d5e98e Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Thu, 17 Dec 2015 14:56:55 +0000 Subject: [PATCH] Pass a new prop 'startingQueryParams' to pluck out the email from the URL This is preferable to doing the way other QPs are passed (secret, etc) because the link in the email wants to look like "#/room/" for guest read-access (only bouncing you to /login if that room is not readable by guests). This is hard to do in the current arch because we don't preserve QPs on /room paths, and we do conditional executions depending on if it is a room ID or alias. Rather than threading through the email in each section and creating a fragile mess, just pass the *starting* set of query parameters through to MatrixChat which can then do the Right Thing when the time comes. --- src/components/structures/MatrixChat.js | 14 +++++++++++--- src/components/structures/login/Registration.js | 2 ++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index f2424dc06e..f38c75d676 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -41,7 +41,8 @@ module.exports = React.createClass({ config: React.PropTypes.object.isRequired, ConferenceHandler: React.PropTypes.any, onNewScreen: React.PropTypes.func, - registrationUrl: React.PropTypes.string + registrationUrl: React.PropTypes.string, + startingQueryParams: React.PropTypes.object }, PageTypes: { @@ -75,6 +76,12 @@ module.exports = React.createClass({ return s; }, + getDefaultProps: function() { + return { + startingQueryParams: {} + }; + }, + componentDidMount: function() { this.dispatcherRef = dis.register(this.onAction); if (this.state.logged_in) { @@ -540,9 +547,9 @@ module.exports = React.createClass({ } }, - notifyNewScreen: function(screen) { + notifyNewScreen: function(screen, queryParamString) { if (this.props.onNewScreen) { - this.props.onNewScreen(screen); + this.props.onNewScreen(screen, queryParamString); } }, @@ -706,6 +713,7 @@ module.exports = React.createClass({ clientSecret={this.state.register_client_secret} sessionId={this.state.register_session_id} idSid={this.state.register_id_sid} + email={this.props.startingQueryParams.email} hsUrl={this.props.config.default_hs_url} isUrl={this.props.config.default_is_url} registrationUrl={this.props.registrationUrl} diff --git a/src/components/structures/login/Registration.js b/src/components/structures/login/Registration.js index 1570641556..19e55c4d76 100644 --- a/src/components/structures/login/Registration.js +++ b/src/components/structures/login/Registration.js @@ -39,6 +39,7 @@ module.exports = React.createClass({ idSid: React.PropTypes.string, hsUrl: React.PropTypes.string, isUrl: React.PropTypes.string, + email: React.PropTypes.string, // registration shouldn't know or care how login is done. onLoginClick: React.PropTypes.func.isRequired }, @@ -185,6 +186,7 @@ module.exports = React.createClass({ registerStep = (