ibrain-auth 0.2.2 → 0.2.5

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
  SHA256:
3
- metadata.gz: f31c4ced9652dfdb9fd77c5251d6e03588b0fd2fe2a203b7d0f7e53cc016914a
4
- data.tar.gz: 5c9604e3a8e9b7a726e801edb2f886a88df74b81d4efa92989eeb771ab41ea63
3
+ metadata.gz: 26aeb022ddcbbdd76111478f2940e701d19dd097f2cec23766d3c5ebb12fad17
4
+ data.tar.gz: fc936d12ad9d6cc5b6346c18e3e0a523d10b281b02506223bb50ed6c3fffdd25
5
5
  SHA512:
6
- metadata.gz: 390ae3ba90d81af9b8f4d9b74c88a03c72d1cfc3883f670d80aacc14b84dee336c1e47fd48a621ae2a53cccafbd3541b963587551ca2cbbce0a73762bee68fc2
7
- data.tar.gz: 28fa9b2bddc6f1e0f2b5f88d6f70efdd3ce3c895e68a2cadc7c8912f3c7db9ad37d127f9fdad322493111f5e016fe04d29a62272366f2373a155ef04161f8b9b
6
+ metadata.gz: 3ac0bfb83423c1b39cd2a4cb0da02cd340a856fe80252fb231b5e1f3fe20b973c3372af3f03406106d73c02dad7fcd572bbd7378df42af951a942c98ac432d9d
7
+ data.tar.gz: c5f6150f42313cd3ea40a6fe31fa2fabb11c9248a3c9c2dd58153fad1296590630612f89c175167b01dd04a9559afdadeef808b453f941e56dea00859988e32a
@@ -41,4 +41,16 @@ class Ibrain::Auth::SessionsController < Devise::SessionsController
41
41
  def repo
42
42
  AuthRepository.new(resource, params)
43
43
  end
44
+
45
+ def twitter_repo
46
+ TwitterRepository.new(resource, request.env['omniauth.auth'])
47
+ end
48
+
49
+ def apple_repo
50
+ AppleRepository.new(resource, request.env['omniauth.auth'])
51
+ end
52
+
53
+ def line_repo
54
+ LineRepository.new(resource, request.env['omniauth.auth'])
55
+ end
44
56
  end
@@ -11,6 +11,15 @@ module Ibrain::Auth::Mutations
11
11
 
12
12
  helper_method(*helpers)
13
13
 
14
+ def ready?(args)
15
+ @params = ActionController::Parameters.new(
16
+ args.to_h.with_indifferent_access.transform_keys(&:underscore)
17
+ )
18
+
19
+ @auth_resource = load_resource
20
+ true
21
+ end
22
+
14
23
  # Override prefixes to consider the scoped view.
15
24
  # Notice we need to check for the request due to a bug in
16
25
  # Action Controller tests that forces _prefixes to be
@@ -28,6 +37,8 @@ module Ibrain::Auth::Mutations
28
37
 
29
38
  protected
30
39
 
40
+ attr_reader :auth_resource
41
+
31
42
  def auth_headers(headers, user, scope: nil, aud: nil)
32
43
  scope ||= Devise::Mapping.find_scope!(user)
33
44
  aud ||= headers[Warden::JWTAuth.config.aud_header]
@@ -198,6 +209,10 @@ module Ibrain::Auth::Mutations
198
209
  params.fetch(resource_name, {})
199
210
  end
200
211
 
212
+ def repo; end
213
+ def load_resource; end
214
+ def normalize_parameters; end
215
+
201
216
  ActiveSupport.run_load_hooks(:devise_controller, self)
202
217
  end
203
218
  end
@@ -6,44 +6,46 @@ module Ibrain::Auth::Mutations
6
6
  field :token, String, null: true
7
7
  field :result, Boolean, null: true
8
8
 
9
- argument :auth, Ibrain::Auth::Config.sign_in_input, required: true
9
+ argument :attributes, Ibrain::Auth::Config.sign_in_input, required: true
10
10
  argument :device_token, String, description: 'Device token for notification', required: false
11
11
 
12
- def resolve(args)
13
- # TODO: define logic inside repository
14
- repo = ::AuthRepository.new(nil, normalize_params(args))
15
- user = repo.sign_in
12
+ def resolve(_args)
13
+ raise ActionController::InvalidAuthenticityToken, I18n.t('ibrain.errors.account.incorrect') if auth_resource.blank?
16
14
 
