Proxy for active storage service provider

This commit is contained in:
Frederic Merizen 2019-01-15 17:58:53 +01:00
parent 5e9b6bd850
commit 0846860748
4 changed files with 76 additions and 1 deletions

View file

@ -0,0 +1,34 @@
module ActiveStorage
# Wraps an ActiveStorage::Service to route direct upload and direct download URLs through our proxy,
# thus avoiding exposing the storage providers URL to our end-users.
class Service::DsProxyService < SimpleDelegator
attr_reader :wrapped
def self.build(wrapped:, configurator:, **options)
new(wrapped: configurator.build(wrapped))
end
def initialize(wrapped:)
@wrapped = wrapped
super(wrapped)
end
def url(*args)
url = wrapped.url(*args)
publicize(url)
end
def url_for_direct_upload(*args)
url = wrapped.url_for_direct_upload(*args)
publicize(url)
end
private
def publicize(url)
search = %r{^https://[^/]+/v1/AUTH_[a-f0-9]{32}}
replace = 'https://static.demarches-simplifiees.fr'
url.gsub(search, replace)
end
end
end