simple_oauth2 0.0.0 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7457463729d7d0b17d67f13e8f0865f8340d8e59
4
- data.tar.gz: 85c2c6a42f9085f0636c4fca5e72339b542c7a48
3
+ metadata.gz: c571e4fa9cd993df75fdb5416df55c386bc97503
4
+ data.tar.gz: e994bccde3012073687e723ec829ccb9e6453569
5
5
  SHA512:
6
- metadata.gz: 5e0ff90478bd45cd417ef769086b492252375fcefdea551d7f853df51096c3513be1b399322f70ade0392a7a3c9cd9acc3ff05a969b9fc647acc15d859a47b0c
7
- data.tar.gz: 4575200800986eac07b0bae126b44a144cbd5ebc5ff7a2cecec0da2eedba32b055e1f62445c90b3b79bd7fe16c76ad24df83190924ef9a04b86587ef45c09b14
6
+ metadata.gz: 83368b14042af9aa05107cb83a55e333f3c71d1aeb6a3669e9a9b65160a5ddb50bc310d2b1ee63cebb1deb684ab38f09849b5c00740b0ba54ece10170476d1ec
7
+ data.tar.gz: 8b6cc5aec58182a68cfaecc34de807986b82dab2be4bbae905bc050f20827d7319fd9291738daff0efa34989f4027b0f06fd715b2c02938c2c2d7b9d3a640535
@@ -21,11 +21,5 @@ matrix:
21
21
  - rvm: ruby-head
22
22
  include:
23
23
  - rvm: 2.2.6
24
- gemfile: gemfiles/nobrainer.rb
25
- env: ORM=nobrainer
26
24
  - rvm: 2.3.3
27
- gemfile: gemfiles/nobrainer.rb
28
- env: ORM=nobrainer
29
25
  - rvm: ruby-head
30
- gemfile: gemfiles/nobrainer.rb
31
- env: ORM=nobrainer
data/Gemfile CHANGED
@@ -6,6 +6,7 @@ gem 'rack-oauth2'
6
6
 
7
7
  group :test do
8
8
  gem 'nobrainer'
9
+ gem 'nobrainer_simple_oauth2'
9
10
 
10
11
  gem 'coveralls', require: false
11
12
  gem 'ffaker'
@@ -7,13 +7,6 @@ require 'simple_oauth2/scopes'
7
7
  require 'simple_oauth2/uniq_token'
8
8
  require 'simple_oauth2/resource/bearer'
9
9
 
10
- # Mixins
11
- if defined?(NoBrainer::Document)
12
- require 'simple_oauth2/mixins/nobrainer/access_token'
13
- require 'simple_oauth2/mixins/nobrainer/access_grant'
14
- require 'simple_oauth2/mixins/nobrainer/client'
15
- end
16
-
17
10
  # Authorization Grants aka Flows (Strategies)
18
11
  require 'simple_oauth2/strategies/base'
19
12
  require 'simple_oauth2/strategies/password'
@@ -113,7 +113,7 @@ module Simple
113
113
  # Validates token value passed with the request params
114
114
  def default_token_authenticator
115
115
  lambda do |request|
116
- access_token_class.authenticate(request.access_token) || request.invalid_token!
116
+ access_token_class.by_token(request.access_token) || request.invalid_token!
117
117
  end
118
118
  end
119
119
 
@@ -28,7 +28,7 @@ module Simple
28
28
  # @return [Response] with HTTP status code 200
29
29
  #
30
30
  def revoke(token, env)
31
- access_token = config.access_token_class.authenticate(token, 'refresh_token')
31
+ access_token = config.access_token_class.by_refresh_token(token)
32
32
 
33
33
  if access_token
34
34
  request = Rack::OAuth2::Server::Token::Request.new(env)
@@ -8,7 +8,7 @@ module Simple
8
8
  class << self
9
9
  # Authenticates Client from the request
10
10
  def authenticate_client(request)
11
- config.client_class.authenticate(request.client_id)
11
+ config.client_class.by_key(request.client_id)
12
12
  end
13
13
 
14
14
  # Authenticates Resource Owner from the request
@@ -22,7 +22,7 @@ module Simple
22
22
 
