Implement guest account upgrading
This commit is contained in:
parent
458d71a496
commit
a3df50f4c3
5 changed files with 55 additions and 11 deletions
|
@ -69,6 +69,10 @@ class Register extends Signup {
|
||||||
this.params.idSid = idSid;
|
this.params.idSid = idSid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setGuestAccessToken(token) {
|
||||||
|
this.guestAccessToken = token;
|
||||||
|
}
|
||||||
|
|
||||||
getStep() {
|
getStep() {
|
||||||
return this._step;
|
return this._step;
|
||||||
}
|
}
|
||||||
|
@ -126,7 +130,8 @@ class Register extends Signup {
|
||||||
}
|
}
|
||||||
|
|
||||||
return MatrixClientPeg.get().register(
|
return MatrixClientPeg.get().register(
|
||||||
this.username, this.password, this.params.sessionId, authDict, bindEmail
|
this.username, this.password, this.params.sessionId, authDict, bindEmail,
|
||||||
|
this.guestAccessToken
|
||||||
).then(function(result) {
|
).then(function(result) {
|
||||||
self.credentials = result;
|
self.credentials = result;
|
||||||
self.setStep("COMPLETE");
|
self.setStep("COMPLETE");
|
||||||
|
|
|
@ -225,6 +225,14 @@ module.exports = React.createClass({
|
||||||
screen: 'post_registration'
|
screen: 'post_registration'
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case 'start_upgrade_registration':
|
||||||
|
this.replaceState({
|
||||||
|
screen: "register",
|
||||||
|
upgradeUsername: MatrixClientPeg.get().getUserIdLocalpart(),
|
||||||
|
guestAccessToken: MatrixClientPeg.get().getAccessToken()
|
||||||
|
});
|
||||||
|
this.notifyNewScreen('register');
|
||||||
|
break;
|
||||||
case 'token_login':
|
case 'token_login':
|
||||||
if (this.state.logged_in) return;
|
if (this.state.logged_in) return;
|
||||||
|
|
||||||
|
@ -784,6 +792,9 @@ module.exports = React.createClass({
|
||||||
sessionId={this.state.register_session_id}
|
sessionId={this.state.register_session_id}
|
||||||
idSid={this.state.register_id_sid}
|
idSid={this.state.register_id_sid}
|
||||||
email={this.props.startingQueryParams.email}
|
email={this.props.startingQueryParams.email}
|
||||||
|
username={this.state.upgradeUsername}
|
||||||
|
disableUsernameChanges={Boolean(this.state.upgradeUsername)}
|
||||||
|
guestAccessToken={this.state.guestAccessToken}
|
||||||
hsUrl={this.props.config.default_hs_url}
|
hsUrl={this.props.config.default_hs_url}
|
||||||
isUrl={this.props.config.default_is_url}
|
isUrl={this.props.config.default_is_url}
|
||||||
registrationUrl={this.props.registrationUrl}
|
registrationUrl={this.props.registrationUrl}
|
||||||
|
|
|
@ -135,6 +135,12 @@ module.exports = React.createClass({
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
onUpgradeClicked: function() {
|
||||||
|
dis.dispatch({
|
||||||
|
action: "start_upgrade_registration"
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
onLogoutPromptCancel: function() {
|
onLogoutPromptCancel: function() {
|
||||||
this.logoutModal.closeDialog();
|
this.logoutModal.closeDialog();
|
||||||
},
|
},
|
||||||
|
@ -164,6 +170,28 @@ module.exports = React.createClass({
|
||||||
this.state.avatarUrl ? MatrixClientPeg.get().mxcUrlToHttp(this.state.avatarUrl) : null
|
this.state.avatarUrl ? MatrixClientPeg.get().mxcUrlToHttp(this.state.avatarUrl) : null
|
||||||
);
|
);
|
||||||
|
|
||||||
|
var accountJsx;
|
||||||
|
|
||||||
|
if (MatrixClientPeg.get().isGuest()) {
|
||||||
|
accountJsx = (
|
||||||
|
<div className="mx_UserSettings_button" onClick={this.onUpgradeClicked}>
|
||||||
|
Upgrade (It's free!)
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
accountJsx = (
|
||||||
|
<ChangePassword
|
||||||
|
className="mx_UserSettings_accountTable"
|
||||||
|
rowClassName="mx_UserSettings_profileTableRow"
|
||||||
|
rowLabelClassName="mx_UserSettings_profileLabelCell"
|
||||||
|
rowInputClassName="mx_UserSettings_profileInputCell"
|
||||||
|
buttonClassName="mx_UserSettings_button"
|
||||||
|
onError={this.onPasswordChangeError}
|
||||||
|
onFinished={this.onPasswordChanged} />
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="mx_UserSettings">
|
<div className="mx_UserSettings">
|
||||||
<RoomHeader simpleHeader="Settings" />
|
<RoomHeader simpleHeader="Settings" />
|
||||||
|
@ -213,14 +241,7 @@ module.exports = React.createClass({
|
||||||
<h2>Account</h2>
|
<h2>Account</h2>
|
||||||
|
|
||||||
<div className="mx_UserSettings_section">
|
<div className="mx_UserSettings_section">
|
||||||
<ChangePassword
|
{accountJsx}
|
||||||
className="mx_UserSettings_accountTable"
|
|
||||||
rowClassName="mx_UserSettings_profileTableRow"
|
|
||||||
rowLabelClassName="mx_UserSettings_profileLabelCell"
|
|
||||||
rowInputClassName="mx_UserSettings_profileInputCell"
|
|
||||||
buttonClassName="mx_UserSettings_button"
|
|
||||||
onError={this.onPasswordChangeError}
|
|
||||||
onFinished={this.onPasswordChanged} />
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="mx_UserSettings_logout">
|
<div className="mx_UserSettings_logout">
|
||||||
|
|
|
@ -19,7 +19,6 @@ limitations under the License.
|
||||||
var React = require('react');
|
var React = require('react');
|
||||||
|
|
||||||
var sdk = require('../../../index');
|
var sdk = require('../../../index');
|
||||||
var MatrixClientPeg = require('../../../MatrixClientPeg');
|
|
||||||
var dis = require('../../../dispatcher');
|
var dis = require('../../../dispatcher');
|
||||||
var Signup = require("../../../Signup");
|
var Signup = require("../../../Signup");
|
||||||
var ServerConfig = require("../../views/login/ServerConfig");
|
var ServerConfig = require("../../views/login/ServerConfig");
|
||||||
|
@ -40,6 +39,9 @@ module.exports = React.createClass({
|
||||||
hsUrl: React.PropTypes.string,
|
hsUrl: React.PropTypes.string,
|
||||||
isUrl: React.PropTypes.string,
|
isUrl: React.PropTypes.string,
|
||||||
email: React.PropTypes.string,
|
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.
|
// registration shouldn't know or care how login is done.
|
||||||
onLoginClick: React.PropTypes.func.isRequired
|
onLoginClick: React.PropTypes.func.isRequired
|
||||||
},
|
},
|
||||||
|
@ -63,6 +65,7 @@ module.exports = React.createClass({
|
||||||
this.registerLogic.setSessionId(this.props.sessionId);
|
this.registerLogic.setSessionId(this.props.sessionId);
|
||||||
this.registerLogic.setRegistrationUrl(this.props.registrationUrl);
|
this.registerLogic.setRegistrationUrl(this.props.registrationUrl);
|
||||||
this.registerLogic.setIdSid(this.props.idSid);
|
this.registerLogic.setIdSid(this.props.idSid);
|
||||||
|
this.registerLogic.setGuestAccessToken(this.props.guestAccessToken);
|
||||||
this.registerLogic.recheckState();
|
this.registerLogic.recheckState();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -186,7 +189,9 @@ module.exports = React.createClass({
|
||||||
registerStep = (
|
registerStep = (
|
||||||
<RegistrationForm
|
<RegistrationForm
|
||||||
showEmail={true}
|
showEmail={true}
|
||||||
|
defaultUsername={this.props.username}
|
||||||
defaultEmail={this.props.email}
|
defaultEmail={this.props.email}
|
||||||
|
disableUsernameChanges={this.props.disableUsernameChanges}
|
||||||
minPasswordLength={MIN_PASSWORD_LENGTH}
|
minPasswordLength={MIN_PASSWORD_LENGTH}
|
||||||
onError={this.onFormValidationFailed}
|
onError={this.onFormValidationFailed}
|
||||||
onRegisterClick={this.onFormSubmit} />
|
onRegisterClick={this.onFormSubmit} />
|
||||||
|
|
|
@ -30,6 +30,7 @@ module.exports = React.createClass({
|
||||||
defaultUsername: React.PropTypes.string,
|
defaultUsername: React.PropTypes.string,
|
||||||
showEmail: React.PropTypes.bool,
|
showEmail: React.PropTypes.bool,
|
||||||
minPasswordLength: React.PropTypes.number,
|
minPasswordLength: React.PropTypes.number,
|
||||||
|
disableUsernameChanges: React.PropTypes.bool,
|
||||||
onError: React.PropTypes.func,
|
onError: React.PropTypes.func,
|
||||||
onRegisterClick: React.PropTypes.func // onRegisterClick(Object) => ?Promise
|
onRegisterClick: React.PropTypes.func // onRegisterClick(Object) => ?Promise
|
||||||
},
|
},
|
||||||
|
@ -109,7 +110,8 @@ module.exports = React.createClass({
|
||||||
{emailSection}
|
{emailSection}
|
||||||
<br />
|
<br />
|
||||||
<input className="mx_Login_field" type="text" ref="username"
|
<input className="mx_Login_field" type="text" ref="username"
|
||||||
placeholder="User name" defaultValue={this.state.username} />
|
placeholder="User name" defaultValue={this.state.username}
|
||||||
|
disabled={this.props.disableUsernameChanges} />
|
||||||
<br />
|
<br />
|
||||||
<input className="mx_Login_field" type="password" ref="password"
|
<input className="mx_Login_field" type="password" ref="password"
|
||||||
placeholder="Password" defaultValue={this.state.password} />
|
placeholder="Password" defaultValue={this.state.password} />
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue