opro 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/Gemfile +6 -2
  2. data/Gemfile.lock +37 -33
  3. data/README.md +60 -31
  4. data/Rakefile +8 -0
  5. data/VERSION +1 -1
  6. data/app/controllers/oauth/auth_controller.rb +35 -36
  7. data/app/controllers/oauth/client_app_controller.rb +24 -0
  8. data/app/controllers/oauth/docs_controller.rb +1 -1
  9. data/app/controllers/oauth/tests_controller.rb +4 -26
  10. data/app/controllers/oauth/token_controller.rb +40 -0
  11. data/app/controllers/opro_controller.rb +4 -0
  12. data/app/models/oauth/access_grant.rb +47 -14
  13. data/app/models/oauth/{client_application.rb → client_appl.rb} +1 -1
  14. data/app/views/oauth/{client_application → client_app}/create.html.erb +1 -1
  15. data/app/views/oauth/{client_application → client_app}/index.html.erb +1 -1
  16. data/app/views/oauth/{client_application → client_app}/new.html.erb +1 -1
  17. data/app/views/oauth/docs/index.html.erb +8 -0
  18. data/app/views/oauth/docs/markdown/oauth.md.erb +2 -2
  19. data/app/views/oauth/docs/markdown/permissions.md.erb +30 -0
  20. data/app/views/oauth/docs/markdown/quick_start.md.erb +1 -1
  21. data/app/views/oauth/docs/markdown/refresh_tokens.md.erb +18 -0
  22. data/config/routes.rb +5 -10
  23. data/lib/generators/active_record/opro_generator.rb +1 -1
  24. data/lib/generators/active_record/templates/access_grants.rb +1 -1
  25. data/lib/generators/active_record/templates/client_applications.rb +1 -1
  26. data/lib/generators/opro/install_generator.rb +5 -0
  27. data/lib/generators/templates/opro.rb +10 -3
  28. data/lib/opro.rb +7 -1
  29. data/lib/opro/controllers/application_controller_helper.rb +7 -2
  30. data/lib/opro/engine.rb +4 -0
  31. data/lib/opro/rails/routes.rb +17 -0
  32. data/opro.gemspec +27 -15
  33. data/test/controllers/refresh_token_test.rb +0 -0
  34. data/test/dummy/config/environments/test.rb +4 -0
  35. data/test/dummy/config/initializers/opro.rb +10 -3
  36. data/test/dummy/config/routes.rb +2 -0
  37. data/test/dummy/db/migrate/20120514060322_create_opro_access_grants.rb +1 -1
  38. data/test/dummy/db/migrate/20120514060323_create_opro_client_applications.rb +1 -1
  39. data/test/integration/action_dispatch/auth_controller_test.rb +64 -0
  40. data/test/integration/action_dispatch/oauth_flow_test.rb +34 -0
  41. data/test/integration/action_dispatch/refresh_token_test.rb +54 -0
  42. data/test/integration/auth_controller_test.rb +8 -7
  43. data/test/integration/client_app_controller_test.rb +24 -0
  44. data/test/integration/docs_controller_test.rb +9 -1
  45. data/test/integration/oauth_test.rb +1 -4
  46. data/test/integration/refresh_token_test.rb +32 -0
  47. data/test/support/integration_case.rb +10 -1
  48. data/test/test_helper.rb +7 -3
  49. metadata +56 -36
  50. data/app/controllers/oauth/client_application_controller.rb +0 -21
  51. data/app/controllers/opro_application_controller.rb +0 -8
  52. data/test/integration/client_application_controller_test.rb +0 -24
@@ -1,8 +1,16 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class DocsControllerTest < ActiveSupport::IntegrationCase
4
- test 'renders' do
4
+ test 'renders index' do
5
5
  visit oauth_docs_path
6
6
  assert_equal '/oauth_docs', current_path
7
7
  end
8
+
9
+ test 'renders show' do
10
+ [:curl, :oauth, :quick_start].each do |doc|
11
+ doc_path = oauth_doc_path(:id => doc)
12
+ visit doc_path
13
+ assert_equal doc_path, current_path
14
+ end
15
+ end
8
16
  end
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- class OauthTest < ActiveSupport::IntegrationCase
3
+ class CapybaraOauthTest < ActiveSupport::IntegrationCase
4
4
 
5
5
  test 'invalid auth_token should do nothing' do
6
6
  visit '/'
@@ -15,7 +15,4 @@ class OauthTest < ActiveSupport::IntegrationCase
15
15
  assert has_content?('User is logged in')
16
16
  end
17
17
 
18
- test 'blacklisted route should not show user logged in' do
19
- #TODO
20
- end
21
18
  end
