couchkeeper 0.6.7
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 +14 -0
- data/.rspec +1 -0
- data/.travis.yml +28 -0
- data/CHANGELOG.md +198 -0
- data/Gemfile +32 -0
- data/MIT-LICENSE +20 -0
- data/README.md +290 -0
- data/Rakefile +18 -0
- data/app/assets/javascripts/doorkeeper/application.js +2 -0
- data/app/assets/stylesheets/doorkeeper/application.css +18 -0
- data/app/assets/stylesheets/doorkeeper/form.css +13 -0
- data/app/controllers/doorkeeper/application_controller.rb +7 -0
- data/app/controllers/doorkeeper/applications_controller.rb +60 -0
- data/app/controllers/doorkeeper/authorizations_controller.rb +57 -0
- data/app/controllers/doorkeeper/authorized_applications_controller.rb +12 -0
- data/app/controllers/doorkeeper/token_info_controller.rb +12 -0
- data/app/controllers/doorkeeper/tokens_controller.rb +20 -0
- data/app/helpers/doorkeeper/form_errors_helper.rb +9 -0
- data/app/validators/redirect_uri_validator.rb +23 -0
- data/app/views/doorkeeper/applications/_form.html.erb +34 -0
- data/app/views/doorkeeper/applications/edit.html.erb +13 -0
- data/app/views/doorkeeper/applications/index.html.erb +29 -0
- data/app/views/doorkeeper/applications/new.html.erb +13 -0
- data/app/views/doorkeeper/applications/show.html.erb +26 -0
- data/app/views/doorkeeper/authorizations/error.html.erb +6 -0
- data/app/views/doorkeeper/authorizations/new.html.erb +37 -0
- data/app/views/doorkeeper/authorizations/show.html.erb +4 -0
- data/app/views/doorkeeper/authorized_applications/index.html.erb +25 -0
- data/app/views/layouts/doorkeeper/application.html.erb +33 -0
- data/config/locales/en.yml +68 -0
- data/doorkeeper.gemspec +28 -0
- data/lib/doorkeeper.rb +64 -0
- data/lib/doorkeeper/config.rb +194 -0
- data/lib/doorkeeper/doorkeeper_for.rb +76 -0
- data/lib/doorkeeper/engine.rb +19 -0
- data/lib/doorkeeper/errors.rb +15 -0
- data/lib/doorkeeper/helpers/controller.rb +58 -0
- data/lib/doorkeeper/helpers/filter.rb +38 -0
- data/lib/doorkeeper/models/access_grant.rb +24 -0
- data/lib/doorkeeper/models/access_token.rb +95 -0
- 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 +21 -0
- data/lib/doorkeeper/models/active_record/application.rb +20 -0
- data/lib/doorkeeper/models/application.rb +33 -0
- data/lib/doorkeeper/models/couchbase/access_grant.rb +10 -0
- data/lib/doorkeeper/models/couchbase/access_token.rb +7 -0
- data/lib/doorkeeper/models/couchbase/application.rb +35 -0
- data/lib/doorkeeper/models/doorkeeper_access_grant/by_token/map.js +5 -0
- data/lib/doorkeeper/models/doorkeeper_access_token/by_application_id/map.js +5 -0
- data/lib/doorkeeper/models/doorkeeper_access_token/by_application_id_and_resource_owner_id/map.js +5 -0
- data/lib/doorkeeper/models/doorkeeper_access_token/by_refresh_token/map.js +5 -0
- data/lib/doorkeeper/models/doorkeeper_access_token/by_resource_owner_id/map.js +5 -0
- data/lib/doorkeeper/models/doorkeeper_access_token/by_token/map.js +5 -0
- data/lib/doorkeeper/models/doorkeeper_application/by_uid/map.js +5 -0
- data/lib/doorkeeper/models/doorkeeper_application/by_uid_and_secret/map.js +5 -0
- data/lib/doorkeeper/models/doorkeeper_application/show_all/map.js +6 -0
- data/lib/doorkeeper/models/expirable.rb +21 -0
- data/lib/doorkeeper/models/mongo_mapper/access_grant.rb +28 -0
- data/lib/doorkeeper/models/mongo_mapper/access_token.rb +51 -0
- data/lib/doorkeeper/models/mongo_mapper/application.rb +30 -0
- data/lib/doorkeeper/models/mongo_mapper/revocable.rb +15 -0
- data/lib/doorkeeper/models/mongoid/revocable.rb +15 -0
- data/lib/doorkeeper/models/mongoid/scopes.rb +15 -0
- data/lib/doorkeeper/models/mongoid2/access_grant.rb +22 -0
- data/lib/doorkeeper/models/mongoid2/access_token.rb +41 -0
- data/lib/doorkeeper/models/mongoid2/application.rb +22 -0
- data/lib/doorkeeper/models/mongoid3/access_grant.rb +22 -0
- data/lib/doorkeeper/models/mongoid3/access_token.rb +41 -0
- data/lib/doorkeeper/models/mongoid3/application.rb +22 -0
- data/lib/doorkeeper/models/ownership.rb +16 -0
- data/lib/doorkeeper/models/scopes.rb +17 -0
- data/lib/doorkeeper/oauth/authorization.rb +10 -0
- data/lib/doorkeeper/oauth/authorization/code.rb +32 -0
- data/lib/doorkeeper/oauth/authorization/token.rb +28 -0
- data/lib/doorkeeper/oauth/authorization/uri_builder.rb +29 -0
- data/lib/doorkeeper/oauth/authorization_code_request.rb +82 -0
- data/lib/doorkeeper/oauth/client.rb +29 -0
- data/lib/doorkeeper/oauth/client/credentials.rb +21 -0
- data/lib/doorkeeper/oauth/client/methods.rb +18 -0
- data/lib/doorkeeper/oauth/client_credentials/creator.rb +29 -0
- data/lib/doorkeeper/oauth/client_credentials/issuer.rb +35 -0
- data/lib/doorkeeper/oauth/client_credentials/validation.rb +33 -0
- data/lib/doorkeeper/oauth/client_credentials_request.rb +47 -0
- data/lib/doorkeeper/oauth/code_request.rb +28 -0
- data/lib/doorkeeper/oauth/code_response.rb +37 -0
- data/lib/doorkeeper/oauth/error.rb +9 -0
- data/lib/doorkeeper/oauth/error_response.rb +44 -0
- data/lib/doorkeeper/oauth/helpers/scope_checker.rb +18 -0
- data/lib/doorkeeper/oauth/helpers/unique_token.rb +13 -0
- data/lib/doorkeeper/oauth/helpers/uri_checker.rb +32 -0
- data/lib/doorkeeper/oauth/password_access_token_request.rb +84 -0
- data/lib/doorkeeper/oauth/pre_authorization.rb +62 -0
- data/lib/doorkeeper/oauth/refresh_token_request.rb +58 -0
- data/lib/doorkeeper/oauth/scopes.rb +60 -0
- data/lib/doorkeeper/oauth/token.rb +36 -0
- data/lib/doorkeeper/oauth/token_request.rb +28 -0
- data/lib/doorkeeper/oauth/token_response.rb +29 -0
- data/lib/doorkeeper/rails/routes.rb +90 -0
- data/lib/doorkeeper/rails/routes/mapper.rb +28 -0
- data/lib/doorkeeper/rails/routes/mapping.rb +39 -0
- data/lib/doorkeeper/request.rb +33 -0
- data/lib/doorkeeper/request/authorization_code.rb +23 -0
- data/lib/doorkeeper/request/client_credentials.rb +23 -0
- data/lib/doorkeeper/request/code.rb +24 -0
- data/lib/doorkeeper/request/password.rb +23 -0
- data/lib/doorkeeper/request/refresh_token.rb +23 -0
- data/lib/doorkeeper/request/token.rb +24 -0
- data/lib/doorkeeper/server.rb +54 -0
- data/lib/doorkeeper/validations.rb +30 -0
- data/lib/doorkeeper/version.rb +3 -0
- data/lib/generators/doorkeeper/application_owner_generator.rb +15 -0
- data/lib/generators/doorkeeper/install_generator.rb +12 -0
- data/lib/generators/doorkeeper/migration_generator.rb +15 -0
- data/lib/generators/doorkeeper/mongo_mapper/indexes_generator.rb +12 -0
- data/lib/generators/doorkeeper/templates/README +44 -0
- data/lib/generators/doorkeeper/templates/add_owner_to_application_migration.rb +7 -0
- data/lib/generators/doorkeeper/templates/indexes.rb +3 -0
- data/lib/generators/doorkeeper/templates/initializer.rb +67 -0
- data/lib/generators/doorkeeper/templates/migration.rb +42 -0
- data/lib/generators/doorkeeper/views_generator.rb +15 -0
- data/script/rails +6 -0
- data/script/run_all +14 -0
- data/spec/controllers/applications_controller_spec.rb +18 -0
- data/spec/controllers/authorizations_controller_spec.rb +154 -0
- data/spec/controllers/protected_resources_controller_spec.rb +304 -0
- data/spec/controllers/token_info_controller_spec.rb +54 -0
- data/spec/controllers/tokens_controller_spec.rb +36 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +9 -0
- data/spec/dummy/app/assets/stylesheets/application.css +7 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/controllers/custom_authorizations_controller.rb +7 -0
- data/spec/dummy/app/controllers/full_protected_resources_controller.rb +12 -0
- data/spec/dummy/app/controllers/home_controller.rb +17 -0
- data/spec/dummy/app/controllers/metal_controller.rb +11 -0
- data/spec/dummy/app/controllers/semi_protected_resources_controller.rb +11 -0
- data/spec/dummy/app/helpers/application_helper.rb +5 -0
- data/spec/dummy/app/models/user.rb +27 -0
- data/spec/dummy/app/views/home/index.html.erb +0 -0
- data/spec/dummy/app/views/layouts/application.html.erb +16 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +54 -0
- data/spec/dummy/config/boot.rb +6 -0
- data/spec/dummy/config/database.yml +15 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +30 -0
- data/spec/dummy/config/environments/production.rb +60 -0
- data/spec/dummy/config/environments/test.rb +39 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/doorkeeper.rb +56 -0
- data/spec/dummy/config/initializers/secret_token.rb +9 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/doorkeeper.en.yml +5 -0
- data/spec/dummy/config/mongo.yml +11 -0
- data/spec/dummy/config/mongoid2.yml +9 -0
- data/spec/dummy/config/mongoid3.yml +18 -0
- data/spec/dummy/config/routes.rb +38 -0
- data/spec/dummy/db/migrate/20111122132257_create_users.rb +9 -0
- data/spec/dummy/db/migrate/20120312140401_add_password_to_users.rb +5 -0
- data/spec/dummy/db/migrate/20120524202412_create_doorkeeper_tables.rb +44 -0
- data/spec/dummy/db/schema.rb +64 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +26 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/factories/access_grant.rb +9 -0
- data/spec/factories/access_token.rb +7 -0
- data/spec/factories/application.rb +6 -0
- data/spec/generators/application_owner_generator_spec.rb +23 -0
- data/spec/generators/install_generator_spec.rb +31 -0
- data/spec/generators/migration_generator_spec.rb +20 -0
- data/spec/generators/templates/routes.rb +3 -0
- data/spec/generators/views_generator_spec.rb +27 -0
- data/spec/lib/config_spec.rb +170 -0
- data/spec/lib/models/expirable_spec.rb +51 -0
- data/spec/lib/models/revocable_spec.rb +31 -0
- data/spec/lib/models/scopes_spec.rb +32 -0
- data/spec/lib/oauth/authorization/uri_builder_spec.rb +37 -0
- data/spec/lib/oauth/authorization_code_request_spec.rb +80 -0
- data/spec/lib/oauth/client/credentials_spec.rb +47 -0
- data/spec/lib/oauth/client/methods_spec.rb +54 -0
- data/spec/lib/oauth/client_credentials/creator_spec.rb +47 -0
- data/spec/lib/oauth/client_credentials/issuer_spec.rb +57 -0
- data/spec/lib/oauth/client_credentials/validation_spec.rb +29 -0
- data/spec/lib/oauth/client_credentials_integration_spec.rb +27 -0
- data/spec/lib/oauth/client_credentials_request_spec.rb +64 -0
- data/spec/lib/oauth/client_spec.rb +39 -0
- data/spec/lib/oauth/code_request_spec.rb +44 -0
- data/spec/lib/oauth/error_response_spec.rb +40 -0
- data/spec/lib/oauth/error_spec.rb +19 -0
- data/spec/lib/oauth/helpers/scope_checker_spec.rb +74 -0
- data/spec/lib/oauth/helpers/unique_token_spec.rb +20 -0
- data/spec/lib/oauth/helpers/uri_checker_spec.rb +64 -0
- data/spec/lib/oauth/password_access_token_request_spec.rb +65 -0
- data/spec/lib/oauth/pre_authorization_spec.rb +80 -0
- data/spec/lib/oauth/refresh_token_request_spec.rb +56 -0
- data/spec/lib/oauth/scopes_spec.rb +115 -0
- data/spec/lib/oauth/token_request_spec.rb +46 -0
- data/spec/lib/oauth/token_response_spec.rb +52 -0
- data/spec/lib/oauth/token_spec.rb +83 -0
- data/spec/lib/server_spec.rb +24 -0
- data/spec/models/doorkeeper/access_grant_spec.rb +36 -0
- data/spec/models/doorkeeper/access_token_spec.rb +153 -0
- data/spec/models/doorkeeper/application_spec.rb +162 -0
- data/spec/requests/applications/applications_request_spec.rb +92 -0
- data/spec/requests/applications/authorized_applications_spec.rb +30 -0
- data/spec/requests/endpoints/authorization_spec.rb +47 -0
- data/spec/requests/endpoints/token_spec.rb +46 -0
- data/spec/requests/flows/authorization_code_errors_spec.rb +66 -0
- data/spec/requests/flows/authorization_code_spec.rb +135 -0
- data/spec/requests/flows/client_credentials_spec.rb +58 -0
- data/spec/requests/flows/implicit_grant_errors_spec.rb +31 -0
- data/spec/requests/flows/implicit_grant_spec.rb +19 -0
- data/spec/requests/flows/password_spec.rb +78 -0
- data/spec/requests/flows/refresh_token_spec.rb +71 -0
- data/spec/requests/flows/skip_authorization_spec.rb +40 -0
- data/spec/requests/protected_resources/metal_spec.rb +14 -0
- data/spec/requests/protected_resources/private_api_spec.rb +50 -0
- data/spec/routing/custom_controller_routes_spec.rb +44 -0
- data/spec/routing/default_routes_spec.rb +32 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/spec_helper_integration.rb +40 -0
- data/spec/support/dependencies/factory_girl.rb +2 -0
- data/spec/support/helpers/access_token_request_helper.rb +11 -0
- data/spec/support/helpers/authorization_request_helper.rb +32 -0
- data/spec/support/helpers/config_helper.rb +9 -0
- data/spec/support/helpers/model_helper.rb +45 -0
- data/spec/support/helpers/request_spec_helper.rb +72 -0
- data/spec/support/helpers/url_helper.rb +51 -0
- data/spec/support/orm/active_record.rb +11 -0
- data/spec/support/orm/mongo_mapper.rb +26 -0
- data/spec/support/orm/mongoid.rb +31 -0
- data/spec/support/shared/controllers_shared_context.rb +60 -0
- data/spec/support/shared/models_shared_examples.rb +60 -0
- data/spec/validators/redirect_uri_validator_spec.rb +47 -0
- data/vendor/assets/stylesheets/doorkeeper/bootstrap.min.css +356 -0
- metadata +430 -0
@@ -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,33 @@
|
|
1
|
+
require 'doorkeeper/request/authorization_code'
|
2
|
+
require 'doorkeeper/request/client_credentials'
|
3
|
+
require 'doorkeeper/request/code'
|
4
|
+
require 'doorkeeper/request/password'
|
5
|
+
require 'doorkeeper/request/refresh_token'
|
6
|
+
require 'doorkeeper/request/token'
|
7
|
+
|
8
|
+
module Doorkeeper
|
9
|
+
module Request
|
10
|
+
extend self
|
11
|
+
|
12
|
+
# Available authorization strategies:
|
13
|
+
# :code, :token
|
14
|
+
def authorization_strategy(strategy)
|
15
|
+
get_strategy strategy
|
16
|
+
rescue NameError
|
17
|
+
raise Errors::InvalidAuthorizationStrategy
|
18
|
+
end
|
19
|
+
|
20
|
+
# Available token strategies:
|
21
|
+
# :password, :client_credentials, :authorization_code, :refresh_token
|
22
|
+
def token_strategy(strategy)
|
23
|
+
get_strategy strategy
|
24
|
+
rescue NameError
|
25
|
+
raise Errors::InvalidTokenStrategy
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_strategy(strategy)
|
29
|
+
raise Errors::MissingRequestStrategy unless strategy.present?
|
30
|
+
"Doorkeeper::Request::#{strategy.to_s.camelize}".constantize
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Doorkeeper
|
2
|
+
module Request
|
3
|
+
class AuthorizationCode
|
4
|
+
def self.build(server)
|
5
|
+
new(server.grant, server.client, server)
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_accessor :grant, :client, :server
|
9
|
+
|
10
|
+
def initialize(grant, client, server)
|
11
|
+
@grant, @client, @server = grant, client, server
|
12
|
+
end
|
13
|
+
|
14
|
+
def request
|
15
|
+
@request ||= OAuth::AuthorizationCodeRequest.new(Doorkeeper.configuration, grant, client, server.parameters)
|
16
|
+
end
|
17
|
+
|
18
|
+
def authorize
|
19
|
+
request.authorize
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Doorkeeper
|
2
|
+
module Request
|
3
|
+
class ClientCredentials
|
4
|
+
def self.build(server)
|
5
|
+
new(server.client, server)
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_accessor :client, :server
|
9
|
+
|
10
|
+
def initialize(client, server)
|
11
|
+
@client, @server = client, server
|
12
|
+
end
|
13
|
+
|
14
|
+
def request
|
15
|
+
@request ||= OAuth::ClientCredentialsRequest.new(Doorkeeper.configuration, client, server.parameters)
|
16
|
+
end
|
17
|
+
|
18
|
+
def authorize
|
19
|
+
request.authorize
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Doorkeeper
|
2
|
+
module Request
|
3
|
+
class Code
|
4
|
+
# TODO: this is so wrong!
|
5
|
+
def self.build(server)
|
6
|
+
new(server.context.send(:pre_auth), server)
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_accessor :pre_auth, :server
|
10
|
+
|
11
|
+
def initialize(pre_auth, server)
|
12
|
+
@pre_auth, @server = pre_auth, server
|
13
|
+
end
|
14
|
+
|
15
|
+
def request
|
16
|
+
@request ||= OAuth::CodeRequest.new(pre_auth, server.current_resource_owner)
|
17
|
+
end
|
18
|
+
|
19
|
+
def authorize
|
20
|
+
request.authorize
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Doorkeeper
|
2
|
+
module Request
|
3
|
+
class Password
|
4
|
+
def self.build(server)
|
5
|
+
new(server.client, server.resource_owner, server)
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_accessor :client, :resource_owner, :server
|
9
|
+
|
10
|
+
def initialize(client, resource_owner, server)
|
11
|
+
@client, @resource_owner, @server = client, resource_owner, server
|
12
|
+
end
|
13
|
+
|
14
|
+
def request
|
15
|
+
@request ||= OAuth::PasswordAccessTokenRequest.new(Doorkeeper.configuration, client, resource_owner, server.parameters)
|
16
|
+
end
|
17
|
+
|
18
|
+
def authorize
|
19
|
+
request.authorize
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Doorkeeper
|
2
|
+
module Request
|
3
|
+
class RefreshToken
|
4
|
+
def self.build(server)
|
5
|
+
new(server.current_refresh_token, server.client)
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_accessor :refresh_token, :client
|
9
|
+
|
10
|
+
def initialize(refresh_token, client)
|
11
|
+
@refresh_token, @client = refresh_token, client
|
12
|
+
end
|
13
|
+
|
14
|
+
def request
|
15
|
+
@request ||= OAuth::RefreshTokenRequest.new(Doorkeeper.configuration, refresh_token, client)
|
16
|
+
end
|
17
|
+
|
18
|
+
def authorize
|
19
|
+
request.authorize
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Doorkeeper
|
2
|
+
module Request
|
3
|
+
class Token
|
4
|
+
# TODO: this is so wrong!
|
5
|
+
def self.build(server)
|
6
|
+
new(server.context.send(:pre_auth), server)
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_accessor :pre_auth, :server
|
10
|
+
|
11
|
+
def initialize(pre_auth, server)
|
12
|
+
@pre_auth, @server = pre_auth, server
|
13
|
+
end
|
14
|
+
|
15
|
+
def request
|
16
|
+
@request ||= OAuth::TokenRequest.new(pre_auth, server.current_resource_owner)
|
17
|
+
end
|
18
|
+
|
19
|
+
def authorize
|
20
|
+
request.authorize
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Doorkeeper
|
2
|
+
class Server
|
3
|
+
attr_accessor :context
|
4
|
+
|
5
|
+
def initialize(context = nil)
|
6
|
+
@context = context
|
7
|
+
end
|
8
|
+
|
9
|
+
def authorization_request(strategy)
|
10
|
+
klass = Request.authorization_strategy strategy
|
11
|
+
klass.build self
|
12
|
+
end
|
13
|
+
|
14
|
+
def token_request(strategy)
|
15
|
+
klass = Request.token_strategy strategy
|
16
|
+
klass.build self
|
17
|
+
end
|
18
|
+
|
19
|
+
# TODO: context should be the request
|
20
|
+
def parameters
|
21
|
+
context.request.parameters
|
22
|
+
end
|
23
|
+
|
24
|
+
def client
|
25
|
+
@client ||= OAuth::Client.authenticate(credentials)
|
26
|
+
end
|
27
|
+
|
28
|
+
def client_via_uid
|
29
|
+
@client_via_uid ||= OAuth::Client.find(parameters[:client_id])
|
30
|
+
end
|
31
|
+
|
32
|
+
def current_resource_owner
|
33
|
+
context.send :current_resource_owner
|
34
|
+
end
|
35
|
+
|
36
|
+
def current_refresh_token
|
37
|
+
Doorkeeper::AccessToken.by_refresh_token(parameters[:refresh_token])
|
38
|
+
end
|
39
|
+
|
40
|
+
def grant
|
41
|
+
Doorkeeper::AccessGrant.authenticate(parameters[:code])
|
42
|
+
end
|
43
|
+
|
44
|
+
# TODO: Use configuration and evaluate proper context on block
|
45
|
+
def resource_owner
|
46
|
+
context.send :resource_owner_from_credentials
|
47
|
+
end
|
48
|
+
|
49
|
+
def credentials
|
50
|
+
methods = Doorkeeper.configuration.client_credentials_methods
|
51
|
+
@credentials ||= OAuth::Client::Credentials.from_request(context.request, *methods)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Doorkeeper
|
2
|
+
module Validations
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
attr_accessor :error
|
6
|
+
|
7
|
+
def validate
|
8
|
+
@error = nil
|
9
|
+
self.class.validations.each do |validation|
|
10
|
+
break if @error
|
11
|
+
@error = validation.last unless send("validate_#{validation.first}")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def valid?
|
16
|
+
validate
|
17
|
+
@error.nil?
|
18
|
+
end
|
19
|
+
|
20
|
+
module ClassMethods
|
21
|
+
def validate(attribute, options = {})
|
22
|
+
validations << [attribute, options[:error]]
|
23
|
+
end
|
24
|
+
|
25
|
+
def validations
|
26
|
+
@validations ||= []
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -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
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class Doorkeeper::InstallGenerator < ::Rails::Generators::Base
|
2
|
+
include Rails::Generators::Migration
|
3
|
+
source_root File.expand_path('../templates', __FILE__)
|
4
|
+
desc "Installs Doorkeeper."
|
5
|
+
|
6
|
+
def install
|
7
|
+
template "initializer.rb", "config/initializers/doorkeeper.rb"
|
8
|
+
copy_file "../../../../config/locales/en.yml", "config/locales/doorkeeper.en.yml"
|
9
|
+
route "use_doorkeeper"
|
10
|
+
readme "README"
|
11
|
+
end
|
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
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Doorkeeper
|
2
|
+
module MongoMapper
|
3
|
+
class IndexesGenerator < ::Rails::Generators::Base
|
4
|
+
source_root File.expand_path('../../templates', __FILE__)
|
5
|
+
desc "Creates an indexes file for use with MongoMapper's rake db:index"
|
6
|
+
|
7
|
+
def install
|
8
|
+
template "indexes.rb", "db/indexes.rb"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
===============================================================================
|
2
|
+
|
3
|
+
There is a setup that you need to do before you can use doorkeeper.
|
4
|
+
|
5
|
+
Step 1.
|
6
|
+
Go to config/initializers/doorkeeper.rb and configure
|
7
|
+
resource_owner_authenticator block.
|
8
|
+
|
9
|
+
Step 2.
|
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
|
+
# Mongoid
|
23
|
+
Doorkeeper.configure do
|
24
|
+
orm :mongoid
|
25
|
+
end
|
26
|
+
|
27
|
+
If you want to use MongoMapper, configure the orm in
|
28
|
+
initializers/doorkeeper.rb:
|
29
|
+
|
30
|
+
# MongoMapper
|
31
|
+
Doorkeeper.configure do
|
32
|
+
orm :mongo_mapper
|
33
|
+
end
|
34
|
+
|
35
|
+
And run
|
36
|
+
|
37
|
+
rails generate doorkeeper:mongo_mapper:indexes
|
38
|
+
rake db:index
|
39
|
+
|
40
|
+
Step 3.
|
41
|
+
That's it, that's all. Enjoy!
|
42
|
+
|
43
|
+
===============================================================================
|
44
|
+
|