crashlog-auth-hmac 1.1.6 → 1.1.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,10 +3,9 @@ rvm:
3
3
  - 1.9.3
4
4
  - 1.9.2
5
5
  - 1.8.7
6
- # - jruby-18mode
7
- # - jruby-19mode
8
- # - jruby-head
6
+ - jruby-18mode
7
+ - jruby-19mode
8
+ - jruby-head
9
9
  - rbx-18mode
10
10
  - rbx-19mode
11
11
  - ree
12
-
data/Gemfile CHANGED
@@ -9,3 +9,5 @@ gem 'rack-test'
9
9
  gem 'delorean'
10
10
  gem 'rspec', '>= 2.7.0'
11
11
  gem 'activesupport', '~> 3.2.0'
12
+
13
+ gem 'jruby-openssl', :platform => :jruby
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- crashlog-auth-hmac (1.1.5)
4
+ crashlog-auth-hmac (1.1.7)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -9,11 +9,14 @@ GEM
9
9
  activesupport (3.2.7)
10
10
  i18n (~> 0.6)
11
11
  multi_json (~> 1.0)
12
+ bouncy-castle-java (1.5.0146.1)
12
13
  chronic (0.6.7)
13
14
  delorean (2.0.0)
14
15
  chronic
15
16
  diff-lcs (1.1.3)
16
17
  i18n (0.6.0)
18
+ jruby-openssl (0.7.7)
19
+ bouncy-castle-java (>= 1.5.0146.1)
17
20
  multi_json (1.3.6)
18
21
  rack (1.4.1)
19
22
  rack-test (0.6.1)
@@ -29,12 +32,14 @@ GEM
29
32
  rspec-mocks (2.11.1)
30
33
 
31
34
  PLATFORMS
35
+ java
32
36
  ruby
33
37
 
34
38
  DEPENDENCIES
35
39
  activesupport (~> 3.2.0)
36
40
  crashlog-auth-hmac!
37
41
  delorean
42
+ jruby-openssl
38
43
  rack-test
39
44
  rake
40
45
  rspec (>= 2.7.0)
@@ -75,7 +75,7 @@ module CrashLog
75
75
  request.request_method
76
76
  elsif request.is_a?(Hash) && request.has_key?(:method)
77
77
  request[:method].to_s
78
- elsif request.respond_to?(:env) && request.env
78
+ elsif request.respond_to?(:env)
79
79
  request.env['REQUEST_METHOD']
80
80
  elsif request.is_a?(Hash) && request.has_key?('REQUEST_METHOD')
81
81
  request['REQUEST_METHOD']
@@ -231,7 +231,9 @@ module CrashLog
231
231
  def signature(request, secret)
232
232
  digest = OpenSSL::Digest::Digest.new('sha1')
233
233
  string = canonical_string(request)
234
- Base64.strict_encode64(OpenSSL::HMAC.digest(digest, secret, string)).strip
234
+ hmac = OpenSSL::HMAC.digest(digest, secret, string)
235
+ encoded_signature = Base64.encode64(hmac)
236
+ encoded_signature.gsub(/\n/, '').strip
235
237
  end
236
238
 
237
239
  def canonical_string(request)
@@ -1,5 +1,5 @@
1
1
  module CrashLog
2
2
  class AuthHMAC
3
- VERSION = "1.1.6"
3
+ VERSION = "1.1.7"
4
4
  end
5
5
  end
@@ -79,39 +79,38 @@ describe CrashLog::AuthHMAC do
79
79
  'content-type' => 'text/plain',
80
80
  'content-md5' => 'blahblah',
81
81
  'date' => "Thu, 10 Jul 2008 03:29:56 GMT")
82
- @store = mock('store')
83
- @store.stub!(:[]).and_return("")
82
+
83
+ @store = {'my-key-id' => 'secret'}
84
84
  @authhmac = CrashLog::AuthHMAC.new(@store)
85
85
  end
86
86
 
87
87
  describe "default AuthHMAC with CanonicalString signature" do
88
88
  it "should add an Authorization header" do
89
- @authhmac.sign!(@get_request, 'key-id')
89
+ @authhmac.sign!(@get_request, 'my-key-id')
90
90
  @get_request.key?("Authorization").should be_true
91
91
  end
92
92
 
93
93
  it "should fetch the secret from the store" do
94
- @store.should_receive(:[]).with('key-id').and_return('secret')
95
- @authhmac.sign!(@get_request, 'key-id')
94
+ @store.should_receive(:[]).with('my-key-id').and_return('secret')
95
+ @authhmac.sign!(@get_request, 'my-key-id')
96
96
  end
97
97
 
98
98
  it "should prefix the Authorization Header with AuthHMAC" do
99
- @authhmac.sign!(@get_request, 'key-id')
99
+ @authhmac.sign!(@get_request, 'my-key-id')
100
100
  @get_request['Authorization'].should match(/^AuthHMAC /)
101
101
  end
102
102
 
103
103
  it "should include the key id as the first part of the Authorization header value" do
104
- @authhmac.sign!(@get_request, 'key-id')
105
- @get_request['Authorization'].should match(/^AuthHMAC key-id:/)
104
+ @authhmac.sign!(@get_request, 'my-key-id')
105
+ @get_request['Authorization'].should match(/^AuthHMAC my-key-id:/)
106
106
  end
107
107
 
108
108
  it "should include the base64 encoded HMAC signature as the last part of the header value" do
109
- @authhmac.sign!(@get_request, 'key-id')
109
+ @authhmac.sign!(@get_request, 'my-key-id')
110
110
  @get_request['Authorization'].should match(/:[A-Za-z0-9+\/]{26,28}[=]{0,2}$/)
