devise_oauth2_providable 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -1,11 +1,5 @@
1
- require 'bundler'
2
- Bundler::GemHelper.install_tasks
1
+ require "bundler/gem_tasks"
3
2
 
4
- begin
5
- require 'bundler/setup'
6
- rescue LoadError
7
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
8
- end
9
3
  APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
10
4
  load 'rails/tasks/engine.rake'
11
5
 
@@ -32,15 +32,15 @@ module Devise
32
32
  def authorize_endpoint(allow_approval = false)
33
33
  Rack::OAuth2::Server::Authorize.new do |req, res|
34
34
  @client = Client.find_by_identifier(req.client_id) || req.bad_request!
35
- res.redirect_uri = @redirect_uri = req.verify_redirect_uri!(@client.redirect_uri)
35
+ res.redirect_uri, @redirect_uri = req.verify_redirect_uri!(@client.redirect_uri)
36
36
  if allow_approval
37
37
  if params[:approve].present?
38
38
  case req.response_type
39
39
  when :code
40
- authorization_code = current_user.authorization_codes.create(:client => @client, :redirect_uri => @redirect_uri)
40
+ authorization_code = current_user.authorization_codes.create!(:client => @client)
41
41
  res.code = authorization_code.token
42
42
  when :token
43
- access_token = current_user.access_tokens.create(:client => @client).token
43
+ access_token = current_user.access_tokens.create!(:client => @client).token
44
44
  bearer_token = Rack::OAuth2::AccessToken::Bearer.new(:access_token => access_token)
45
45
  res.access_token = bearer_token
46
46
  res.uid = current_user.id
@@ -1,10 +1,3 @@
1
1
  class Devise::Oauth2Providable::AuthorizationCode < ActiveRecord::Base
2
2
  expires_according_to :authorization_code_expires_in
3
-
4
- def access_token
5
- @access_token ||= expired! && user.access_tokens.create(:client => client)
6
- end
7
- def valid_request?(req)
8
- self.redirect_uri == req.redirect_uri
9
- end
10
3
  end
@@ -42,7 +42,6 @@ class CreateDeviseOauth2ProvidableSchema < ActiveRecord::Migration
42
42
  t.belongs_to :user, :client
43
43
  t.string :token
44
44
  t.datetime :expires_at
45
- t.string :redirect_uri
46
45
  t.timestamps
47
46
  end
48
47
  change_table :oauth2_authorization_codes do |t|
@@ -1,5 +1,5 @@
1
1
  module Devise
2
2
  module Oauth2Providable
3
- VERSION = "1.0.3"
3
+ VERSION = "1.0.4"
4
4
  end
5
5
  end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe Devise::Oauth2Providable::AuthorizationsController do
4
+ describe 'GET #new' do
5
+ with :user
6
+ with :client
7
+ before do
8
+ sign_in user
9
+ get :new, :client_id => client.identifier, :redirect_uri => client.redirect_uri, :response_type => 'code', :use_route => 'devise_oauth2_providable'
10
+ end
11
+ it { should respond_with :ok }
12
+ it { should respond_with_content_type :html }
13
+ it { should assign_to(:redirect_uri) }
14
+ it { should assign_to(:response_type) }
15
+ end
16
+ end
@@ -4,9 +4,9 @@ describe ProtectedController do
4
4
 
5
5
  describe 'get :index' do
6
6
  with :client
7
+ with :user
7
8
  before do
8
- @user = User.create! :email => 'foo@example.com'
9
- @token = Devise::Oauth2Providable::AccessToken.create! :client => client, :user => @user
9
+ @token = Devise::Oauth2Providable::AccessToken.create! :client => client, :user => user
10
10
  end
11
11
  context 'with valid bearer token in header' do
12
12
  before do
@@ -0,0 +1,4 @@
1
+ Factory.define :user do |f|
2
+ f.email 'ryan@socialcast.com'
3
+ f.password 'test'
4
+ end
@@ -3,11 +3,11 @@ require 'spec_helper'
3
3
  describe Devise::Strategies::Oauth2AuthorizationCodeGrantTypeStrategy do
4
4
  describe 'POST /oauth2/token' do
5
5
  describe 'with grant_type=authorization_code' do
6
- with :client
7
6
  context 'with valid params' do
7
+ with :client
8
+ with :user
8
9
  before do