23
23
  # Authenticates Access Grant from the request
24
24
  def authenticate_access_grant(request)
25
- config.access_grant_class.authenticate(request.code)
25
+ config.access_grant_class.by_token(request.code)
26
26
  end
27
27
 
28
28
  # Exposes token object to Bearer token.
@@ -22,7 +22,7 @@ module Simple
22
22
 
23
23
  # Check refresh token and client id for exact matching verifier
24
24
  def verify_refresh_token!(request, client_id)
25
- refresh_token = config.access_token_class.authenticate(request.refresh_token, 'refresh_token')
25
+ refresh_token = config.access_token_class.by_refresh_token(request.refresh_token)
26
26
  refresh_token || request.invalid_grant!
27
27
  refresh_token.client_id == client_id || request.unauthorized_client!
28
28
 
@@ -14,7 +14,7 @@ module Simple
14
14
  # Level changes for implementation level detail changes, such as small bug fixes
15
15
  PATCH = 0
16
16
  # Level changes for any backwards compatible API changes, such as new functionality/features
17
- MINOR = 0
17
+ MINOR = 1
18
18
  # Level changes for backwards incompatible API changes,
19
19
  # such as changes that will break existing users code if they update
20
20
  MAJOR = 0
@@ -4,7 +4,7 @@ describe Simple::OAuth2::Configuration do
4
4
  let(:config) { described_class.new }
5
5
 
6
6
  class CustomClient
7
- def self.authenticate(_key, _secret = nil)
7
+ def self.by_key(_key)
8
8
  'Test'
9
9
  end
10
10
  end
@@ -12,7 +12,11 @@ describe Simple::OAuth2::Configuration do
12
12
  class CustomAccessToken
13
13
  def self.create_for(_client, _resource_owner, _scopes = nil); end
14
14
 
15
- def self.authenticate(_token, _type = nil)
15
+ def self.by_token(_token)
16
+ 'Test'
17
+ end
18
+
19
+ def self.by_refresh_token(_refresh_token)
16
20
  'Test'
17
21
  end
18
22
 
@@ -105,11 +109,11 @@ describe Simple::OAuth2::Configuration do
105
109
  end
106
110
 
107
111
  context 'works with custom Access Token class' do
108
- it { expect(config.access_token_class.authenticate('')).to eq('Test') }
112
+ it { expect(config.access_token_class.by_token('')).to eq('Test') }
109
113
  end
110
114
 
111
115
  context 'works with custom Client class' do
112
- it { expect(config.client_class.authenticate('')).to eq('Test') }
116
+ it { expect(config.client_class.by_key('')).to eq('Test') }
113
117
  end
114
118
 
115
119
  context 'works with custom Resource Owner class' do
@@ -1,3 +1,3 @@
1
1
  class AccessGrant
2
- include Simple::OAuth2::NoBrainer::AccessGrant
2
+ include NoBrainer::Simple::OAuth2::AccessGrant
3
3
  end
@@ -1,3 +1,3 @@
1
1
  class AccessToken
2
- include Simple::OAuth2::NoBrainer::AccessToken
2
+ include NoBrainer::Simple::OAuth2::AccessToken
3
3
  end
@@ -1,3 +1,3 @@
1
1
  class Client
2
- include Simple::OAuth2::NoBrainer::Client
2
+ include NoBrainer::Simple::OAuth2::Client
3
3
  end
@@ -1,11 +1,3 @@
1
1
  class User
2
- include NoBrainer::Document
3
-
4
- field :username, type: String, index: true
5
- field :encrypted_password, type: String
6
-
7
- def self.oauth_authenticate(_client, username, password)
8
- user = where(username: username.to_s).first
9
- user if user && user.encrypted_password == password
10
- end
2
+ include NoBrainer::Simple::OAuth2::ResourceOwner
11
3
  end
@@ -22,6 +22,7 @@ end
22
22
 
23
23
  require 'rack/test'
24
24
  require 'ffaker'
25
+ require 'nobrainer_simple_oauth2'
25
26
  require ORM_GEMS_MAPPING[ENV['ORM']]
