grape_oauth2 0.1.1 → 0.2.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.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +11 -11
  3. data/Gemfile +23 -23
  4. data/Rakefile +11 -11
  5. data/grape_oauth2.gemspec +26 -27
  6. data/lib/grape_oauth2.rb +129 -129
  7. data/lib/grape_oauth2/configuration.rb +143 -143
  8. data/lib/grape_oauth2/configuration/class_accessors.rb +36 -36
  9. data/lib/grape_oauth2/configuration/validation.rb +71 -71
  10. data/lib/grape_oauth2/endpoints/authorize.rb +34 -34
  11. data/lib/grape_oauth2/endpoints/token.rb +72 -72
  12. data/lib/grape_oauth2/gem_version.rb +24 -24
  13. data/lib/grape_oauth2/generators/authorization.rb +44 -44
  14. data/lib/grape_oauth2/generators/base.rb +26 -26
  15. data/lib/grape_oauth2/generators/token.rb +62 -62
  16. data/lib/grape_oauth2/helpers/access_token_helpers.rb +52 -54
  17. data/lib/grape_oauth2/helpers/oauth_params.rb +41 -41
  18. data/lib/grape_oauth2/mixins/active_record/access_grant.rb +47 -47
  19. data/lib/grape_oauth2/mixins/active_record/access_token.rb +75 -75
  20. data/lib/grape_oauth2/mixins/active_record/client.rb +36 -35
  21. data/lib/grape_oauth2/mixins/mongoid/access_grant.rb +58 -58
  22. data/lib/grape_oauth2/mixins/mongoid/access_token.rb +88 -88
  23. data/lib/grape_oauth2/mixins/mongoid/client.rb +44 -41
  24. data/lib/grape_oauth2/mixins/sequel/access_grant.rb +68 -68
  25. data/lib/grape_oauth2/mixins/sequel/access_token.rb +86 -86
  26. data/lib/grape_oauth2/mixins/sequel/client.rb +54 -46
  27. data/lib/grape_oauth2/responses/authorization.rb +11 -10
  28. data/lib/grape_oauth2/responses/base.rb +56 -56
  29. data/lib/grape_oauth2/responses/token.rb +10 -10
  30. data/lib/grape_oauth2/scopes.rb +74 -74
  31. data/lib/grape_oauth2/strategies/authorization_code.rb +38 -38
  32. data/lib/grape_oauth2/strategies/base.rb +47 -47
  33. data/lib/grape_oauth2/strategies/client_credentials.rb +20 -20
  34. data/lib/grape_oauth2/strategies/password.rb +22 -22
  35. data/lib/grape_oauth2/strategies/refresh_token.rb +47 -47
  36. data/lib/grape_oauth2/unique_token.rb +20 -20
  37. data/lib/grape_oauth2/version.rb +14 -14
  38. data/spec/configuration/config_spec.rb +231 -231
  39. data/spec/configuration/version_spec.rb +12 -12
  40. data/spec/dummy/endpoints/custom_authorization.rb +25 -25
  41. data/spec/dummy/endpoints/custom_token.rb +35 -35
  42. data/spec/dummy/endpoints/status.rb +25 -25
  43. data/spec/dummy/grape_oauth2_config.rb +11 -11
  44. data/spec/dummy/orm/active_record/app/config/db.rb +7 -7
  45. data/spec/dummy/orm/active_record/app/models/access_code.rb +3 -3
  46. data/spec/dummy/orm/active_record/app/models/access_token.rb +3 -3
  47. data/spec/dummy/orm/active_record/app/models/application.rb +3 -3
  48. data/spec/dummy/orm/active_record/app/models/application_record.rb +3 -3
  49. data/spec/dummy/orm/active_record/app/models/user.rb +10 -10
  50. data/spec/dummy/orm/active_record/app/twitter.rb +36 -36
  51. data/spec/dummy/orm/active_record/config.ru +7 -7
  52. data/spec/dummy/orm/active_record/db/schema.rb +53 -53
  53. data/spec/dummy/orm/mongoid/app/config/db.rb +6 -6
  54. data/spec/dummy/orm/mongoid/app/config/mongoid.yml +21 -21
  55. data/spec/dummy/orm/mongoid/app/models/access_code.rb +3 -3
  56. data/spec/dummy/orm/mongoid/app/models/access_token.rb +3 -3
  57. data/spec/dummy/orm/mongoid/app/models/application.rb +3 -3
  58. data/spec/dummy/orm/mongoid/app/models/user.rb +11 -11
  59. data/spec/dummy/orm/mongoid/app/twitter.rb +34 -34
  60. data/spec/dummy/orm/mongoid/config.ru +5 -5
  61. data/spec/dummy/orm/sequel/app/config/db.rb +1 -1
  62. data/spec/dummy/orm/sequel/app/models/access_code.rb +4 -4
  63. data/spec/dummy/orm/sequel/app/models/access_token.rb +4 -4
  64. data/spec/dummy/orm/sequel/app/models/application.rb +4 -4
  65. data/spec/dummy/orm/sequel/app/models/application_record.rb +2 -2
  66. data/spec/dummy/orm/sequel/app/models/user.rb +11 -11
  67. data/spec/dummy/orm/sequel/app/twitter.rb +47 -47
  68. data/spec/dummy/orm/sequel/config.ru +5 -5
  69. data/spec/dummy/orm/sequel/db/schema.rb +50 -50
  70. data/spec/lib/scopes_spec.rb +50 -50
  71. data/spec/mixins/active_record/access_token_spec.rb +185 -185
  72. data/spec/mixins/active_record/client_spec.rb +104 -95
  73. data/spec/mixins/mongoid/access_token_spec.rb +185 -185
  74. data/spec/mixins/mongoid/client_spec.rb +104 -95
  75. data/spec/mixins/sequel/access_token_spec.rb +185 -185
  76. data/spec/mixins/sequel/client_spec.rb +105 -96
  77. data/spec/requests/flows/authorization_code_spec.rb +67 -67
  78. data/spec/requests/flows/client_credentials_spec.rb +101 -101
  79. data/spec/requests/flows/password_spec.rb +210 -210
  80. data/spec/requests/flows/refresh_token_spec.rb +222 -222
  81. data/spec/requests/flows/revoke_token_spec.rb +103 -103
  82. data/spec/requests/protected_resources_spec.rb +64 -64
  83. data/spec/spec_helper.rb +60 -60
  84. data/spec/support/api_helper.rb +11 -11
  85. metadata +50 -52
  86. data/.rspec +0 -2
  87. data/.rubocop.yml +0 -18
  88. data/.travis.yml +0 -42
  89. data/README.md +0 -820
  90. data/gemfiles/active_record.rb +0 -25
  91. data/gemfiles/mongoid.rb +0 -14
  92. data/gemfiles/sequel.rb +0 -24
  93. data/grape_oauth2.png +0 -0
