X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2f3d49bde80526060d3337f13dfa91cd581ac222..1a0a58c4f22af82e0a37440af3b0948771bca5e1:/services/api/app/models/blob.rb diff --git a/services/api/app/models/blob.rb b/services/api/app/models/blob.rb index c4e1881b29..7d16048bf8 100644 --- a/services/api/app/models/blob.rb +++ b/services/api/app/models/blob.rb @@ -1,5 +1,13 @@ class Blob + def initialize locator + @locator = locator + end + + def empty? + !!@locator.match(/^d41d8cd98f00b204e9800998ecf8427e(\+.*)?$/) + end + # In order to get a Blob from Keep, you have to prove either # [a] you have recently written it to Keep yourself, or # [b] apiserver has recently decided that you should be able to read it @@ -16,15 +24,6 @@ class Blob class InvalidSignatureError < StandardError end - # Clock is a wrapper for Time. - # It can be replaced with a stub for unit testing (the poor man's mock). - # It must support a Clock.now method that returns a Time object. - @@Clock = Time - - def self.set_clock c - @@Clock = c - end - # Blob.sign_locator: return a signed and timestamped blob locator. # # The 'opts' argument should include: @@ -44,7 +43,7 @@ class Blob end timestamp = opts[:expire] else - timestamp = @@Clock.now.to_i + (opts[:ttl] || 600) + timestamp = Time.now.to_i + (opts[:ttl] || 1209600) end timestamp_hex = timestamp.to_s(16) # => "53163cb4" @@ -91,7 +90,7 @@ class Blob if !timestamp.match /^[\da-f]+$/ raise Blob::InvalidSignatureError.new 'Timestamp is not a base16 number.' end - if timestamp.to_i(16) < @@Clock.now.to_i + if timestamp.to_i(16) < Time.now.to_i raise Blob::InvalidSignatureError.new 'Signature expiry time has passed.' end