111
111
  end
112
112
 
113
113
  it "should create a complete signature" do
114
- @store.should_receive(:[]).with('my-key-id').and_return('secret')
115
114
  @authhmac.sign!(@put_request, "my-key-id")
116
115
  @put_request['Authorization'].should == "AuthHMAC my-key-id:71wAJM4IIu/3o6lcqx/tw7XnAJs="
117
116
  end
@@ -123,16 +122,16 @@ describe CrashLog::AuthHMAC do
123
122
  :service_id => 'MyService',
124
123
  :signature => CustomSignature
125
124
  }
126
- @authhmac = CrashLog::AuthHMAC.new(@store, @options)
125
+ store = {'my-key-id' => 'secret'}
126
+ @authhmac = CrashLog::AuthHMAC.new(store, @options)
127
127
  end
128
128
 
129
129
  it "should prefix the Authorization header with custom service id" do
130
- @authhmac.sign!(@get_request, 'key-id')
130
+ @authhmac.sign!(@get_request, 'my-key-id')
131
131
  @get_request['Authorization'].should match(/^MyService /)
132
132
  end
133
133
 
134
134
  it "should create a complete signature using options" do
135
- @store.should_receive(:[]).with('my-key-id').and_return('secret')
136
135
  @authhmac.sign!(@put_request, "my-key-id")
137
136
  @put_request['Authorization'].should == "MyService my-key-id:/L4N1v1BZSHfAYkQjsvZn696D9c="
138
137
  end
@@ -23,11 +23,11 @@ describe CrashLog::AuthHMAC do
23
23
  it 'can process rack test requests' do
24
24
  # HMAC uses date to validate request signature, we need to fix the date so
25
25
  # that it matches.
26
- Delorean.time_travel_to(Date.parse("Thu, 10 Jul 2008 03:29:56 GMT"))
26
+ Delorean.time_travel_to(Time.utc(2012,10,04,8,31,16))
27
27
 
28
- env = current_session.__send__(:env_for, '/notify', {}.merge(:method => "POST", :params => {token: 'my-key-id'}))
29
- signature = CrashLog::AuthHMAC.sign!(env, "my-key-id", "secret")
30
- signature.should == "AuthHMAC my-key-id:nt0VFUekBB3Ci5cCyaqy9fQnaK0="
28
+ env = current_session.__send__(:env_for, '/events', {:method => "POST", 'CONTENT_TYPE' => "application/json; charset=UTF-8"})
29
+ signature = CrashLog::AuthHMAC.signature(env, "2Xbz25UpU8nQxaSAKuixJQMDxuiqryxzArzSJJ8Ci3Mr")
30
+ signature.should == "Rqj0DdG4/jNrzOXdybz13CaKzXU="
31
31
  end
32
32
 
33
33
  it 'can handle hash requests' do
@@ -49,4 +49,16 @@ describe CrashLog::AuthHMAC do
49
49
  sig = CrashLog::AuthHMAC.signature(request_hash, 'secret')
50
50
  sig.should == CrashLog::AuthHMAC.signature(standard_request, 'secret')
51
51
  end
52
+
53
+ it 'accepts real request without content md5' do
54
+ Delorean.time_travel_to(Date.parse("Thu, 04 Oct 2012 08:31:16 GMT"))
55
+
56
+ request = Net::HTTP::Post.new("/events",
57
+ 'content-type' => 'application/json; charset=UTF-8',
58
+ 'date' => "Thu, 04 Oct 2012 08:31:16 GMT")
59
+
60
+ sig = CrashLog::AuthHMAC.signature(request, '2Xbz25UpU8nQxaSAKuixJQMDxuiqryxzArzSJJ8Ci3Mr')
61
+ sig.should == 'Rqj0DdG4/jNrzOXdybz13CaKzXU='
62
+ end
63
+
52
64
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crashlog-auth-hmac
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.6
5
- prerelease:
4
+ prerelease:
5
+ version: 1.1.7
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ivan Vanderbyl
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-04 00:00:00.000000000 Z
12
+ date: 2012-11-19 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A Ruby Gem for authenticating HTTP requests using a HMAC
15
15
  email:
@@ -36,26 +36,34 @@ files:
36
36
  - spec/spec_helper.rb
37
37
  homepage: http://crashlog.io
38
38
  licenses: []
39
- post_install_message:
39
+ post_install_message:
40
40
  rdoc_options: []
41
41
  require_paths:
42
42
  - lib
43
43
  required_ruby_version: !ruby/object:Gem::Requirement
44
- none: false
45
44
  requirements:
46
45
  - - ! '>='
47
46
  - !ruby/object:Gem::Version
48
- version: '0'
49
- required_rubygems_version: !ruby/object:Gem::Requirement
47
+ segments:
48
+ - 0
49
+ hash: 2
50
+ version: !binary |-
51
+ MA==
50
52
  none: false
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
54
  requirements:
52
55
  - - ! '>='
53
56
  - !ruby/object:Gem::Version
54
- version: '0'
57
+ segments:
58
+ - 0
59
+ hash: 2
60
+ version: !binary |-
61
+ MA==
62
+ none: false
55
63
  requirements: []
56
- rubyforge_project:
57
- rubygems_version: 1.8.15
58
- signing_key:
64
+ rubyforge_project:
65
+ rubygems_version: 1.8.24
66
+ signing_key:
59
67
  specification_version: 3
60
68
  summary: A Ruby Gem for authenticating HTTP requests using a HMAC
61
69
  test_files: