doorkeeper 0.4.2 → 0.5.0
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 +2 -0
- data/.travis.yml +5 -1
- data/CHANGELOG.md +29 -0
- data/Gemfile +12 -4
- data/README.md +76 -7
- data/Rakefile +1 -25
- data/app/assets/javascripts/doorkeeper/application.js +0 -7
- data/app/controllers/doorkeeper/application_controller.rb +1 -27
- data/app/controllers/doorkeeper/applications_controller.rb +14 -6
- data/app/controllers/doorkeeper/authorized_applications_controller.rb +1 -1
- data/app/controllers/doorkeeper/token_info_controller.rb +11 -0
- data/app/controllers/doorkeeper/tokens_controller.rb +11 -8
- data/app/validators/redirect_uri_validator.rb +12 -0
- data/app/views/doorkeeper/applications/_form.html.erb +3 -3
- data/app/views/doorkeeper/applications/edit.html.erb +1 -1
- data/app/views/doorkeeper/applications/index.html.erb +4 -4
- data/app/views/doorkeeper/applications/new.html.erb +1 -1
- data/app/views/doorkeeper/applications/show.html.erb +3 -3
- data/app/views/doorkeeper/authorizations/new.html.erb +2 -2
- data/app/views/doorkeeper/authorized_applications/index.html.erb +1 -1
- data/config/locales/en.yml +35 -0
- data/doorkeeper.gemspec +3 -3
- data/gemfiles/gemfile.rails-3.1.x +10 -0
- data/gemfiles/gemfile.rails-3.2.x +10 -0
- data/lib/doorkeeper/config.rb +56 -38
- data/lib/doorkeeper/doorkeeper_for.rb +2 -0
- data/lib/doorkeeper/engine.rb +3 -32
- data/lib/doorkeeper/helpers/controller.rb +29 -0
- data/lib/doorkeeper/helpers/filter.rb +4 -18
- data/{app/models/doorkeeper → lib/doorkeeper/models}/access_grant.rb +7 -7
- data/{app/models/doorkeeper → lib/doorkeeper/models}/access_token.rb +27 -24
- data/lib/doorkeeper/models/accessible.rb +9 -0
- data/lib/doorkeeper/models/active_record/access_grant.rb +5 -0
- data/lib/doorkeeper/models/active_record/access_token.rb +15 -0
- data/lib/doorkeeper/models/active_record/application.rb +18 -0
- data/lib/doorkeeper/models/application.rb +38 -0
- data/lib/doorkeeper/models/expirable.rb +6 -4
- data/lib/doorkeeper/models/mongoid/access_grant.rb +22 -0
- data/lib/doorkeeper/models/mongoid/access_token.rb +35 -0
- data/lib/doorkeeper/models/mongoid/application.rb +22 -0
- data/lib/doorkeeper/models/mongoid/revocable.rb +15 -0
- data/lib/doorkeeper/models/mongoid/scopes.rb +15 -0
- data/lib/doorkeeper/models/ownership.rb +16 -0
- data/lib/doorkeeper/models/revocable.rb +1 -1
- data/lib/doorkeeper/models/scopes.rb +9 -5
- data/lib/doorkeeper/oauth/access_token_request.rb +2 -2
- data/lib/doorkeeper/oauth/authorization/code.rb +5 -3
- data/lib/doorkeeper/oauth/authorization.rb +1 -0
- data/lib/doorkeeper/oauth/client.rb +2 -2
- data/lib/doorkeeper/oauth/client_credentials_request.rb +4 -1
- data/lib/doorkeeper/oauth/helpers/unique_token.rb +2 -5
- data/lib/doorkeeper/oauth/password_access_token_request.rb +2 -5
- data/lib/doorkeeper/oauth/token.rb +36 -0
- data/lib/doorkeeper/rails/routes/mapper.rb +28 -0
- data/lib/doorkeeper/rails/routes/mapping.rb +39 -0
- data/lib/doorkeeper/rails/routes.rb +77 -0
- data/lib/doorkeeper/version.rb +1 -1
- data/lib/doorkeeper.rb +10 -3
- data/lib/generators/doorkeeper/application_owner_generator.rb +15 -0
- data/lib/generators/doorkeeper/install_generator.rb +2 -9
- data/lib/generators/doorkeeper/migration_generator.rb +15 -0
- data/lib/generators/doorkeeper/templates/README +15 -1
- data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb +7 -0
- data/lib/generators/doorkeeper/templates/initializer.rb +31 -15
- data/lib/generators/doorkeeper/templates/migration.rb +7 -4
- data/lib/generators/doorkeeper/views_generator.rb +1 -1
- data/script/run_all +3 -0
- data/spec/controllers/applications_controller_spec.rb +1 -1
- data/spec/controllers/authorizations_controller_spec.rb +4 -4
- data/spec/controllers/protected_resources_controller_spec.rb +7 -7
- data/spec/controllers/token_info_controller_spec.rb +54 -0
- data/spec/controllers/tokens_controller_spec.rb +3 -2
- data/spec/dummy/app/controllers/custom_authorizations_controller.rb +7 -0
- data/spec/dummy/app/models/user.rb +16 -5
- data/spec/dummy/config/application.rb +4 -7
- data/spec/dummy/config/boot.rb +3 -7
- data/spec/dummy/config/initializers/doorkeeper.rb +13 -0
- data/spec/dummy/config/mongoid.yml +7 -0
- data/spec/dummy/config/routes.rb +29 -1
- data/spec/dummy/db/migrate/20120312140401_add_password_to_users.rb +1 -1
- data/spec/dummy/db/migrate/20120524202412_create_doorkeeper_tables.rb +6 -4
- data/spec/dummy/db/schema.rb +5 -3
- data/spec/generators/application_owner_generator_spec.rb +23 -0
- data/spec/generators/install_generator_spec.rb +1 -6
- data/spec/generators/migration_generator_spec.rb +20 -0
- data/spec/lib/config_spec.rb +72 -4
- data/spec/lib/models/expirable_spec.rb +8 -11
- data/spec/lib/models/revocable_spec.rb +1 -1
- data/spec/lib/oauth/access_token_request_spec.rb +15 -9
- data/spec/lib/oauth/authorization_request_spec.rb +1 -0
- data/spec/lib/oauth/client_credentials_request_spec.rb +15 -9
- data/spec/lib/oauth/client_spec.rb +5 -8
- data/spec/lib/oauth/helpers/unique_token_spec.rb +2 -20
- data/spec/lib/oauth/password_access_token_request_spec.rb +16 -9
- data/spec/lib/oauth/token_spec.rb +83 -0
- data/spec/models/doorkeeper/access_token_spec.rb +41 -1
- data/spec/models/doorkeeper/application_spec.rb +53 -20
- data/spec/requests/flows/authorization_code_spec.rb +1 -1
- data/spec/requests/flows/client_credentials_spec.rb +2 -0
- data/spec/requests/flows/password_spec.rb +25 -0
- data/spec/requests/flows/refresh_token_spec.rb +5 -2
- data/spec/requests/protected_resources/private_api_spec.rb +10 -3
- data/spec/routing/custom_controller_routes_spec.rb +44 -0
- data/spec/routing/default_routes_spec.rb +32 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/spec_helper_integration.rb +18 -8
- data/spec/support/dependencies/factory_girl.rb +0 -3
- data/spec/support/orm/active_record.rb +11 -0
- data/spec/support/orm/mongoid.rb +26 -0
- data/spec/support/shared/controllers_shared_context.rb +2 -2
- data/spec/support/shared/models_shared_examples.rb +16 -0
- data/spec/validators/redirect_uri_validator_spec.rb +40 -0
- metadata +59 -32
- data/app/helpers/doorkeeper/application_helper.rb +0 -4
- data/app/models/doorkeeper/application.rb +0 -54
- data/config/routes.rb +0 -9
- data/lib/tasks/doorkeeper_tasks.rake +0 -4
- data/spec/support/dependencies/database_cleaner.rb +0 -16
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
module Doorkeeper
|
|
2
2
|
module Models
|
|
3
3
|
module Scopes
|
|
4
|
-
def
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
def self.included(base)
|
|
5
|
+
base.class_eval do
|
|
6
|
+
define_method :scopes do
|
|
7
|
+
Doorkeeper::OAuth::Scopes.from_string(self[:scopes])
|
|
8
|
+
end
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
define_method :scopes_string do
|
|
11
|
+
Doorkeeper::OAuth::Scopes.from_string(self[:scopes]).to_s
|
|
12
|
+
end
|
|
13
|
+
end
|
|
10
14
|
end
|
|
11
15
|
end
|
|
12
16
|
end
|
|
@@ -81,11 +81,11 @@ module Doorkeeper::OAuth
|
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
def token_via_authorization_code
|
|
84
|
-
Doorkeeper::AccessGrant.
|
|
84
|
+
Doorkeeper::AccessGrant.authenticate(code)
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
def token_via_refresh_token
|
|
88
|
-
Doorkeeper::AccessToken.
|
|
88
|
+
Doorkeeper::AccessToken.by_refresh_token(refresh_token)
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
def create_access_token
|
|
@@ -4,8 +4,6 @@ module Doorkeeper
|
|
|
4
4
|
class Code
|
|
5
5
|
include URIBuilder
|
|
6
6
|
|
|
7
|
-
DEFAULT_EXPIRATION_TIME = 600
|
|
8
|
-
|
|
9
7
|
attr_accessor :authorization, :grant
|
|
10
8
|
|
|
11
9
|
def initialize(authorization)
|
|
@@ -16,7 +14,7 @@ module Doorkeeper
|
|
|
16
14
|
@grant ||= AccessGrant.create!(
|
|
17
15
|
:application_id => authorization.client.id,
|
|
18
16
|
:resource_owner_id => authorization.resource_owner.id,
|
|
19
|
-
:expires_in =>
|
|
17
|
+
:expires_in => configuration.authorization_code_expires_in,
|
|
20
18
|
:redirect_uri => authorization.redirect_uri,
|
|
21
19
|
:scopes => authorization.scopes.to_s
|
|
22
20
|
)
|
|
@@ -28,6 +26,10 @@ module Doorkeeper
|
|
|
28
26
|
:state => authorization.state
|
|
29
27
|
})
|
|
30
28
|
end
|
|
29
|
+
|
|
30
|
+
def configuration
|
|
31
|
+
Doorkeeper.configuration
|
|
32
|
+
end
|
|
31
33
|
end
|
|
32
34
|
end
|
|
33
35
|
end
|
|
@@ -4,8 +4,8 @@ require 'doorkeeper/oauth/client/credentials'
|
|
|
4
4
|
module Doorkeeper
|
|
5
5
|
module OAuth
|
|
6
6
|
class Client
|
|
7
|
-
def self.find(uid)
|
|
8
|
-
if application =
|
|
7
|
+
def self.find(uid, method = Doorkeeper::Application.method(:by_uid))
|
|
8
|
+
if application = method.call(uid)
|
|
9
9
|
new(application)
|
|
10
10
|
end
|
|
11
11
|
end
|
|
@@ -27,13 +27,16 @@ module Doorkeeper
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def authorize
|
|
30
|
-
|
|
30
|
+
status = issuer.create(client, scopes)
|
|
31
|
+
@response = if status
|
|
31
32
|
Response.new(issuer.token)
|
|
32
33
|
else
|
|
33
34
|
ErrorResponse.from_request(self)
|
|
34
35
|
end
|
|
36
|
+
status
|
|
35
37
|
end
|
|
36
38
|
|
|
39
|
+
# TODO: duplicated code in all flows
|
|
37
40
|
def scopes
|
|
38
41
|
@scopes ||= if @original_scopes.present?
|
|
39
42
|
Doorkeeper::OAuth::Scopes.from_string(@original_scopes)
|
|
@@ -2,13 +2,10 @@ module Doorkeeper
|
|
|
2
2
|
module OAuth
|
|
3
3
|
module Helpers
|
|
4
4
|
module UniqueToken
|
|
5
|
-
def self.
|
|
5
|
+
def self.generate(options = {})
|
|
6
6
|
generator_method = options.delete(:generator) || SecureRandom.method(:hex)
|
|
7
7
|
token_size = options.delete(:size) || 32
|
|
8
|
-
|
|
9
|
-
token = generator_method.call(token_size)
|
|
10
|
-
break token unless klass.send("find_by_#{attribute}", token)
|
|
11
|
-
end
|
|
8
|
+
generator_method.call(token_size)
|
|
12
9
|
end
|
|
13
10
|
end
|
|
14
11
|
end
|
|
@@ -51,7 +51,8 @@ module Doorkeeper::OAuth
|
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
def access_token
|
|
54
|
-
|
|
54
|
+
return unless client.present? && resource_owner.present?
|
|
55
|
+
@access_token ||= Doorkeeper::AccessToken.matching_token_for client, resource_owner.id, scopes
|
|
55
56
|
end
|
|
56
57
|
|
|
57
58
|
def token_type
|
|
@@ -85,10 +86,6 @@ module Doorkeeper::OAuth
|
|
|
85
86
|
create_access_token
|
|
86
87
|
end
|
|
87
88
|
|
|
88
|
-
def revoke_base_token
|
|
89
|
-
base_token.revoke
|
|
90
|
-
end
|
|
91
|
-
|
|
92
89
|
def create_access_token
|
|
93
90
|
@access_token = Doorkeeper::AccessToken.create!({
|
|
94
91
|
:application_id => client.id,
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module Doorkeeper
|
|
2
|
+
module OAuth
|
|
3
|
+
class Token
|
|
4
|
+
module Methods
|
|
5
|
+
def from_access_token_param(request)
|
|
6
|
+
request.parameters[:access_token]
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def from_bearer_param(request)
|
|
10
|
+
request.parameters[:bearer_token]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def from_bearer_authorization(request)
|
|
14
|
+
pattern = /^Bearer /
|
|
15
|
+
header = request.authorization
|
|
16
|
+
header.gsub pattern, '' if header && header.match(pattern)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
extend Methods
|
|
21
|
+
|
|
22
|
+
def self.from_request(request, *methods)
|
|
23
|
+
methods.inject(nil) do |credentials, method|
|
|
24
|
+
method = self.method(method) if method.is_a?(Symbol)
|
|
25
|
+
credentials = method.call(request)
|
|
26
|
+
break credentials unless credentials.blank?
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.authenticate(request, *methods)
|
|
31
|
+
token = from_request request, *methods
|
|
32
|
+
Doorkeeper::AccessToken.authenticate(token) if token
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Doorkeeper
|
|
2
|
+
module Rails
|
|
3
|
+
class Routes
|
|
4
|
+
class Mapper
|
|
5
|
+
def initialize(mapping = Mapping.new)
|
|
6
|
+
@mapping = mapping
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def map(&block)
|
|
10
|
+
self.instance_eval(&block) if block
|
|
11
|
+
@mapping
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def controllers(controller_names = {})
|
|
15
|
+
@mapping.controllers.merge!(controller_names)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def skip_controllers(*controller_names)
|
|
19
|
+
@mapping.skips = controller_names
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def as(alias_names = {})
|
|
23
|
+
@mapping.as.merge!(alias_names)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module Doorkeeper
|
|
2
|
+
module Rails
|
|
3
|
+
class Routes
|
|
4
|
+
class Mapping
|
|
5
|
+
attr_accessor :controllers, :as, :skips
|
|
6
|
+
|
|
7
|
+
def initialize
|
|
8
|
+
@controllers = {
|
|
9
|
+
:authorizations => 'doorkeeper/authorizations',
|
|
10
|
+
:applications => 'doorkeeper/applications',
|
|
11
|
+
:authorized_applications => 'doorkeeper/authorized_applications',
|
|
12
|
+
:tokens => 'doorkeeper/tokens',
|
|
13
|
+
:token_info => 'doorkeeper/token_info'
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@as = {
|
|
17
|
+
:authorizations => :authorization,
|
|
18
|
+
:tokens => :token,
|
|
19
|
+
:token_info => :token_info
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@skips = []
|
|
23
|
+
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def [](routes)
|
|
27
|
+
{
|
|
28
|
+
:controllers => @controllers[routes],
|
|
29
|
+
:as => @as[routes]
|
|
30
|
+
}
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def skipped?(controller)
|
|
34
|
+
return @skips.include?(controller)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
require 'doorkeeper/rails/routes/mapping'
|
|
2
|
+
require 'doorkeeper/rails/routes/mapper'
|
|
3
|
+
|
|
4
|
+
module Doorkeeper
|
|
5
|
+
module Rails
|
|
6
|
+
class Routes
|
|
7
|
+
module Helper
|
|
8
|
+
# TODO: options hash is not being used
|
|
9
|
+
def use_doorkeeper(options = {}, &block)
|
|
10
|
+
Doorkeeper::Rails::Routes.new(self, &block).generate_routes!(options)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.install!
|
|
15
|
+
ActionDispatch::Routing::Mapper.send :include, Doorkeeper::Rails::Routes::Helper
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.warn_if_using_mount_method!
|
|
19
|
+
if File.read(::Rails.root + 'config/routes.rb') =~ %r[mount Doorkeeper::Engine]
|
|
20
|
+
warn "\n[DOORKEEPER] `mount Doorkeeper::Engine` is not being used anymore. Please replace it with `use_doorkeeper` in your /config/routes.rb file\n"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
attr_accessor :routes
|
|
25
|
+
|
|
26
|
+
def initialize(routes, &options)
|
|
27
|
+
@routes, @options = routes, options
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def generate_routes!(options)
|
|
31
|
+
@mapping = Mapper.new.map(&@options)
|
|
32
|
+
routes.scope 'oauth', :as => 'oauth' do
|
|
33
|
+
map_route(:authorizations, :authorization_routes)
|
|
34
|
+
map_route(:tokens, :token_routes)
|
|
35
|
+
map_route(:applications, :application_routes)
|
|
36
|
+
map_route(:authorized_applications, :authorized_applications_routes)
|
|
37
|
+
map_route(:token_info, :token_info_routes)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
def map_route(name, method)
|
|
43
|
+
unless @mapping.skipped?(name)
|
|
44
|
+
send method, @mapping[name]
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def authorization_routes(mapping)
|
|
49
|
+
routes.scope :controller => mapping[:controllers] do
|
|
50
|
+
routes.match 'authorize', :via => :get, :action => :new, :as => mapping[:as]
|
|
51
|
+
routes.match 'authorize', :via => :post, :action => :create, :as => mapping[:as]
|
|
52
|
+
routes.match 'authorize', :via => :delete, :action => :destroy, :as => mapping[:as]
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def token_routes(mapping)
|
|
57
|
+
routes.scope :controller => mapping[:controllers] do
|
|
58
|
+
routes.match 'token', :via => :post, :action => :create, :as => mapping[:as]
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def token_info_routes(mapping)
|
|
63
|
+
routes.scope :controller => mapping[:controllers] do
|
|
64
|
+
routes.match 'token/info', :via => :get, :action => :show, :as => mapping[:as]
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def application_routes(mapping)
|
|
69
|
+
routes.resources :applications, :controller => mapping[:controllers]
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def authorized_applications_routes(mapping)
|
|
73
|
+
routes.resources :authorized_applications, :only => [:index, :destroy], :controller => mapping[:controllers]
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
data/lib/doorkeeper/version.rb
CHANGED
data/lib/doorkeeper.rb
CHANGED
|
@@ -16,6 +16,7 @@ module Doorkeeper
|
|
|
16
16
|
autoload :ClientCredentialsRequest, "doorkeeper/oauth/client_credentials_request"
|
|
17
17
|
autoload :Authorization, "doorkeeper/oauth/authorization"
|
|
18
18
|
autoload :Client, "doorkeeper/oauth/client"
|
|
19
|
+
autoload :Token, "doorkeeper/oauth/token"
|
|
19
20
|
|
|
20
21
|
module Helpers
|
|
21
22
|
autoload :ScopeChecker, "doorkeeper/oauth/helpers/scope_checker"
|
|
@@ -25,13 +26,19 @@ module Doorkeeper
|
|
|
25
26
|
end
|
|
26
27
|
|
|
27
28
|
module Models
|
|
28
|
-
autoload :
|
|
29
|
-
autoload :
|
|
30
|
-
autoload :
|
|
29
|
+
autoload :Scopes, 'doorkeeper/models/scopes'
|
|
30
|
+
autoload :Expirable, 'doorkeeper/models/expirable'
|
|
31
|
+
autoload :Revocable, 'doorkeeper/models/revocable'
|
|
32
|
+
autoload :Accessible, 'doorkeeper/models/accessible'
|
|
31
33
|
end
|
|
32
34
|
|
|
33
35
|
module Helpers
|
|
34
36
|
autoload :Filter, "doorkeeper/helpers/filter"
|
|
37
|
+
autoload :Controller, "doorkeeper/helpers/controller"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
module Rails
|
|
41
|
+
autoload :Routes, "doorkeeper/rails/routes"
|
|
35
42
|
end
|
|
36
43
|
|
|
37
44
|
def self.configured?
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'rails/generators/active_record'
|
|
2
|
+
|
|
3
|
+
class Doorkeeper::ApplicationOwnerGenerator < Rails::Generators::Base
|
|
4
|
+
include Rails::Generators::Migration
|
|
5
|
+
source_root File.expand_path('../templates', __FILE__)
|
|
6
|
+
desc "Provide support for client application ownership."
|
|
7
|
+
|
|
8
|
+
def application_owner
|
|
9
|
+
migration_template 'add_owner_to_application_migration.rb', 'db/migrate/add_owner_to_application.rb'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.next_migration_number(dirname)
|
|
13
|
+
ActiveRecord::Generators::Base.next_migration_number(dirname)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -1,19 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
class Doorkeeper::InstallGenerator < Rails::Generators::Base
|
|
1
|
+
class Doorkeeper::InstallGenerator < ::Rails::Generators::Base
|
|
4
2
|
include Rails::Generators::Migration
|
|
5
3
|
source_root File.expand_path('../templates', __FILE__)
|
|
6
4
|
desc "Installs Doorkeeper."
|
|
7
5
|
|
|
8
6
|
def install
|
|
9
|
-
migration_template 'migration.rb', 'db/migrate/create_doorkeeper_tables.rb'
|
|
10
7
|
template "initializer.rb", "config/initializers/doorkeeper.rb"
|
|
11
8
|
copy_file "../../../../config/locales/en.yml", "config/locales/doorkeeper.en.yml"
|
|
12
|
-
route "
|
|
9
|
+
route "use_doorkeeper"
|
|
13
10
|
readme "README"
|
|
14
11
|
end
|
|
15
|
-
|
|
16
|
-
def self.next_migration_number(dirname)
|
|
17
|
-
ActiveRecord::Generators::Base.next_migration_number(dirname)
|
|
18
|
-
end
|
|
19
12
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'rails/generators/active_record'
|
|
2
|
+
|
|
3
|
+
class Doorkeeper::MigrationGenerator < ::Rails::Generators::Base
|
|
4
|
+
include Rails::Generators::Migration
|
|
5
|
+
source_root File.expand_path('../templates', __FILE__)
|
|
6
|
+
desc "Installs Doorkeeper migration file."
|
|
7
|
+
|
|
8
|
+
def install
|
|
9
|
+
migration_template 'migration.rb', 'db/migrate/create_doorkeeper_tables.rb'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.next_migration_number(dirname)
|
|
13
|
+
ActiveRecord::Generators::Base.next_migration_number(dirname)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -7,7 +7,21 @@ Go to config/initializers/doorkeeper.rb and configure
|
|
|
7
7
|
resource_owner_authenticator block.
|
|
8
8
|
|
|
9
9
|
Step 2.
|
|
10
|
-
|
|
10
|
+
Choose the ORM:
|
|
11
|
+
|
|
12
|
+
If you want to use ActiveRecord run:
|
|
13
|
+
|
|
14
|
+
rails generate doorkeeper:migration
|
|
15
|
+
|
|
16
|
+
And run
|
|
17
|
+
|
|
18
|
+
rake db:migrate
|
|
19
|
+
|
|
20
|
+
If you want to use Mongoid, configure the orm in initializers/doorkeeper.rb
|
|
21
|
+
|
|
22
|
+
Doorkeeper.configure do
|
|
23
|
+
orm :mongoid
|
|
24
|
+
end
|
|
11
25
|
|
|
12
26
|
Step 3.
|
|
13
27
|
That's it, that's all. Enjoy!
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
class AddOwnerToApplication < ActiveRecord::Migration
|
|
2
|
+
def change
|
|
3
|
+
add_column :oauth_applications, :owner_id, :integer, :null => true
|
|
4
|
+
add_column :oauth_applications, :owner_type, :string, :null => true
|
|
5
|
+
add_index :oauth_applications, [:owner_id, :owner_type]
|
|
6
|
+
end
|
|
7
|
+
end
|
|
@@ -1,26 +1,30 @@
|
|
|
1
1
|
Doorkeeper.configure do
|
|
2
|
-
#
|
|
3
|
-
#
|
|
2
|
+
# Change the ORM that doorkeeper will use.
|
|
3
|
+
# Currently supported options are :active_record and :mongoid
|
|
4
|
+
orm :active_record
|
|
5
|
+
|
|
6
|
+
# This block will be called to check whether the resource owner is authenticated or not.
|
|
4
7
|
resource_owner_authenticator do |routes|
|
|
5
8
|
raise "Please configure doorkeeper resource_owner_authenticator block located in #{__FILE__}"
|
|
6
9
|
# Put your resource owner authentication logic here.
|
|
7
|
-
# If you want to use named routes from your app you need
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
10
|
+
# If you want to use named routes from your app, you need to call them on the routes object.
|
|
11
|
+
# For example:
|
|
12
|
+
# routes.new_user_session_path
|
|
13
|
+
# Example implementation:
|
|
14
|
+
# User.find_by_id(session[:user_id]) || redirect_to(routes.new_user_session_url)
|
|
11
15
|
end
|
|
12
16
|
|
|
13
|
-
# If you want to restrict
|
|
14
|
-
# adding oauth authorized applications you need to declare the
|
|
15
|
-
# block below
|
|
17
|
+
# If you want to restrict access to the web interface for adding oauth authorized applications, you need to declare the block below.
|
|
16
18
|
# admin_authenticator do |routes|
|
|
17
19
|
# # Put your admin authentication logic here.
|
|
18
|
-
# # If you want to use named routes from your app you need
|
|
19
|
-
# #
|
|
20
|
-
# # routes.new_admin_session_path
|
|
20
|
+
# # If you want to use named routes from your app, you need to call them on routes object, e.g., routes.new_admin_session_path
|
|
21
|
+
# # Example implementation:
|
|
21
22
|
# Admin.find_by_id(session[:admin_id]) || redirect_to(routes.new_admin_session_url)
|
|
22
23
|
# end
|
|
23
24
|
|
|
25
|
+
# Authorization Code expiration time (default 10 minutes).
|
|
26
|
+
# authorization_code_expires_in 10.minutes
|
|
27
|
+
|
|
24
28
|
# Access token expiration time (default 2 hours).
|
|
25
29
|
# If you want to disable expiration, set this to nil.
|
|
26
30
|
# access_token_expires_in 2.hours
|
|
@@ -28,14 +32,26 @@ Doorkeeper.configure do
|
|
|
28
32
|
# Issue access tokens with refresh token (disabled by default)
|
|
29
33
|
# use_refresh_token
|
|
30
34
|
|
|
35
|
+
# Provide support for an owner to be assigned to each registered application (disabled by default)
|
|
36
|
+
# Optional parameter :confirmation => true (default false) if you want to enforce ownership of
|
|
37
|
+
# a registered application
|
|
38
|
+
# Note: you must also run the rails g doorkeeper:application_owner generator to provide the necessary support
|
|
39
|
+
# enable_application_owner :confirmation => false
|
|
40
|
+
|
|
31
41
|
# Define access token scopes for your provider
|
|
32
42
|
# For more information go to https://github.com/applicake/doorkeeper/wiki/Using-Scopes
|
|
33
43
|
# default_scopes :public
|
|
34
44
|
# optional_scopes :write, :update
|
|
35
45
|
|
|
36
46
|
# Change the way client credentials are retrieved from the request object.
|
|
37
|
-
# By default it retrieves first from `HTTP_AUTHORIZATION` header
|
|
38
|
-
#
|
|
39
|
-
# Check out the wiki for
|
|
47
|
+
# By default it retrieves first from the `HTTP_AUTHORIZATION` header, then
|
|
48
|
+
# falls back to the `:client_id` and `:client_secret` params from the `params` object.
|
|
49
|
+
# Check out the wiki for more information on customization
|
|
40
50
|
# client_credentials :from_basic, :from_params
|
|
51
|
+
|
|
52
|
+
# Change the way access token is authenticated from the request object.
|
|
53
|
+
# By default it retrieves first from the `HTTP_AUTHORIZATION` header, then
|
|
54
|
+
# falls back to the `:access_token` or `:bearer_token` params from the `params` object.
|
|
55
|
+
# Check out the wiki for mor information on customization
|
|
56
|
+
# access_token_methods :from_bearer_authorization, :from_access_token_param, :from_bearer_param
|
|
41
57
|
end
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
class CreateDoorkeeperTables < ActiveRecord::Migration
|
|
2
2
|
def change
|
|
3
3
|
create_table :oauth_applications do |t|
|
|
4
|
-
t.string
|
|
5
|
-
t.string
|
|
6
|
-
t.string
|
|
7
|
-
t.string
|
|
4
|
+
t.string :name, :null => false
|
|
5
|
+
t.string :uid, :null => false
|
|
6
|
+
t.string :secret, :null => false
|
|
7
|
+
t.string :redirect_uri, :null => false
|
|
8
|
+
t.integer :owner_id, :null => true
|
|
9
|
+
t.string :owner_type, :null => true
|
|
8
10
|
t.timestamps
|
|
9
11
|
end
|
|
10
12
|
|
|
11
13
|
add_index :oauth_applications, :uid, :unique => true
|
|
14
|
+
add_index :oauth_applications, [:owner_id, :owner_type]
|
|
12
15
|
|
|
13
16
|
create_table :oauth_access_grants do |t|
|
|
14
17
|
t.integer :resource_owner_id, :null => false
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module Doorkeeper
|
|
2
2
|
module Generators
|
|
3
|
-
class ViewsGenerator < Rails::Generators::Base
|
|
3
|
+
class ViewsGenerator < ::Rails::Generators::Base
|
|
4
4
|
source_root File.expand_path('../../../../app/views/doorkeeper', __FILE__)
|
|
5
5
|
|
|
6
6
|
desc "Copies default Doorkeeper views to your application."
|
data/script/run_all
CHANGED
|
@@ -3,9 +3,12 @@ set -e
|
|
|
3
3
|
|
|
4
4
|
RBENV_VERSION=1.8.7-p352 bundle install --quiet
|
|
5
5
|
RBENV_VERSION=1.8.7-p352 bundle exec rake
|
|
6
|
+
RBENV_VERSION=1.8.7-p352 DOORKEEPER_ORM=mongoid bundle exec rake
|
|
6
7
|
|
|
7
8
|
RBENV_VERSION=1.9.2-p290 bundle install --quiet
|
|
8
9
|
RBENV_VERSION=1.9.2-p290 bundle exec rake
|
|
10
|
+
RBENV_VERSION=1.9.2-p290 DOORKEEPER_ORM=mongoid bundle exec rake
|
|
9
11
|
|
|
10
12
|
RBENV_VERSION=1.9.3-p0 bundle install --quiet
|
|
11
13
|
RBENV_VERSION=1.9.3-p0 bundle exec rake
|
|
14
|
+
RBENV_VERSION=1.9.3-p0 DOORKEEPER_ORM=mongoid bundle exec rake
|
|
@@ -21,7 +21,7 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
|
|
|
21
21
|
|
|
22
22
|
describe "POST #create" do
|
|
23
23
|
before do
|
|
24
|
-
post :create, :client_id => client.uid, :response_type => "token", :redirect_uri => client.redirect_uri
|
|
24
|
+
post :create, :client_id => client.uid, :response_type => "token", :redirect_uri => client.redirect_uri
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
it "redirects after authorization" do
|
|
@@ -56,7 +56,7 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
|
|
|
56
56
|
describe "POST #create with errors" do
|
|
57
57
|
before do
|
|
58
58
|
default_scopes_exist :public
|
|
59
|
-
post :create, :client_id => client.uid, :response_type => "token", :scope => "invalid", :redirect_uri => client.redirect_uri
|
|
59
|
+
post :create, :client_id => client.uid, :response_type => "token", :scope => "invalid", :redirect_uri => client.redirect_uri
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
it "redirects after authorization" do
|
|
@@ -90,7 +90,7 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
|
|
|
90
90
|
|
|
91
91
|
describe "GET #new" do
|
|
92
92
|
before do
|
|
93
|
-
get :new, :client_id => client.uid, :response_type => "token", :redirect_uri => client.redirect_uri
|
|
93
|
+
get :new, :client_id => client.uid, :response_type => "token", :redirect_uri => client.redirect_uri
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
it 'renders new template' do
|
|
@@ -101,7 +101,7 @@ describe Doorkeeper::AuthorizationsController, "implicit grant flow" do
|
|
|
101
101
|
describe "GET #new with errors" do
|
|
102
102
|
before do
|
|
103
103
|
default_scopes_exist :public
|
|
104
|
-
get :new, :client_id => client.uid, :response_type => "token", :scope => "invalid", :redirect_uri => client.redirect_uri
|
|
104
|
+
get :new, :client_id => client.uid, :response_type => "token", :scope => "invalid", :redirect_uri => client.redirect_uri
|
|
105
105
|
end
|
|
106
106
|
|
|
107
107
|
it "redirects after authorization" do
|