// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import LoginEmail from './components/login_email.jsx'; import LoginUsername from './components/login_username.jsx'; import LoginLdap from './components/login_ldap.jsx'; import LoginMfa from './components/login_mfa.jsx'; import ErrorBar from 'components/error_bar.jsx'; import * as GlobalActions from '../../action_creators/global_actions.jsx'; import UserStore from 'stores/user_store.jsx'; import Client from 'utils/web_client.jsx'; import * as TextFormatting from 'utils/text_formatting.jsx'; import * as Utils from 'utils/utils.jsx'; import Constants from 'utils/constants.jsx'; import {FormattedMessage} from 'react-intl'; import {browserHistory, Link} from 'react-router'; import React from 'react'; import logoImage from 'images/logo.png'; export default class Login extends React.Component { constructor(props) { super(props); this.preSubmit = this.preSubmit.bind(this); this.submit = this.submit.bind(this); this.finishSignin = this.finishSignin.bind(this); const state = {}; state.showMfa = false; this.state = state; } componentDidMount() { document.title = global.window.mm_config.SiteName; if (UserStore.getCurrentUser()) { browserHistory.push('/select_team'); } } preSubmit(method, loginId, password) { if (global.window.mm_config.EnableMultifactorAuthentication !== 'true') { this.submit(method, loginId, password, ''); return; } Client.checkMfa(method, loginId, (data) => { if (data.mfa_required === 'true') { this.setState({showMfa: true, method, loginId, password}); } else { this.submit(method, loginId, password, ''); } }, (err) => { if (method === Constants.EMAIL_SERVICE) { this.setState({serverEmailError: err.message}); } else if (method === Constants.USERNAME_SERVICE) { this.setState({serverUsernameError: err.message}); } else if (method === Constants.LDAP_SERVICE) { this.setState({serverLdapError: err.message}); } } ); } finishSignin() { GlobalActions.emitInitialLoad( () => { browserHistory.push('/select_team'); } ); } submit(method, loginId, password, token) { this.setState({showMfa: false, serverEmailError: null, serverUsernameError: null, serverLdapError: null}); if (method === Constants.EMAIL_SERVICE) { Client.webLogin( loginId, null, password, token, () => { UserStore.setLastEmail(loginId); this.finishSignin(); }, (err) => { if (err.id === 'api.user.login.not_verified.app_error') { browserHistory.push('/should_verify_email?&email=' + encodeURIComponent(loginId)); return; } this.setState({serverEmailError: err.message}); } ); } else if (method === Constants.USERNAME_SERVICE) { Client.webLogin( null, loginId, password, token, () => { UserStore.setLastUsername(loginId); const redirect = Utils.getUrlParameter('redirect'); if (redirect) { browserHistory.push(decodeURIComponent(redirect)); } else { this.finishSignin(); } }, (err) => { if (err.id === 'api.user.login.not_verified.app_error') { this.setState({serverUsernameError: Utils.localizeMessage('login_username.verifyEmailError', 'Please verify your email address. Check your inbox for an email.')}); } else if (err.id === 'store.sql_user.get_by_username.app_error') { this.setState({serverUsernameError: Utils.localizeMessage('login_username.userNotFoundError', 'We couldn\'t find an existing account matching your username for this team.')}); } else { this.setState({serverUsernameError: err.message}); } } ); } else if (method === Constants.LDAP_SERVICE) { Client.loginByLdap( loginId, password, token, () => { const redirect = Utils.getUrlParameter('redirect'); if (redirect) { browserHistory.push(decodeURIComponent(redirect)); } else { this.finishSignin(); } }, (err) => { this.setState({serverLdapError: err.message}); } ); } } createCustomLogin() { if (global.window.mm_license.IsLicensed === 'true' && global.window.mm_license.CustomBrand === 'true' && global.window.mm_config.EnableCustomBrand === 'true') { const text = global.window.mm_config.CustomBrandText || ''; return (