grape_oauth2 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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,41 +1,44 @@
1
- module Grape
2
- module OAuth2
3
- module Mongoid
4
- # Grape::OAuth2 Client role mixin for Mongoid ORM.
5
- # Includes all the required API, associations, validations and callbacks.
6
- module Client
7
- extend ActiveSupport::Concern
8
-
9
- included do
10
- include ::Mongoid::Document
11
- include ::Mongoid::Timestamps
12
-
13
- field :name, type: String
14
- field :key, type: String
15
- field :secret, type: String
16
- field :redirect_uri, type: String
17
-
18
- before_validation :generate_keys, on: :create
19
-
20
- validates :key, :secret, presence: true
21
- validates :key, uniqueness: true
22
-
23
- def self.authenticate(key, secret = nil)
24
- if secret.nil?
25
- Application.find_by(key: key)
26
- else
27
- Application.find_by(key: key, secret: secret)
28
- end
29
- end
30
-
31
- protected
32
-
33
- def generate_keys
34
- self.key = Grape::OAuth2::UniqueToken.generate if key.blank?
35
- self.secret = Grape::OAuth2::UniqueToken.generate if secret.blank?
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
1
+ module Grape
2
+ module OAuth2
3
+ module Mongoid
4
+ # Grape::OAuth2 Client role mixin for Mongoid ORM.
5
+ # Includes all the required API, associations, validations and callbacks.
6
+ module Client
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ include ::Mongoid::Document
11
+ include ::Mongoid::Timestamps
12
+
13
+ has_many :access_tokens, class_name: Grape::OAuth2.config.access_token_class_name,
14
+ foreign_key: :client_id, dependent: :delete
15
+
16
+ field :name, type: String
17
+ field :key, type: String
18
+ field :secret, type: String
19
+ field :redirect_uri, type: String
20
+
21
+ before_validation :generate_keys, on: :create
22
+
23
+ validates :key, :secret, presence: true
24
+ validates :key, uniqueness: true
25
+
26
+ def self.authenticate(key, secret = nil)
27
+ if secret.nil?
28
+ find_by(key: key)
29
+ else
30
+ find_by(key: key, secret: secret)
31
+ end
32
+ end
33
+
34
+ protected
35
+
36
+ def generate_keys
37
+ self.key = Grape::OAuth2::UniqueToken.generate if key.blank?
38
+ self.secret = Grape::OAuth2::UniqueToken.generate if secret.blank?
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,68 +1,68 @@
1
- module Grape
2
- module OAuth2
3
- module Sequel
4
- # Grape::OAuth2 Authorization Grant role mixin for Sequel toolkit.
5
- # Includes all the required API, associations, validations and callbacks.
6
- module AccessGrant
7
- extend ActiveSupport::Concern
8
-
9
- included do
10
- plugin :validation_helpers
11
- plugin :timestamps
12
-
13
- many_to_one :client, class: Grape::OAuth2.config.client_class_name, key: :client_id
14
- many_to_one :resource_owner, class: Grape::OAuth2.config.resource_owner_class_name, key: :resource_owner_id
15
-
16
- def before_validation
17
- if new?
18
- generate_token
19
- setup_expiration
20
- end
21
-
22
- super
23
- end
24
-
25
- class << self
26
- def create_for(client, resource_owner, redirect_uri, scopes = nil)
27
- create(
28
- client_id: client.id,
29
- resource_owner_id: resource_owner && resource_owner.id,
30
- redirect_uri: redirect_uri,
31
- scopes: scopes.to_s
32
- )
33
- end
34
- end
35
-
36
- def validate
37
- super
38
- validates_presence [:token, :client_id]
39
- validates_unique [:token]
40
- end
41
-
42
- def expired?
43
- expires_at && Time.now.utc > expires_at
44
- end
45
-
46
- def revoked?
47
- revoked_at && revoked_at <= Time.now.utc
48
- end
49
-
50
- def revoke!(revoked_at = Time.now)
51
- set(revoked_at: revoked_at.utc)
52
- save(columns: [:revoked_at], validate: false)
53
- end
54
-
55
- protected
56
-
57
- def generate_token
58
- self.token = Grape::OAuth2.config.token_generator.generate(values)
59
- end
60
-
61
- def setup_expiration
62
- self.expires_at = Time.now.utc + Grape::OAuth2.config.authorization_code_lifetime if expires_at.nil?
63
- end
64
- end
65
- end
66
- end
67
- end
68
- end
1
+ module Grape
2
+ module OAuth2
3
+ module Sequel
4
+ # Grape::OAuth2 Authorization Grant role mixin for Sequel toolkit.
5
+ # Includes all the required API, associations, validations and callbacks.
6
+ module AccessGrant
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ plugin :validation_helpers
11
+ plugin :timestamps
12
+
13
+ many_to_one :client, class: Grape::OAuth2.config.client_class_name, key: :client_id
14
+ many_to_one :resource_owner, class: Grape::OAuth2.config.resource_owner_class_name, key: :resource_owner_id
15
+
16
+ def before_validation
17
+ if new?
18
+ generate_token
19
+ setup_expiration
20
+ end
21
+
22
+ super
23
+ end
24
+
25
+ class << self
26
+ def create_for(client, resource_owner, redirect_uri, scopes = nil)
27
+ create(
28
+ client_id: client.id,
29
+ resource_owner_id: resource_owner && resource_owner.id,
30
+ redirect_uri: redirect_uri,
31
+ scopes: scopes.to_s
32
+ )
33
+ end
34
+ end
35
+
36
+ def validate
37
+ super
38
+ validates_presence %i[token client_id]
39
+ validates_unique [:token]
40
+ end
41
+
42
+ def expired?
43
+ expires_at && Time.now.utc > expires_at
44
+ end
45
+
46
+ def revoked?
47
+ revoked_at && revoked_at <= Time.now.utc
48
+ end
49
+
50
+ def revoke!(revoked_at = Time.now)
51
+ set(revoked_at: revoked_at.utc)
52
+ save(columns: [:revoked_at], validate: false)
53
+ end
54
+
55
+ protected
56
+
57
+ def generate_token
58
+ self.token = Grape::OAuth2.config.token_generator.generate(values)
59
+ end
60
+
61
+ def setup_expiration
62
+ self.expires_at = Time.now.utc + Grape::OAuth2.config.authorization_code_lifetime if expires_at.nil?
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -1,86 +1,86 @@
1
- module Grape
2
- module OAuth2
3
- module Sequel
4
- # Grape::OAuth2 Access Token role mixin for Sequel toolkit.
5
- # Includes all the required API, associations, validations and callbacks.
6
- module AccessToken
7
- extend ActiveSupport::Concern
8
-
9
- included do
10
- plugin :validation_helpers
11
- plugin :timestamps
12
-
13
- many_to_one :client, class: Grape::OAuth2.config.client_class_name, key: :client_id
14
- many_to_one :resource_owner, class: Grape::OAuth2.config.resource_owner_class_name, key: :resource_owner_id
15
-
16
- def before_validation
17
- if new?
18
- setup_expiration
19
- generate_tokens
20
- end
21
-
22
- super
23
- end
24
-
25
- def validate
26
- super
27
- validates_presence :token
28
- validates_unique :token
29
- end
30
-
31
- class << self
32
- def create_for(client, resource_owner, scopes = nil)
33
- create(
34
- client: client,
35
- resource_owner: resource_owner,
36
- scopes: scopes.to_s
37
- )
38
- end
39
-
40
- def authenticate(token, type: :access_token)
41
- if type && type.to_sym == :refresh_token
42
- first(refresh_token: token.to_s)
43
- else
44
- first(token: token.to_s)
45
- end
46
- end
47
- end
48
-
49
- def expired?
50
- !expires_at.nil? && Time.now.utc > expires_at.utc
51
- end
52
-
53
- def revoked?
54
- !revoked_at.nil? && revoked_at <= Time.now.utc
55
- end
56
-
57
- def revoke!(revoked_at = Time.now)
58
- set(revoked_at: revoked_at.utc)
59
- save(columns: [:revoked_at], validate: false)
60
- end
61
-
62
- def to_bearer_token
63
- {
64
- access_token: token,
65
- expires_in: expires_at && Grape::OAuth2.config.access_token_lifetime.to_i,
66
- refresh_token: refresh_token,
67
- scope: scopes
68
- }
69
- end
70
-
71
- protected
72
-
73
- def generate_tokens
74
- self.token = Grape::OAuth2.config.token_generator.generate(values) if token.blank?
75
- self.refresh_token = Grape::OAuth2::UniqueToken.generate if Grape::OAuth2.config.issue_refresh_token
76
- end
77
-
78
- def setup_expiration
79
- expires_in = Grape::OAuth2.config.access_token_lifetime
80
- self.expires_at = Time.now + expires_in if expires_at.nil? && !expires_in.nil?
81
- end
82
- end
83
- end
84
- end
85
- end
86
- end
1
+ module Grape
2
+ module OAuth2
3
+ module Sequel
4
+ # Grape::OAuth2 Access Token role mixin for Sequel toolkit.
5
+ # Includes all the required API, associations, validations and callbacks.
6
+ module AccessToken
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ plugin :validation_helpers
11
+ plugin :timestamps
12
+
13
+ many_to_one :client, class: Grape::OAuth2.config.client_class_name, key: :client_id
14
+ many_to_one :resource_owner, class: Grape::OAuth2.config.resource_owner_class_name, key: :resource_owner_id
15
+
16
+ def before_validation
17
+ if new?
18
+ setup_expiration
19
+ generate_tokens
20
+ end
21
+
22
+ super
23
+ end
24
+
25
+ def validate
26
+ super
27
+ validates_presence :token
28
+ validates_unique :token
29
+ end
30
+
31
+ class << self
32
+ def create_for(client, resource_owner, scopes = nil)
33
+ create(
34
+ client: client,
35
+ resource_owner: resource_owner,
36
+ scopes: scopes.to_s
37
+ )
38
+ end
39
+
40
+ def authenticate(token, type: :access_token)
41
+ if type && type.to_sym == :refresh_token
42
+ first(refresh_token: token.to_s)
43
+ else
44
+ first(token: token.to_s)
45
+ end
46
+ end
47
+ end
48
+
49
+ def expired?
50
+ !expires_at.nil? && Time.now.utc > expires_at.utc
51
+ end
52
+
53
+ def revoked?
54
+ !revoked_at.nil? && revoked_at <= Time.now.utc
55
+ end
56
+
57
+ def revoke!(revoked_at = Time.now)
58
+ set(revoked_at: revoked_at.utc)
59
+ save(columns: [:revoked_at], validate: false)
60
+ end
61
+
62
+ def to_bearer_token
63
+ {
64
+ access_token: token,
65
+ expires_in: expires_at && Grape::OAuth2.config.access_token_lifetime.to_i,
66
+ refresh_token: refresh_token,
67
+ scope: scopes
68
+ }
69
+ end
70
+
71
+ protected
72
+
73
+ def generate_tokens
74
+ self.token = Grape::OAuth2.config.token_generator.generate(values) if token.blank?
75
+ self.refresh_token = Grape::OAuth2::UniqueToken.generate if Grape::OAuth2.config.issue_refresh_token
76
+ end
77
+
78
+ def setup_expiration
79
+ expires_in = Grape::OAuth2.config.access_token_lifetime
80
+ self.expires_at = Time.now + expires_in if expires_at.nil? && !expires_in.nil?
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -1,46 +1,54 @@
1
- module Grape
2
- module OAuth2
3
- module Sequel
4
- # Grape::OAuth2 Client role mixin for Sequel toolkit.
5
- # Includes all the required API, associations, validations and callbacks.
6
- module Client
7
- extend ActiveSupport::Concern
8
-
9
- included do
10
- plugin :validation_helpers
11
- plugin :timestamps
12
-
13
- set_allowed_columns :name, :redirect_uri
14
-
15
- one_to_many :access_tokens, class: Grape::OAuth2.config.access_token_class_name, key: :client_id
16
-
17
- def before_validation
18
- generate_keys if new?
19
- super
20
- end
21
-
22
- def validate
23
- super
24
- validates_presence [:key, :secret]
25
- validates_unique :key
26
- end
27
-
28
- def self.authenticate(key, secret = nil)
29
- if secret.nil?
30
- find(key: key)
31
- else
32
- find(key: key, secret: secret)
33
- end
34
- end
35
-
36
- protected
37
-
38
- def generate_keys
39
- self.key = Grape::OAuth2::UniqueToken.generate if key.blank?
40
- self.secret = Grape::OAuth2::UniqueToken.generate if secret.blank?
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
1
+ module Grape
2
+ module OAuth2
3
+ module Sequel
4
+ # Grape::OAuth2 Client role mixin for Sequel toolkit.
5
+ # Includes all the required API, associations, validations and callbacks.
6
+ module Client
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ plugin :validation_helpers
11
+ plugin :timestamps
12
+ plugin :association_dependencies
13
+
14
+ # Sequel 4.47 deprecated #set_allowed_columns
15
+ if (::Sequel::MAJOR >= 4 && ::Sequel::MINOR >= 47) || ::Sequel::MAJOR >= 5
16
+ plugin :whitelist_security
17
+ end
18
+
19
+ set_allowed_columns :name, :redirect_uri
20
+
21
+ one_to_many :access_tokens, class: Grape::OAuth2.config.access_token_class_name, key: :client_id
22
+
23
+ add_association_dependencies access_tokens: :delete
24
+
25
+ def before_validation
26
+ generate_keys if new?
27
+ super
28
+ end
29
+
30
+ def validate
31
+ super
32
+ validates_presence %i[key secret]
33
+ validates_unique :key
34
+ end
35
+
36
+ def self.authenticate(key, secret = nil)
37
+ if secret.nil?
38
+ find(key: key)
39
+ else
40
+ find(key: key, secret: secret)
41
+ end
42
+ end
43
+
44
+ protected
45
+
46
+ def generate_keys
47
+ self.key = Grape::OAuth2::UniqueToken.generate if key.blank?
48
+ self.secret = Grape::OAuth2::UniqueToken.generate if secret.blank?
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end