// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import React from 'react'; import FormError from 'components/form_error.jsx'; import LoadingScreen from 'components/loading_screen.jsx'; import UserStore from 'stores/user_store.jsx'; import BrowserStore from 'stores/browser_store.jsx'; import * as AsyncClient from 'utils/async_client.jsx'; import Client from 'client/web_client.jsx'; import * as GlobalActions from 'actions/global_actions.jsx'; import {addUserToTeamFromInvite, getInviteInfo} from 'actions/team_actions.jsx'; import logoImage from 'images/logo.png'; import ErrorBar from 'components/error_bar.jsx'; import {FormattedMessage} from 'react-intl'; import {browserHistory, Link} from 'react-router/es6'; export default class SignupController extends React.Component { constructor(props) { super(props); this.renderSignupControls = this.renderSignupControls.bind(this); let loading = false; let serverError = ''; let noOpenServerError = false; let usedBefore = false; if (props.location.query) { const hash = props.location.query.h; const inviteId = props.location.query.id; if (inviteId) { loading = true; } else if (hash && !UserStore.getCurrentUser()) { usedBefore = BrowserStore.getGlobalItem(hash); } else if (!inviteId && global.window.mm_config.EnableOpenServer !== 'true' && !UserStore.getNoAccounts()) { noOpenServerError = true; serverError = ( ); } } this.state = { loading, serverError, noOpenServerError, usedBefore }; } componentDidMount() { AsyncClient.checkVersion(); BrowserStore.removeGlobalItem('team'); if (this.props.location.query) { const hash = this.props.location.query.h; const data = this.props.location.query.d; const inviteId = this.props.location.query.id; const userLoggedIn = UserStore.getCurrentUser() != null; if ((inviteId || hash) && userLoggedIn) { addUserToTeamFromInvite( data, hash, inviteId, (team) => { GlobalActions.emitInitialLoad( () => { browserHistory.push('/' + team.name + '/channels/town-square'); } ); }, () => { this.setState({ // eslint-disable-line react/no-did-mount-set-state noOpenServerError: true, loading: false, serverError: ( ) }); } ); return; } if (inviteId) { getInviteInfo( inviteId, (inviteData) => { if (!inviteData) { return; } this.setState({ // eslint-disable-line react/no-did-mount-set-state serverError: '', loading: false }); }, () => { this.setState({ // eslint-disable-line react/no-did-mount-set-state noOpenServerError: true, loading: false, serverError: ( ) }); } ); return; } if (userLoggedIn) { GlobalActions.redirectUserToDefaultTeam(); } } } renderSignupControls() { let signupControls = []; if (global.window.mm_config.EnableSignUpWithEmail === 'true') { signupControls.push( ); } if (global.window.mm_config.EnableSignUpWithGitLab === 'true') { signupControls.push( ); } if (global.window.mm_license.IsLicensed === 'true' && global.window.mm_config.EnableSignUpWithGoogle === 'true') { signupControls.push( ); } if (global.window.mm_license.IsLicensed === 'true' && global.window.mm_config.EnableSignUpWithOffice365 === 'true') { signupControls.push( ); } if (global.window.mm_license.IsLicensed === 'true' && global.window.mm_config.EnableLdap === 'true') { signupControls.push( ); } if (global.window.mm_license.IsLicensed === 'true' && global.window.mm_config.EnableSaml === 'true') { let query = ''; if (window.location.search) { query = '&action=signup'; } else { query = '?action=signup'; } signupControls.push( {global.window.mm_config.SamlLoginButtonText} ); } if (signupControls.length === 0) { const signupDisabledError = ( ); signupControls = ( ); } else if (signupControls.length === 1) { if (global.window.mm_config.EnableSignUpWithEmail === 'true') { return browserHistory.push('/signup_email' + window.location.search); } else if (global.window.mm_license.IsLicensed === 'true' && global.window.mm_config.EnableLdap === 'true') { return browserHistory.push('/signup_ldap' + window.location.search); } } return signupControls; } render() { if (this.state.loading) { return (); } if (this.state.usedBefore) { return (
); } let serverError = null; if (this.state.serverError) { serverError = (
); } let signupControls; if (this.state.noOpenServerError || this.state.usedBefore) { signupControls = null; } else { signupControls = this.renderSignupControls(); } return (

{global.window.mm_config.SiteName}

{signupControls} {serverError}
); } } SignupController.propTypes = { location: React.PropTypes.object };