Merge branch 'master' into 3219-further-docker-improvements
[arvados.git] / services / api / app / models / blob.rb
index c4e1881b29a6093cd12fefd2ffc49c469879dd1a..7d16048bf81a29d8a806caa5904e2870a42fbf6e 100644 (file)
@@ -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