jm81auth 0.1.1 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 39eca33e41c3b1d18fb5e49d47729a07cb5a8f28
4
- data.tar.gz: 33275ac7f223777d70718d95c55347f0905f235f
2
+ SHA256:
3
+ metadata.gz: c5fe75d8315211ad54368bfd0b3ce2147245ca9a8b4f400e2a4e0a500f0fa2f6
4
+ data.tar.gz: ebc173d360db322cab2f87d8574cd3f6b47831691a46f5ec1814772b9a4afade
5
5
  SHA512:
6
- metadata.gz: 308debaddd2df7be32a45bd0788522878579ca80f229533bc3c362a800590dd1add53f71916b0bbf9eaae6585b35ebd222527e0a077555a5dc84f5a7d8845885
7
- data.tar.gz: f92668a1d726bca77a101a3370e2b8fe5a0dcfa0c98c3469535994b9b85eea718a46bfb8ccb530a005f9b7e0f94d28149c5dcc560e686a662184ac12e064dee0
6
+ metadata.gz: a7b59ffafb5e770ce82d0601cd64789b8d89dff737d09ce71c866efaad86bea28e01220a978883688d056bb856ec49caf1b3ab0355569abd9d592a8b74f5172d
7
+ data.tar.gz: 727abd69e14c142df3a1fb0b87d85ee4a4814ed8a258dd21cff995a901a7c98e5feaf5df53c3b02f8d2e68d1109b1f680f03bd38b802bc46a6217dec1171f939
@@ -20,5 +20,6 @@ require 'jm81auth/models/user'
20
20
  require 'jm81auth/oauth/base'
21
21
  require 'jm81auth/oauth/facebook'
22
22
  require 'jm81auth/oauth/github'
23
+ require 'jm81auth/oauth/google'
23
24
 
24
25
  require 'jm81auth/version'
@@ -5,16 +5,32 @@ module Jm81auth
5
5
  base.extend ClassMethods
6
6
 
7
7
  base.class_eval do
8
- many_to_one :user
9
- one_to_many :auth_tokens
8
+ if respond_to? :belongs_to
9
+ belongs_to :user
10
+ has_many :auth_tokens
11
+ else
12
+ many_to_one :user
13
+ one_to_many :auth_tokens
14
+ end
10
15
  end
11
16
  end
12
17
 
13
- # Create AuthToken, setting user and last_used_at
18
+ # Create AuthToken, setting user and last_used_at, and optionally
19
+ # access_token from the Oauth provider.
14
20
  #
15
21
  # @return [AuthToken]
16
- def create_token
17
- add_auth_token user: user, last_used_at: Time.now.utc
22
+ def create_token access_token: nil
23
+ auth_token = ::AuthToken.new
24
+ auth_token.auth_method = self
25
+ auth_token.user = user
26
+ auth_token.last_used_at = Time.now.utc
27
+
28
+ if auth_token.respond_to? :access_token=
29
+ auth_token.access_token = access_token
30
+ end
31
+
32
+ auth_token.save
33
+ auth_token
18
34
  end
19
35
 
20
36
  module ClassMethods
@@ -5,10 +5,15 @@ module Jm81auth
5
5
  base.extend ClassMethods
6
6
 
7
7
  base.class_eval do
8
- plugin :timestamps
8
+ if respond_to? :belongs_to
9
+ belongs_to :auth_method, required: false
10
+ belongs_to :user, required: false
11
+ else
12
+ plugin :timestamps
9
13
 
10
- many_to_one :auth_method
11
- many_to_one :user
14
+ many_to_one :auth_method
15
+ many_to_one :user
16
+ end
12
17
  end
13
18
  end
14
19
 
@@ -17,7 +22,13 @@ module Jm81auth
17
22
 
18
23
  # Set #closed_at. Called, for example, when logging out.
19
24
  def close!
20
- self.update(closed_at: Time.now) unless self.closed_at
25
+ unless self.closed_at
26
+ if respond_to? :update_attributes!
27
+ self.update_attributes! closed_at: Time.now
28
+ else
29
+ self.update closed_at: Time.now
30
+ end
31
+ end
21
32
  end
22
33
 
23
34
  # @return [String]
@@ -54,7 +65,11 @@ module Jm81auth
54
65
  token, config.jwt_secret, config.jwt_algorithm
55
66
  ).first
56
67
 
57
- auth_token = self[payload['auth_token_id']]
68
+ if self.respond_to? :[]
69
+ auth_token = self[payload['auth_token_id']]
70
+ else
71
+ auth_token = find payload['auth_token_id']
72
+ end
58
73
 
59
74
  if payload['auth_token_id'].nil?
60
75
  raise DecodeError, "auth_token_id missing: #{payload}"
@@ -84,7 +99,11 @@ module Jm81auth
84
99
  auth_token = decode token
85
100
 
86
101
  if auth_token && !auth_token.expired?
87
- auth_token.update(last_used_at: Time.now)
102
+ if respond_to? :update_attributes!
103
+ auth_token.update_attributes! last_used_at: Time.now
104
+ else
105
+ auth_token.update last_used_at: Time.now
106
+ end
88
107
  auth_token
89
108
  else
90
109
  nil
@@ -7,8 +7,13 @@ module Jm81auth
7
7
  base.extend ClassMethods
