devise_oauth2_providable 0.3.8 → 1.0.0.beta1
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.
- data/.gitignore +33 -2
- data/README.md +23 -11
- data/Rakefile +8 -1
- data/app/controllers/devise/oauth2_providable/authorizations_controller.rb +59 -0
- data/app/controllers/{oauth2 → devise/oauth2_providable}/tokens_controller.rb +1 -1
- data/app/models/{access_token.rb → devise/oauth2_providable/access_token.rb} +1 -1
- data/app/models/{authorization_code.rb → devise/oauth2_providable/authorization_code.rb} +1 -1
- data/app/models/{client.rb → devise/oauth2_providable/client.rb} +2 -1
- data/app/models/{refresh_token.rb → devise/oauth2_providable/refresh_token.rb} +1 -1
- data/app/views/{oauth2 → devise/oauth2_providable}/authorizations/_form.html.erb +1 -1
- data/app/views/{oauth2 → devise/oauth2_providable}/authorizations/error.html.erb +0 -0
- data/app/views/devise/oauth2_providable/authorizations/new.html.erb +4 -0
- data/config/routes.rb +6 -6
- data/db/migrate/20111014160714_create_devise_oauth2_providable_schema.rb +55 -0
- data/devise_oauth2_providable.gemspec +7 -4
- data/lib/{devise_oauth2_providable → devise/oauth2_providable}/engine.rb +2 -1
- data/lib/{devise_oauth2_providable → devise/oauth2_providable}/models/oauth2_authorization_code_grantable.rb +0 -0
- data/lib/{devise_oauth2_providable → devise/oauth2_providable}/models/oauth2_password_grantable.rb +0 -0
- data/lib/devise/oauth2_providable/models/oauth2_providable.rb +13 -0
- data/lib/{devise_oauth2_providable → devise/oauth2_providable}/models/oauth2_refresh_token_grantable.rb +0 -0
- data/lib/{devise_oauth2_providable → devise/oauth2_providable}/strategies/oauth2_authorization_code_grant_type_strategy.rb +2 -2
- data/lib/{devise_oauth2_providable → devise/oauth2_providable}/strategies/oauth2_grant_type_strategy.rb +2 -2
- data/lib/{devise_oauth2_providable → devise/oauth2_providable}/strategies/oauth2_password_grant_type_strategy.rb +1 -1
- data/lib/{devise_oauth2_providable/strategy.rb → devise/oauth2_providable/strategies/oauth2_providable_strategy.rb} +1 -1
- data/lib/{devise_oauth2_providable → devise/oauth2_providable}/strategies/oauth2_refresh_token_grant_type_strategy.rb +1 -1
- data/lib/{devise_oauth2_providable → devise/oauth2_providable}/version.rb +1 -1
- data/lib/devise_oauth2_providable.rb +16 -14
- data/script/rails +6 -0
- data/spec/{rails_app/spec/controllers → controllers}/protected_controller_spec.rb +3 -3
- data/spec/{rails_app → dummy}/Rakefile +2 -2
- data/spec/dummy/app/assets/javascripts/application.js +7 -0
- data/spec/dummy/app/assets/stylesheets/application.css +7 -0
- data/spec/{rails_app → dummy}/app/controllers/application_controller.rb +0 -0
- data/spec/{rails_app → dummy}/app/controllers/protected_controller.rb +0 -0
- data/spec/{rails_app → dummy}/app/helpers/application_helper.rb +0 -0
- data/spec/{rails_app/lib/tasks → dummy/app/mailers}/.gitkeep +0 -0
- data/spec/{rails_app/public/javascripts → dummy/app/models}/.gitkeep +0 -0
- data/spec/{rails_app → dummy}/app/models/user.rb +0 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/{rails_app → dummy}/config/application.rb +10 -7
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/{rails_app → dummy}/config/database.yml +3 -0
- data/spec/{rails_app → dummy}/config/environment.rb +1 -1
- data/spec/{rails_app → dummy}/config/environments/development.rb +8 -4
- data/spec/{rails_app → dummy}/config/environments/production.rb +24 -13
- data/spec/{rails_app → dummy}/config/environments/test.rb +6 -2
- data/spec/{rails_app → dummy}/config/initializers/backtrace_silencers.rb +0 -0
- data/spec/{rails_app → dummy}/config/initializers/devise.rb +29 -17
- data/spec/{rails_app → dummy}/config/initializers/inflections.rb +0 -0
- data/spec/{rails_app → dummy}/config/initializers/mime_types.rb +0 -0
- data/spec/{rails_app → dummy}/config/initializers/secret_token.rb +1 -1
- data/spec/{rails_app → dummy}/config/initializers/session_store.rb +2 -2
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/{rails_app → dummy}/config/locales/devise.en.yml +8 -0
- data/spec/{rails_app → dummy}/config/locales/en.yml +1 -1
- data/spec/dummy/config/routes.rb +7 -0
- data/spec/{rails_app → dummy}/config.ru +1 -1
- data/spec/{rails_app/db/migrate/20110511210926_create_users.rb → dummy/db/migrate/20111014142838_create_users.rb} +1 -7
- data/spec/dummy/db/migrate/20111014161437_create_devise_oauth2_providable_schema.rb +55 -0
- data/spec/dummy/db/schema.rb +78 -0
- data/spec/{rails_app/public/stylesheets → dummy/lib/assets}/.gitkeep +0 -0
- data/spec/{rails_app/vendor/plugins → dummy/log}/.gitkeep +0 -0
- data/spec/{rails_app → dummy}/public/404.html +0 -0
- data/spec/{rails_app → dummy}/public/422.html +0 -0
- data/spec/{rails_app → dummy}/public/500.html +0 -0
- data/spec/{rails_app → dummy}/public/favicon.ico +0 -0
- data/spec/{rails_app → dummy}/script/rails +0 -0
- data/spec/{rails_app/spec/integration → integration}/oauth2_authorization_token_grant_type_strategy_spec.rb +7 -7
- data/spec/{rails_app/spec/integration → integration}/oauth2_password_grant_type_strategy_spec.rb +6 -6
- data/spec/{rails_app/spec/integration → integration}/oauth2_refresh_token_grant_type_strategy_spec.rb +6 -6
- data/spec/{devise_oauth2_providable_spec.rb → lib/devise_oauth2_providable_spec.rb} +0 -0
- data/spec/{rails_app/spec/models → models}/access_token_spec.rb +7 -5
- data/spec/{rails_app/spec/models → models}/authorization_code_spec.rb +3 -3
- data/spec/{rails_app/spec/models → models}/client_spec.rb +5 -2
- data/spec/{rails_app/spec/models → models}/refresh_token_spec.rb +5 -3
- data/spec/models/user_spec.rb +6 -0
- data/spec/{rails_app/spec/routing → routing}/authorizations_routing_spec.rb +1 -1
- data/spec/{rails_app/spec/routing → routing}/tokens_routing_spec.rb +1 -1
- data/spec/spec_helper.rb +14 -20
- data/spec/support/match_json.rb +6 -0
- metadata +204 -162
- data/app/controllers/oauth2/authorizations_controller.rb +0 -55
- data/app/views/oauth2/authorizations/new.html.erb +0 -5
- data/lib/devise_oauth2_providable/model.rb +0 -13
- data/lib/devise_oauth2_providable/schema.rb +0 -61
- data/spec/rails_app/.gitignore +0 -4
- data/spec/rails_app/.rspec +0 -2
- data/spec/rails_app/Gemfile +0 -36
- data/spec/rails_app/README +0 -256
- data/spec/rails_app/app/views/layouts/application.html.erb +0 -14
- data/spec/rails_app/config/boot.rb +0 -6
- data/spec/rails_app/config/routes.rb +0 -61
- data/spec/rails_app/db/migrate/20110511210818_create_oauth2_schema.rb +0 -8
- data/spec/rails_app/db/schema.rb +0 -79
- data/spec/rails_app/db/seeds.rb +0 -7
- data/spec/rails_app/doc/README_FOR_APP +0 -2
- data/spec/rails_app/public/images/rails.png +0 -0
- data/spec/rails_app/public/index.html +0 -239
- data/spec/rails_app/public/javascripts/application.js +0 -0
- data/spec/rails_app/public/robots.txt +0 -5
- data/spec/rails_app/spec/models/user_spec.rb +0 -8
- data/spec/rails_app/spec/spec_helper.rb +0 -36
data/.gitignore
CHANGED
|
@@ -1,4 +1,35 @@
|
|
|
1
|
-
|
|
1
|
+
# rcov generated
|
|
2
|
+
coverage
|
|
3
|
+
|
|
4
|
+
# rdoc generated
|
|
5
|
+
rdoc
|
|
6
|
+
|
|
7
|
+
# yard generated
|
|
8
|
+
doc
|
|
9
|
+
.yardoc
|
|
10
|
+
|
|
11
|
+
# bundler
|
|
2
12
|
.bundle
|
|
3
13
|
Gemfile.lock
|
|
4
|
-
|
|
14
|
+
|
|
15
|
+
# jeweler generated
|
|
16
|
+
pkg
|
|
17
|
+
|
|
18
|
+
# test files
|
|
19
|
+
test/*.log
|
|
20
|
+
test/*.sqlite3
|
|
21
|
+
|
|
22
|
+
# For vim:
|
|
23
|
+
*.swp
|
|
24
|
+
|
|
25
|
+
# For MacOS:
|
|
26
|
+
.DS_Store
|
|
27
|
+
|
|
28
|
+
# git files
|
|
29
|
+
*.orig
|
|
30
|
+
|
|
31
|
+
# rails files
|
|
32
|
+
tmp
|
|
33
|
+
log
|
|
34
|
+
*.log
|
|
35
|
+
*.sqlite3
|
data/README.md
CHANGED
|
@@ -3,35 +3,47 @@
|
|
|
3
3
|
Rails3 engine that brings OAuth2 Provider support to your application.
|
|
4
4
|
|
|
5
5
|
Current OAuth2 Specification Draft:
|
|
6
|
-
http://tools.ietf.org/html/draft-ietf-oauth-v2-
|
|
6
|
+
http://tools.ietf.org/html/draft-ietf-oauth-v2-22
|
|
7
7
|
|
|
8
8
|
## Features
|
|
9
9
|
|
|
10
|
-
*
|
|
10
|
+
* integrate OAuth2 authentication with Devise authenthentication stack
|
|
11
11
|
* one-stop-shop includes all Models, Controllers and Views to get up and
|
|
12
12
|
running quickly
|
|
13
13
|
* All server requests support authentication via bearer token included in
|
|
14
14
|
the request. http://tools.ietf.org/html/draft-ietf-oauth-v2-bearer-04
|
|
15
|
+
* customizable mount point for oauth2 routes (ex: /oauth2 vs /oauth)
|
|
15
16
|
|
|
16
17
|
|
|
18
|
+
## Requirements
|
|
19
|
+
|
|
20
|
+
* Devise authentication library
|
|
21
|
+
* Rails 3.1 or higher
|
|
22
|
+
|
|
17
23
|
## Installation
|
|
18
24
|
|
|
25
|
+
#### Install gem
|
|
19
26
|
```ruby
|
|
20
|
-
#
|
|
27
|
+
# Gemfile
|
|
21
28
|
gem 'devise_oauth2_providable'
|
|
22
29
|
```
|
|
23
30
|
|
|
31
|
+
#### Migrate database for Oauth2 models
|
|
32
|
+
```
|
|
33
|
+
$ rake devise_oauth2_providable:install:migrations
|
|
34
|
+
$ rake db:migrate
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
#### Add Oauth2 Routes
|
|
24
38
|
```ruby
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
end
|
|
30
|
-
def self.down
|
|
31
|
-
Devise::Oauth2Providable::Schema.down(self)
|
|
32
|
-
end
|
|
39
|
+
# config/routes.rb
|
|
40
|
+
Rails.application.routes.draw do
|
|
41
|
+
# oauth routes can be mounted to any path (ex: /oauth2 or /oauth)
|
|
42
|
+
mount Devise::Oauth2Providable::Engine => '/oauth2'
|
|
33
43
|
end
|
|
34
44
|
```
|
|
45
|
+
|
|
46
|
+
#### Configure User for supported Oauth2 flows
|
|
35
47
|
```ruby
|
|
36
48
|
class User
|
|
37
49
|
# NOTE: include :database_authenticatable configuration
|
data/Rakefile
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
require 'bundler'
|
|
2
2
|
Bundler::GemHelper.install_tasks
|
|
3
3
|
|
|
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
|
+
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
|
10
|
+
load 'rails/tasks/engine.rake'
|
|
11
|
+
|
|
4
12
|
require 'rspec/core/rake_task'
|
|
5
13
|
RSpec::Core::RakeTask.new('spec')
|
|
6
14
|
task :default => :spec
|
|
7
|
-
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module Devise
|
|
2
|
+
module Oauth2Providable
|
|
3
|
+
class AuthorizationsController < ApplicationController
|
|
4
|
+
before_filter :authenticate_user!
|
|
5
|
+
|
|
6
|
+
rescue_from Rack::OAuth2::Server::Authorize::BadRequest do |e|
|
|
7
|
+
@error = e
|
|
8
|
+
render :error, :status => e.status
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def new
|
|
12
|
+
respond *authorize_endpoint.call(request.env)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def create
|
|
16
|
+
respond *authorize_endpoint(:allow_approval).call(request.env)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def respond(status, header, response)
|
|
22
|
+
["WWW-Authenticate"].each do |key|
|
|
23
|
+
headers[key] = header[key] if header[key].present?
|
|
24
|
+
end
|
|
25
|
+
if response.redirect?
|
|
26
|
+
redirect_to header['Location']
|
|
27
|
+
else
|
|
28
|
+
render :new
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def authorize_endpoint(allow_approval = false)
|
|
33
|
+
Rack::OAuth2::Server::Authorize.new do |req, res|
|
|
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)
|
|
36
|
+
if allow_approval
|
|
37
|
+
if params[:approve].present?
|
|
38
|
+
case req.response_type
|
|
39
|
+
when :code
|
|
40
|
+
authorization_code = current_user.authorization_codes.create(:client => @client, :redirect_uri => @redirect_uri)
|
|
41
|
+
res.code = authorization_code.token
|
|
42
|
+
when :token
|
|
43
|
+
access_token = current_user.access_tokens.create(:client => @client).token
|
|
44
|
+
bearer_token = Rack::OAuth2::AccessToken::Bearer.new(:access_token => access_token)
|
|
45
|
+
res.access_token = bearer_token
|
|
46
|
+
res.uid = current_user.id
|
|
47
|
+
end
|
|
48
|
+
res.approve!
|
|
49
|
+
else
|
|
50
|
+
req.access_denied!
|
|
51
|
+
end
|
|
52
|
+
else
|
|
53
|
+
@response_type = req.response_type
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'expirable_token'
|
|
2
2
|
|
|
3
|
-
class AuthorizationCode < ActiveRecord::Base
|
|
3
|
+
class Devise::Oauth2Providable::AuthorizationCode < ActiveRecord::Base
|
|
4
4
|
include ExpirableToken
|
|
5
5
|
def access_token
|
|
6
6
|
@access_token ||= expired! && user.access_tokens.create(:client => client)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
class Client < ActiveRecord::Base
|
|
1
|
+
class Devise::Oauth2Providable::Client < ActiveRecord::Base
|
|
2
2
|
has_many :access_tokens
|
|
3
3
|
has_many :refresh_tokens
|
|
4
|
+
has_many :authorization_codes
|
|
4
5
|
|
|
5
6
|
before_validation :init_identifier, :on => :create, :unless => :identifier?
|
|
6
7
|
before_validation :init_secret, :on => :create, :unless => :secret?
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<%= form_tag
|
|
1
|
+
<%= form_tag authorizations_path, :class => action do %>
|
|
2
2
|
<%= hidden_field_tag :client_id, client.identifier %>
|
|
3
3
|
<%= hidden_field_tag :response_type, response_type %>
|
|
4
4
|
<%= hidden_field_tag :redirect_uri, redirect_uri %>
|
|
File without changes
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<h2><%= link_to @client.name, @client.website %> is requesting permission to access your resources.</h2>
|
|
2
|
+
|
|
3
|
+
<%= render 'devise/oauth2_providable/authorizations/form', :client => @client, :response_type => @response_type, :redirect_uri => @redirect_uri, :action => :approve %>
|
|
4
|
+
<%= render 'devise/oauth2_providable/authorizations/form', :client => @client, :response_type => @response_type, :redirect_uri => @redirect_uri, :action => :deny %>
|
data/config/routes.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
Devise::Oauth2Providable::Engine.routes.draw do
|
|
2
|
+
root :to => "authorizations#new"
|
|
3
|
+
|
|
4
|
+
resources :authorizations, :only => :create
|
|
5
|
+
match 'authorize' => 'authorizations#new'
|
|
6
|
+
resource :token, :only => :create
|
|
7
7
|
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
class CreateDeviseOauth2ProvidableSchema < ActiveRecord::Migration
|
|
2
|
+
def change
|
|
3
|
+
create_table :oauth2_clients do |t|
|
|
4
|
+
t.string :name
|
|
5
|
+
t.string :redirect_uri
|
|
6
|
+
t.string :website
|
|
7
|
+
t.string :identifier
|
|
8
|
+
t.string :secret
|
|
9
|
+
t.timestamps
|
|
10
|
+
end
|
|
11
|
+
change_table :oauth2_clients do |t|
|
|
12
|
+
t.index :identifier, :unique => true
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
create_table :oauth2_access_tokens do |t|
|
|
16
|
+
t.belongs_to :user, :client, :refresh_token
|
|
17
|
+
t.string :token
|
|
18
|
+
t.datetime :expires_at
|
|
19
|
+
t.timestamps
|
|
20
|
+
end
|
|
21
|
+
change_table :oauth2_access_tokens do |t|
|
|
22
|
+
t.index :token, :unique => true
|
|
23
|
+
t.index :expires_at
|
|
24
|
+
t.index :user_id
|
|
25
|
+
t.index :client_id
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
create_table :oauth2_refresh_tokens do |t|
|
|
29
|
+
t.belongs_to :user, :client
|
|
30
|
+
t.string :token
|
|
31
|
+
t.datetime :expires_at
|
|
32
|
+
t.timestamps
|
|
33
|
+
end
|
|
34
|
+
change_table :oauth2_refresh_tokens do |t|
|
|
35
|
+
t.index :token, :unique => true
|
|
36
|
+
t.index :expires_at
|
|
37
|
+
t.index :user_id
|
|
38
|
+
t.index :client_id
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
create_table :oauth2_authorization_codes do |t|
|
|
42
|
+
t.belongs_to :user, :client
|
|
43
|
+
t.string :token
|
|
44
|
+
t.datetime :expires_at
|
|
45
|
+
t.string :redirect_uri
|
|
46
|
+
t.timestamps
|
|
47
|
+
end
|
|
48
|
+
change_table :oauth2_authorization_codes do |t|
|
|
49
|
+
t.index :token, :unique => true
|
|
50
|
+
t.index :expires_at
|
|
51
|
+
t.index :user_id
|
|
52
|
+
t.index :client_id
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
-
require "
|
|
3
|
+
require "devise/oauth2_providable/version"
|
|
4
4
|
|
|
5
5
|
Gem::Specification.new do |s|
|
|
6
6
|
s.name = "devise_oauth2_providable"
|
|
@@ -14,10 +14,13 @@ Gem::Specification.new do |s|
|
|
|
14
14
|
|
|
15
15
|
s.rubyforge_project = "devise_oauth2_providable"
|
|
16
16
|
|
|
17
|
-
s.add_runtime_dependency(%q<rails>, [">= 3.0
|
|
18
|
-
s.add_runtime_dependency(%q<devise>, [">= 1.
|
|
17
|
+
s.add_runtime_dependency(%q<rails>, [">= 3.1.0"])
|
|
18
|
+
s.add_runtime_dependency(%q<devise>, [">= 1.4.3"])
|
|
19
19
|
s.add_runtime_dependency(%q<rack-oauth2>, ["~> 0.11.0"])
|
|
20
|
-
s.add_development_dependency(%q<rspec>, ['
|
|
20
|
+
s.add_development_dependency(%q<rspec-rails>, ['2.6.1'])
|
|
21
|
+
s.add_development_dependency(%q<sqlite3>, ['1.3.4'])
|
|
22
|
+
s.add_development_dependency(%q<shoulda-matchers>, ['1.0.0.beta3'])
|
|
23
|
+
s.add_development_dependency(%q<pry>, ['0.9.6.2'])
|
|
21
24
|
|
|
22
25
|
s.files = `git ls-files`.split("\n")
|
|
23
26
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
module Devise
|
|
2
2
|
module Oauth2Providable
|
|
3
3
|
class Engine < Rails::Engine
|
|
4
|
+
engine_name 'oauth2'
|
|
5
|
+
isolate_namespace Devise::Oauth2Providable
|
|
4
6
|
initializer "devise_oauth2_providable.initialize_application" do |app|
|
|
5
7
|
app.config.filter_parameters << :client_secret
|
|
6
8
|
end
|
|
7
9
|
end
|
|
8
10
|
end
|
|
9
11
|
end
|
|
10
|
-
|
|
File without changes
|
data/lib/{devise_oauth2_providable → devise/oauth2_providable}/models/oauth2_password_grantable.rb
RENAMED
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'devise/models'
|
|
2
|
+
|
|
3
|
+
module Devise
|
|
4
|
+
module Models
|
|
5
|
+
module Oauth2Providable
|
|
6
|
+
extend ActiveSupport::Concern
|
|
7
|
+
included do
|
|
8
|
+
has_many :access_tokens, :class_name => 'Devise::Oauth2Providable::AccessToken'
|
|
9
|
+
has_many :authorization_codes, :class_name => 'Devise::Oauth2Providable::AuthorizationCode'
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
File without changes
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'devise/oauth2_providable/strategies/oauth2_grant_type_strategy'
|
|
2
2
|
|
|
3
3
|
module Devise
|
|
4
4
|
module Strategies
|
|
@@ -8,7 +8,7 @@ module Devise
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def authenticate!
|
|
11
|
-
if client && code =
|
|
11
|
+
if client && code = client.authorization_codes.valid.find_by_token(params[:code])
|
|
12
12
|
success! code.user
|
|
13
13
|
elsif !halted?
|
|
14
14
|
oauth_error! :invalid_grant, 'invalid authorization code request'
|
|
@@ -4,7 +4,7 @@ module Devise
|
|
|
4
4
|
module Strategies
|
|
5
5
|
class Oauth2GrantTypeStrategy < Authenticatable
|
|
6
6
|
def valid?
|
|
7
|
-
params[:controller] == '
|
|
7
|
+
params[:controller] == 'devise/oauth2_providable/tokens' && request.post? && params[:grant_type] == grant_type
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
# defined by subclass
|
|
@@ -12,7 +12,7 @@ module Devise
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def client
|
|
15
|
-
@client ||= Client.find_by_identifier params[:client_id]
|
|
15
|
+
@client ||= Devise::Oauth2Providable::Client.find_by_identifier params[:client_id]
|
|
16
16
|
env['oauth2.client'] = @client
|
|
17
17
|
@client
|
|
18
18
|
end
|
|
@@ -9,7 +9,7 @@ module Devise
|
|
|
9
9
|
end
|
|
10
10
|
def authenticate!
|
|
11
11
|
@req.setup!
|
|
12
|
-
token = AccessToken.valid.find_by_token @req.access_token
|
|
12
|
+
token = Devise::Oauth2Providable::AccessToken.valid.find_by_token @req.access_token
|
|
13
13
|
env['oauth2.client'] = token ? token.client : nil
|
|
14
14
|
resource = token ? token.user : nil
|
|
15
15
|
if validate(resource)
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
require 'devise'
|
|
2
2
|
require 'rack/oauth2'
|
|
3
|
-
require '
|
|
4
|
-
require '
|
|
5
|
-
require '
|
|
6
|
-
require '
|
|
7
|
-
require '
|
|
8
|
-
require '
|
|
9
|
-
require '
|
|
10
|
-
require '
|
|
11
|
-
require '
|
|
12
|
-
require 'devise_oauth2_providable/models/oauth2_authorization_code_grantable'
|
|
3
|
+
require 'devise/oauth2_providable/engine'
|
|
4
|
+
require 'devise/oauth2_providable/strategies/oauth2_providable_strategy'
|
|
5
|
+
require 'devise/oauth2_providable/strategies/oauth2_password_grant_type_strategy'
|
|
6
|
+
require 'devise/oauth2_providable/strategies/oauth2_refresh_token_grant_type_strategy'
|
|
7
|
+
require 'devise/oauth2_providable/strategies/oauth2_authorization_code_grant_type_strategy'
|
|
8
|
+
require 'devise/oauth2_providable/models/oauth2_providable'
|
|
9
|
+
require 'devise/oauth2_providable/models/oauth2_password_grantable'
|
|
10
|
+
require 'devise/oauth2_providable/models/oauth2_refresh_token_grantable'
|
|
11
|
+
require 'devise/oauth2_providable/models/oauth2_authorization_code_grantable'
|
|
13
12
|
|
|
14
13
|
module Devise
|
|
15
14
|
module Oauth2Providable
|
|
@@ -17,19 +16,22 @@ module Devise
|
|
|
17
16
|
def random_id
|
|
18
17
|
SecureRandom.hex
|
|
19
18
|
end
|
|
19
|
+
def table_name_prefix
|
|
20
|
+
'oauth2_'
|
|
21
|
+
end
|
|
20
22
|
end
|
|
21
23
|
end
|
|
22
24
|
end
|
|
23
25
|
|
|
24
26
|
Devise.add_module(:oauth2_providable,
|
|
25
27
|
:strategy => true,
|
|
26
|
-
:model => '
|
|
28
|
+
:model => 'devise/oauth2_providable/models/oauth2_providable')
|
|
27
29
|
Devise.add_module(:oauth2_password_grantable,
|
|
28
30
|
:strategy => true,
|
|
29
|
-
:model => '
|
|
31
|
+
:model => 'devise/oauth2_providable/models/oauth2_password_grantable')
|
|
30
32
|
Devise.add_module(:oauth2_refresh_token_grantable,
|
|
31
33
|
:strategy => true,
|
|
32
|
-
:model => '
|
|
34
|
+
:model => 'devise/oauth2_providable/models/oauth2_refresh_token_grantable')
|
|
33
35
|
Devise.add_module(:oauth2_authorization_code_grantable,
|
|
34
36
|
:strategy => true,
|
|
35
|
-
:model => '
|
|
37
|
+
:model => 'devise/oauth2_providable/models/oauth2_authorization_code_grantable')
|
data/script/rails
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#!/usr/bin/env ruby
|
|
3
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
|
4
|
+
|
|
5
|
+
ENGINE_PATH = File.expand_path('../..', __FILE__)
|
|
6
|
+
load File.expand_path('../../spec/dummy/script/rails', __FILE__)
|
|
@@ -4,9 +4,9 @@ describe ProtectedController do
|
|
|
4
4
|
|
|
5
5
|
describe 'get :index' do
|
|
6
6
|
before do
|
|
7
|
-
client = Client.create! :name => 'test', :redirect_uri => 'http://localhost:3000', :website => 'http://localhost'
|
|
8
|
-
@user = User.create! :
|
|
9
|
-
@token = AccessToken.create! :client => client, :user => @user
|
|
7
|
+
client = Devise::Oauth2Providable::Client.create! :name => 'test', :redirect_uri => 'http://localhost:3000', :website => 'http://localhost'
|
|
8
|
+
@user = User.create! :email => 'foo@example.com'
|
|
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
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
#!/usr/bin/env rake
|
|
1
2
|
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
|
2
3
|
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
|
3
4
|
|
|
4
5
|
require File.expand_path('../config/application', __FILE__)
|
|
5
|
-
require 'rake'
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Dummy::Application.load_tasks
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// This is a manifest file that'll be compiled into including all the files listed below.
|
|
2
|
+
// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
|
|
3
|
+
// be included in the compiled file accessible from http://example.com/assets/application.js
|
|
4
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
|
5
|
+
// the compiled file.
|
|
6
|
+
//
|
|
7
|
+
//= require_tree .
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This is a manifest file that'll automatically include all the stylesheets available in this directory
|
|
3
|
+
* and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
|
|
4
|
+
* the top of the compiled file, but it's generally better to create a new file per style scope.
|
|
5
|
+
*= require_self
|
|
6
|
+
*= require_tree .
|
|
7
|
+
*/
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -2,11 +2,10 @@ require File.expand_path('../boot', __FILE__)
|
|
|
2
2
|
|
|
3
3
|
require 'rails/all'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Bundler.require(:default, Rails.env) if defined?(Bundler)
|
|
5
|
+
Bundler.require
|
|
6
|
+
require "devise_oauth2_providable"
|
|
8
7
|
|
|
9
|
-
module
|
|
8
|
+
module Dummy
|
|
10
9
|
class Application < Rails::Application
|
|
11
10
|
# Settings in config/environments/* take precedence over those specified here.
|
|
12
11
|
# Application configuration should go into files in config/initializers
|
|
@@ -30,13 +29,17 @@ module RailsApp
|
|
|
30
29
|
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
|
31
30
|
# config.i18n.default_locale = :de
|
|
32
31
|
|
|
33
|
-
# JavaScript files you want as :defaults (application.js is always included).
|
|
34
|
-
config.action_view.javascript_expansions[:defaults] = %w()
|
|
35
|
-
|
|
36
32
|
# Configure the default encoding used in templates for Ruby 1.9.
|
|
37
33
|
config.encoding = "utf-8"
|
|
38
34
|
|
|
39
35
|
# Configure sensitive parameters which will be filtered from the log file.
|
|
40
36
|
config.filter_parameters += [:password]
|
|
37
|
+
|
|
38
|
+
# Enable the asset pipeline
|
|
39
|
+
config.assets.enabled = true
|
|
40
|
+
|
|
41
|
+
# Version of your assets, change this if you want to expire all your assets
|
|
42
|
+
config.assets.version = '1.0'
|
|
41
43
|
end
|
|
42
44
|
end
|
|
45
|
+
|