@@ -0,0 +1,32 @@
1
+ require 'test_helper'
2
+
3
+ class CapybaraRefreshTokenTest < ActiveSupport::IntegrationCase
4
+
5
+ setup do
6
+ Timecop.freeze(Time.now)
7
+ Opro.setup do |config|
8
+ config.require_refresh_within = 1.month
9
+ end
10
+
11
+ @user = create_user
12
+ @auth_grant = create_auth_grant_for_user(@user)
13
+ @client_app = @auth_grant.application
14
+ end
15
+
16
+ teardown do
17
+ Timecop.return # "turn off" Timecop
18
+ end
19
+
20
+ test "clients with an expired token do not get logged in" do
21
+ user = create_user
22
+ auth_grant = create_auth_grant_for_user(user)
23
+ access_token = auth_grant.access_token
24
+
25
+ Timecop.travel(5.months.from_now)
26
+ visit "/?access_token=#{access_token}"
27
+
28
+ assert has_content?('NO logged in users')
29
+ assert auth_grant.expired?
30
+ end
31
+
32
+ end
@@ -2,4 +2,13 @@
2
2
  class ActiveSupport::IntegrationCase < ActiveSupport::TestCase
3
3
  include Capybara::DSL
4
4
  include Rails.application.routes.url_helpers
5
- end
5
+
6
+ teardown do
7
+ DatabaseCleaner.clean # Truncate the database
8
+ Capybara.reset_sessions! # Forget the (simulated) browser state
9
+ Capybara.use_default_driver # Revert Capybara.current_driver to Capybara.default_driver
10
+ end
11
+
12
+
13
+ end
14
+
data/test/test_helper.rb CHANGED
@@ -7,6 +7,9 @@ require File.expand_path("../dummy/config/environment.rb", __FILE__)
7
7
  require "rails/test_help"
8
8
 
9
9
  require 'mocha'
10
+ require 'timecop'
11
+ require 'database_cleaner'
12
+ DatabaseCleaner.strategy = :truncation
10
13
 
11
14
  ActionMailer::Base.delivery_method = :test
12
15
  ActionMailer::Base.perform_deliveries = true
@@ -45,7 +48,7 @@ include Warden::Test::Helpers
45
48
  Warden.test_mode!
46
49
 
47
50
  def rand_name
48
- 'foo' + Time.now.to_f.to_s
51
+ 'foo' + Time.now.to_f.to_s + rand(10000).to_s
49
52
  end
50
53
 
51
54
 
@@ -56,7 +59,7 @@ end
56
59
  def create_client_app(options= {})
57
60
  user = options[:user] || create_user
58
61
  name = options[:name] || rand_name
59
- Oauth::ClientApplication.create_with_user_and_name(user, name)
62
+ Oauth::ClientApp.create_with_user_and_name(user, name)
60
63
  end
61
64
 
62
65
  def user_with_client_app
@@ -68,9 +71,10 @@ end
68
71
  def create_auth_grant_for_user(user = nil, app = nil)
69
72
  app ||= create_client_app
70
73
  user ||= create_user
71
- Oauth::AccessGrant.create(:user => user, :application => app)
74
+ Oauth::AuthGrant.create(:user => user, :application => app)
72
75
  end
73
76
 
77
+
74
78
  # Will run the given code as the user passed in
75
79
  def as_user(user=nil, &block)
76
80
  current_user = user || create_user
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,33 +9,33 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-14 00:00:00.000000000Z
12
+ date: 2012-06-18 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70350386690460 !ruby/object:Gem::Requirement
16
+ requirement: &70290860455720 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 3.0.7
21
+ version: 3.1.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70350386690460
24
+ version_requirements: *70290860455720
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rails
27
- requirement: &70350386683340 !ruby/object:Gem::Requirement
27
+ requirement: &70290860454680 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
31
31
  - !ruby/object:Gem::Version
32
- version: 3.0.7
32
+ version: 3.1.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70350386683340
35
+ version_requirements: *70290860454680
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bluecloth
38
- requirement: &70350386682740 !ruby/object:Gem::Requirement
38
+ requirement: &70290860453740 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70350386682740
46
+ version_requirements: *70290860453740
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: mocha
49
- requirement: &70350386682120 !ruby/object:Gem::Requirement
49
+ requirement: &70290860453040 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,21 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70350386682120
57
+ version_requirements: *70290860453040
58
+ - !ruby/object:Gem::Dependency
59
+ name: timecop
60
+ requirement: &70290860452260 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70290860452260
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: jeweler
60
- requirement: &70350386681480 !ruby/object:Gem::Requirement
71
+ requirement: &70290860451340 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ~>
@@ -65,10 +76,10 @@ dependencies:
65
76
  version: 1.6.4
66
77
  type: :development
67
78
  prerelease: false
