Fix MFA enforcement redirect loop (#4991)
Этот коммит содержится в:
коммит произвёл
Harrison Healey
родитель
ff127bbaa3
Коммит
38f89cb144
@@ -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;
|
||||||
|
}
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user