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:
parent
926ffe96c5
commit
fff887bf85
6 changed files with 40 additions and 20 deletions
|
|
@ -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);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -343,6 +343,7 @@ class Login extends PureComponent {
|
|||
style={style.container}
|
||||
contentContainerStyle={style.innerContainer}
|
||||
keyboardShouldPersistTaps='handled'
|
||||
enableOnAndroid={true}
|
||||
>
|
||||
<Image
|
||||
source={logo}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in a new issue