68
- version_requirements: *70350386681480
79
+ version_requirements: *70290860451340
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: bundler
71
- requirement: &70350386680760 !ruby/object:Gem::Requirement
82
+ requirement: &70290860450280 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ! '>='
@@ -76,10 +87,10 @@ dependencies:
76
87
  version: 1.1.3
77
88
  type: :development
78
89
  prerelease: false
79
- version_requirements: *70350386680760
90
+ version_requirements: *70290860450280
80
91
  - !ruby/object:Gem::Dependency
81
92
  name: capybara
82
- requirement: &70350386679900 !ruby/object:Gem::Requirement
93
+ requirement: &70290860449360 !ruby/object:Gem::Requirement
83
94
  none: false
84
95
  requirements:
85
96
  - - ! '>='
@@ -87,10 +98,10 @@ dependencies:
87
98
  version: 0.4.0
88
99
  type: :development
89
100
  prerelease: false
90
- version_requirements: *70350386679900
101
+ version_requirements: *70290860449360
91
102
  - !ruby/object:Gem::Dependency
92
103
  name: sqlite3
93
- requirement: &70350386678780 !ruby/object:Gem::Requirement
104
+ requirement: &70290860448620 !ruby/object:Gem::Requirement
94
105
  none: false
95
106
  requirements:
96
107
  - - ! '>='
@@ -98,10 +109,10 @@ dependencies:
98
109
  version: '0'
99
110
  type: :development
100
111
  prerelease: false
101
- version_requirements: *70350386678780
112
+ version_requirements: *70290860448620
102
113
  - !ruby/object:Gem::Dependency
103
114
  name: launchy
104
- requirement: &70350386678200 !ruby/object:Gem::Requirement
115
+ requirement: &70290860448000 !ruby/object:Gem::Requirement
105
116
  none: false
106
117
  requirements:
107
118
  - - ! '>='
@@ -109,10 +120,10 @@ dependencies:
109
120
  version: '0'
110
121
  type: :development
111
122
  prerelease: false
112
- version_requirements: *70350386678200
123
+ version_requirements: *70290860448000
113
124
  - !ruby/object:Gem::Dependency
114
125
  name: devise
115
- requirement: &70350386677300 !ruby/object:Gem::Requirement
126
+ requirement: &70290860447380 !ruby/object:Gem::Requirement
116
127
  none: false
117
128
  requirements:
118
129
  - - ! '>='
@@ -120,10 +131,10 @@ dependencies:
120
131
  version: '0'
121
132
  type: :development
122
133
  prerelease: false
123
- version_requirements: *70350386677300
134
+ version_requirements: *70290860447380
124
135
  - !ruby/object:Gem::Dependency
125
136
  name: rcov
126
- requirement: &70350386676560 !ruby/object:Gem::Requirement
137
+ requirement: &70290860446620 !ruby/object:Gem::Requirement
127
138
  none: false
128
139
  requirements:
129
140
  - - ! '>='
@@ -131,10 +142,10 @@ dependencies:
131
142
  version: '0'
132
143
  type: :development
133
144
  prerelease: false
134
- version_requirements: *70350386676560
145
+ version_requirements: *70290860446620
135
146
  - !ruby/object:Gem::Dependency
136
147
  name: simplecov
137
- requirement: &70350386675920 !ruby/object:Gem::Requirement
148
+ requirement: &70290860446000 !ruby/object:Gem::Requirement
138
149
  none: false
139
150
  requirements:
140
151
  - - ! '>='
@@ -142,7 +153,7 @@ dependencies:
142
153
  version: '0'
143
154
  type: :development
144
155
  prerelease: false
145
- version_requirements: *70350386675920
156
+ version_requirements: *70290860446000
146
157
  description: ! ' Enable OAuth clients (iphone, android, web sites, etc.) to access
147
158
  and use your Rails application, what you do with it is up to you'
148
159
  email: richard.schneeman@gmail.com
@@ -159,20 +170,23 @@ files:
159
170
  - Rakefile
160
171
  - VERSION
161
172
  - app/controllers/oauth/auth_controller.rb
162
- - app/controllers/oauth/client_application_controller.rb
173
+ - app/controllers/oauth/client_app_controller.rb
163
174
  - app/controllers/oauth/docs_controller.rb
164
175
  - app/controllers/oauth/tests_controller.rb
165
- - app/controllers/opro_application_controller.rb
176
+ - app/controllers/oauth/token_controller.rb
177
+ - app/controllers/opro_controller.rb
166
178
  - app/models/oauth/access_grant.rb
167
- - app/models/oauth/client_application.rb
179
+ - app/models/oauth/client_appl.rb
168
180
  - app/views/oauth/auth/new.html.erb
