diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index df27d3817289bfe687a809d86aa0c8fe1fb7a364..c0e344049d02fd5cdc14f5ccfd3c5b92a5c2f011 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -1033,7 +1033,6 @@ module.exports = React.createClass({ idSid={this.state.register_id_sid} email={this.props.startingQueryParams.email} username={this.state.upgradeUsername} - disableUsernameChanges={Boolean(this.state.upgradeUsername)} guestAccessToken={this.state.guestAccessToken} defaultHsUrl={this.props.config.default_hs_url} defaultIsUrl={this.props.config.default_is_url} diff --git a/src/components/structures/login/Registration.js b/src/components/structures/login/Registration.js index cf9adee1bbc38bad1bf06dbe0674a8b4686fd83d..e52a49c823763ad2ba93c290f46f6f9627856f1f 100644 --- a/src/components/structures/login/Registration.js +++ b/src/components/structures/login/Registration.js @@ -43,7 +43,6 @@ module.exports = React.createClass({ email: React.PropTypes.string, username: React.PropTypes.string, guestAccessToken: React.PropTypes.string, - disableUsernameChanges: React.PropTypes.bool, // registration shouldn't know or care how login is done. onLoginClick: React.PropTypes.func.isRequired }, @@ -108,6 +107,12 @@ module.exports = React.createClass({ errorText: "", busy: true }); + + if (formVals.username !== this.props.username) { + // don't try to upgrade if we changed our username + this.registerLogic.setGuestAccessToken(null); + } + this.onProcessingRegistration(this.registerLogic.register(formVals)); }, @@ -205,7 +210,6 @@ module.exports = React.createClass({ showEmail={true} defaultUsername={this.props.username} defaultEmail={this.props.email} - disableUsernameChanges={this.props.disableUsernameChanges} minPasswordLength={MIN_PASSWORD_LENGTH} onError={this.onFormValidationFailed} onRegisterClick={this.onFormSubmit} /> diff --git a/src/components/views/login/RegistrationForm.js b/src/components/views/login/RegistrationForm.js index 469deb890a937b9d1be056eee9ae759280c4f544..727bb2c1ff178aa660b95a35a6a34b29dacaa504 100644 --- a/src/components/views/login/RegistrationForm.js +++ b/src/components/views/login/RegistrationForm.js @@ -38,7 +38,6 @@ module.exports = React.createClass({ defaultUsername: React.PropTypes.string, showEmail: React.PropTypes.bool, minPasswordLength: React.PropTypes.number, - disableUsernameChanges: React.PropTypes.bool, onError: React.PropTypes.func, onRegisterClick: React.PropTypes.func // onRegisterClick(Object) => ?Promise }, @@ -56,7 +55,7 @@ module.exports = React.createClass({ getInitialState: function() { return { email: this.props.defaultEmail, - username: this.props.defaultUsername, + username: null, password: null, passwordConfirm: null, fieldValid: {} @@ -78,7 +77,7 @@ module.exports = React.createClass({ if (this.allFieldsValid()) { var promise = this.props.onRegisterClick({ - username: this.refs.username.value.trim(), + username: this.refs.username.value.trim() || this.props.defaultUsername, password: this.refs.password.value.trim(), email: this.refs.email.value.trim() }); @@ -120,13 +119,14 @@ module.exports = React.createClass({ break; case FIELD_USERNAME: // XXX: SPEC-1 - if (encodeURIComponent(this.refs.username.value) != this.refs.username.value) { + var username = this.refs.username.value.trim() || this.props.defaultUsername; + if (encodeURIComponent(username) != username) { this.markFieldValid( field_id, false, "RegistrationForm.ERR_USERNAME_INVALID" ); - } else if (this.refs.username.value == '') { + } else if (username == '') { this.markFieldValid( field_id, false, @@ -199,7 +199,7 @@ module.exports = React.createClass({ if (this.props.showEmail) { emailSection = ( <input className="mx_Login_field" type="text" ref="email" - autoFocus={true} placeholder="Email address" + autoFocus={true} placeholder="Email address (optional)" defaultValue={this.state.email} style={this._styleField(FIELD_EMAIL)} onBlur={function() {self.validateField(FIELD_EMAIL)}} /> @@ -211,17 +211,24 @@ module.exports = React.createClass({ ); } + var placeholderUserName = "User name"; + if (this.props.defaultUsername) { + placeholderUserName += " (default: " + this.props.defaultUsername + ")" + } + return ( <div> <form onSubmit={this.onSubmit}> {emailSection} <br /> <input className="mx_Login_field" type="text" ref="username" - placeholder="User name" defaultValue={this.state.username} + placeholder={ placeholderUserName } defaultValue={this.state.username} style={this._styleField(FIELD_USERNAME)} - onBlur={function() {self.validateField(FIELD_USERNAME)}} - disabled={this.props.disableUsernameChanges} /> + onBlur={function() {self.validateField(FIELD_USERNAME)}} /> <br /> + { this.props.defaultUsername ? + <div className="mx_Login_fieldLabel">Setting a user name will create a fresh account</div> : null + } <input className="mx_Login_field" type="password" ref="password" style={this._styleField(FIELD_PASSWORD)} onBlur={function() {self.validateField(FIELD_PASSWORD)}}