Skip to content
Permalink
Browse files

Permit configuring the default service URL expiry

  • Loading branch information...
georgeclaghorn committed Jun 21, 2018
1 parent 9ee7426 commit b21f50d8ae36d9b50b673579e17bccbe55363b34
@@ -8,7 +8,7 @@ class ActiveStorage::BlobsController < ActiveStorage::BaseController
include ActiveStorage::SetBlob

def show
expires_in ActiveStorage::Blob.service.url_expires_in
expires_in ActiveStorage.service_urls_expire_in
redirect_to @blob.service_url(disposition: params[:disposition])
end
end
@@ -8,7 +8,7 @@ class ActiveStorage::RepresentationsController < ActiveStorage::BaseController
include ActiveStorage::SetBlob

def show
expires_in ActiveStorage::Blob.service.url_expires_in
expires_in ActiveStorage.service_urls_expire_in
redirect_to @blob.representation(params[:variation_key]).processed.service_url(disposition: params[:disposition])
end
end
@@ -121,7 +121,7 @@ def text?
# with users. Instead, the +service_url+ should only be exposed as a redirect from a stable, possibly authenticated URL.
# Hiding the +service_url+ behind a redirect also gives you the power to change services without updating all URLs. And
# it allows permanent URLs that redirect to the +service_url+ to be cached in the view.
def service_url(expires_in: service.url_expires_in, disposition: :inline, filename: nil, **options)
def service_url(expires_in: ActiveStorage.service_urls_expire_in, disposition: :inline, filename: nil, **options)
filename = ActiveStorage::Filename.wrap(filename || self.filename)

service.url key, expires_in: expires_in, filename: filename, content_type: content_type,
@@ -130,7 +130,7 @@ def service_url(expires_in: service.url_expires_in, disposition: :inline, filena

# Returns a URL that can be used to directly upload a file for this blob on the service. This URL is intended to be
# short-lived for security and only generated on-demand by the client-side JavaScript responsible for doing the uploading.
def service_url_for_direct_upload(expires_in: service.url_expires_in)
def service_url_for_direct_upload(expires_in: ActiveStorage.service_urls_expire_in)
service.url_for_direct_upload key, expires_in: expires_in, content_type: content_type, content_length: byte_size, checksum: checksum
end

@@ -79,7 +79,7 @@ def key
# Use <tt>url_for(variant)</tt> (or the implied form, like +link_to variant+ or +redirect_to variant+) to get the stable URL
# for a variant that points to the ActiveStorage::RepresentationsController, which in turn will use this +service_call+ method
# for its redirection.
def service_url(expires_in: service.url_expires_in, disposition: :inline)
def service_url(expires_in: ActiveStorage.service_urls_expire_in, disposition: :inline)
service.url key, expires_in: expires_in, disposition: disposition, filename: filename, content_type: content_type
end

@@ -49,4 +49,5 @@ module ActiveStorage
mattr_accessor :paths, default: {}
mattr_accessor :variable_content_types, default: []
mattr_accessor :content_types_to_serve_as_binary, default: []
mattr_accessor :service_urls_expire_in, default: 5.minutes
end
@@ -54,6 +54,7 @@ class Engine < Rails::Engine # :nodoc:

ActiveStorage.variable_content_types = app.config.active_storage.variable_content_types || []
ActiveStorage.content_types_to_serve_as_binary = app.config.active_storage.content_types_to_serve_as_binary || []
ActiveStorage.service_urls_expire_in = app.config.active_storage.service_urls_expire_in || 5.minutes
end
end

@@ -39,8 +39,6 @@ class Service
extend ActiveSupport::Autoload
autoload :Configurator

class_attribute :url_expires_in, default: 5.minutes

class << self
# Configure an Active Storage service by name from a set of configurations,
# typically loaded from a YAML file. The Active Storage engine uses this
@@ -151,16 +151,16 @@ class UserWithHasOneAttachedDependentFalse < User
test "urls allow for custom options" do
blob = create_blob(filename: "original.txt")

options = [
arguments = [
blob.key,
expires_in: blob.service.url_expires_in,
expires_in: ActiveStorage.service_urls_expire_in,
disposition: :inline,
content_type: blob.content_type,
filename: blob.filename,
thumb_size: "300x300",
thumb_mode: "crop"
]
assert_called_with(blob.service, :url, options) do
assert_called_with(blob.service, :url, arguments) do
blob.service_url(thumb_size: "300x300", thumb_mode: "crop")
end
end
@@ -822,6 +822,13 @@ text/javascript image/svg+xml application/postscript application/x-shockwave-fla
config.active_storage.logger = ActiveSupport::Logger.new(STDOUT)
```

* `config.active_storage.service_urls_expire_in` determines the default expiry of URLs generated by:
* `ActiveStorage::Blob#service_url`
* `ActiveStorage::Blob#service_url_for_direct_upload`
* `ActiveStorage::Variant#service_url`

The default is 5 minutes.

### Configuring a Database

Just about every Rails application will interact with a database. You can connect to the database by setting an environment variable `ENV['DATABASE_URL']` or by using a configuration file called `config/database.yml`.

0 comments on commit b21f50d

Please sign in to comment.
You can’t perform that action at this time.