9
- @user = User.create! :email => 'ryan@socialcast.com', :password => 'test'
10
- @authorization_code = @user.authorization_codes.create(:client_id => client, :redirect_uri => client.redirect_uri)
10
+ @authorization_code = user.authorization_codes.create(:client_id => client, :redirect_uri => client.redirect_uri)
11
11
  params = {
12
12
  :grant_type => 'authorization_code',
13
13
  :client_id => client.identifier,
@@ -33,9 +33,9 @@ describe Devise::Strategies::Oauth2AuthorizationCodeGrantTypeStrategy do
33
33
  end
34
34
  context 'with invalid authorization_code' do
35
35
  with :client
36
+ with :user
36
37
  before do
37
- @user = User.create! :email => 'ryan@socialcast.com', :password => 'test'
38
- @authorization_code = @user.authorization_codes.create(:client_id => client, :redirect_uri => client.redirect_uri)
38
+ @authorization_code = user.authorization_codes.create(:client_id => client, :redirect_uri => client.redirect_uri)
39
39
  params = {
40
40
  :grant_type => 'authorization_code',
41
41
  :client_id => client.identifier,
@@ -5,9 +5,9 @@ describe Devise::Strategies::Oauth2RefreshTokenGrantTypeStrategy do
5
5
  describe 'with grant_type=refresh_token' do
6
6
  context 'with valid params' do
7
7
  with :client
8
+ with :user
8
9
  before do
9
- @user = User.create! :email => 'ryan@socialcast.com', :password => 'test'
10
- @refresh_token = client.refresh_tokens.create! :user => @user
10
+ @refresh_token = client.refresh_tokens.create! :user => user
11
11
  params = {
12
12
  :grant_type => 'refresh_token',
13
13
  :client_id => client.identifier,
@@ -32,10 +32,10 @@ describe Devise::Strategies::Oauth2RefreshTokenGrantTypeStrategy do
32
32
  end
33
33
  end
34
34
  context 'with invalid refresh_token' do
35
+ with :user
36
+ with :client
35
37
  before do
36
- @user = User.create! :email => 'ryan@socialcast.com', :password => 'test'
37
- client = Devise::Oauth2Providable::Client.create! :name => 'example', :redirect_uri => 'http://localhost', :website => 'http://localhost'
38
- @refresh_token = client.refresh_tokens.create! :user => @user
38
+ @refresh_token = client.refresh_tokens.create! :user => user
39
39
  params = {
40
40
  :grant_type => 'refresh_token',
41
41
  :client_id => client.identifier,
@@ -57,6 +57,58 @@ describe Devise::Strategies::Oauth2RefreshTokenGrantTypeStrategy do
57
57
  response.body.should match_json(expected)
58
58
  end
59
59
  end
60
+ context 'with invalid client_id' do
61
+ with :user
62
+ with :client
63
+ before do
64
+ @refresh_token = client.refresh_tokens.create! :user => user
65
+ params = {
66
+ :grant_type => 'refresh_token',
67
+ :client_id => 'invalid',
68
+ :client_secret => client.secret,
69
+ :refresh_token => @refresh_token.token
70
+ }
71
+
72
+ post '/oauth2/token', params
73
+ end
74
+ it { response.code.to_i.should == 400 }
75
+ it { response.content_type.should == 'application/json' }
76
+ it 'returns json' do
77
+ token = Devise::Oauth2Providable::AccessToken.last
78
+ refresh_token = @refresh_token
79
+ expected = {
80
+ :error => 'invalid_grant',
81
+ :error_description => 'invalid refresh token'
82
+ }
83
+ response.body.should match_json(expected)
84
+ end
85
+ end
86
+ context 'with invalid client_secret' do
87
+ with :user
88
+ with :client
89
+ before do
90
+ @refresh_token = client.refresh_tokens.create! :user => user
91
+ params = {
92
+ :grant_type => 'refresh_token',
93
+ :client_id => client.identifier,
94
+ :client_secret => client.secret,
95
+ :refresh_token => @refresh_token.token
96
+ }
97
+
98
+ post '/oauth2/token', params
99
+ end
100
+ it { response.code.to_i.should == 400 }
101
+ it { response.content_type.should == 'application/json' }
102
+ it 'returns json' do
103
+ token = Devise::Oauth2Providable::AccessToken.last
104
+ refresh_token = @refresh_token
105
+ expected = {
106
+ :error => 'invalid_grant',
107
+ :error_description => 'invalid refresh token'
108
+ }
109
+ response.body.should match_json(expected)
110
+ end
111
+ end
60
112
  end
61
113
  end
62
114
  end
@@ -1,15 +1,19 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Devise::Oauth2Providable::AuthorizationsController do
4
+ before :all do
5
+ Devise::Oauth2Providable::Engine.load_engine_routes
6
+ end
4
7
  describe 'routing' do
5
8
  it 'routes POST /oauth2/authorizations' do
6
- {:post => '/oauth2/authorizations'}.should route_to(:controller => 'oauth2/authorizations', :action => 'create')
9
+ post('/oauth2/authorizations').should route_to('devise/oauth2_providable/authorizations#create')
7
10
  end
8
11
  it 'routes GET /oauth2/authorize' do
9
- {:get => '/oauth2/authorize'}.should route_to(:controller => 'oauth2/authorizations', :action => 'new')
12
+ get('/oauth2/authorize').should route_to('devise/oauth2_providable/authorizations#new')
10
13
  end
11
14
  it 'routes POST /oauth2/authorize' do
12
- {:post => '/oauth2/authorize'}.should route_to(:controller => 'oauth2/authorizations', :action => 'new')
15
+ #FIXME: this is valid, but the route is not being loaded into the test
16
+ post('/oauth2/authorize').should route_to('devise/oauth2_providable/authorizations#new')
13
17
  end
14
18
  end
15
19
  end
@@ -1,9 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Devise::Oauth2Providable::TokensController do
4
+ before :all do
5
+ Devise::Oauth2Providable::Engine.load_engine_routes
6
+ end
4
7
  describe 'routing' do
5
8
  it 'routes POST /oauth2/token' do
6
- {:post => '/oauth2/token'}.should route_to(:controller => 'oauth2/tokens', :action => 'create')
9
+ post('/oauth2/token').should route_to('devise/oauth2_providable/tokens#create')
7
10
  end
8
11
  end
9
12
  end
@@ -1,15 +1,13 @@
1
1
  # Configure Rails Envinronment
2
2
  ENV["RAILS_ENV"] = "test"
3
- require File.expand_path("../dummy/config/environment.rb", __FILE__)
3
+ spec_root = File.expand_path('..', __FILE__)
4
+ require File.expand_path("dummy/config/environment.rb", spec_root)
4
5
 
5
6
  require 'pry'
6
7
  require 'rspec/rails'
7
8
  require 'shoulda-matchers'
8
-
9
9
  require 'factory_girl_rspec'
10
- FactoryGirl.definition_file_paths = [
11
- File.join(File.dirname(__FILE__), 'factories')
12
- ]
10
+ FactoryGirl.definition_file_paths = [File.join(spec_root, 'factories')]
13
11
  FactoryGirl.find_definitions
14
12
 
15
13
  ENGINE_RAILS_ROOT=File.join(File.dirname(__FILE__), '../')
@@ -27,3 +25,5 @@ RSpec.configure do |config|
27
25
  # see http://stackoverflow.com/questions/4401539/rspec-2-how-to-render-views-by-default-for-all-controller-specs
28
26
  config.render_views
29
27
  end
28
+
29
+ ActiveRecord::Migrator.migrate(File.expand_path("dummy/db/migrate/", spec_root))
@@ -0,0 +1,74 @@
1
+ # see http://www.builtfromsource.com/2011/09/21/testing-routes-with-rails-3-1-engines/
2
+ module Devise
3
+ module Oauth2Providable
4
+ module EngineHacks
5
+ ##
6
+ # Automatically append all of the current engine's routes to the main
7
+ # application's route set. This needs to be done for ALL functional tests that
8
+ # use engine routes, since the mounted routes don't work during tests.
9
+ #
10
+ # @param [Symbol] engine_symbol Optional; if provided, uses this symbol to
11
+ # locate the engine class by name, otherwise uses the module of the calling
12
+ # test case as the presumed name of the engine.
13
+ #
14
+ # @author Jason Hamilton (jhamilton@greatherorift.com)
15
+ # @author Matthew Ratzloff (matt@urbaninfluence.com)
16
+ def load_engine_routes(engine_symbol = nil)
17
+ if engine_symbol
18
+ engine_name = engine_symbol.to_s.camelize
19
+ else
20
+ # No engine provided, so presume the current engine is the one to load
21
+ engine_name = self.class.name.split("::").first.split("(").last
22
+ end
23
+ engine = ("#{engine_name}::Engine").constantize
24
+
25
+ engine_name = 'oauth2'
26
+ engine = Devise::Oauth2Providable::Engine
27
+ named_routes = engine.routes.named_routes.routes
28
+ resourced_routes = []
29
+
30
+ # Append the routes for this module to the existing routes
31
+ # ::Rails.application.routes.disable_clear_and_finalize = true
32
+ # ::Rails.application.routes.clear!
33
+ # ::Rails.application.routes_reloader.paths.each { |path| load(path) }
34
+ ::Rails.application.routes.draw do
35
+
36
+ # unnamed_routes = engine.routes.routes - named_routes.values
37
+
38
+ engine.routes.routes.each do |route|
39
+ # Call the method by hand based on the symbol
40
+ path = "/#{engine_name.underscore}#{route.path}"
41
+ requirements = route.requirements
42
+ if path_helper = named_routes[route]
43
+ requirements[:as] = path_helper
44
+ elsif route.requirements[:controller].present?
45
+ # Presume that all controllers referenced in routes should also be
46
+ # resources and append that routing on the end so that *_path helpers
47
+ # will still work
48
+ resourced_routes << route.requirements[:controller].gsub("#{engine_name.downcase}/", "").to_sym
49
+ end
50
+
51
+ verb = (route.verb.blank? ? "GET" : route.verb).downcase.to_sym
52
+ send(verb, path, requirements) if respond_to?(verb)
53
+ end
54
+
55
+ # Add each route, once, to the end under a scope to trick path helpers.
56
+ # This will probably break as soon as there is route name overlap, but
57
+ # we'll cross that bridge when we get to it.
58
+ # resourced_routes.uniq!
59
+ # scope engine_name.downcase do
60
+ # resourced_routes.each do |resource|
61
+ # resources resource
62
+ # end
63
+ # end
64
+ end
65
+
66
+ # Finalize the routes
67
+ ::Rails.application.routes.finalize!
68
+ ::Rails.application.routes.disable_clear_and_finalize = false
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ Rails::Engine.send(:include, Devise::Oauth2Providable::EngineHacks)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise_oauth2_providable
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 3
10
- version: 1.0.3
9
+ - 4
10
+ version: 1.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ryan Sonnek
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-10-28 00:00:00 Z
18
+ date: 2011-12-05 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rails
@@ -175,7 +175,6 @@ extra_rdoc_files: []
175
175
 
176
176
  files:
177
177
  - .gitignore
178
- - .rspec
179
178
  - .rvmrc
180
179
  - CONTRIBUTORS.txt
181
180
  - Gemfile
@@ -208,6 +207,7 @@ files:
208
207
  - lib/devise/oauth2_providable/version.rb
209
208
  - lib/devise_oauth2_providable.rb
210
209
  - script/rails
210
+ - spec/controllers/authorizations_controller_spec.rb
211
211
  - spec/controllers/protected_controller_spec.rb
212
212
  - spec/dummy/Rakefile
213
213
  - spec/dummy/app/assets/javascripts/application.js
@@ -248,6 +248,7 @@ files:
248
248
  - spec/dummy/public/favicon.ico
249
249
  - spec/dummy/script/rails
250
250
  - spec/factories/client_factory.rb
251
+ - spec/factories/user_factory.rb
251
252
  - spec/integration/oauth2_authorization_token_grant_type_strategy_spec.rb
252
253
  - spec/integration/oauth2_password_grant_type_strategy_spec.rb
253
254
  - spec/integration/oauth2_refresh_token_grant_type_strategy_spec.rb
@@ -259,8 +260,8 @@ files:
259
260
  - spec/models/user_spec.rb
260
261
  - spec/routing/authorizations_routing_spec.rb
261
262
  - spec/routing/tokens_routing_spec.rb
262
- - spec/setup_database.rb
263
263
  - spec/spec_helper.rb
264
+ - spec/support/inject_engine_routes_into_application.rb
264
265
  - spec/support/match_json.rb
265
266
  homepage: ""
266
267
  licenses: []
@@ -296,6 +297,7 @@ signing_key:
296
297
  specification_version: 3
297
298
  summary: OAuth2 Provider for Rails3 applications
298
299
  test_files:
300
+ - spec/controllers/authorizations_controller_spec.rb
299
301
  - spec/controllers/protected_controller_spec.rb
300
302
  - spec/dummy/Rakefile
301
303
  - spec/dummy/app/assets/javascripts/application.js
@@ -336,6 +338,7 @@ test_files:
336
338
  - spec/dummy/public/favicon.ico
337
339
  - spec/dummy/script/rails
338
340
  - spec/factories/client_factory.rb
341
+ - spec/factories/user_factory.rb
339
342
  - spec/integration/oauth2_authorization_token_grant_type_strategy_spec.rb
340
343
  - spec/integration/oauth2_password_grant_type_strategy_spec.rb
341
344
  - spec/integration/oauth2_refresh_token_grant_type_strategy_spec.rb
@@ -347,6 +350,6 @@ test_files:
347
350
  - spec/models/user_spec.rb
348
351
  - spec/routing/authorizations_routing_spec.rb
349
352
  - spec/routing/tokens_routing_spec.rb
350
- - spec/setup_database.rb
351
353
  - spec/spec_helper.rb
354
+ - spec/support/inject_engine_routes_into_application.rb
352
355
  - spec/support/match_json.rb
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --colour
2
- --format documentation
3
- --backtrace
@@ -1,7 +0,0 @@
1
- config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
2
- ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
3
- ActiveRecord::Base.establish_connection(config[ENV['DB'] || 'sqlite'])
4
-
5
- ActiveRecord::Schema.define(:version => 1) do
6
-
7
- end