aboutsummaryrefslogtreecommitdiffstats
path: root/lib/active_file/sites
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2017-07-03 21:06:09 +0200
committerDavid Heinemeier Hansson <david@loudthinking.com>2017-07-03 21:06:09 +0200
commit4aac5e3fa207b8b047db5d3c96a97dca2a695214 (patch)
tree132280f39d44710b0d7602d7964710fc5cea34cd /lib/active_file/sites
parentdde68d4a8b6db22054cb218871b320eddbb3c546 (diff)
downloadrails-4aac5e3fa207b8b047db5d3c96a97dca2a695214.tar.gz
rails-4aac5e3fa207b8b047db5d3c96a97dca2a695214.tar.bz2
rails-4aac5e3fa207b8b047db5d3c96a97dca2a695214.zip
Download disk blobs with verified URLs
Diffstat (limited to 'lib/active_file/sites')
-rw-r--r--lib/active_file/sites/disk_site.rb42
1 files changed, 4 insertions, 38 deletions
diff --git a/lib/active_file/sites/disk_site.rb b/lib/active_file/sites/disk_site.rb
index da1e69df03..be8a2437a1 100644
--- a/lib/active_file/sites/disk_site.rb
+++ b/lib/active_file/sites/disk_site.rb
@@ -2,42 +2,6 @@ require "fileutils"
require "pathname"
class ActiveFile::Sites::DiskSite < ActiveFile::Site
- class_attribute :verifier, default: -> { Rails.application.message_verifier('ActiveFile::DiskSite') }
-
- class << self
- def generate_verifiable_key(key, expires_in:)
- VerifiedKeyWithExpiration
- end
- end
-
- class VerifiableKeyWithExpiration
- def initialize(verifiable_key_with_expiration)
- verified_key_with_expiration = ActiveFile::Sites::DiskSite.verify(verifiable_key_with_expiration)
-
- @key = verified_key_with_expiration[:key]
- @expires_at = verified_key_with_expiration[:expires_at]
- end
-
- def expired?
- @expires_at && Time.now.utc > @expires_at
- end
-
- def decoded
- key
- end
- end
-
- class VerifiedKeyWithExpiration
- def initialize(key, expires_in: nil)
- @key = key
- @expires_at = Time.now.utc.advance(sec: expires_in)
- end
-
- def encoded
- ActiveFile::Sites::DiskSite.verify.generate({ key: @key, expires_at: @expires_at })
- end
- end
-
attr_reader :root
def initialize(root:)
@@ -75,10 +39,12 @@ class ActiveFile::Sites::DiskSite < ActiveFile::Site
def url(key, disposition:, expires_in: nil)
+ verified_key_with_expiration = ActiveFile::VerifiedKeyWithExpiration.encode(key, expires_in: expires_in)
+
if defined?(Rails)
- Rails.application.routes.url_helpers.rails_disk_blob_path(key)
+ Rails.application.routes.url_helpers.rails_disk_blob_path(verified_key_with_expiration)
else
- "/rails/blobs/#{key}"
+ "/rails/blobs/#{verified_key_with_expiration}"
end
end