From 99bec2e52b174c1e8774ebf12da5963330d47af9 Mon Sep 17 00:00:00 2001 From: Byron Jones Date: Tue, 11 Aug 2015 23:16:38 +0800 Subject: Bug 1160929 - add support for storing attachments in s3 --- Bugzilla/Config/Attachment.pm | 104 +++++++++++++++++++++++++++++------------- 1 file changed, 72 insertions(+), 32 deletions(-) (limited to 'Bugzilla/Config') diff --git a/Bugzilla/Config/Attachment.pm b/Bugzilla/Config/Attachment.pm index cf87f4c89..20cde0b01 100644 --- a/Bugzilla/Config/Attachment.pm +++ b/Bugzilla/Config/Attachment.pm @@ -38,42 +38,82 @@ use Bugzilla::Config::Common; our $sortkey = 400; sub get_param_list { - my $class = shift; - my @param_list = ( - { - name => 'allow_attachment_display', - type => 'b', - default => 0 - }, + my $class = shift; + my @param_list = ( + { + name => 'allow_attachment_display', + type => 'b', + default => 0 + }, + { + name => 'attachment_base', + type => 't', + default => '', + checker => \&check_urlbase + }, + { + name => 'allow_attachment_deletion', + type => 'b', + default => 0 + }, + { + name => 'maxattachmentsize', + type => 't', + default => '1000', + checker => \&check_maxattachmentsize + }, + { + name => 'attachment_storage', + type => 's', + choices => ['database', 'filesystem', 's3'], + default => 'database', + checker => \&check_storage + }, + { + name => 's3_bucket', + type => 't', + default => '', + }, + { + name => 'aws_access_key_id', + type => 't', + default => '', + }, + { + name => 'aws_secret_access_key', + type => 't', + default => '', + }, + ); + return @param_list; +} - { - name => 'attachment_base', - type => 't', - default => '', - checker => \&check_urlbase - }, +sub check_params { + my ($class, $params) = @_; + return unless $params->{attachment_storage} eq 's3'; - { - name => 'allow_attachment_deletion', - type => 'b', - default => 0 - }, + if ($params->{s3_bucket} eq '' + || $params->{aws_access_key_id} eq '' + || $params->{aws_secret_access_key} eq '' + ) { + return "You must set s3_bucket, aws_access_key_id, and aws_secret_access_key when attachment_storage is set to S3"; + } + return ''; +} - { - name => 'maxattachmentsize', - type => 't', - default => '1000', - checker => \&check_maxattachmentsize - }, +sub check_storage { + my ($value, $param) = (@_); + my $check_multi = check_multi($value, $param); + return $check_multi if $check_multi; - { - name => 'attachment_storage', - type => 's', - choices => ['database', 'filesystem'], - default => 'database', - checker => \&check_multi - } ); - return @param_list; + if ($value eq 's3') { + return Bugzilla->feature('s3') + ? '' + : 'The perl modules required for S3 support are not installed'; + } + else { + return ''; + } } 1; -- cgit v1.2.3-24-g4f1b