169
- - app/views/oauth/client_application/create.html.erb
170
- - app/views/oauth/client_application/index.html.erb
171
- - app/views/oauth/client_application/new.html.erb
181
+ - app/views/oauth/client_app/create.html.erb
182
+ - app/views/oauth/client_app/index.html.erb
183
+ - app/views/oauth/client_app/new.html.erb
172
184
  - app/views/oauth/docs/index.html.erb
173
185
  - app/views/oauth/docs/markdown/curl.md.erb
174
186
  - app/views/oauth/docs/markdown/oauth.md.erb
187
+ - app/views/oauth/docs/markdown/permissions.md.erb
175
188
  - app/views/oauth/docs/markdown/quick_start.md.erb
189
+ - app/views/oauth/docs/markdown/refresh_tokens.md.erb
176
190
  - app/views/oauth/docs/show.html.erb
177
191
  - app/views/oauth/tests/index.html.erb
178
192
  - config/routes.rb
@@ -186,8 +200,10 @@ files:
186
200
  - lib/opro/controllers/concerns/error_messages.rb
187
201
  - lib/opro/controllers/concerns/permissions.rb
188
202
  - lib/opro/engine.rb
203
+ - lib/opro/rails/routes.rb
189
204
  - opro.gemspec
190
205
  - test/controllers/permissions_test.rb
206
+ - test/controllers/refresh_token_test.rb
191
207
  - test/dummy/Rakefile
192
208
  - test/dummy/app/controllers/application_controller.rb
193
209
  - test/dummy/app/controllers/pages_controller.rb
@@ -231,10 +247,14 @@ files:
231
247
  - test/dummy/public/javascripts/rails.js
232
248
  - test/dummy/public/stylesheets/.gitkeep
233
249
  - test/dummy/script/rails
250
+ - test/integration/action_dispatch/auth_controller_test.rb
251
+ - test/integration/action_dispatch/oauth_flow_test.rb
252
+ - test/integration/action_dispatch/refresh_token_test.rb
234
253
  - test/integration/auth_controller_test.rb
235
- - test/integration/client_application_controller_test.rb
254
+ - test/integration/client_app_controller_test.rb
236
255
  - test/integration/docs_controller_test.rb
237
256
  - test/integration/oauth_test.rb
257
+ - test/integration/refresh_token_test.rb
238
258
  - test/opro_test.rb
239
259
  - test/support/integration_case.rb
240
260
  - test/test_helper.rb
@@ -253,7 +273,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
253
273
  version: '0'
254
274
  segments:
255
275
  - 0
256
- hash: -2087592437685873043
276
+ hash: -3291297708449199104
257
277
  required_rubygems_version: !ruby/object:Gem::Requirement
258
278
  none: false
259
279
  requirements:
@@ -1,21 +0,0 @@
1
- class Oauth::ClientApplicationController < ApplicationController
2
- before_filter :opro_authenticate_user!
3
-
4
- def new
5
- @client_app = Oauth::ClientApplication.new
6
- end
7
-
8
- def create
9
- @client_app = Oauth::ClientApplication.find_by_user_id_and_name(current_user.id, params[:oauth_client_application][:name])
10
- @client_app ||= Oauth::ClientApplication.create_with_user_and_name(current_user, params[:oauth_client_application][:name])
11
- if @client_app.save
12
- # do nothing
13
- else
14
- render :new
15
- end
16
- end
17
-
18
- def index
19
- @client_apps = Oauth::ClientApplication.where(:user_id => current_user.id)
20
- end
21
- end
@@ -1,8 +0,0 @@
1
- class ApplicationController < ActionController::Base
2
-
3
- # Any code that would/should go into ApplicationController is
4
- # now in lib/opro/conrollers/application_controller_helper.rb
5
- # it is loaded into ApplicationController in lib/opro/engine.rb
6
- # thanks for visiting, come back soon
7
-
8
- end
@@ -1,24 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ClientApplicationControllerTest < ActiveSupport::IntegrationCase
4
- test 'must be logged in' do
5
- visit new_oauth_client_application_path
6
- assert_equal '/users/sign_in', current_path
7
- end
8
-
9
- test 'create client application' do
10
- user = create_user
11
- as_user(user).visit new_oauth_client_application_path
12
- assert_equal '/oauth_client_applications/new', current_path
13
-
14
- fill_in 'oauth_client_application_name', :with => rand_name
15
-
16
- click_button 'submitApp'
17
- assert_equal '/oauth_client_applications', current_path
18
-
19
- last_client = Oauth::ClientApplication.order(:created_at).last
20
- assert has_content?(last_client.name)
21
- assert has_content?(last_client.client_id)
22
- assert has_content?(last_client.client_secret)
23
- end
24
- end