Fix MFA enforcement redirect loop (#4991)

Этот коммит содержится в:
Joram Wilander
2017-01-06 09:00:21 -05:00
коммит произвёл Harrison Healey
родитель ff127bbaa3
Коммит 38f89cb144
3 изменённых файлов: 34 добавлений и 22 удалений

Просмотреть файл

@@ -13,7 +13,6 @@ import helpRoute from 'routes/route_help.jsx';
import BrowserStore from 'stores/browser_store.jsx';
import ErrorStore from 'stores/error_store.jsx';
import UserStore from 'stores/user_store.jsx';
import * as UserAgent from 'utils/user_agent.jsx';
import {browserHistory} from 'react-router/es6';
@@ -31,28 +30,10 @@ function preLogin(nextState, replace, callback) {
callback();
}
const mfaPaths = [
'/mfa/setup',
'/mfa/confirm'
];
const mfaAuthServices = [
'',
'email',
'ldap'
];
function preLoggedIn(nextState, replace, callback) {
if (window.mm_license.MFA === 'true' &&
window.mm_config.EnableMultifactorAuthentication === 'true' &&
window.mm_config.EnforceMultifactorAuthentication === 'true' &&
mfaPaths.indexOf(nextState.location.pathname) === -1) {
const user = UserStore.getCurrentUser();
if (user && !user.mfa_active &&
mfaAuthServices.indexOf(user.auth_service) !== -1) {
browserHistory.push('/mfa/setup');
return;
}
if (RouteUtils.checkIfMFARequired(nextState)) {
browserHistory.push('/mfa/setup');
return;
}
ErrorStore.clearLastError();

Просмотреть файл

@@ -61,6 +61,11 @@ function doChannelChange(state, replace, callback) {
}
function preNeedsTeam(nextState, replace, callback) {
if (RouteUtils.checkIfMFARequired(nextState)) {
browserHistory.push('/mfa/setup');
return;
}
// First check to make sure you're in the current team
// for the current url.
const teamName = nextState.params.team;

Просмотреть файл

@@ -2,6 +2,7 @@
// See License.txt for license information.
import * as Utils from 'utils/utils.jsx';
import UserStore from 'stores/user_store.jsx';
export function importComponentSuccess(callback) {
return (comp) => callback(null, comp.default);
@@ -18,3 +19,28 @@ export const notFoundParams = {
linkmessage: Utils.localizeMessage('error.not_found.link_message', 'Back to Mattermost')
};
const mfaPaths = [
'/mfa/setup',
'/mfa/confirm'
];
const mfaAuthServices = [
'',
'email',
'ldap'
];
export function checkIfMFARequired(state) {
if (window.mm_license.MFA === 'true' &&
window.mm_config.EnableMultifactorAuthentication === 'true' &&
window.mm_config.EnforceMultifactorAuthentication === 'true' &&
mfaPaths.indexOf(state.location.pathname) === -1) {
const user = UserStore.getCurrentUser();
if (user && !user.mfa_active &&
mfaAuthServices.indexOf(user.auth_service) !== -1) {
return true;
}
}
return false;
}