8
8
 
9
9
  base.class_eval do
10
- one_to_many :auth_methods
11
- one_to_many :auth_tokens
10
+ if respond_to? :has_many
11
+ has_many :auth_methods
12
+ has_many :auth_tokens
13
+ else
14
+ one_to_many :auth_methods
15
+ one_to_many :auth_tokens
16
+ end
12
17
  end
13
18
  end
14
19
 
@@ -40,15 +45,29 @@ module Jm81auth
40
45
  method = ::AuthMethod.by_provider_data oauth.provider_data
41
46
 
42
47
  if !method
43
- user = find_by_email(oauth.email) || create(
44
- email: oauth.email.downcase,
45
- display_name: oauth.display_name
46
- )
48
+ user = find_by_email(oauth.email) || create_from_oauth(oauth)
47
49
 
48
- method = user.add_auth_method oauth.provider_data
50
+ if user.respond_to? :add_auth_method
51
+ method = user.add_auth_method oauth.provider_data
52
+ else
53
+ method = user.auth_methods.create! oauth.provider_data
54
+ end
49
55
  end
50
56
 
51
- method.create_token
57
+ method.create_token access_token: oauth.access_token
58
+ end
59
+
60
+ # Create User based on oauth data.
61
+ #
62
+ # @param oauth [OAuth::Base]
63
+ # OAuth login object, include #provider_data (Hash with provider_name
64
+ # and provider_id), #email and #display_name.
65
+ # @return [User]
66
+ def create_from_oauth oauth
67
+ create(
68
+ email: oauth.email.downcase,
69
+ display_name: oauth.display_name
70
+ )
52
71
  end
53
72
  end
54
73
  end
@@ -4,6 +4,8 @@
4
4
  module Jm81auth
5
5
  module OAuth
6
6
  class Base
7
+ attr_reader :access_token
8
+
7
9
  # Setup @params from params param (Har, har). Also, set @access_token,
8
10
  # either from params Hash, or by calling #get_access_token. @params is the
9
11
  # expected params needed by #get_access_token.
@@ -0,0 +1,17 @@
1
+ module Jm81auth
2
+ module OAuth
3
+ class Google < Base
4
+ ACCESS_TOKEN_URL = 'https://oauth2.googleapis.com/token'
5
+ DATA_URL = 'https://www.googleapis.com/oauth2/v3/userinfo'
6
+
7
+ def get_access_token
8
+ response = client.post(
9
+ ACCESS_TOKEN_URL, @params.merge(grant_type: 'authorization_code')
10
+ )
11
+
12
+ JSON.parse(response.body)['access_token']
13
+ end
14
+ end
15
+ end
16
+ end
17
+
@@ -1,3 +1,3 @@
1
1
  module Jm81auth
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.6'
3
3
  end
@@ -105,6 +105,7 @@ RSpec.describe User, type: :model do
105
105
  context 'existing AuthMethod' do
106
106
  before(:each) do
107
107
  expect(oauth).to_not receive(:email)
108
+ expect(oauth).to receive(:access_token)
108
109
 
109
110
  expect(oauth).to receive(:provider_data) do
110
111
  { provider_name: 'github', provider_id: 5 }
@@ -133,6 +134,8 @@ RSpec.describe User, type: :model do
133
134
 
134
135
  context 'no existing AuthMethod' do
135
136
  before(:each) do
137
+ expect(oauth).to receive(:access_token)
138
+
136
139
  expect(oauth).to receive(:provider_data).twice do
137
140
  { provider_name: 'github', provider_id: 10 }
138
141
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jm81auth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jared Morgan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-06 00:00:00.000000000 Z
11
+ date: 2021-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httpclient
@@ -126,6 +126,7 @@ files:
126
126
  - lib/jm81auth/oauth/base.rb
127
127
  - lib/jm81auth/oauth/facebook.rb
128
128
  - lib/jm81auth/oauth/github.rb
129
+ - lib/jm81auth/oauth/google.rb
129
130
  - lib/jm81auth/version.rb
130
131
  - spec/factories/auth_methods.rb
131
132
  - spec/factories/auth_tokens.rb
@@ -154,17 +155,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
155
  - !ruby/object:Gem::Version
155
156
  version: '0'
156
157
  requirements: []
157
- rubyforge_project:
158
- rubygems_version: 2.2.2
158
+ rubygems_version: 3.0.3
159
159
  signing_key:
160
160
  specification_version: 4
161
161
  summary: An authentication library for Rails API
162
162
  test_files:
163
- - spec/factories/users.rb
164
- - spec/factories/auth_tokens.rb
165
- - spec/factories/auth_methods.rb
163
+ - spec/spec_helper.rb
164
+ - spec/jm81auth/oauth/base_spec.rb
166
165
  - spec/jm81auth/models/auth_token_spec.rb
167
- - spec/jm81auth/models/user_spec.rb
168
166
  - spec/jm81auth/models/auth_method_spec.rb
169
- - spec/jm81auth/oauth/base_spec.rb
170
- - spec/spec_helper.rb
167
+ - spec/jm81auth/models/user_spec.rb
168
+ - spec/factories/auth_methods.rb
169
+ - spec/factories/users.rb
170
+ - spec/factories/auth_tokens.rb