From 8f91c777559748fa6e857d9fc1f4ae079a532813 Mon Sep 17 00:00:00 2001 From: Christopher Speller Date: Mon, 3 Oct 2016 16:03:15 -0400 Subject: Adding ability to serve TLS directly from Mattermost server (#4119) --- .../admin_console/configuration_settings.jsx | 157 +++++++++++++- .../connection_security_dropdown_setting.jsx | 228 +++++++++++++++------ webapp/components/admin_console/email_settings.jsx | 4 +- webapp/components/admin_console/ldap_settings.jsx | 4 +- .../webserver_mode_dropdown_setting.jsx | 2 +- 5 files changed, 327 insertions(+), 68 deletions(-) (limited to 'webapp/components') diff --git a/webapp/components/admin_console/configuration_settings.jsx b/webapp/components/admin_console/configuration_settings.jsx index db976e041..59fa1d781 100644 --- a/webapp/components/admin_console/configuration_settings.jsx +++ b/webapp/components/admin_console/configuration_settings.jsx @@ -11,6 +11,8 @@ import SettingsGroup from './settings_group.jsx'; import TextSetting from './text_setting.jsx'; import ReloadConfigButton from './reload_config.jsx'; import WebserverModeDropdownSetting from './webserver_mode_dropdown_setting.jsx'; +import {ConnectionSecurityDropdownSettingWebserver} from './connection_security_dropdown_setting.jsx'; +import BooleanSetting from './boolean_setting.jsx'; export default class ConfigurationSettings extends AdminSettings { constructor(props) { @@ -31,6 +33,14 @@ export default class ConfigurationSettings extends AdminSettings { config.ServiceSettings.SiteURL = this.state.siteURL; config.ServiceSettings.ListenAddress = this.state.listenAddress; config.ServiceSettings.WebserverMode = this.state.webserverMode; + config.ServiceSettings.ConnectionSecurity = this.state.connectionSecurity; + config.ServiceSettings.TLSCertFile = this.state.TLSCertFile; + config.ServiceSettings.TLSKeyFile = this.state.TLSKeyFile; + config.ServiceSettings.UseLetsEncrypt = this.state.useLetsEncrypt; + config.ServiceSettings.LetsEncryptCertificateCacheFile = this.state.letsEncryptCertificateCacheFile; + config.ServiceSettings.Forward80To443 = this.state.forward80To443; + config.ServiceSettings.ReadTimeout = this.parseIntNonZero(this.state.readTimeout); + config.ServiceSettings.WriteTimeout = this.parseIntNonZero(this.state.writeTimeout); return config; } @@ -39,7 +49,15 @@ export default class ConfigurationSettings extends AdminSettings { return { siteURL: config.ServiceSettings.SiteURL, listenAddress: config.ServiceSettings.ListenAddress, - webserverMode: config.ServiceSettings.WebserverMode + webserverMode: config.ServiceSettings.WebserverMode, + connectionSecurity: config.ServiceSettings.ConnectionSecurity, + TLSCertFile: config.ServiceSettings.TLSCertFile, + TLSKeyFile: config.ServiceSettings.TLSKeyFile, + useLetsEncrypt: config.ServiceSettings.UseLetsEncrypt, + letsEncryptCertificateCacheFile: config.ServiceSettings.LetsEncryptCertificateCacheFile, + forward80To443: config.ServiceSettings.Forward80To443, + readTimeout: config.ServiceSettings.ReadTimeout, + writeTimeout: config.ServiceSettings.WriteTimeout }; } @@ -57,6 +75,14 @@ export default class ConfigurationSettings extends AdminSettings { renderSettings() { return ( +
+
+ +
+
} value={this.state.listenAddress} onChange={this.handleChange} /> + + + } + helpText={ + + } + disabled={this.state.useLetsEncrypt} + value={this.state.TLSCertFile} + onChange={this.handleChange} + /> + + } + helpText={ + + } + disabled={this.state.useLetsEncrypt} + value={this.state.TLSKeyFile} + onChange={this.handleChange} + /> + + } + helpText={ + + } + value={this.state.useLetsEncrypt} + onChange={this.handleChange} + /> + + } + helpText={ + + } + disabled={!this.state.useLetsEncrypt} + value={this.state.letsEncryptCertificateCacheFile} + onChange={this.handleChange} + /> + + } + helpText={ + + } + value={this.state.forward80To443} + onChange={this.handleChange} + /> + + } + helpText={ + + } + value={this.state.readTimeout} + onChange={this.handleChange} + /> + + } + helpText={ + + } + value={this.state.writeTimeout} + onChange={this.handleChange} + /> + + + + + + + +); + +const SECTION_PLAIN = ( + + + + + + + + +); + +const SECTION_TLS = ( + + + + + + + + +); + +const SECTION_STARTTLS = ( + + + + + + + + +); + +const CONNECTION_SECURITY_HELP_TEXT_EMAIL = ( - - - - - - - - - - - - - - - - + {SECTION_NONE} + {SECTION_PLAIN} + {SECTION_TLS} + {SECTION_STARTTLS} + +
- - - -
- - - -
- - - -
- - - -
+); + +const CONNECTION_SECURITY_HELP_TEXT_LDAP = ( + + + {SECTION_NONE} + {SECTION_TLS} + {SECTION_STARTTLS}
); -export default class ConnectionSecurityDropdownSetting extends React.Component { +const CONNECTION_SECURITY_HELP_TEXT_WEBSERVER = ( + + + {SECTION_NONE} + {SECTION_TLS} + +
+); + +export class ConnectionSecurityDropdownSettingEmail extends React.Component { //eslint-disable-line react/no-multi-comp render() { return ( + ); + } +} +ConnectionSecurityDropdownSettingEmail.defaultProps = { +}; + +ConnectionSecurityDropdownSettingEmail.propTypes = { + value: React.PropTypes.string.isRequired, + onChange: React.PropTypes.func.isRequired, + disabled: React.PropTypes.bool.isRequired +}; + +export class ConnectionSecurityDropdownSettingLdap extends React.Component { //eslint-disable-line react/no-multi-comp + render() { + return ( + + } + value={this.props.value} + onChange={this.props.onChange} + disabled={this.props.disabled} + helpText={CONNECTION_SECURITY_HELP_TEXT_LDAP} + /> + ); + } +} +ConnectionSecurityDropdownSettingLdap.defaultProps = { +}; + +ConnectionSecurityDropdownSettingLdap.propTypes = { + value: React.PropTypes.string.isRequired, + onChange: React.PropTypes.func.isRequired, + disabled: React.PropTypes.bool.isRequired +}; + +export class ConnectionSecurityDropdownSettingWebserver extends React.Component { //eslint-disable-line react/no-multi-comp + render() { + return ( + + } + value={this.props.value} + onChange={this.props.onChange} + disabled={this.props.disabled} + helpText={CONNECTION_SECURITY_HELP_TEXT_WEBSERVER} /> ); } } -ConnectionSecurityDropdownSetting.defaultProps = { +ConnectionSecurityDropdownSettingWebserver.defaultProps = { }; -ConnectionSecurityDropdownSetting.propTypes = { +ConnectionSecurityDropdownSettingWebserver.propTypes = { value: React.PropTypes.string.isRequired, onChange: React.PropTypes.func.isRequired, disabled: React.PropTypes.bool.isRequired diff --git a/webapp/components/admin_console/email_settings.jsx b/webapp/components/admin_console/email_settings.jsx index b05a3f905..d62c5ad4c 100644 --- a/webapp/components/admin_console/email_settings.jsx +++ b/webapp/components/admin_console/email_settings.jsx @@ -7,7 +7,7 @@ import * as Utils from 'utils/utils.jsx'; import AdminSettings from './admin_settings.jsx'; import BooleanSetting from './boolean_setting.jsx'; -import ConnectionSecurityDropdownSetting from './connection_security_dropdown_setting.jsx'; +import {ConnectionSecurityDropdownSettingEmail} from './connection_security_dropdown_setting.jsx'; import EmailConnectionTest from './email_connection_test.jsx'; import {FormattedHTMLMessage, FormattedMessage} from 'react-intl'; import SettingsGroup from './settings_group.jsx'; @@ -266,7 +266,7 @@ export default class EmailSettings extends AdminSettings { onChange={this.handleChange} disabled={!this.state.sendEmailNotifications} /> - -

-- cgit v1.2.3-1-g7c22