@@ -1,12 +1,12 @@
1
- require 'spec_helper'
2
-
3
- describe 'Grape::OAuth2 Version' do
4
- it 'has a version string' do
5
- expect(Grape::OAuth2::VERSION::STRING).to be_present
6
- end
7
-
8
- it 'returns version as an instance of Gem::Version' do
9
- expect(Grape::OAuth2.gem_version).to be_an_instance_of(Gem::Version)
10
- expect(Grape::OAuth2.version).to be_an_instance_of(Gem::Version)
11
- end
12
- end
1
+ require 'spec_helper'
2
+
3
+ describe 'Grape::OAuth2 Version' do
4
+ it 'has a version string' do
5
+ expect(Grape::OAuth2::VERSION::STRING).to be_present
6
+ end
7
+
8
+ it 'returns version as an instance of Gem::Version' do
9
+ expect(Grape::OAuth2.gem_version).to be_an_instance_of(Gem::Version)
10
+ expect(Grape::OAuth2.version).to be_an_instance_of(Gem::Version)
11
+ end
12
+ end
@@ -1,25 +1,25 @@
1
- module Twitter
2
- module Endpoints
3
- class CustomAuthorization < ::Grape::API
4
- helpers Grape::OAuth2::Helpers::OAuthParams
5
-
6
- namespace :oauth do
7
- params do
8
- use :oauth_authorization_params
9
- end
10
-
11
- post :custom_authorize do
12
- response = Grape::OAuth2::Generators::Authorization.generate_for(env) do |request, response|
13
- request.unsupported_response_type!
14
- end
15
-
16
- # Status
17
- status response.status
18
-
19
- # Body
20
- body response.body
21
- end
22
- end
23
- end
24
- end
25
- end
1
+ module Twitter
2
+ module Endpoints
3
+ class CustomAuthorization < ::Grape::API
4
+ helpers Grape::OAuth2::Helpers::OAuthParams
5
+
6
+ namespace :oauth do
7
+ params do
8
+ use :oauth_authorization_params
9
+ end
10
+
11
+ post :custom_authorize do
12
+ response = Grape::OAuth2::Generators::Authorization.generate_for(env) do |request, response|
13
+ request.unsupported_response_type!
14
+ end
15
+
16
+ # Status
17
+ status response.status
18
+
19
+ # Body
20
+ body response.body
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,35 +1,35 @@
1
- module Twitter
2
- module Endpoints
3
- class CustomToken < ::Grape::API
4
- helpers Grape::OAuth2::Helpers::OAuthParams
5
-
6
- namespace :oauth do
7
- params do
8
- use :oauth_token_params
9
- end
10
-
11
- post :custom_token do
12
- token_response = Grape::OAuth2::Generators::Token.generate_for(env) do |request, response|
13
- # Custom client authentication:
14
- client = Grape::OAuth2::Strategies::Base.authenticate_client(request)
15
- request.invalid_client! if client.nil? || client.name != 'Admin'
16
-
17
- resource_owner = Grape::OAuth2::Strategies::Base.authenticate_resource_owner(client, request)
18
- request.invalid_grant! if resource_owner.nil?
19
-
20
- token = AccessToken.create_for(client, resource_owner, request.scope.join(' '))
21
- response.access_token = Grape::OAuth2::Strategies::Base.expose_to_bearer_token(token)
22
- end
23
-
24
- status token_response.status
25
-
26
- token_response.headers.each do |key, value|
27
- header key, value
28
- end
29
-
30
- body token_response.body
31
- end
32
- end
33
- end
34
- end
35
- end
1
+ module Twitter
2
+ module Endpoints
3
+ class CustomToken < ::Grape::API
4
+ helpers Grape::OAuth2::Helpers::OAuthParams
5
+
6
+ namespace :oauth do
7
+ params do
8
+ use :oauth_token_params
9
+ end
10
+
11
+ post :custom_token do
12
+ token_response = Grape::OAuth2::Generators::Token.generate_for(env) do |request, response|
13
+ # Custom client authentication:
14
+ client = Grape::OAuth2::Strategies::Base.authenticate_client(request)
15
+ request.invalid_client! if client.nil? || client.name != 'Admin'
16
+
17
+ resource_owner = Grape::OAuth2::Strategies::Base.authenticate_resource_owner(client, request)
18
+ request.invalid_grant! if resource_owner.nil?
19
+
20
+ token = AccessToken.create_for(client, resource_owner, request.scope.join(' '))
21
+ response.access_token = Grape::OAuth2::Strategies::Base.expose_to_bearer_token(token)
22
+ end
23
+
24
+ status token_response.status
25
+
26
+ token_response.headers.each do |key, value|
27
+ header key, value
28
+ end
29
+
30
+ body token_response.body
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,25 +1,25 @@
1
- module Twitter
2
- module Endpoints
3
- class Status < Grape::API
4
- before do
5
- access_token_required!
6
- end
7
-
8
- resources :status do
9
- get do
10
- { value: 'Nice day!', current_user: current_resource_owner.username }
11
- end
12
-
13
- get :single_scope, scopes: [:read] do
14
- { value: 'Access granted' }
15
- end
16
-
17
- get :multiple_scopes, scopes: [:read, :write] do
18
- access_token_required!
19
-
20
- { value: 'Access granted' }
21
- end
22
- end
23
- end
24
- end
25
- end
1
+ module Twitter
2
+ module Endpoints
3
+ class Status < Grape::API
4
+ before do
5
+ access_token_required!
6
+ end
7
+
8
+ resources :status do
9
+ get do
10
+ { value: 'Nice day!', current_user: current_resource_owner.username }
11
+ end
12
+
13
+ get :single_scope, scopes: [:read] do
14
+ { value: 'Access granted' }
15
+ end
16
+
17
+ get :multiple_scopes, scopes: [:read, :write] do
18
+ access_token_required!
19
+
20
+ { value: 'Access granted' }
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,11 +1,11 @@
1
- # Common config across all the ORMs
2
- Grape::OAuth2.configure do |config|
3
- config.client_class_name = 'Application'
4
- config.access_token_class_name = 'AccessToken'
5
- config.resource_owner_class_name = 'User'
6
- config.access_grant_class_name = 'AccessCode'
7
-
8
- config.realm = 'Custom Realm'
9
-
10
- config.allowed_grant_types << 'refresh_token'
11
- end
1
+ # Common config across all the ORMs
2
+ Grape::OAuth2.configure do |config|
3
+ config.client_class_name = 'Application'
4
+ config.access_token_class_name = 'AccessToken'
5
+ config.resource_owner_class_name = 'User'
6
+ config.access_grant_class_name = 'AccessCode'
7
+
8
+ config.realm = 'Custom Realm'
9
+
10
+ config.allowed_grant_types << 'refresh_token'
11
+ end
@@ -1,7 +1,7 @@
1
- OTR::ActiveRecord.configure_from_hash!(adapter: 'sqlite3', database: ':memory:')
2
-
3
- ::ActiveRecord::Base.default_timezone = :utc
4
- ::ActiveRecord::Base.logger = ENV['RAILS_ENV'] == 'test' ? nil : Logger.new(STDOUT)
5
-
6
- ::ActiveRecord::Migration.verbose = false
7
- load File.expand_path('../../../db/schema.rb', __FILE__)
1
+ OTR::ActiveRecord.configure_from_hash!(adapter: 'sqlite3', database: ':memory:')
2
+
3
+ ::ActiveRecord::Base.default_timezone = :utc
4
+ ::ActiveRecord::Base.logger = ENV['RAILS_ENV'] == 'test' ? nil : Logger.new(STDOUT)
5
+
6
+ ::ActiveRecord::Migration.verbose = false
7
+ load File.expand_path('../../../db/schema.rb', __FILE__)
@@ -1,3 +1,3 @@
1
- class AccessCode < ApplicationRecord
2
- include Grape::OAuth2::ActiveRecord::AccessGrant
3
- end
1
+ class AccessCode < ApplicationRecord
2
+ include Grape::OAuth2::ActiveRecord::AccessGrant
3
+ end
@@ -1,3 +1,3 @@
1
- class AccessToken < ApplicationRecord
2
- include Grape::OAuth2::ActiveRecord::AccessToken
3
- end
1
+ class AccessToken < ApplicationRecord
2
+ include Grape::OAuth2::ActiveRecord::AccessToken
3
+ end
@@ -1,3 +1,3 @@
1
- class Application < ApplicationRecord
2
- include Grape::OAuth2::ActiveRecord::Client
3
- end
1
+ class Application < ApplicationRecord
2
+ include Grape::OAuth2::ActiveRecord::Client
3
+ end
@@ -1,3 +1,3 @@
1
- class ApplicationRecord < ::ActiveRecord::Base
2
- self.abstract_class = true
3
- end
1
+ class ApplicationRecord < ::ActiveRecord::Base
2
+ self.abstract_class = true
3
+ end
@@ -1,10 +1,10 @@
1
- class User < ApplicationRecord
2
- has_secure_password
3
-
4
- def self.oauth_authenticate(_client, username, password)
5
- user = find_by(username: username)
6
- return if user.nil?
7
-
8
- user.authenticate(password)
9
- end
10
- end
1
+ class User < ApplicationRecord
2
+ has_secure_password
3
+
4
+ def self.oauth_authenticate(_client, username, password)
5
+ user = find_by(username: username)
6
+ return if user.nil?
7
+
8
+ user.authenticate(password)
9
+ end
10
+ end
@@ -1,36 +1,36 @@
1
- require 'otr-activerecord'
2
- require 'grape'
3
-
4
- require File.expand_path('../../../../../../lib/grape_oauth2', __FILE__)
5
-
6
- # Database
7
- load File.expand_path('../config/db.rb', __FILE__)
8
-
9
- # Grape::OAuth2 config
10
- load File.expand_path('../../../../grape_oauth2_config.rb', __FILE__)
11
-
12
- # Models
13
- require_relative 'models/application_record'
14
- require_relative 'models/access_token'
15
- require_relative 'models/access_code'
16
- require_relative 'models/application'
17
- require_relative 'models/user'
18
-
19
- # Twitter Endpoints
20
- require_relative '../../../endpoints/custom_token'
21
- require_relative '../../../endpoints/custom_authorization'
22
- require_relative '../../../endpoints/status'
23
-
24
- module Twitter
25
- class API < Grape::API
26
- version 'v1', using: :path
27
- format :json
28
- prefix :api
29
-
30
- include Grape::OAuth2.api
31
-
32
- mount Twitter::Endpoints::Status
33
- mount Twitter::Endpoints::CustomToken
34
- mount Twitter::Endpoints::CustomAuthorization
35
- end
36
- end
1
+ require 'otr-activerecord'
2
+ require 'grape'
3
+
4
+ require File.expand_path('../../../../../../lib/grape_oauth2', __FILE__)
5
+
6
+ # Database
7
+ load File.expand_path('../config/db.rb', __FILE__)
8
+
9
+ # Grape::OAuth2 config
10
+ load File.expand_path('../../../../grape_oauth2_config.rb', __FILE__)
11
+
12
+ # Models
13
+ require_relative 'models/application_record'
14
+ require_relative 'models/access_token'
15
+ require_relative 'models/access_code'
16
+ require_relative 'models/application'
17
+ require_relative 'models/user'
18
+
19
+ # Twitter Endpoints
20
+ require_relative '../../../endpoints/custom_token'
21
+ require_relative '../../../endpoints/custom_authorization'
22
+ require_relative '../../../endpoints/status'
23
+
24
+ module Twitter
25
+ class API < Grape::API
26
+ version 'v1', using: :path
27
+ format :json
28
+ prefix :api
29
+
30
+ include Grape::OAuth2.api
31
+
32
+ mount Twitter::Endpoints::Status
33
+ mount Twitter::Endpoints::CustomToken
34
+ mount Twitter::Endpoints::CustomAuthorization
35
+ end
36
+ end
@@ -1,7 +1,7 @@
1
- $:.unshift(File.dirname(__FILE__))
2
-
3
- require 'app/twitter'
4
-
5
- use OTR::ActiveRecord::ConnectionManagement
6
-
7
- run Twitter::API
1
+ $:.unshift(File.dirname(__FILE__))
2
+
3
+ require 'app/twitter'
4
+
5
+ use OTR::ActiveRecord::ConnectionManagement
6
+
7
+ run Twitter::API
@@ -1,53 +1,53 @@
1
- ActiveRecord::Schema.define(version: 3) do
2
- create_table :users do |t|
3
- t.string :name
4
- t.string :username
5
- t.string :password_digest
6
- end
7
-
8
- create_table :applications do |t|
9
- t.string :name
10
- t.string :key
11
- t.string :secret
12
- t.string :redirect_uri
13
-
14
- t.timestamps null: false
15
- end
16
-
17
- add_index :applications, :key, unique: true
18
-
19
- create_table :access_tokens do |t|
20
- t.integer :resource_owner_id
21
- t.integer :client_id
22
-
23
- t.string :token, null: false
24
- t.string :refresh_token
25
- t.string :scopes
26
-
27
- t.datetime :expires_at
28
- t.datetime :revoked_at
29
- t.datetime :created_at, null: false
30
- end
31
-
32
- create_table :access_codes do |t|
33
- t.integer :resource_owner_id
34
- t.integer :client_id
35
-
36
- t.string :token, null: false
37
- t.string :redirect_uri
38
- t.string :scopes
39
-
40
- t.datetime :expires_at
41
- t.datetime :revoked_at
42
- t.datetime :created_at, null: false
43
- end
44
-
45
- add_index :access_tokens, :token, unique: true
46
- add_index :access_tokens, :resource_owner_id
47
- add_index :access_tokens, :client_id
48
- add_index :access_tokens, :refresh_token, unique: true
49
-
50
- add_index :access_codes, :token, unique: true
51
- add_index :access_codes, :resource_owner_id
52
- add_index :access_codes, :client_id
53
- end
1
+ ActiveRecord::Schema.define(version: 3) do
2
+ create_table :users do |t|
3
+ t.string :name
4
+ t.string :username
5
+ t.string :password_digest
6
+ end
7
+
8
+ create_table :applications do |t|
9
+ t.string :name
10
+ t.string :key
11
+ t.string :secret
12
+ t.string :redirect_uri
13
+
14
+ t.timestamps null: false
15
+ end
16
+
17
+ add_index :applications, :key, unique: true
18
+
19
+ create_table :access_tokens do |t|
20
+ t.integer :resource_owner_id
21
+ t.integer :client_id
22
+
23
+ t.string :token, null: false
24
+ t.string :refresh_token
25
+ t.string :scopes
26
+
27
+ t.datetime :expires_at
28
+ t.datetime :revoked_at
29
+ t.datetime :created_at, null: false
30
+ end
31
+
32
+ create_table :access_codes do |t|
33
+ t.integer :resource_owner_id
34
+ t.integer :client_id
35
+
36
+ t.string :token, null: false
37
+ t.string :redirect_uri
38
+ t.string :scopes
39
+
40
+ t.datetime :expires_at
41
+ t.datetime :revoked_at
42
+ t.datetime :created_at, null: false
43
+ end
44
+
45
+ add_index :access_tokens, :token, unique: true
46
+ add_index :access_tokens, :resource_owner_id
47
+ add_index :access_tokens, :client_id
48
+ add_index :access_tokens, :refresh_token, unique: true
49
+
50
+ add_index :access_codes, :token, unique: true
51
+ add_index :access_codes, :resource_owner_id
52
+ add_index :access_codes, :client_id
53
+ end