mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
Certain S3 compatible servers only use Legacy Signature (AWS Signature V2), current code only supports signature v4. This PR adds facility to click a button on the UI to enable legacy signature with S3 compatible servers.
265 lines
12 KiB
JavaScript
265 lines
12 KiB
JavaScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See License.txt for license information.
|
|
|
|
import React from 'react';
|
|
|
|
import * as Utils from 'utils/utils.jsx';
|
|
|
|
import AdminSettings from './admin_settings.jsx';
|
|
import DropdownSetting from './dropdown_setting.jsx';
|
|
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
|
import SettingsGroup from './settings_group.jsx';
|
|
import TextSetting from './text_setting.jsx';
|
|
import BooleanSetting from './boolean_setting.jsx';
|
|
|
|
const DRIVER_LOCAL = 'local';
|
|
const DRIVER_S3 = 'amazons3';
|
|
|
|
export default class StorageSettings extends AdminSettings {
|
|
constructor(props) {
|
|
super(props);
|
|
|
|
this.getConfigFromState = this.getConfigFromState.bind(this);
|
|
|
|
this.renderSettings = this.renderSettings.bind(this);
|
|
}
|
|
|
|
getConfigFromState(config) {
|
|
config.FileSettings.EnableFileAttachments = this.state.enableFileAttachments;
|
|
config.FileSettings.MaxFileSize = this.parseInt(this.state.maxFileSize) * 1024 * 1024;
|
|
config.FileSettings.DriverName = this.state.driverName;
|
|
config.FileSettings.Directory = this.state.directory;
|
|
config.FileSettings.AmazonS3AccessKeyId = this.state.amazonS3AccessKeyId;
|
|
config.FileSettings.AmazonS3SecretAccessKey = this.state.amazonS3SecretAccessKey;
|
|
config.FileSettings.AmazonS3Bucket = this.state.amazonS3Bucket;
|
|
config.FileSettings.AmazonS3Endpoint = this.state.amazonS3Endpoint;
|
|
config.FileSettings.AmazonS3SSL = this.state.amazonS3SSL;
|
|
config.FileSettings.AmazonS3SignV2 = this.state.amazonS3SignV2;
|
|
|
|
return config;
|
|
}
|
|
|
|
getStateFromConfig(config) {
|
|
return {
|
|
enableFileAttachments: config.FileSettings.EnableFileAttachments,
|
|
maxFileSize: config.FileSettings.MaxFileSize / 1024 / 1024,
|
|
driverName: config.FileSettings.DriverName,
|
|
directory: config.FileSettings.Directory,
|
|
amazonS3AccessKeyId: config.FileSettings.AmazonS3AccessKeyId,
|
|
amazonS3SecretAccessKey: config.FileSettings.AmazonS3SecretAccessKey,
|
|
amazonS3Bucket: config.FileSettings.AmazonS3Bucket,
|
|
amazonS3Endpoint: config.FileSettings.AmazonS3Endpoint,
|
|
amazonS3SSL: config.FileSettings.AmazonS3SSL,
|
|
amazonS3SignV2: config.FileSettings.AmazonS3SignV2
|
|
};
|
|
}
|
|
|
|
renderTitle() {
|
|
return (
|
|
<FormattedMessage
|
|
id='admin.files.storage'
|
|
defaultMessage='Storage'
|
|
/>
|
|
);
|
|
}
|
|
|
|
renderSettings() {
|
|
return (
|
|
<SettingsGroup>
|
|
<DropdownSetting
|
|
id='driverName'
|
|
values={[
|
|
{value: DRIVER_LOCAL, text: Utils.localizeMessage('admin.image.storeLocal', 'Local File System')},
|
|
{value: DRIVER_S3, text: Utils.localizeMessage('admin.image.storeAmazonS3', 'Amazon S3')}
|
|
]}
|
|
label={
|
|
<FormattedMessage
|
|
id='admin.image.storeTitle'
|
|
defaultMessage='File Storage System:'
|
|
/>
|
|
}
|
|
helpText={
|
|
<FormattedHTMLMessage
|
|
id='admin.image.storeDescription'
|
|
defaultMessage='Storage system where files and image attachments are saved.<br /><br />
|
|
Selecting "Amazon S3" enables fields to enter your Amazon credentials and bucket details.<br /><br />
|
|
Selecting "Local File System" enables the field to specify a local file directory.'
|
|
/>
|
|
}
|
|
value={this.state.driverName}
|
|
onChange={this.handleChange}
|
|
/>
|
|
<TextSetting
|
|
id='directory'
|
|
label={
|
|
<FormattedMessage
|
|
id='admin.image.localTitle'
|
|
defaultMessage='Local Storage Directory:'
|
|
/>
|
|
}
|
|
placeholder={Utils.localizeMessage('admin.image.localExample', 'Ex "./data/"')}
|
|
helpText={
|
|
<FormattedMessage
|
|
id='admin.image.localDescription'
|
|
defaultMessage='Directory to which files and images are written. If blank, defaults to ./data/.'
|
|
/>
|
|
}
|
|
value={this.state.directory}
|
|
onChange={this.handleChange}
|
|
disabled={this.state.driverName !== DRIVER_LOCAL}
|
|
/>
|
|
<TextSetting
|
|
id='amazonS3AccessKeyId'
|
|
label={
|
|
<FormattedMessage
|
|
id='admin.image.amazonS3IdTitle'
|
|
defaultMessage='Amazon S3 Access Key ID:'
|
|
/>
|
|
}
|
|
placeholder={Utils.localizeMessage('admin.image.amazonS3IdExample', 'Ex "AKIADTOVBGERKLCBV"')}
|
|
helpText={
|
|
<FormattedMessage
|
|
id='admin.image.amazonS3IdDescription'
|
|
defaultMessage='Obtain this credential from your Amazon EC2 administrator.'
|
|
/>
|
|
}
|
|
value={this.state.amazonS3AccessKeyId}
|
|
onChange={this.handleChange}
|
|
disabled={this.state.driverName !== DRIVER_S3}
|
|
/>
|
|
<TextSetting
|
|
id='amazonS3SecretAccessKey'
|
|
label={
|
|
<FormattedMessage
|
|
id='admin.image.amazonS3SecretTitle'
|
|
defaultMessage='Amazon S3 Secret Access Key:'
|
|
/>
|
|
}
|
|
placeholder={Utils.localizeMessage('admin.image.amazonS3SecretExample', 'Ex "jcuS8PuvcpGhpgHhlcpT1Mx42pnqMxQY"')}
|
|
helpText={
|
|
<FormattedMessage
|
|
id='admin.image.amazonS3SecretDescription'
|
|
defaultMessage='Obtain this credential from your Amazon EC2 administrator.'
|
|
/>
|
|
}
|
|
value={this.state.amazonS3SecretAccessKey}
|
|
onChange={this.handleChange}
|
|
disabled={this.state.driverName !== DRIVER_S3}
|
|
/>
|
|
<TextSetting
|
|
id='amazonS3Bucket'
|
|
label={
|
|
<FormattedMessage
|
|
id='admin.image.amazonS3BucketTitle'
|
|
defaultMessage='Amazon S3 Bucket:'
|
|
/>
|
|
}
|
|
placeholder={Utils.localizeMessage('admin.image.amazonS3BucketExample', 'Ex "mattermost-media"')}
|
|
helpText={
|
|
<FormattedMessage
|
|
id='admin.image.amazonS3BucketDescription'
|
|
defaultMessage='Name you selected for your S3 bucket in AWS.'
|
|
/>
|
|
}
|
|
value={this.state.amazonS3Bucket}
|
|
onChange={this.handleChange}
|
|
disabled={this.state.driverName !== DRIVER_S3}
|
|
/>
|
|
<TextSetting
|
|
id='amazonS3Endpoint'
|
|
label={
|
|
<FormattedMessage
|
|
id='admin.image.amazonS3EndpointTitle'
|
|
defaultMessage='Amazon S3 Endpoint:'
|
|
/>
|
|
}
|
|
placeholder={Utils.localizeMessage('admin.image.amazonS3EndpointExample', 'Ex "s3.amazonaws.com"')}
|
|
helpText={
|
|
<FormattedMessage
|
|
id='admin.image.amazonS3EndpointDescription'
|
|
defaultMessage='Hostname of your S3 Compatible Storage provider. Defaults to `s3.amazonaws.com`.'
|
|
/>
|
|
}
|
|
value={this.state.amazonS3Endpoint}
|
|
onChange={this.handleChange}
|
|
disabled={this.state.driverName !== DRIVER_S3}
|
|
/>
|
|
<BooleanSetting
|
|
id='amazonS3SSL'
|
|
label={
|
|
<FormattedMessage
|
|
id='admin.image.amazonS3SSLTitle'
|
|
defaultMessage='Enable Secure Amazon S3 Connections:'
|
|
/>
|
|
}
|
|
placeholder={Utils.localizeMessage('admin.image.amazonS3SSLExample', 'Ex "true"')}
|
|
helpText={
|
|
<FormattedMessage
|
|
id='admin.image.amazonS3SSLDescription'
|
|
defaultMessage='When false, allow insecure connections to Amazon S3. Defaults to secure connections only.'
|
|
/>
|
|
}
|
|
value={this.state.amazonS3SSL}
|
|
onChange={this.handleChange}
|
|
disabled={this.state.driverName !== DRIVER_S3}
|
|
/>
|
|
<BooleanSetting
|
|
id='amazonS3SignV2'
|
|
label={
|
|
<FormattedMessage
|
|
id='admin.image.amazonS3SignV2Title'
|
|
defaultMessage='Enable Signature V2 for S3 Connections:'
|
|
/>
|
|
}
|
|
placeholder={Utils.localizeMessage('admin.image.amazonS3SignV2Example', 'Ex "false"')}
|
|
helpText={
|
|
<FormattedMessage
|
|
id='admin.image.amazonS3SignV2Desc'
|
|
defaultMessage='When true, allow signature v2 to Amazon S3. Defaults to Signature V4 requests.'
|
|
/>
|
|
}
|
|
value={this.state.amazonS3SignV2}
|
|
onChange={this.handleChange}
|
|
disabled={this.state.driverName !== DRIVER_S3}
|
|
/>
|
|
<BooleanSetting
|
|
id='enableFileAttachments'
|
|
label={
|
|
<FormattedMessage
|
|
id='admin.file.enableFileAttachments'
|
|
defaultMessage='Enable File Attachments:'
|
|
/>
|
|
}
|
|
helpText={
|
|
<FormattedMessage
|
|
id='admin.file.enableFileAttachmentsDesc'
|
|
defaultMessage='When false, disable file and image uploads on messages.'
|
|
/>
|
|
}
|
|
value={this.state.enableFileAttachments}
|
|
onChange={this.handleChange}
|
|
/>
|
|
<TextSetting
|
|
id='maxFileSize'
|
|
label={
|
|
<FormattedMessage
|
|
id='admin.image.maxFileSizeTitle'
|
|
defaultMessage='Maximum File Size:'
|
|
/>
|
|
}
|
|
placeholder={Utils.localizeMessage('admin.image.maxFileSizeExample', '50')}
|
|
helpText={
|
|
<FormattedMessage
|
|
id='admin.image.maxFileSizeDescription'
|
|
defaultMessage='Maximum file size for message attachments in megabytes. Caution: Verify server memory can support your setting choice. Large file sizes increase the risk of server crashes and failed uploads due to network interruptions.'
|
|
/>
|
|
}
|
|
value={this.state.maxFileSize}
|
|
onChange={this.handleChange}
|
|
disabled={!this.state.enableFileAttachments}
|
|
/>
|
|
</SettingsGroup>
|
|
);
|
|
}
|
|
}
|