diff --git a/lib/fog/aws/ses.rb b/lib/fog/aws/ses.rb index a63e97947c..d7dd305e98 100644 --- a/lib/fog/aws/ses.rb +++ b/lib/fog/aws/ses.rb @@ -70,7 +70,7 @@ def request(params) headers = { 'Content-Type' => 'application/x-www-form-urlencoded', - 'Date' => Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S +0000") + 'Date' => Fog::Time.now.to_date_header } #AWS3-HTTPS AWSAccessKeyId=, Algorithm=HmacSHA256, Signature= diff --git a/lib/fog/cdn/aws.rb b/lib/fog/cdn/aws.rb index 56e1c240b4..679e992a66 100644 --- a/lib/fog/cdn/aws.rb +++ b/lib/fog/cdn/aws.rb @@ -98,7 +98,7 @@ def reload def request(params, &block) params[:headers] ||= {} - params[:headers]['Date'] = Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S +0000") + params[:headers]['Date'] = Fog::Time.now.to_date_header params[:headers]['Authorization'] = "AWS #{@aws_access_key_id}:#{signature(params)}" params[:path] = "/#{@version}/#{params[:path]}" @connection.request(params, &block) diff --git a/lib/fog/core/time.rb b/lib/fog/core/time.rb index 23c81a0978..d73452d9b5 100644 --- a/lib/fog/core/time.rb +++ b/lib/fog/core/time.rb @@ -1,21 +1,27 @@ module Fog class Time < ::Time - class << self - def now - ::Time.now - offset - end + DAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] + MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] - def now=(new_now) - old_now = ::Time.now - @offset = old_now - new_now - new_now - end + def self.now + at((::Time.now - offset).to_i) + end - def offset - @offset ||= 0 - end + def self.now=(new_now) + old_now = ::Time.now + @offset = old_now - new_now + new_now + end + def self.offset + @offset ||= 0 end + + def to_date_header + now = self.class.now.utc + now.strftime("#{DAYS[now.wday]}, %d #{MONTHS[now.month - 1]} %Y %H:%M:%S +0000") + end + end -end \ No newline at end of file +end diff --git a/lib/fog/dns/aws.rb b/lib/fog/dns/aws.rb index ece696d658..025be7f69f 100644 --- a/lib/fog/dns/aws.rb +++ b/lib/fog/dns/aws.rb @@ -103,7 +103,7 @@ def reload def request(params, &block) params[:headers] ||= {} - params[:headers]['Date'] = Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S +0000") + params[:headers]['Date'] = Fog::Time.now.to_date_header params[:headers]['X-Amzn-Authorization'] = "AWS3-HTTPS AWSAccessKeyId=#{@aws_access_key_id},Algorithm=HmacSHA1,Signature=#{signature(params)}" params[:path] = "/#{@version}/#{params[:path]}" @connection.request(params, &block) diff --git a/lib/fog/storage/aws.rb b/lib/fog/storage/aws.rb index e4995bd0fa..8e39414e29 100644 --- a/lib/fog/storage/aws.rb +++ b/lib/fog/storage/aws.rb @@ -289,7 +289,7 @@ def reload private def request(params, &block) - params[:headers]['Date'] = Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S +0000") + params[:headers]['Date'] = Fog::Time.now.to_date_header params[:headers]['Authorization'] = "AWS #{@aws_access_key_id}:#{signature(params)}" params[:expects] = [307, *params[:expects]].flatten # FIXME: ToHashParser should make this not needed diff --git a/lib/fog/storage/google.rb b/lib/fog/storage/google.rb index 222b145dff..b3689faf8d 100644 --- a/lib/fog/storage/google.rb +++ b/lib/fog/storage/google.rb @@ -212,7 +212,7 @@ def reload private def request(params, &block) - params[:headers]['Date'] = Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S +0000") + params[:headers]['Date'] = Fog::Time.now.to_date_header params[:headers]['Authorization'] = "GOOG1 #{@google_storage_access_key_id}:#{signature(params)}" response = @connection.request(params, &block) diff --git a/lib/fog/storage/requests/aws/get_object.rb b/lib/fog/storage/requests/aws/get_object.rb index 440d8d3a10..64d4333210 100644 --- a/lib/fog/storage/requests/aws/get_object.rb +++ b/lib/fog/storage/requests/aws/get_object.rb @@ -39,8 +39,8 @@ def get_object(bucket_name, object_name, options = {}, &block) query = {'versionId' => version_id} end headers = {} - headers['If-Modified-Since'] = options['If-Modified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since'] - headers['If-Unmodified-Since'] = options['If-Unmodified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since'] + headers['If-Modified-Since'] = Fog::Time.at(options['If-Modified-Since'].to_i).to_date_header if options['If-Modified-Since'] + headers['If-Unmodified-Since'] = Fog::Time.at(options['If-Unmodified-Since'].to_i).to_date_header if options['If-Modified-Since'] headers.merge!(options) request({ :expects => 200, diff --git a/lib/fog/storage/requests/aws/head_object.rb b/lib/fog/storage/requests/aws/head_object.rb index 5451a80203..ff044e8053 100644 --- a/lib/fog/storage/requests/aws/head_object.rb +++ b/lib/fog/storage/requests/aws/head_object.rb @@ -39,8 +39,8 @@ def head_object(bucket_name, object_name, options={}) query = {'versionId' => version_id} end headers = {} - headers['If-Modified-Since'] = options['If-Modified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since'] - headers['If-Unmodified-Since'] = options['If-Unmodified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since'] + headers['If-Modified-Since'] = Fog::Time.at(options['If-Modified-Since'].to_i).to_date_header if options['If-Modified-Since'] + headers['If-Unmodified-Since'] = Fog::Time.at(options['If-Unmodified-Since'].to_i).to_date_header if options['If-Modified-Since'] headers.merge!(options) request({ :expects => 200, diff --git a/lib/fog/storage/requests/aws/put_object.rb b/lib/fog/storage/requests/aws/put_object.rb index c2fc8d8840..007dd827bd 100644 --- a/lib/fog/storage/requests/aws/put_object.rb +++ b/lib/fog/storage/requests/aws/put_object.rb @@ -67,7 +67,7 @@ def put_object(bucket_name, object_name, data, options = {}) 'Content-Type' => data[:headers]['Content-Type'], 'ETag' => Fog::AWS::Mock.etag, 'Key' => object_name, - 'LastModified' => Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S +0000"), + 'LastModified' => Fog::Time.now.to_date_header, 'Size' => data[:headers]['Content-Length'], 'StorageClass' => 'STANDARD' } diff --git a/lib/fog/storage/requests/google/get_object.rb b/lib/fog/storage/requests/google/get_object.rb index 6fd879bbaa..09ce590313 100644 --- a/lib/fog/storage/requests/google/get_object.rb +++ b/lib/fog/storage/requests/google/get_object.rb @@ -36,8 +36,8 @@ def get_object(bucket_name, object_name, options = {}, &block) query = {'versionId' => version_id} end headers = {} - headers['If-Modified-Since'] = options['If-Modified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since'] - headers['If-Unmodified-Since'] = options['If-Unmodified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since'] + headers['If-Modified-Since'] = Fog::Time.at(options['If-Modified-Since'].to_i).to_date_header if options['If-Modified-Since'] + headers['If-Unmodified-Since'] = Fog::Time.at(options['If-Unmodified-Since'].to_i).to_date_header if options['If-Modified-Since'] headers.merge!(options) request({ :expects => 200, diff --git a/lib/fog/storage/requests/google/head_object.rb b/lib/fog/storage/requests/google/head_object.rb index 30515f18d8..26edd516b7 100644 --- a/lib/fog/storage/requests/google/head_object.rb +++ b/lib/fog/storage/requests/google/head_object.rb @@ -35,8 +35,8 @@ def head_object(bucket_name, object_name, options={}) query = {'versionId' => version_id} end headers = {} - headers['If-Modified-Since'] = options['If-Modified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since'] - headers['If-Unmodified-Since'] = options['If-Unmodified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since'] + headers['If-Modified-Since'] = Fog::Time.at(options['If-Modified-Since'].to_i).to_date_header if options['If-Modified-Since'] + headers['If-Unmodified-Since'] = Fog::Time.at(options['If-Unmodified-Since'].to_i).to_date_header if options['If-Modified-Since'] headers.merge!(options) request({ :expects => 200, diff --git a/lib/fog/storage/requests/google/put_object.rb b/lib/fog/storage/requests/google/put_object.rb index 4296208f63..3f7882073b 100644 --- a/lib/fog/storage/requests/google/put_object.rb +++ b/lib/fog/storage/requests/google/put_object.rb @@ -62,7 +62,7 @@ def put_object(bucket_name, object_name, data, options = {}) 'Content-Type' => data[:headers]['Content-Type'], 'ETag' => Fog::Google::Mock.etag, 'Key' => object_name, - 'LastModified' => Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S +0000"), + 'LastModified' => Fog::Time.now.to_date_header, 'Size' => data[:headers]['Content-Length'], 'StorageClass' => 'STANDARD' }