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 BrowserStore from 'stores/browser_store.jsx';
import ErrorStore from 'stores/error_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 * as UserAgent from 'utils/user_agent.jsx';
import {browserHistory} from 'react-router/es6'; import {browserHistory} from 'react-router/es6';
@@ -31,28 +30,10 @@ function preLogin(nextState, replace, callback) {
callback(); callback();
} }
const mfaPaths = [
'/mfa/setup',
'/mfa/confirm'
];
const mfaAuthServices = [
'',
'email',
'ldap'
];
function preLoggedIn(nextState, replace, callback) { function preLoggedIn(nextState, replace, callback) {
if (window.mm_license.MFA === 'true' && if (RouteUtils.checkIfMFARequired(nextState)) {
window.mm_config.EnableMultifactorAuthentication === 'true' && browserHistory.push('/mfa/setup');
window.mm_config.EnforceMultifactorAuthentication === 'true' && return;
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;
}
} }
ErrorStore.clearLastError(); ErrorStore.clearLastError();

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

@@ -61,6 +61,11 @@ function doChannelChange(state, replace, callback) {
} }
function preNeedsTeam(nextState, 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 // First check to make sure you're in the current team
// for the current url. // for the current url.
const teamName = nextState.params.team; const teamName = nextState.params.team;

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

@@ -2,6 +2,7 @@
// See License.txt for license information. // See License.txt for license information.
import * as Utils from 'utils/utils.jsx'; import * as Utils from 'utils/utils.jsx';
import UserStore from 'stores/user_store.jsx';
export function importComponentSuccess(callback) { export function importComponentSuccess(callback) {
return (comp) => callback(null, comp.default); return (comp) => callback(null, comp.default);
@@ -18,3 +19,28 @@ export const notFoundParams = {
linkmessage: Utils.localizeMessage('error.not_found.link_message', 'Back to Mattermost') 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;
}