// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import * as Client from '../../utils/client.jsx'; import * as AsyncClient from '../../utils/async_client.jsx'; import {injectIntl, intlShape, defineMessages, FormattedMessage, FormattedHTMLMessage} from 'mm-intl'; const DEFAULT_LDAP_PORT = 389; const DEFAULT_QUERY_TIMEOUT = 60; var holders = defineMessages({ serverEx: { id: 'admin.ldap.serverEx', defaultMessage: 'Ex "10.0.0.23"' }, portEx: { id: 'admin.ldap.portEx', defaultMessage: 'Ex "389"' }, baseEx: { id: 'admin.ldap.baseEx', defaultMessage: 'Ex "dc=mydomain,dc=com"' }, firstnameAttrEx: { id: 'admin.ldap.firstnameAttrEx', defaultMessage: 'Ex "givenName"' }, lastnameAttrEx: { id: 'admin.ldap.lastnameAttrEx', defaultMessage: 'Ex "sn"' }, emailAttrEx: { id: 'admin.ldap.emailAttrEx', defaultMessage: 'Ex "mail"' }, usernameAttrEx: { id: 'admin.ldap.usernameAttrEx', defaultMessage: 'Ex "sAMAccountName"' }, idAttrEx: { id: 'admin.ldap.idAttrEx', defaultMessage: 'Ex "sAMAccountName"' }, queryEx: { id: 'admin.ldap.queryEx', defaultMessage: 'Ex "60"' }, saving: { id: 'admin.ldap.saving', defaultMessage: 'Saving Config...' } }); class LdapSettings extends React.Component { constructor(props) { super(props); this.handleSubmit = this.handleSubmit.bind(this); this.handleChange = this.handleChange.bind(this); this.handleEnable = this.handleEnable.bind(this); this.handleDisable = this.handleDisable.bind(this); this.state = { saveNeeded: false, serverError: null, enable: this.props.config.LdapSettings.Enable }; } handleChange() { this.setState({saveNeeded: true}); } handleEnable() { this.setState({saveNeeded: true, enable: true}); } handleDisable() { this.setState({saveNeeded: true, enable: false}); } handleSubmit(e) { e.preventDefault(); $('#save-button').button('loading'); const config = this.props.config; config.LdapSettings.Enable = this.refs.Enable.checked; config.LdapSettings.LdapServer = this.refs.LdapServer.value.trim(); let LdapPort = DEFAULT_LDAP_PORT; if (!isNaN(parseInt(ReactDOM.findDOMNode(this.refs.LdapPort).value, 10))) { LdapPort = parseInt(ReactDOM.findDOMNode(this.refs.LdapPort).value, 10); } config.LdapSettings.LdapPort = LdapPort; config.LdapSettings.BaseDN = this.refs.BaseDN.value.trim(); config.LdapSettings.BindUsername = this.refs.BindUsername.value.trim(); config.LdapSettings.BindPassword = this.refs.BindPassword.value.trim(); config.LdapSettings.FirstNameAttribute = this.refs.FirstNameAttribute.value.trim(); config.LdapSettings.LastNameAttribute = this.refs.LastNameAttribute.value.trim(); config.LdapSettings.EmailAttribute = this.refs.EmailAttribute.value.trim(); config.LdapSettings.UsernameAttribute = this.refs.UsernameAttribute.value.trim(); config.LdapSettings.IdAttribute = this.refs.IdAttribute.value.trim(); let QueryTimeout = DEFAULT_QUERY_TIMEOUT; if (!isNaN(parseInt(ReactDOM.findDOMNode(this.refs.QueryTimeout).value, 10))) { QueryTimeout = parseInt(ReactDOM.findDOMNode(this.refs.QueryTimeout).value, 10); } config.LdapSettings.QueryTimeout = QueryTimeout; Client.saveConfig( config, () => { AsyncClient.getConfig(); this.setState({ serverError: null, saveNeeded: false }); $('#save-button').button('reset'); }, (err) => { this.setState({ serverError: err.message, saveNeeded: true }); $('#save-button').button('reset'); } ); } render() { const {formatMessage} = this.props.intl; let serverError = ''; if (this.state.serverError) { serverError =
; } let saveClass = 'btn'; if (this.state.saveNeeded) { saveClass = 'btn btn-primary'; } const licenseEnabled = global.window.mm_license.IsLicensed === 'true' && global.window.mm_license.LDAP === 'true'; let bannerContent; if (licenseEnabled) { bannerContent = (

); } else { bannerContent = (
); } return (
{bannerContent}

{serverError}
); } } LdapSettings.defaultProps = { }; LdapSettings.propTypes = { intl: intlShape.isRequired, config: React.PropTypes.object }; export default injectIntl(LdapSettings);