Skip to content

Commit

Permalink
Maintenance: Improve S3 setup and configuration.
Browse files Browse the repository at this point in the history
  • Loading branch information
tschaefer committed Feb 28, 2024
1 parent 92c79c9 commit 4afd3f7
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 7 deletions.
2 changes: 2 additions & 0 deletions app/models/setting/validation/storage_provider.rb
Expand Up @@ -17,8 +17,10 @@ def verify_configuration
return if !value.eql?('S3')

begin
Store::Provider::S3.reset
Store::Provider::S3.ping!
rescue Store::Provider::S3::Error => e
Store::Provider::S3.reset
return e.message
end

Expand Down
2 changes: 2 additions & 0 deletions app/models/store/provider/s3.rb
Expand Up @@ -19,6 +19,8 @@ def add(data, sha)
end

def client
Certificate::ApplySSLCertificates.ensure_fresh_ssl_context

@client.presence ||
(Store::Provider::S3::Config.apply && @client = Aws::S3::Client.new)
end
Expand Down
2 changes: 0 additions & 2 deletions app/models/store/provider/s3/config.rb
Expand Up @@ -18,8 +18,6 @@ def max_chunk_size
def apply
return true if Aws.config.present?

Certificate::ApplySSLCertificates.ensure_fresh_ssl_context

begin
config = settings.deep_dup
credentials = Aws::Credentials.new(config[:access_key_id], config[:secret_access_key])
Expand Down
1 change: 1 addition & 0 deletions config/initializers/store_provider_check.rb
Expand Up @@ -11,6 +11,7 @@
adapter = "Store::Provider::#{storage_provider}".constantize
adapter.ping!
rescue Store::Provider::S3::Error => e
adapter.reset
warn e.message
warn "There was an error trying to use storage provider '#{storage_provider}'."
warn 'Please check the storage provider configuration.'
Expand Down
2 changes: 1 addition & 1 deletion db/seeds.rb
Expand Up @@ -32,7 +32,7 @@
# set basic settings via environment variables
Setting.set('http_type', ENV['ZAMMAD_HTTP_TYPE']) if ENV['ZAMMAD_HTTP_TYPE']
Setting.set('fqdn', ENV['ZAMMAD_FQDN']) if ENV['ZAMMAD_FQDN']
Setting.set('storage_provider', 'S3') if ENV['S3_URL']
Setting.set('storage_provider', 'S3') if ENV['S3_URL'] && Rails.env.production?

# reset primary key sequences
DbHelper.import_post
Expand Down
30 changes: 26 additions & 4 deletions lib/zammad/service/configuration.rb
Expand Up @@ -70,7 +70,7 @@ def yaml

return config if config[:url].blank?

config.deep_merge(resolve_url(config(:url)))
config.deep_merge(resolve_url(config[:url]))
end

def env
Expand All @@ -85,14 +85,36 @@ def resolve_url(url)
config = template(uri)
query = uri.opaque.present? ? uri.opaque.split('?', 2) : uri.query

return config.compact_blank! if query.blank?
config.compact!
return config if query.blank?

query.split('&').each do |option|
key, value = option.split('=', 2)
config[key.to_sym] = URI::DEFAULT_PARSER.unescape(value)
value = URI::DEFAULT_PARSER.unescape(value)
value = boolean(value)
value = number(value)

config[key.to_sym] = value
end

config.compact_blank!
config.compact!
config
end

def boolean(value)
return true if value == 'true'
return false if value == 'false'

value
end

def number(value)
number = Float(value)
return number if value.include?('.')

number.to_i
rescue
value
end

def template(uri)
Expand Down
1 change: 1 addition & 0 deletions spec/models/store/provider/s3_spec.rb
Expand Up @@ -8,6 +8,7 @@
VCR.configure do |c|
c.ignore_hosts 's3.eu-central-1.amazonaws.com'
c.ignore_hosts 's3.eu-central-1.zammad.org'
c.ignore_hosts ENV['S3_ENDPOINT'] if ENV['S3_ENDPOINT'].present?
end
example.run
described_class.reset
Expand Down

0 comments on commit 4afd3f7

Please sign in to comment.