You've already forked matrix-react-sdk
mirror of
https://github.com/matrix-org/matrix-react-sdk.git
synced 2025-07-31 13:44:28 +03:00
Refactor to not set team token in bad ways
Use the on_logged_in dispatch instead. Call setPage in one place, _onLoggedIn, when deciding which page to view on login. Change some require to import, var to const. Remove onTeamMemberRegistered and just use a nullable argument to onRegistered
This commit is contained in:
@ -277,6 +277,9 @@ export function setLoggedIn(credentials) {
|
|||||||
credentials.userId, credentials.guest,
|
credentials.userId, credentials.guest,
|
||||||
credentials.homeserverUrl);
|
credentials.homeserverUrl);
|
||||||
|
|
||||||
|
// Resolves by default
|
||||||
|
let teamPromise = q(null);
|
||||||
|
|
||||||
// persist the session
|
// persist the session
|
||||||
if (localStorage) {
|
if (localStorage) {
|
||||||
try {
|
try {
|
||||||
@ -300,20 +303,12 @@ export function setLoggedIn(credentials) {
|
|||||||
console.warn("Error using local storage: can't persist session!", e);
|
console.warn("Error using local storage: can't persist session!", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rtsClient) {
|
if (rtsClient && !credentials.guest) {
|
||||||
rtsClient.login(credentials.userId).then((body) => {
|
teamPromise = rtsClient.login(credentials.userId).then((body) => {
|
||||||
if (body.team_token) {
|
if (body.team_token) {
|
||||||
localStorage.setItem("mx_team_token", body.team_token);
|
localStorage.setItem("mx_team_token", body.team_token);
|
||||||
dis.dispatch({
|
|
||||||
action: 'set_team_token',
|
|
||||||
value: body.team_token,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}, (err) =>{
|
return body.team_token;
|
||||||
console.error(
|
|
||||||
"Failed to get team token on login, not persisting to localStorage",
|
|
||||||
err
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -322,7 +317,12 @@ export function setLoggedIn(credentials) {
|
|||||||
|
|
||||||
MatrixClientPeg.replaceUsingCreds(credentials);
|
MatrixClientPeg.replaceUsingCreds(credentials);
|
||||||
|
|
||||||
dis.dispatch({action: 'on_logged_in'});
|
teamPromise.then((teamToken) => {
|
||||||
|
dis.dispatch({action: 'on_logged_in', teamToken: teamToken});
|
||||||
|
}, (err) => {
|
||||||
|
console.warn("Failed to get team token on login", err);
|
||||||
|
dis.dispatch({action: 'on_logged_in', teamToken: null});
|
||||||
|
});
|
||||||
|
|
||||||
startMatrixClient();
|
startMatrixClient();
|
||||||
}
|
}
|
||||||
|
@ -518,11 +518,8 @@ module.exports = React.createClass({
|
|||||||
case 'set_theme':
|
case 'set_theme':
|
||||||
this._onSetTheme(payload.value);
|
this._onSetTheme(payload.value);
|
||||||
break;
|
break;
|
||||||
case 'set_team_token':
|
|
||||||
this._onSetTeamToken(payload.value);
|
|
||||||
break;
|
|
||||||
case 'on_logged_in':
|
case 'on_logged_in':
|
||||||
this._onLoggedIn();
|
this._onLoggedIn(payload.teamToken);
|
||||||
break;
|
break;
|
||||||
case 'on_logged_out':
|
case 'on_logged_out':
|
||||||
this._onLoggedOut();
|
this._onLoggedOut();
|
||||||
@ -695,26 +692,23 @@ module.exports = React.createClass({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
* Called when the team token is acquired at registration or login. This
|
|
||||||
* should only happen if the configured RTS (see config.json teamServerURL)
|
|
||||||
* recognises the user as having an email address that matches a team.
|
|
||||||
*/
|
|
||||||
_onSetTeamToken: function(teamToken) {
|
|
||||||
this._teamToken = teamToken;
|
|
||||||
this._setPage(PageTypes.HomePage);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a new logged in session has started
|
* Called when a new logged in session has started
|
||||||
*/
|
*/
|
||||||
_onLoggedIn: function(credentials) {
|
_onLoggedIn: function(teamToken) {
|
||||||
this.guestCreds = null;
|
this.guestCreds = null;
|
||||||
this.notifyNewScreen('');
|
this.notifyNewScreen('');
|
||||||
this.setState({
|
this.setState({
|
||||||
screen: undefined,
|
screen: undefined,
|
||||||
logged_in: true,
|
logged_in: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (teamToken) {
|
||||||
|
this._teamToken = teamToken;
|
||||||
|
this._setPage(PageTypes.HomePage);
|
||||||
|
} else if (this._is_registered) {
|
||||||
|
this._setPage(PageTypes.UserSettings);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -731,6 +725,7 @@ module.exports = React.createClass({
|
|||||||
currentRoomId: null,
|
currentRoomId: null,
|
||||||
page_type: PageTypes.RoomDirectory,
|
page_type: PageTypes.RoomDirectory,
|
||||||
});
|
});
|
||||||
|
this._teamToken = null;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1001,22 +996,11 @@ module.exports = React.createClass({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onRegistered: function(credentials) {
|
onRegistered: function(credentials, teamToken) {
|
||||||
|
// teamToken may not be truthy
|
||||||
|
this._teamToken = teamToken;
|
||||||
|
this._is_registered = true;
|
||||||
Lifecycle.setLoggedIn(credentials);
|
Lifecycle.setLoggedIn(credentials);
|
||||||
// do post-registration stuff
|
|
||||||
// This now goes straight to user settings
|
|
||||||
// We use _setPage since if we wait for
|
|
||||||
// showScreen to do the dispatch loop,
|
|
||||||
// the showScreen dispatch will race with the
|
|
||||||
// sdk sync finishing and we'll probably see
|
|
||||||
// the page type still unset when the MatrixClient
|
|
||||||
// is started and show the Room Directory instead.
|
|
||||||
//this.showScreen("view_user_settings");
|
|
||||||
this._setPage(PageTypes.UserSettings);
|
|
||||||
},
|
|
||||||
|
|
||||||
onTeamMemberRegistered: function(teamToken) {
|
|
||||||
this._onSetTeamToken(teamToken);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
onFinishPostRegistration: function() {
|
onFinishPostRegistration: function() {
|
||||||
|
@ -16,18 +16,20 @@ limitations under the License.
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var React = require('react');
|
import q from 'q';
|
||||||
|
|
||||||
var sdk = require('../../../index');
|
import React from 'react';
|
||||||
var dis = require('../../../dispatcher');
|
|
||||||
var Signup = require("../../../Signup");
|
|
||||||
var ServerConfig = require("../../views/login/ServerConfig");
|
|
||||||
var MatrixClientPeg = require("../../../MatrixClientPeg");
|
|
||||||
var RegistrationForm = require("../../views/login/RegistrationForm");
|
|
||||||
var CaptchaForm = require("../../views/login/CaptchaForm");
|
|
||||||
var RtsClient = require("../../../RtsClient");
|
|
||||||
|
|
||||||
var MIN_PASSWORD_LENGTH = 6;
|
import sdk from '../../../index';
|
||||||
|
import dis from '../../../dispatcher';
|
||||||
|
import Signup from '../../../Signup';
|
||||||
|
import ServerConfig from '../../views/login/ServerConfig';
|
||||||
|
import MatrixClientPeg from '../../../MatrixClientPeg';
|
||||||
|
import RegistrationForm from '../../views/login/RegistrationForm';
|
||||||
|
import CaptchaForm from '../../views/login/CaptchaForm';
|
||||||
|
import RtsClient from '../../../RtsClient';
|
||||||
|
|
||||||
|
const MIN_PASSWORD_LENGTH = 6;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: It would be nice to make use of the InteractiveAuthEntryComponents
|
* TODO: It would be nice to make use of the InteractiveAuthEntryComponents
|
||||||
@ -206,22 +208,16 @@ module.exports = React.createClass({
|
|||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
self.props.onLoggedIn({
|
|
||||||
userId: response.user_id,
|
|
||||||
deviceId: response.device_id,
|
|
||||||
homeserverUrl: self.registerLogic.getHomeserverUrl(),
|
|
||||||
identityServerUrl: self.registerLogic.getIdentityServerUrl(),
|
|
||||||
accessToken: response.access_token
|
|
||||||
});
|
|
||||||
|
|
||||||
// Done regardless of `teamSelected`. People registering with non-team emails
|
// Done regardless of `teamSelected`. People registering with non-team emails
|
||||||
// will just nop. The point of this being we might not have the email address
|
// will just nop. The point of this being we might not have the email address
|
||||||
// that the user registered with at this stage (depending on whether this
|
// that the user registered with at this stage (depending on whether this
|
||||||
// is the client they initiated registration).
|
// is the client they initiated registration).
|
||||||
|
let trackPromise = q(null);
|
||||||
if (self._rtsClient) {
|
if (self._rtsClient) {
|
||||||
// Track referral if self.props.referrer set, get team_token in order to
|
// Track referral if self.props.referrer set, get team_token in order to
|
||||||
// retrieve team config and see welcome page etc.
|
// retrieve team config and see welcome page etc.
|
||||||
self._rtsClient.trackReferral(
|
trackPromise = self._rtsClient.trackReferral(
|
||||||
self.props.referrer || '', // Default to empty string = not referred
|
self.props.referrer || '', // Default to empty string = not referred
|
||||||
self.registerLogic.params.idSid,
|
self.registerLogic.params.idSid,
|
||||||
self.registerLogic.params.clientSecret
|
self.registerLogic.params.clientSecret
|
||||||
@ -229,7 +225,6 @@ module.exports = React.createClass({
|
|||||||
const teamToken = data.team_token;
|
const teamToken = data.team_token;
|
||||||
// Store for use /w welcome pages
|
// Store for use /w welcome pages
|
||||||
window.localStorage.setItem('mx_team_token', teamToken);
|
window.localStorage.setItem('mx_team_token', teamToken);
|
||||||
self.props.onTeamMemberRegistered(teamToken);
|
|
||||||
|
|
||||||
self._rtsClient.getTeam(teamToken).then((team) => {
|
self._rtsClient.getTeam(teamToken).then((team) => {
|
||||||
console.log(
|
console.log(
|
||||||
@ -248,12 +243,42 @@ module.exports = React.createClass({
|
|||||||
}, (err) => {
|
}, (err) => {
|
||||||
console.error('Error getting team config', err);
|
console.error('Error getting team config', err);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
return teamToken;
|
||||||
}, (err) => {
|
}, (err) => {
|
||||||
console.error('Error tracking referral', err);
|
console.error('Error tracking referral', err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self.props.brand) {
|
return trackPromise.then((teamToken) => {
|
||||||
|
console.info('Team token promise',teamToken);
|
||||||
|
self.props.onLoggedIn({
|
||||||
|
userId: response.user_id,
|
||||||
|
deviceId: response.device_id,
|
||||||
|
homeserverUrl: self.registerLogic.getHomeserverUrl(),
|
||||||
|
identityServerUrl: self.registerLogic.getIdentityServerUrl(),
|
||||||
|
accessToken: response.access_token
|
||||||
|
}, teamToken);
|
||||||
|
}).done(() => {
|
||||||
|
self._setupPushers();
|
||||||
|
});
|
||||||
|
}, function(err) {
|
||||||
|
if (err.message) {
|
||||||
|
self.setState({
|
||||||
|
errorText: err.message
|
||||||
|
});
|
||||||
|
}
|
||||||
|
self.setState({
|
||||||
|
busy: false
|
||||||
|
});
|
||||||
|
console.log(err);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_setupPushers: function() {
|
||||||
|
if (!self.props.brand) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
MatrixClientPeg.get().getPushers().done((resp)=>{
|
MatrixClientPeg.get().getPushers().done((resp)=>{
|
||||||
var pushers = resp.pushers;
|
var pushers = resp.pushers;
|
||||||
for (var i = 0; i < pushers.length; ++i) {
|
for (var i = 0; i < pushers.length; ++i) {
|
||||||
@ -270,19 +295,6 @@ module.exports = React.createClass({
|
|||||||
}, (error) => {
|
}, (error) => {
|
||||||
console.error("Couldn't get pushers: " + error);
|
console.error("Couldn't get pushers: " + error);
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
}, function(err) {
|
|
||||||
if (err.message) {
|
|
||||||
self.setState({
|
|
||||||
errorText: err.message
|
|
||||||
});
|
|
||||||
}
|
|
||||||
self.setState({
|
|
||||||
busy: false
|
|
||||||
});
|
|
||||||
console.log(err);
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
onFormValidationFailed: function(errCode) {
|
onFormValidationFailed: function(errCode) {
|
||||||
|
Reference in New Issue
Block a user