17
- raise ActionController::InvalidAuthenticityToken, I18n.t('ibrain.errors.account.incorrect') if user.blank?
18
-
19
- sign_in(resource_name, user)
15
+ sign_in(resource_name, auth_resource)
20
16
  @current_user = warden.authenticate!(auth_options)
21
17
 
22
18
  warden.set_user(current_user)
23
- current_user.jwt_token, jti = auth_headers(request, user)
24
-
19
+ current_user.jwt_token, jti = auth_headers(request, auth_resource)
25
20
  current_user.jti = jti
26
21
  current_user.save!
27
22
 
28
- if args[:device_token].present?
29
- device_token = current_user.device_tokens.find_by(token: args[:device_token])
30
-
31
- current_user.device_tokens.create!({ token: args[:device_token] }) if device_token.blank?
23
+ if params[:device_token].present?
24
+ device_token = current_user.device_tokens.find_by(token: params[:device_token])
25
+ current_user.device_tokens.create!({ token: params[:device_token] }) if device_token.blank?
32
26
  end
33
27
 
34
28
  context[:current_user] = current_user
35
29
 
36
- OpenStruct.new(
37
- user: user_signed_in? ? current_user : nil,
38
- token: current_user.try(:jwt_token),
39
- result: user_signed_in?
30
+ graphql_returning(
31
+ user_signed_in?,
32
+ user_signed_in? ? current_user : nil,
33
+ current_user.try(:jwt_token)
40
34
  )
41
35
  end
42
36
 
43
37
  private
44
38
 
45
- def normalize_params(args)
46
- args[:auth].to_params
39
+ def load_resource
40
+ repo.sign_in
41
+ end
42
+
43
+ def repo
44
+ ::AuthRepository.new(nil, normalize_parameters)
45
+ end
46
+
47
+ def normalize_parameters
48
+ attribute_params
47
49
  rescue StandardError
48
50
  ActionController::Parameters.new({})
49
51
  end
@@ -51,5 +53,13 @@ module Ibrain::Auth::Mutations
51
53
  def auth_options
52
54
  { scope: resource_name }
53
55
  end
56
+
57
+ def graphql_returning(result, user = nil, token = nil)
58
+ OpenStruct.new(
59
+ user: user,
60
+ token: token,
61
+ result: result
62
+ )
63
+ end
54
64
  end
55
65
  end
@@ -6,21 +6,18 @@ module Ibrain::Auth::Mutations
6
6
  field :token, String, null: true
7
7
  field :result, Boolean, null: true
8
8
 
9
- argument :user, Ibrain::Auth::Config.sign_up_input, required: true
9
+ argument :attributes, Ibrain::Auth::Config.sign_up_input, required: true
10
10
  argument :device_token, String, description: 'Device token for notificaiton', required: false
11
11
 
12
12
  def resolve(args)
13
13
  # TODO: define logic inside repository
14
- repo = ::AuthRepository.new(nil, normalize_params(args))
15
- user = repo.sign_up
14
+ return graphql_returning(false, false) if auth_resource.blank?
16
15
 
17
- return OpenStruct.new({ user: nil, token: nil, result: false, is_verified: false }) if user.blank?
18
-
19
- sign_in(resource_name, user)
16
+ sign_in(resource_name, auth_resource)
20
17
  @current_user = warden.authenticate!(auth_options)
21
18
 
22
19
  warden.set_user(current_user)
23
- current_user.jwt_token, jti = auth_headers(request, user)
20
+ current_user.jwt_token, jti = auth_headers(request, auth_resource)
24
21
 
25
22
  current_user.jti = jti
26
23
  current_user.save!
@@ -33,18 +30,26 @@ module Ibrain::Auth::Mutations
33
30
 
34
31
  context[:current_user] = current_user
35
32
 
36
- OpenStruct.new(
37
- user: user_signed_in? ? current_user : nil,
38
- token: current_user.try(:jwt_token),
39
- result: user_signed_in?,
40
- is_verified: true
33
+ graphql_returning(
34
+ user_signed_in?,
35
+ true,
36
+ user_signed_in? ? current_user : nil,
37
+ current_user.try(:jwt_token),
41
38
  )
42
39
  end
43
40
 
44
41
  private
45
42
 
46
- def normalize_params(args)
47
- args[:user].to_params
43
+ def load_resource
44
+ repo.sign_up
45
+ end
46
+
47
+ def repo
48
+ ::AuthRepository.new(nil, normalize_parameters)
49
+ end
50
+
51
+ def normalize_parameters
52
+ attribute_params
48
53
  rescue StandardError
49
54
  ActionController::Parameters.new({})
50
55
  end
@@ -52,5 +57,14 @@ module Ibrain::Auth::Mutations
52
57
  def auth_options
53
58
  { scope: resource_name }
54
59
  end
60
+
61
+ def graphql_returning(result, is_verified, user = nil, token = nil)
62
+ OpenStruct.new(
63
+ user: user,
64
+ token: token,
65
+ result: result,
66
+ is_verified: is_verified
67
+ )
68
+ end
55
69
  end
56
70
  end
@@ -3,10 +3,10 @@
3
3
  module Ibrain
4
4
  module Auth
5
5
  class User < Ibrain::Base
6
- include Devise::JWT::RevocationStrategies::JTIMatcher
7
-
8
6
  attr_accessor :jwt_token
9
7
 
8
+ include Devise::JWT::RevocationStrategies::JTIMatcher
9
+
10
10
  self.table_name = Ibrain::Auth::Config.user_table_name
11
11
 
12
12
  devise :database_authenticatable, :registerable,
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AppleRepository < Ibrain::BaseRepository
4
+ def initialize(record, params)
5
+ super(nil, record)
6
+
7
+ @params = params
8
+ @collection = Ibrain.user_class
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TwitterRepository < Ibrain::BaseRepository
4
+ def initialize(record, params)
5
+ super(nil, record)
6
+
7
+ @params = params
8
+ @collection = Ibrain.user_class
9
+ end
10
+ end
data/config/routes.rb CHANGED
@@ -3,7 +3,8 @@
3
3
  Ibrain::Core::Engine.routes.draw do
4
4
  devise_for :users, controllers: {
5
5
  sessions: "ibrain/auth/sessions",
6
- registrations: "ibrain/auth/registrations"
6
+ registrations: "ibrain/auth/registrations",
7
+ callback: "ibrain/auth/sessions/callback"
7
8
  },
8
9
  path: "api/#{Ibrain::Config.api_version}/users",
9
10
  defaults: { format: :json }
@@ -6,6 +6,7 @@ module Ibrain
6
6
  module Auth
7
7
  class InstallGenerator < Rails::Generators::Base
8
8
  class_option :with_ridgepole, type: :boolean, default: true
9
+ class_option :with_social, type: :boolean, default: false
9
10
 
10
11
  def self.source_paths
11
12
  paths = superclass.source_paths
@@ -18,6 +19,10 @@ module Ibrain
18
19
  template 'config/initializers/ibrain_auth.rb.tt', 'config/initializers/ibrain_auth.rb', { skip: true }
19
20
  template 'config/initializers/ibrain_jwt.rb.tt', 'config/initializers/ibrain_jwt.rb', { skip: true }
20
21
 
22
+ if options[:with_social]
23
+ template 'config/initializers/omniauth.rb.tt', 'config/initializers/omniauth.rb', { skip: true }
24
+ end
25
+
21
26
  if options[:with_ridgepole]
22
27
  template 'db/schemas/users_schema.erb', 'db/schemas/users.schema', { skip: true }
23
28
  else
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ Rails.application.config.middleware.use OmniAuth::Builder do
4
+ # For twitter authenticate
5
+ # provider :twitter, ENV['TWITTER_CLIENT_ID'], ENV['TWITTER_CLIENT_SECRET']
6
+
7
+ # For line authenticate
8
+ # provider :line, ENV['LINE_CLIENT_ID'], ENV['LINE_CLIENT_SECRET']
9
+
10
+ # For apple authenticate
11
+ # provider :apple, ENV['APPLE_CLIENT_ID'], ENV['APPLE_CLIENT_SECRET']
12
+ end
@@ -4,14 +4,14 @@ module Ibrain
4
4
  # frozen_string_literal: true
5
5
 
6
6
  module Auth
7
- VERSION = '0.2.2'
7
+ VERSION = '0.2.5'
8
8
 
9
9
  def self.ibrain_auth_version
10
10
  VERSION
11
11
  end
12
12
 
13
13
  def self.previous_ibrain_auth_minor_version
14
- '0.2.1'
14
+ '0.2.4'
15
15
  end
16
16
 
17
17
  def self.ibrain_auth_gem_version
data/lib/ibrain/auth.rb CHANGED
@@ -3,6 +3,8 @@
3
3
  require 'devise'
4
4
  require 'devise-encryptable'
5
5
  require 'devise/jwt'
6
+ require 'omniauth'
7
+ require 'omniauth-twitter'
6
8
  require 'ibrain_core'
7
9
 
8
10
  require 'ibrain/auth/devise'
metadata CHANGED
@@ -1,119 +1,183 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ibrain-auth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tai Nguyen Van
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-31 00:00:00.000000000 Z
11
+ date: 2022-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: devise
14
+ name: devise-encryptable
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 4.8.0
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 4.8.0
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: devise-encryptable
28
+ name: devise-i18n
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.2.0
33
+ version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 0.2.0
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: devise-i18n
42
+ name: devise-jwt
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 1.10.1
47
+ version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 1.10.1
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: devise-jwt
56
+ name: ibrain-core
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 0.9.0
61
+ version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 0.9.0
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: ibrain-core
70
+ name: rails
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 0.3.0
75
+ version: '0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 0.3.0
82
+ version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rails
84
+ name: warden-jwt_auth
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 0.6.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
88
95
  - !ruby/object:Gem::Version
89
- version: 6.1.4
96
+ version: 0.6.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: omniauth
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
90
101
  - - ">="
91
102
  - !ruby/object:Gem::Version
92
- version: 6.1.4.1
103
+ version: '0'
93
104
  type: :runtime
94
105
  prerelease: false
95
106
  version_requirements: !ruby/object:Gem::Requirement
96
107
  requirements:
97
- - - "~>"
108
+ - - ">="
98
109
  - !ruby/object:Gem::Version
99
- version: 6.1.4
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: omniauth-apple
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
100
115
  - - ">="
101
116
  - !ruby/object:Gem::Version
102
- version: 6.1.4.1
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
103
125
  - !ruby/object:Gem::Dependency
104
- name: omniauth
126
+ name: omniauth-facebook
105
127
  requirement: !ruby/object:Gem::Requirement
106
128
  requirements:
107
- - - "~>"
129
+ - - ">="
108
130
  - !ruby/object:Gem::Version
109
- version: 2.0.4
131
+ version: '0'
110
132
  type: :runtime
111
133
  prerelease: false
112
134
  version_requirements: !ruby/object:Gem::Requirement
113
135
  requirements:
114
- - - "~>"
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: omniauth-google-oauth2
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: omniauth-line
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: omniauth-twitter
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
115
179
  - !ruby/object:Gem::Version
116
- version: 2.0.4
180
+ version: '0'
117
181
  description: Its Auth is an sso authen gem for Ruby on Rails.
118
182
  email:
119
183
  - john@techfox.io
@@ -138,7 +202,9 @@ files:
138
202
  - app/graphql/ibrain/auth/types/input/sign_in_input.rb
139
203
  - app/graphql/ibrain/auth/types/input/sign_up_input.rb
140
204
  - app/models/ibrain/auth/user.rb
205
+ - app/repositories/apple_repository.rb
141
206
  - app/repositories/auth_repository.rb
207
+ - app/repositories/twitter_repository.rb
142
208
  - config/initializers/devise.rb
143
209
  - config/locales/en.yml
144
210
  - config/locales/jp.yml
@@ -148,6 +214,7 @@ files:
148
214
  - lib/generators/ibrain/auth/install/templates/config/initializers/devise.rb.tt
149
215
  - lib/generators/ibrain/auth/install/templates/config/initializers/ibrain_auth.rb.tt
150
216
  - lib/generators/ibrain/auth/install/templates/config/initializers/ibrain_jwt.rb.tt
217
+ - lib/generators/ibrain/auth/install/templates/config/initializers/omniauth.rb.tt
151
218
  - lib/generators/ibrain/auth/install/templates/db/schemas/users_migrate.erb
152
219
  - lib/generators/ibrain/auth/install/templates/db/schemas/users_schema.erb
153
220
  - lib/ibrain/auth.rb
@@ -179,7 +246,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
179
246
  - !ruby/object:Gem::Version
180
247
  version: '0'
181
248
  requirements: []
182
- rubygems_version: 3.2.22
249
+ rubygems_version: 3.3.20
183
250
  signing_key:
184
251
  specification_version: 4
185
252
  summary: Its Auth is an sso authen gem for Ruby on Rails.