wp-hmac 0.0.1

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.
Files changed (70) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +91 -0
  6. data/Rakefile +2 -0
  7. data/lib/wp/hmac/client.rb +40 -0
  8. data/lib/wp/hmac/key_cabinet.rb +22 -0
  9. data/lib/wp/hmac/server.rb +39 -0
  10. data/lib/wp/hmac/version.rb +5 -0
  11. data/lib/wp/hmac.rb +42 -0
  12. data/spec/app/.gitignore +16 -0
  13. data/spec/app/Gemfile +40 -0
  14. data/spec/app/Gemfile.lock +125 -0
  15. data/spec/app/README.rdoc +28 -0
  16. data/spec/app/Rakefile +6 -0
  17. data/spec/app/app/assets/images/.keep +0 -0
  18. data/spec/app/app/assets/javascripts/application.js +16 -0
  19. data/spec/app/app/assets/stylesheets/application.css +15 -0
  20. data/spec/app/app/controllers/application_controller.rb +5 -0
  21. data/spec/app/app/controllers/concerns/.keep +0 -0
  22. data/spec/app/app/helpers/application_helper.rb +2 -0
  23. data/spec/app/app/mailers/.keep +0 -0
  24. data/spec/app/app/models/.keep +0 -0
  25. data/spec/app/app/models/concerns/.keep +0 -0
  26. data/spec/app/app/views/layouts/application.html.erb +14 -0
  27. data/spec/app/bin/bundle +3 -0
  28. data/spec/app/bin/rails +8 -0
  29. data/spec/app/bin/rake +8 -0
  30. data/spec/app/bin/spring +18 -0
  31. data/spec/app/config/application.rb +24 -0
  32. data/spec/app/config/boot.rb +4 -0
  33. data/spec/app/config/database.yml +25 -0
  34. data/spec/app/config/environment.rb +5 -0
  35. data/spec/app/config/environments/development.rb +37 -0
  36. data/spec/app/config/environments/production.rb +82 -0
  37. data/spec/app/config/environments/test.rb +39 -0
  38. data/spec/app/config/initializers/assets.rb +8 -0
  39. data/spec/app/config/initializers/backtrace_silencers.rb +7 -0
  40. data/spec/app/config/initializers/cookies_serializer.rb +3 -0
  41. data/spec/app/config/initializers/filter_parameter_logging.rb +4 -0
  42. data/spec/app/config/initializers/inflections.rb +16 -0
  43. data/spec/app/config/initializers/mime_types.rb +4 -0
  44. data/spec/app/config/initializers/session_store.rb +3 -0
  45. data/spec/app/config/initializers/wrap_parameters.rb +14 -0
  46. data/spec/app/config/locales/en.yml +23 -0
  47. data/spec/app/config/routes.rb +56 -0
  48. data/spec/app/config/secrets.yml +22 -0
  49. data/spec/app/config.ru +4 -0
  50. data/spec/app/db/seeds.rb +7 -0
  51. data/spec/app/lib/assets/.keep +0 -0
  52. data/spec/app/lib/tasks/.keep +0 -0
  53. data/spec/app/log/.keep +0 -0
  54. data/spec/app/public/404.html +67 -0
  55. data/spec/app/public/422.html +67 -0
  56. data/spec/app/public/500.html +66 -0
  57. data/spec/app/public/favicon.ico +0 -0
  58. data/spec/app/public/robots.txt +5 -0
  59. data/spec/app/test/controllers/.keep +0 -0
  60. data/spec/app/test/fixtures/.keep +0 -0
  61. data/spec/app/test/helpers/.keep +0 -0
  62. data/spec/app/test/integration/.keep +0 -0
  63. data/spec/app/test/mailers/.keep +0 -0
  64. data/spec/app/test/models/.keep +0 -0
  65. data/spec/app/test/test_helper.rb +10 -0
  66. data/spec/app/vendor/assets/javascripts/.keep +0 -0
  67. data/spec/app/vendor/assets/stylesheets/.keep +0 -0
  68. data/spec/hmac_spec.rb +82 -0
  69. data/wp-hmac.gemspec +29 -0
  70. metadata +268 -0