26
27
  require File.expand_path("../dummy/orm/#{ENV['ORM']}/app/twitter", __FILE__)
27
28
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_oauth2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Volodimir Partytskyi
@@ -47,7 +47,6 @@ files:
47
47
  - LICENSE
48
48
  - README.md
49
49
  - Rakefile
50
- - gemfiles/nobrainer.rb
51
50
  - lib/simple_oauth2.rb
52
51
  - lib/simple_oauth2/configuration.rb
53
52
  - lib/simple_oauth2/configuration/class_accessors.rb
@@ -56,9 +55,6 @@ files:
56
55
  - lib/simple_oauth2/generators/base.rb
57
56
  - lib/simple_oauth2/generators/token.rb
58
57
  - lib/simple_oauth2/helpers.rb
59
- - lib/simple_oauth2/mixins/nobrainer/access_grant.rb
60
- - lib/simple_oauth2/mixins/nobrainer/access_token.rb
61
- - lib/simple_oauth2/mixins/nobrainer/client.rb
62
58
  - lib/simple_oauth2/resource/bearer.rb
63
59
  - lib/simple_oauth2/responses.rb
64
60
  - lib/simple_oauth2/scopes.rb
@@ -1,15 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec path: '../'
4
-
5
- gem 'nobrainer'
6
-
7
- group :test do
8
- gem 'coveralls', require: false
9
- gem 'factory_girl', '~> 4.0'
10
- gem 'ffaker'
11
- gem 'rack-test', require: 'rack/test'
12
- gem 'rspec-rails', '~> 3.4'
13
- end
14
-
15
- gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
@@ -1,62 +0,0 @@
1
- module Simple
2
- module OAuth2
3
- module NoBrainer
4
- # Includes all the required API, associations, validations and callbacks
5
- module AccessGrant
6
- extend ActiveSupport::Concern
7
-
8
- included do # rubocop:disable Metrics/BlockLength
9
- include ::NoBrainer::Document
10
- include ::NoBrainer::Document::Timestamps
11
-
12
- belongs_to :client, class_name: Simple::OAuth2.config.client_class_name,
13
- foreign_key: :client_id, primary_key: :id
14
- belongs_to :resource_owner, class_name: Simple::OAuth2.config.resource_owner_class_name,
15
- foreign_key: :resource_owner_id, primary_key: :id
16
-
17
- before_save { self.updated_at = Time.now }
18
- before_validation :setup_expiration, if: :new_record?
19
-
20
- field :resource_owner_id, type: String, index: true, required: true
21
- field :client_id, type: String, index: true, required: true
22
-
23
- field :token,
24
- type: String,
25
- required: true,
26
- uniq: true,
27
- index: true,
28
- default: -> { Simple::OAuth2.config.token_generator.generate }
29
-
30
- field :redirect_uri, type: String, required: true
31
- field :scopes, type: String
32
-
33
- field :revoked_at, type: Time
34
- field :expires_at, type: Time, required: true
35
- field :created_at, type: Time, required: true, default: -> { Time.now }
36
- field :updated_at, type: Time, required: true, default: -> { Time.now }
37
-
38
- class << self
39
- def create_for(client, resource_owner, redirect_uri, scopes = nil)
40
- create(
41
- client_id: client.id,
42
- resource_owner_id: resource_owner.id,
43
- redirect_uri: redirect_uri,
44
- scopes: scopes
45
- )
46
- end
47
-
48
- def authenticate(token)
49
- where(token: token.to_s).first
50
- end
51
- end
52
-
53
- private
54
-
55
- def setup_expiration
56
- self.expires_at = Time.now.utc + Simple::OAuth2.config.authorization_code_lifetime if expires_at.nil?
57
- end
58
- end
59
- end
60
- end
61
- end
62
- end
@@ -1,98 +0,0 @@
1
- module Simple
2
- module OAuth2
3
- module NoBrainer
4
- # Includes all the required API, associations, validations and callbacks
5
- module AccessToken
6
- extend ActiveSupport::Concern
7
-
8
- included do # rubocop:disable Metrics/BlockLength
9
- include ::NoBrainer::Document
10
- include ::NoBrainer::Document::Timestamps
11
-
12
- before_save { self.updated_at = Time.now }
13
- before_validation :setup_expiration, if: :new_record?
14
-
15
- belongs_to :client, class_name: Simple::OAuth2.config.client_class_name,
16
- foreign_key: :client_id, primary_key: :id
17
- belongs_to :resource_owner, class_name: Simple::OAuth2.config.resource_owner_class_name,
18
- foreign_key: :resource_owner_id, primary_key: :id
19
-
20
- field :resource_owner_id, type: String, index: true, required: true
21
- field :client_id, type: String, index: true, required: true
22
- field :token,
23
- type: String,
24
- index: true,
25
- required: true,
26
- uniq: true,
27
- default: -> { Simple::OAuth2.config.token_generator.generate }
28
- field :refresh_token,
29
- type: String,
30
- index: true,
31
- uniq: true,
32
- default: -> do
33
- if Simple::OAuth2.config.issue_refresh_token
34
- Simple::OAuth2.config.token_generator.generate
35
- else
36
- ''
37
- end
38
- end
39
-
40
- field :scopes, type: String
41
-
42
- field :revoked_at, type: Time
43
- field :expires_at, type: Time, required: true
44
- field :created_at, type: Time, required: true, default: -> { Time.now }
45
- field :updated_at, type: Time, required: true, default: -> { Time.now }
46
-
47
- class << self
48
- def create_for(client, resource_owner, scopes = nil)
49
- create(
50
- client_id: client.id,
51
- resource_owner_id: resource_owner.id,
52
- scopes: scopes
53
- )
54
- end
55
-
56
- def authenticate(token, token_type_hint = nil)
57
- return if token.blank?
58
-
59
- if token_type_hint == 'refresh_token'
60
- where(refresh_token: token).first
61
- else
62
- where(token: token).first
63
- end
64
- end
65
- end
66
-
67
- def expired?
68
- expires_at && Time.now.utc > expires_at
69
- end
70
-
71
- def revoked?
72
- revoked_at && revoked_at <= Time.now.utc
73
- end
74
-
75
- def revoke!(revoked_at = Time.now.utc)
76
- update!(revoked_at: revoked_at)
77
- end
78
-
79
- def to_bearer_token
80
- {
81
- access_token: token,
82
- expires_in: expires_at && Simple::OAuth2.config.access_token_lifetime.to_i,
83
- refresh_token: refresh_token,
84
- scope: scopes
85
- }
86
- end
87
-
88
- private
89
-
90
- def setup_expiration
91
- expires_in = Simple::OAuth2.config.access_token_lifetime.to_i
92
- self.expires_at = Time.now.utc + expires_in if expires_at.nil? && !expires_in.nil?
93
- end
94
- end
95
- end
96
- end
97
- end
98
- end
@@ -1,43 +0,0 @@
1
- module Simple
2
- module OAuth2
3
- module NoBrainer
4
- # Includes all the required API, associations, validations and callbacks
5
- module Client
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
- include ::NoBrainer::Document
10
- include ::NoBrainer::Document::Timestamps
11
-
12
- before_save { self.updated_at = Time.now }
13
-
14
- has_many :access_tokens, class_name: Simple::OAuth2.config.access_token_class_name, foreign_key: :client_id
15
- has_many :access_grants, class_name: Simple::OAuth2.config.access_grant_class_name, foreign_key: :client_id
16
-
17
- field :name, type: String, required: true
18
- field :redirect_uri, type: String, required: true
19
-
20
- field :key,
21
- type: String,
22
- required: true,
23
- index: true,
24
- uniq: true,
25
- default: -> { Simple::OAuth2.config.token_generator.generate }
26
- field :secret,
27
- type: String,
28
- required: true,
29
- index: true,
30
- uniq: true,
31
- default: -> { Simple::OAuth2.config.token_generator.generate }
32
-
33
- field :created_at, type: Time, required: true, default: -> { Time.now }
34
- field :updated_at, type: Time, required: true, default: -> { Time.now }
35
-
36
- def self.authenticate(key)
37
- where(key: key.to_s).first
38
- end
39
- end
40
- end
41
- end
42
- end
43
- end