ibrain-auth 0.2.1 → 0.2.4

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: d25f3bfd1d29801c8b5673f6103149f6202d21d522a1b65175ebf9f59334fb58
4
- data.tar.gz: 0a8f9c8c3cd38bcb6a72a329f421e5c291f0d7db7cf020b253928c9427ca9c81
3
+ metadata.gz: fbd79a8f9a3704ee91db11e78b78894991b517d86956a8787b1b494ed8b0c21b
4
+ data.tar.gz: a781b4afeda9073308eff768fa8fe9401dd14670c019a8b7ee5fc5ba36b796b5
5
5
  SHA512:
6
- metadata.gz: 7dac3e301b88e1e368e2f346e79fb10a74f15fd36170172a2324f14181c981a67faa6205363271dcd5146049d63b1d8eef36e640523cfb7ee397e8c2f88c21a9
7
- data.tar.gz: 40a6744264df1133f5ce8efdd0f16f39938f9c22aa7a28e6cbed35ed6a713d9d55620a416fadbd41a4dbc287a0776ca60b28fb607f1583c67584868723eff5f3
6
+ metadata.gz: 87a2246dc66f90bdba08265ca39e2d496c404ddeea69751dcd6a9d8ca30d1bc94938ad427fc5e1ab680b395f8385695fa7d481f1a484364d20f53950037699f5
7
+ data.tar.gz: eca7f37db46b319ccb3d31857739597b0a4685938197401bb9f272d93dff9d1b14d6b41781d37a89eb20c01bda5347574006169202247910833a9974d5f386f0
@@ -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,13 @@ module Ibrain::Auth::Mutations
11
11
 
12
12
  helper_method(*helpers)
13
13
 
14
+ def ready?(args)
15
+ super(args)
16
+
17
+ @auth_resource = load_resource
18
+ true
19
+ end
20
+
14
21
  # Override prefixes to consider the scoped view.
15
22
  # Notice we need to check for the request due to a bug in
16
23
  # Action Controller tests that forces _prefixes to be
@@ -28,6 +35,8 @@ module Ibrain::Auth::Mutations
28
35
 
29
36
  protected
30
37
 
38
+ attr_reader :auth_resource
39
+
31
40
  def auth_headers(headers, user, scope: nil, aud: nil)
32
41
  scope ||= Devise::Mapping.find_scope!(user)
33
42
  aud ||= headers[Warden::JWTAuth.config.aud_header]
@@ -198,6 +207,10 @@ module Ibrain::Auth::Mutations
198
207
  params.fetch(resource_name, {})
199
208
  end
200
209
 
210
+ def repo; end
211
+ def load_resource; end
212
+ def normalize_parameters; end
213
+
201
214
  ActiveSupport.run_load_hooks(:devise_controller, self)
202
215
  end
203
216
  end
@@ -6,48 +6,60 @@ 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
- ActionController::Parameters.new({ auth: args })
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
49
+ rescue StandardError
50
+ ActionController::Parameters.new({})
47
51
  end
48
52
 
49
53
  def auth_options
50
54
  { scope: resource_name }
51
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
52
64
  end
53
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,22 +30,41 @@ 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
- ActionController::Parameters.new({ auth: args })
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
53
+ rescue StandardError
54
+ ActionController::Parameters.new({})
48
55
  end
49
56
 
50
57
  def auth_options
51
58
  { scope: resource_name }
52
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
53
69
  end
54
70
  end
@@ -45,7 +45,9 @@ module Ibrain::Auth::Mutations
45
45
  private
46
46
 
47
47
  def normalize_params(args)
48
- ActionController::Parameters.new({ auth: args })
48
+ ActionController::Parameters.new(args.as_json)
49
+ rescue StandardError
50
+ ActionController::Parameters.new({})
49
51
  end
50
52
 
51
53
  def auth_options
@@ -45,7 +45,9 @@ module Ibrain::Auth::Mutations
45
45
  private
46
46
 
47
47
  def normalize_params(args)
48
- ActionController::Parameters.new({ auth: args })
48
+ ActionController::Parameters.new(args.as_json)
49
+ rescue StandardError
50
+ ActionController::Parameters.new({})
49
51
  end
50
52
 
51
53
  def auth_options
@@ -0,0 +1,8 @@
1
+ class AppleRepository < Ibrain::BaseRepository
2
+ def initialize(record, params)
3
+ super(nil, record)
4
+
5
+ @params = params
6
+ @collection = Ibrain.user_class
7
+ end
8
+ end
@@ -50,11 +50,11 @@ class AuthRepository < Ibrain::BaseRepository
50
50
  end
51
51
 
52
52
  def normalize_params
53
- params.require(:auth).permit(permitted_attributes)
53
+ params.permit(permitted_attributes)
54
54
  end
55
55
 
56
56
  def manual_params
57
- params.require(:auth).permit(:username, :password)
57
+ params.permit(:username, :password)
58
58
  end
59
59
 
60
60
  def sso_verify
@@ -84,7 +84,7 @@ class AuthRepository < Ibrain::BaseRepository
84
84
  reset_password_token reset_password_sent_at
85
85
  remember_created_at sign_in_count uid jti
86
86
  current_sign_in_at last_sign_in_at current_sign_in_ip
87
- last_sign_in_ip role encrypted_password
87
+ last_sign_in_ip role encrypted_password id_token
88
88
  ]
89
89
  end
90
90
  end
@@ -0,0 +1,8 @@
1
+ class TwitterRepository < Ibrain::BaseRepository
2
+ def initialize(record, params)
3
+ super(nil, record)
4
+
5
+ @params = params
6
+ @collection = Ibrain.user_class
7
+ end
8
+ 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
@@ -17,6 +18,10 @@ module Ibrain
17
18
  template 'config/initializers/devise.rb.tt', 'config/initializers/devise.rb', { skip: true }
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 }
21
+
22
+ if options[:with_social]
23
+ template 'config/initializers/omniauth.rb.tt', 'config/initializers/omniauth.rb', { skip: true }
24
+ end
20
25
 
21
26
  if options[:with_ridgepole]
22
27
  template 'db/schemas/users_schema.erb', 'db/schemas/users.schema', { skip: true }
@@ -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.1'
7
+ VERSION = '0.2.4'
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.1.0'
14
+ '0.2.3'
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'
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative '../../app/graphql/ibrain/auth/types/input/sign_in_input.rb'
4
+ require_relative '../../app/graphql/ibrain/auth/types/input/sign_up_input.rb'
5
+
3
6
  module Ibrain
4
7
  class AuthConfiguration < Preferences::Configuration
5
8
  preference :api_version, :string, default: 'v1'
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.1
4
+ version: 0.2.4
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-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: devise
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
28
  name: devise-encryptable
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
42
  name: devise-i18n
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
56
  name: devise-jwt
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
70
  name: ibrain-core
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
84
  name: rails
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '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'
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-twitter
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-line
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-facebook
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-google-oauth2
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-apple
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.