Fix login after session expires or is revoked (#1360)

* Fix login after session expires or is revoked

* Feedback review

* Upgrade mattermost-redux
This commit is contained in:
enahum 2018-01-18 08:26:46 -03:00 committed by GitHub
parent 926ffe96c5
commit fff887bf85
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 40 additions and 20 deletions

View file

@ -1,14 +1,18 @@
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import {batchActions} from 'redux-batched-actions';
import {GeneralTypes} from 'mattermost-redux/action_types';
import {ViewTypes} from 'app/constants';
export function handleServerUrlChanged(serverUrl) {
return async (dispatch, getState) => {
dispatch({
type: ViewTypes.SERVER_URL_CHANGED,
serverUrl
}, getState);
dispatch(batchActions([
{type: GeneralTypes.CLIENT_CONFIG_RESET},
{type: GeneralTypes.CLIENT_LICENSE_RESET},
{type: ViewTypes.SERVER_URL_CHANGED, serverUrl}
]), getState);
};
}

View file

@ -233,6 +233,7 @@ export default class Mattermost {
const {dispatch, getState} = this.store;
const version = serverVersion.match(/^[0-9]*.[0-9]*.[0-9]*(-[a-zA-Z0-9.-]*)?/g)[0];
const intl = this.getIntl();
const state = getState();
if (serverVersion) {
if (semver.valid(version) && semver.lt(version, Config.MinServerVersion)) {
@ -245,7 +246,7 @@ export default class Mattermost {
}],
{cancelable: false}
);
} else {
} else if (state.entities.users && state.entities.users.currentUserId) {
setServerVersion(serverVersion)(dispatch, getState);
const data = await loadConfigAndLicense()(dispatch, getState);
this.configureAnalytics(data.config);

View file

@ -343,6 +343,7 @@ class Login extends PureComponent {
style={style.container}
contentContainerStyle={style.innerContainer}
keyboardShouldPersistTaps='handled'
enableOnAndroid={true}
>
<Image
source={logo}

View file

@ -5,9 +5,9 @@ import {bindActionCreators} from 'redux';
import {connect} from 'react-redux';
import {getPing, resetPing} from 'mattermost-redux/actions/general';
import {RequestStatus} from 'mattermost-redux/constants';
import {setLastUpgradeCheck} from 'app/actions/views/client_upgrade';
import {loadConfigAndLicense} from 'app/actions/views/root';
import {handleServerUrlChanged} from 'app/actions/views/select_server';
import getClientUpgrade from 'app/selectors/client_upgrade';
import {getTheme} from 'mattermost-redux/selectors/entities/preferences';
@ -15,7 +15,6 @@ import {getTheme} from 'mattermost-redux/selectors/entities/preferences';
import SelectServer from './select_server';
function mapStateToProps(state) {
const {config: configRequest, license: licenseRequest} = state.requests.general;
const {config, license} = state.entities.general;
const {currentVersion, latestVersion, minVersion} = getClientUpgrade(state);
@ -23,7 +22,7 @@ function mapStateToProps(state) {
...state.views.selectServer,
config,
currentVersion,
hasConfigAndLicense: configRequest.status === RequestStatus.SUCCESS && licenseRequest.status === RequestStatus.SUCCESS,
hasConfigAndLicense: Object.keys(config).length > 0 && Object.keys(license).length > 0,
latestVersion,
license,
minVersion,
@ -36,6 +35,7 @@ function mapDispatchToProps(dispatch) {
actions: bindActionCreators({
getPing,
handleServerUrlChanged,
loadConfigAndLicense,
resetPing,
setLastUpgradeCheck
}, dispatch)

View file

@ -38,6 +38,7 @@ class SelectServer extends PureComponent {
actions: PropTypes.shape({
getPing: PropTypes.func.isRequired,
handleServerUrlChanged: PropTypes.func.isRequired,
loadConfigAndLicense: PropTypes.func.isRequired,
resetPing: PropTypes.func.isRequired,
setLastUpgradeCheck: PropTypes.func.isRequired
}).isRequired,
@ -60,7 +61,8 @@ class SelectServer extends PureComponent {
this.state = {
connected: false,
connecting: false,
error: null
error: null,
url: props.serverUrl
};
this.cancelPing = null;
@ -176,6 +178,10 @@ class SelectServer extends PureComponent {
this.blur();
};
handleTextChanged = (url) => {
this.setState({url});
};
onClick = wrapWithPreventDoubleTap(async () => {
const preUrl = urlParse(this.props.serverUrl, true);
const url = stripTrailingSlashes(preUrl.protocol + '//' + preUrl.host);
@ -205,6 +211,12 @@ class SelectServer extends PureComponent {
});
pingServer = (url) => {
const {
getPing,
handleServerUrlChanged,
loadConfigAndLicense
} = this.props.actions;
this.setState({
connected: false,
connecting: true,
@ -213,7 +225,7 @@ class SelectServer extends PureComponent {
Client4.setUrl(url);
Client.setUrl(url);
this.props.actions.handleServerUrlChanged(url);
handleServerUrlChanged(url);
let cancel = false;
this.cancelPing = () => {
@ -227,11 +239,15 @@ class SelectServer extends PureComponent {
this.cancelPing = null;
};
this.props.actions.getPing().then((result) => {
getPing().then((result) => {
if (cancel) {
return;
}
if (!result.error) {
loadConfigAndLicense();
}
this.setState({
connected: !result.error,
connecting: false,
@ -259,14 +275,12 @@ class SelectServer extends PureComponent {
};
render() {
const {
allowOtherServers,
serverUrl
} = this.props;
const {allowOtherServers} = this.props;
const {
connected,
connecting,
error
error,
url
} = this.state;
let buttonIcon;
@ -327,9 +341,9 @@ class SelectServer extends PureComponent {
</View>
<TextInputWithLocalizedPlaceholder
ref={this.inputRef}
value={serverUrl}
value={url}
editable={!inputDisabled}
onChangeText={this.props.actions.handleServerUrlChanged}
onChangeText={this.handleTextChanged}
onSubmitEditing={this.onClick}
style={inputStyle}
autoCapitalize='none'

View file

@ -3973,8 +3973,8 @@ makeerror@1.0.x:
tmpl "1.0.x"
mattermost-redux@mattermost/mattermost-redux:
version "1.0.1"
resolved "https://codeload.github.com/mattermost/mattermost-redux/tar.gz/fb083f67b5560ff64fe251415460a1af5d690e5a"
version "1.1.0"
resolved "https://codeload.github.com/mattermost/mattermost-redux/tar.gz/94861ab29626f54fa8c40a2a6a5fa3f3850c7299"
dependencies:
deep-equal "1.0.1"
form-data "2.3.1"