halorgium-auth-hmac 1.1.1.2010090301 → 1.1.1.2010090302
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/auth-hmac.rb +35 -19
- metadata +3 -3
data/lib/auth-hmac.rb
CHANGED
@@ -74,13 +74,20 @@ class AuthHMAC
|
|
74
74
|
include Headers
|
75
75
|
|
76
76
|
def initialize(request, authenticate_referrer=false)
|
77
|
-
|
78
|
-
|
79
|
-
self <<
|
77
|
+
@request = request
|
78
|
+
@authenticate_referrer = authenticate_referrer
|
79
|
+
self << request_method + "\n"
|
80
|
+
self << header_values + "\n"
|
81
|
+
self << request_path
|
80
82
|
end
|
81
|
-
|
83
|
+
attr_reader :request, :authenticate_referrer
|
84
|
+
|
82
85
|
private
|
83
|
-
def
|
86
|
+
def headers
|
87
|
+
super(@request)
|
88
|
+
end
|
89
|
+
|
90
|
+
def request_method
|
84
91
|
if request.respond_to?(:request_method) && request.request_method.is_a?(String)
|
85
92
|
request.request_method
|
86
93
|
elsif request.respond_to?(:method) && request.method.is_a?(String)
|
@@ -92,42 +99,49 @@ class AuthHMAC
|
|
92
99
|
end
|
93
100
|
end
|
94
101
|
|
95
|
-
def header_values
|
96
|
-
|
97
|
-
|
98
|
-
(
|
99
|
-
(date(headers) or headers['Date'] = Time.now.utc.httpdate)
|
102
|
+
def header_values
|
103
|
+
[ content_type,
|
104
|
+
(content_md5 or generated_md5),
|
105
|
+
(date or headers['Date'] = Time.now.utc.httpdate)
|
100
106
|
].join("\n")
|
101
107
|
end
|
102
108
|
|
103
|
-
def read_body
|
109
|
+
def read_body
|
104
110
|
if request.body.respond_to?(:read)
|
105
|
-
request.body.rewind
|
106
111
|
request.body.read
|
112
|
+
request.body.rewind
|
107
113
|
else
|
108
114
|
request.body
|
109
115
|
end
|
110
116
|
end
|
111
117
|
|
112
|
-
def content_type
|
118
|
+
def content_type
|
113
119
|
find_header(%w(CONTENT-TYPE CONTENT_TYPE HTTP_CONTENT_TYPE), headers)
|
114
120
|
end
|
115
121
|
|
116
|
-
def date
|
122
|
+
def date
|
117
123
|
find_header(%w(DATE HTTP_DATE), headers)
|
118
124
|
end
|
119
125
|
|
120
|
-
def content_md5
|
126
|
+
def content_md5
|
121
127
|
find_header(%w(CONTENT-MD5 CONTENT_MD5 HTTP_CONTENT_MD5), headers)
|
122
128
|
end
|
123
129
|
|
124
|
-
def
|
125
|
-
|
130
|
+
def generated_md5
|
131
|
+
if read_body.nil? || read_body.empty?
|
132
|
+
''
|
133
|
+
else
|
134
|
+
headers['Content-MD5'] = generate_content_md5
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def generate_content_md5
|
139
|
+
OpenSSL::Digest::MD5.hexdigest(read_body)
|
126
140
|
end
|
127
141
|
|
128
|
-
def request_path
|
142
|
+
def request_path
|
129
143
|
if authenticate_referrer
|
130
|
-
headers
|
144
|
+
headers['Referer'] =~ /^(?:http:\/\/)?[^\/]*(\/.*)$/
|
131
145
|
path = $1
|
132
146
|
else
|
133
147
|
# Try unparsed_uri in case it is a Webrick request
|
@@ -178,6 +192,8 @@ class AuthHMAC
|
|
178
192
|
@signature_method = lambda { |r,ar| @signature_class.send(:new, r, ar) }
|
179
193
|
end
|
180
194
|
|
195
|
+
attr_reader :service_id
|
196
|
+
|
181
197
|
# Generates canonical signing string for given request
|
182
198
|
#
|
183
199
|
# Supports same options as AuthHMAC.initialize for overriding service_id and
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: halorgium-auth-hmac
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 4020180527
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 1
|
9
9
|
- 1
|
10
|
-
-
|
11
|
-
version: 1.1.1.
|
10
|
+
- 2010090302
|
11
|
+
version: 1.1.1.2010090302
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Sean Geoghegan
|