From fff887bf8550fdd545c26648af48a0e2b7aab60d Mon Sep 17 00:00:00 2001 From: enahum Date: Thu, 18 Jan 2018 08:26:46 -0300 Subject: [PATCH] Fix login after session expires or is revoked (#1360) * Fix login after session expires or is revoked * Feedback review * Upgrade mattermost-redux --- app/actions/views/select_server.js | 12 +++++--- app/mattermost.js | 3 +- app/screens/login/login.js | 1 + app/screens/select_server/index.js | 6 ++-- app/screens/select_server/select_server.js | 34 +++++++++++++++------- yarn.lock | 4 +-- 6 files changed, 40 insertions(+), 20 deletions(-) diff --git a/app/actions/views/select_server.js b/app/actions/views/select_server.js index 4cee7c4a7..03fc46a07 100644 --- a/app/actions/views/select_server.js +++ b/app/actions/views/select_server.js @@ -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); }; } diff --git a/app/mattermost.js b/app/mattermost.js index d7e894fae..c672344ad 100644 --- a/app/mattermost.js +++ b/app/mattermost.js @@ -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); diff --git a/app/screens/login/login.js b/app/screens/login/login.js index 466ff71f7..9f234431b 100644 --- a/app/screens/login/login.js +++ b/app/screens/login/login.js @@ -343,6 +343,7 @@ class Login extends PureComponent { style={style.container} contentContainerStyle={style.innerContainer} keyboardShouldPersistTaps='handled' + enableOnAndroid={true} > 0 && Object.keys(license).length > 0, latestVersion, license, minVersion, @@ -36,6 +35,7 @@ function mapDispatchToProps(dispatch) { actions: bindActionCreators({ getPing, handleServerUrlChanged, + loadConfigAndLicense, resetPing, setLastUpgradeCheck }, dispatch) diff --git a/app/screens/select_server/select_server.js b/app/screens/select_server/select_server.js index 12b5d3acf..f1b1f3bdd 100644 --- a/app/screens/select_server/select_server.js +++ b/app/screens/select_server/select_server.js @@ -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 {