jmoses_api-auth 1.0.4

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.
@@ -0,0 +1,114 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Rails integration" do
4
+
5
+ API_KEY_STORE = { "1044" => "l16imAXie1sRMcJODpOG7UwC1VyoqvO13jejkfpKWX4Z09W8DC9IrU23DvCwMry7pgSFW6c5S1GIfV0OY6F/vUA==" }
6
+
7
+ describe "Rails controller integration" do
8
+
9
+ class ApplicationController < ActionController::Base
10
+
11
+ private
12
+
13
+ def require_api_auth
14
+ if (access_id = get_api_access_id_from_request)
15
+ return true if api_authenticated?(API_KEY_STORE[access_id])
16
+ end
17
+
18
+ respond_to do |format|
19
+ format.xml { render :xml => "You are unauthorized to perform this action.", :status => 401 }
20
+ format.json { render :json => "You are unauthorized to perform this action.", :status => 401 }
21
+ format.html { render :text => "You are unauthorized to perform this action", :status => 401 }
22
+ end
23
+ end
24
+
25
+ end
26
+
27
+ class TestController < ApplicationController
28
+ before_filter :require_api_auth, :only => [:index]
29
+
30
+ def index
31
+ render :text => "OK"
32
+ end
33
+
34
+ def public
35
+ render :text => "OK"
36
+ end
37
+
38
+ def rescue_action(e); raise(e); end
39
+ end
40
+ ActionController::Routing::Routes.draw {|map| map.resources :test }
41
+
42
+ it "should permit a request with properly signed headers" do
43
+ request = ActionController::TestRequest.new
44
+ request.env['DATE'] = Time.now.utc.httpdate
45
+ request.action = 'index'
46
+ request.path = "/index"
47
+ ApiAuth.sign!(request, "1044", API_KEY_STORE["1044"])
48
+ TestController.new.process(request, ActionController::TestResponse.new).code.should == "200"
49
+ end
50
+
51
+ it "should forbid a request with properly signed headers but timestamp > 15 minutes" do
52
+ request = ActionController::TestRequest.new
53
+ request.env['DATE'] = "Mon, 23 Jan 1984 03:29:56 GMT"
54
+ request.action = 'index'
55
+ request.path = "/index"
56
+ ApiAuth.sign!(request, "1044", API_KEY_STORE["1044"])
57
+ TestController.new.process(request, ActionController::TestResponse.new).code.should == "401"
58
+ end
59
+
60
+ it "should insert a DATE header in the request when one hasn't been specified" do
61
+ request = ActionController::TestRequest.new
62
+ request.action = 'index'
63
+ request.path = "/index"
64
+ ApiAuth.sign!(request, "1044", API_KEY_STORE["1044"])
65
+ request.headers['DATE'].should_not be_nil
66
+ end
67
+
68
+ it "should forbid an unsigned request to a protected controller action" do
69
+ request = ActionController::TestRequest.new
70
+ request.action = 'index'
71
+ TestController.new.process(request, ActionController::TestResponse.new).code.should == "401"
72
+ end
73
+
74
+ it "should forbid a request with a bogus signature" do
75
+ request = ActionController::TestRequest.new
76
+ request.action = 'index'
77
+ request.env['Authorization'] = "APIAuth bogus:bogus"
78
+ TestController.new.process(request, ActionController::TestResponse.new).code.should == "401"
79
+ end
80
+
81
+ it "should allow non-protected controller actions to function as before" do
82
+ request = ActionController::TestRequest.new
83
+ request.action = 'public'
84
+ request.path('/public')
85
+ TestController.new.process(request, ActionController::TestResponse.new).code.should == "200"
86
+ end
87
+
88
+ end
89
+
90
+ describe "Rails ActiveResource integration" do
91
+
92
+ class TestResource < ActiveResource::Base
93
+ with_api_auth "1044", API_KEY_STORE["1044"]
94
+ self.site = "http://localhost/"
95
+ end
96
+
97
+ it "should send signed requests automagically" do
98
+ timestamp = Time.parse("Mon, 23 Jan 1984 03:29:56 GMT")
99
+ Time.should_receive(:now).at_least(1).times.and_return(timestamp)
100
+ ActiveResource::HttpMock.respond_to do |mock|
101
+ mock.get "/test_resources/1.xml",
102
+ {
103
+ 'Authorization' => 'APIAuth 1044:IbTx7VzSOGU55HNbV4y2jZDnVis=',
104
+ 'Accept' => 'application/xml',
105
+ 'DATE' => "Mon, 23 Jan 1984 03:29:56 GMT"
106
+ },
107
+ { :id => "1" }.to_xml(:root => 'test_resource')
108
+ end
109
+ TestResource.find(1)
110
+ end
111
+
112
+ end
113
+
114
+ end
@@ -0,0 +1,22 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'api_auth'
5
+ require 'amatch'
6
+ require 'rest_client'
7
+ require 'curb'
8
+
9
+ require 'active_support'
10
+ require 'active_support/test_case'
11
+ require 'action_controller'
12
+ require 'action_controller/test_process'
13
+ require 'active_resource'
14
+ require 'active_resource/http_mock'
15
+
16
+ # Requires supporting files with custom matchers and macros, etc,
17
+ # in ./support/ and its subdirectories.
18
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
19
+
20
+ RSpec.configure do |config|
21
+
22
+ end
@@ -0,0 +1,2 @@
1
+ module TestHelper
2
+ end
metadata ADDED
@@ -0,0 +1,212 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jmoses_api-auth
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.4
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jon Moses
9
+ - Mauricio Gomes
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-07-31 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rake
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: amatch
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ type: :development
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 2.4.0
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: 2.4.0
63
+ - !ruby/object:Gem::Dependency
64
+ name: actionpack
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ version: 2.3.2
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ version: 2.3.2
79
+ - !ruby/object:Gem::Dependency
80
+ name: activesupport
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ~>
85
+ - !ruby/object:Gem::Version
86
+ version: 2.3.2
87
+ type: :development
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ~>
93
+ - !ruby/object:Gem::Version
94
+ version: 2.3.2
95
+ - !ruby/object:Gem::Dependency
96
+ name: activeresource
97
+ requirement: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ~>
101
+ - !ruby/object:Gem::Version
102
+ version: 2.3.2
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 2.3.2
111
+ - !ruby/object:Gem::Dependency
112
+ name: rest-client
113
+ requirement: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ~>
117
+ - !ruby/object:Gem::Version
118
+ version: 1.6.0
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ~>
125
+ - !ruby/object:Gem::Version
126
+ version: 1.6.0
127
+ - !ruby/object:Gem::Dependency
128
+ name: curb
129
+ requirement: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ~>
133
+ - !ruby/object:Gem::Version
134
+ version: 0.8.1
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ~>
141
+ - !ruby/object:Gem::Version
142
+ version: 0.8.1
143
+ description: Full HMAC auth implementation for use in your gems and Rails apps.
144
+ email:
145
+ - jon@burningbush.us
146
+ - mauricio@edge14.com
147
+ executables: []
148
+ extensions: []
149
+ extra_rdoc_files: []
150
+ files:
151
+ - .document
152
+ - .gitignore
153
+ - .rspec
154
+ - Gemfile
155
+ - Gemfile.lock
156
+ - LICENSE.txt
157
+ - README.md
158
+ - Rakefile
159
+ - VERSION
160
+ - api_auth.gemspec
161
+ - lib/api-auth.rb
162
+ - lib/api_auth.rb
163
+ - lib/api_auth/base.rb
164
+ - lib/api_auth/errors.rb
165
+ - lib/api_auth/headers.rb
166
+ - lib/api_auth/helpers.rb
167
+ - lib/api_auth/railtie.rb
168
+ - lib/api_auth/request_drivers/action_controller.rb
169
+ - lib/api_auth/request_drivers/action_dispatch.rb
170
+ - lib/api_auth/request_drivers/curb.rb
171
+ - lib/api_auth/request_drivers/net_http.rb
172
+ - lib/api_auth/request_drivers/rack.rb
173
+ - lib/api_auth/request_drivers/rest_client.rb
174
+ - spec/api_auth_spec.rb
175
+ - spec/application_helper.rb
176
+ - spec/headers_spec.rb
177
+ - spec/helpers_spec.rb
178
+ - spec/railtie_spec.rb
179
+ - spec/spec_helper.rb
180
+ - spec/test_helper.rb
181
+ homepage: https://github.com/jmoses/api_auth
182
+ licenses: []
183
+ post_install_message:
184
+ rdoc_options: []
185
+ require_paths:
186
+ - lib
187
+ required_ruby_version: !ruby/object:Gem::Requirement
188
+ none: false
189
+ requirements:
190
+ - - ! '>='
191
+ - !ruby/object:Gem::Version
192
+ version: '0'
193
+ required_rubygems_version: !ruby/object:Gem::Requirement
194
+ none: false
195
+ requirements:
196
+ - - ! '>='
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ requirements: []
200
+ rubyforge_project:
201
+ rubygems_version: 1.8.24
202
+ signing_key:
203
+ specification_version: 3
204
+ summary: Simple HMAC authentication for your APIs (fork by jmoses)
205
+ test_files:
206
+ - spec/api_auth_spec.rb
207
+ - spec/application_helper.rb
208
+ - spec/headers_spec.rb
209
+ - spec/helpers_spec.rb
210
+ - spec/railtie_spec.rb
211
+ - spec/spec_helper.rb
212
+ - spec/test_helper.rb