data/spec/hmac_spec.rb ADDED
@@ -0,0 +1,82 @@
1
+ ENV["RAILS_ENV"] ||= 'test'
2
+ require File.expand_path('../../lib/wp/hmac', __FILE__)
3
+ require File.expand_path('../app/config/environment', __FILE__)
4
+ require 'pry'
5
+
6
+ RSpec.configure do |config|
7
+ config.include Rack::Test::Methods, type: :request
8
+ end
9
+
10
+ class DummyController < ActionController::Base
11
+ def show
12
+ render inline: 'Hello, world!'
13
+ end
14
+ end
15
+
16
+ RSpec.describe WP::HMAC, type: :request do
17
+ before(:example) do
18
+ WP::HMAC.configure do
19
+ add_key( { id: 'esso', auth_key: 'secret_key' } )
20
+ add_hmac_enabled_route %r{^/dummy/}
21
+ get_auth_id_for_request -> { 'esso' }
22
+ end
23
+ end
24
+
25
+ after(:example) do
26
+ WP::HMAC.reset
27
+ end
28
+
29
+ let(:app) { App::Application }
30
+ let(:hmac_client) { WP::HMAC::Client.new(nil, app) }
31
+
32
+ before do
33
+ Rails.application.routes.draw do
34
+ resources :dummy, only: %i(show)
35
+ end
36
+ end
37
+
38
+ after do
39
+ Rails.application.reload_routes!
40
+ end
41
+
42
+ context 'with no key' do
43
+ before(:each) do
44
+ WP::HMAC::KeyCabinet.instance_eval('@keys = {}')
45
+ end
46
+
47
+ context 'when hmac is enabled for the route' do
48
+ it 'raises an exception' do
49
+ expect {
50
+ get 'http://esso.example.com/dummy/1'
51
+ }.to raise_error(WP::HMAC::KeyCabinet::KeyNotFound)
52
+ end
53
+ end
54
+
55
+ context 'when hmac is not enabled for the route' do
56
+ it 'has no effect' do
57
+ WP::HMAC::Server.hmac_enabled_routes = []
58
+ get 'http://esso.example.com/dummy/1'
59
+ expect(last_response.body).to eql('Hello, world!')
60
+ end
61
+ end
62
+ end
63
+
64
+ context 'with a key cabinet' do
65
+ it 'fails when a request is not signed' do
66
+ get 'http://esso.example.org/dummy/1'
67
+ expect(last_response.body).to eql('Authentication failure: no authorization header')
68
+ end
69
+
70
+ it 'fails when a request is signed with a duff hash' do
71
+ header 'Authorization', 'AuthHMAC esso:1234'
72
+ header 'Date', Time.zone.now.httpdate
73
+ get 'http://esso.example.org/dummy/1'
74
+ expect(last_response.body).to include('Authentication failure: signature mismatch')
75
+ end
76
+
77
+ it 'succeeds when the request is correctly signed' do
78
+ rack_response = hmac_client.get 'http://esso.example.org/dummy/1'
79
+ expect(rack_response.body).to include('Hello, world!')
80
+ end
81
+ end
82
+ end
data/wp-hmac.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'wp/hmac/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "wp-hmac"
8
+ spec.version = Wp::Hmac::VERSION
9
+ spec.authors = ["Andrew Nagi"]
10
+ spec.email = ["andrew.nagi@gmail.com"]
11
+ spec.summary = %q{HMAC for Rack Apps}
12
+ spec.description = %q{Enable different HMAC keys on different routes / subdomains.}
13
+ spec.homepage = "https://github.com/workplacesystems/wp-hmac"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "ey_api_hmac", "0.4.12"
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.6"
24
+ spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "rails", "4.1.4"
26
+ spec.add_development_dependency "rspec", "~> 3.0"
27
+ spec.add_development_dependency "pry"
28
+ spec.add_development_dependency "sqlite3"
29
+ end
metadata ADDED
@@ -0,0 +1,268 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wp-hmac
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Andrew Nagi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ey_api_hmac
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.4.12
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.4.12
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.6'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.6'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 4.1.4
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 4.1.4
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: sqlite3
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Enable different HMAC keys on different routes / subdomains.
112
+ email:
113
+ - andrew.nagi@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - Gemfile
120
+ - LICENSE.txt
121
+ - README.md
122
+ - Rakefile
123
+ - lib/wp/hmac.rb
124
+ - lib/wp/hmac/client.rb
125
+ - lib/wp/hmac/key_cabinet.rb
126
+ - lib/wp/hmac/server.rb
127
+ - lib/wp/hmac/version.rb
128
+ - spec/app/.gitignore
129
+ - spec/app/Gemfile
130
+ - spec/app/Gemfile.lock
131
+ - spec/app/README.rdoc
132
+ - spec/app/Rakefile
133
+ - spec/app/app/assets/images/.keep
134
+ - spec/app/app/assets/javascripts/application.js
135
+ - spec/app/app/assets/stylesheets/application.css
136
+ - spec/app/app/controllers/application_controller.rb
137
+ - spec/app/app/controllers/concerns/.keep
138
+ - spec/app/app/helpers/application_helper.rb
139
+ - spec/app/app/mailers/.keep
140
+ - spec/app/app/models/.keep
141
+ - spec/app/app/models/concerns/.keep
142
+ - spec/app/app/views/layouts/application.html.erb
143
+ - spec/app/bin/bundle
144
+ - spec/app/bin/rails
145
+ - spec/app/bin/rake
146
+ - spec/app/bin/spring
147
+ - spec/app/config.ru
148
+ - spec/app/config/application.rb
149
+ - spec/app/config/boot.rb
150
+ - spec/app/config/database.yml
151
+ - spec/app/config/environment.rb
152
+ - spec/app/config/environments/development.rb
153
+ - spec/app/config/environments/production.rb
154
+ - spec/app/config/environments/test.rb
155
+ - spec/app/config/initializers/assets.rb
156
+ - spec/app/config/initializers/backtrace_silencers.rb
157
+ - spec/app/config/initializers/cookies_serializer.rb
158
+ - spec/app/config/initializers/filter_parameter_logging.rb
159
+ - spec/app/config/initializers/inflections.rb
160
+ - spec/app/config/initializers/mime_types.rb
161
+ - spec/app/config/initializers/session_store.rb
162
+ - spec/app/config/initializers/wrap_parameters.rb
163
+ - spec/app/config/locales/en.yml
164
+ - spec/app/config/routes.rb
165
+ - spec/app/config/secrets.yml
166
+ - spec/app/db/seeds.rb
167
+ - spec/app/lib/assets/.keep
168
+ - spec/app/lib/tasks/.keep
169
+ - spec/app/log/.keep
170
+ - spec/app/public/404.html
171
+ - spec/app/public/422.html
172
+ - spec/app/public/500.html
173
+ - spec/app/public/favicon.ico
174
+ - spec/app/public/robots.txt
175
+ - spec/app/test/controllers/.keep
176
+ - spec/app/test/fixtures/.keep
177
+ - spec/app/test/helpers/.keep
178
+ - spec/app/test/integration/.keep
179
+ - spec/app/test/mailers/.keep
180
+ - spec/app/test/models/.keep
181
+ - spec/app/test/test_helper.rb
182
+ - spec/app/vendor/assets/javascripts/.keep
183
+ - spec/app/vendor/assets/stylesheets/.keep
184
+ - spec/hmac_spec.rb
185
+ - wp-hmac.gemspec
186
+ homepage: https://github.com/workplacesystems/wp-hmac
187
+ licenses:
188
+ - MIT
189
+ metadata: {}
190
+ post_install_message:
191
+ rdoc_options: []
192
+ require_paths:
193
+ - lib
194
+ required_ruby_version: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ required_rubygems_version: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - ">="
202
+ - !ruby/object:Gem::Version
203
+ version: '0'
204
+ requirements: []
205
+ rubyforge_project:
206
+ rubygems_version: 2.2.2
207
+ signing_key:
208
+ specification_version: 4
209
+ summary: HMAC for Rack Apps
210
+ test_files:
211
+ - spec/app/.gitignore
212
+ - spec/app/Gemfile
213
+ - spec/app/Gemfile.lock
214
+ - spec/app/README.rdoc
215
+ - spec/app/Rakefile
216
+ - spec/app/app/assets/images/.keep
217
+ - spec/app/app/assets/javascripts/application.js
218
+ - spec/app/app/assets/stylesheets/application.css
219
+ - spec/app/app/controllers/application_controller.rb
220
+ - spec/app/app/controllers/concerns/.keep
221
+ - spec/app/app/helpers/application_helper.rb
222
+ - spec/app/app/mailers/.keep
223
+ - spec/app/app/models/.keep
224
+ - spec/app/app/models/concerns/.keep
225
+ - spec/app/app/views/layouts/application.html.erb
226
+ - spec/app/bin/bundle
227
+ - spec/app/bin/rails
228
+ - spec/app/bin/rake
229
+ - spec/app/bin/spring
230
+ - spec/app/config.ru
231
+ - spec/app/config/application.rb
232
+ - spec/app/config/boot.rb
233
+ - spec/app/config/database.yml
234
+ - spec/app/config/environment.rb
235
+ - spec/app/config/environments/development.rb
236
+ - spec/app/config/environments/production.rb
237
+ - spec/app/config/environments/test.rb
238
+ - spec/app/config/initializers/assets.rb
239
+ - spec/app/config/initializers/backtrace_silencers.rb
240
+ - spec/app/config/initializers/cookies_serializer.rb
241
+ - spec/app/config/initializers/filter_parameter_logging.rb
242
+ - spec/app/config/initializers/inflections.rb
243
+ - spec/app/config/initializers/mime_types.rb
244
+ - spec/app/config/initializers/session_store.rb
245
+ - spec/app/config/initializers/wrap_parameters.rb
246
+ - spec/app/config/locales/en.yml
247
+ - spec/app/config/routes.rb
248
+ - spec/app/config/secrets.yml
249
+ - spec/app/db/seeds.rb
250
+ - spec/app/lib/assets/.keep
251
+ - spec/app/lib/tasks/.keep
252
+ - spec/app/log/.keep
253
+ - spec/app/public/404.html
254
+ - spec/app/public/422.html
255
+ - spec/app/public/500.html
256
+ - spec/app/public/favicon.ico
257
+ - spec/app/public/robots.txt
258
+ - spec/app/test/controllers/.keep
259
+ - spec/app/test/fixtures/.keep
260
+ - spec/app/test/helpers/.keep
261
+ - spec/app/test/integration/.keep
262
+ - spec/app/test/mailers/.keep
263
+ - spec/app/test/models/.keep
264
+ - spec/app/test/test_helper.rb
265
+ - spec/app/vendor/assets/javascripts/.keep
266
+ - spec/app/vendor/assets/stylesheets/.keep
267
+ - spec/hmac_spec.rb
268
+ has_rdoc: