ibrain-auth 0.3.7 → 0.3.8
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 +4 -4
- data/app/controllers/ibrain/social_callbacks_controller.rb +58 -0
- data/app/graphql/ibrain/{auth/mutations/base_mutation.rb → mutations/auth_mutation.rb} +2 -2
- data/app/graphql/ibrain/{auth/mutations → mutations}/generate_firebase_token_mutation.rb +3 -3
- data/app/graphql/ibrain/{auth/mutations → mutations}/sign_in_mutation.rb +2 -2
- data/app/graphql/ibrain/{auth/mutations → mutations}/sign_out_mutation.rb +2 -2
- data/app/graphql/ibrain/{auth/mutations → mutations}/sign_up_mutation.rb +2 -2
- data/app/graphql/ibrain/{auth/mutations → mutations}/social_sign_in_mutation.rb +23 -17
- data/app/graphql/ibrain/types/input/generate_firebase_token_input.rb +11 -0
- data/app/graphql/ibrain/types/input/sign_in_input.rb +12 -0
- data/app/graphql/ibrain/types/input/sign_up_input.rb +17 -0
- data/app/graphql/ibrain/types/input/social_login_input.rb +11 -0
- data/app/graphql/ibrain/types/input/social_sign_in_input.rb +11 -0
- data/app/models/ibrain/user.rb +76 -0
- data/app/repositories/apple_repository.rb +17 -0
- data/app/repositories/auth_repository.rb +1 -1
- data/config/routes.rb +11 -7
- data/{app/controllers/ibrain/auth/confirmations_controller.rb → lib/controllers/ibrain/user_confirmations_controller.rb} +1 -1
- data/{app/controllers/ibrain/auth/passwords_controller.rb → lib/controllers/ibrain/user_passwords_controller.rb} +1 -1
- data/{app/controllers/ibrain/auth/registrations_controller.rb → lib/controllers/ibrain/user_registrations_controller.rb} +1 -1
- data/{app/controllers/ibrain/auth/sessions_controller.rb → lib/controllers/ibrain/user_sessions_controller.rb} +5 -1
- data/{app/controllers/ibrain/auth/unlocks_controller.rb → lib/controllers/ibrain/user_unlocks_controller.rb} +1 -1
- data/lib/generators/ibrain/auth/install/templates/config/initializers/ibrain_auth.rb.tt +3 -3
- data/lib/generators/ibrain/auth/install/templates/config/initializers/omniauth.rb.tt +14 -1
- data/lib/ibrain/auth/version.rb +1 -1
- data/lib/ibrain/auth_configuration.rb +3 -3
- data/lib/ibrain_auth.rb +7 -1
- metadata +35 -18
- data/app/graphql/ibrain/auth/types/input/generate_firebase_token_input.rb +0 -13
- data/app/graphql/ibrain/auth/types/input/sign_in_input.rb +0 -14
- data/app/graphql/ibrain/auth/types/input/sign_up_input.rb +0 -19
- data/app/graphql/ibrain/auth/types/input/social_sign_in_input.rb +0 -13
- data/app/models/ibrain/auth/user.rb +0 -73
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e53c7a067d83daed1106f84e91ef43c2bfa2bf9c0dd93f28975bea0797cd03c1
|
4
|
+
data.tar.gz: b53fc7d477909ea0f0b77929e3cfd611e96ef5acbb6520185d284f98a0f3de4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f8dd526a1cabb900427a717807e284f01d6252846938a8462f3eee694619d519380f657f75903e0943919acdacaf307176dc5b808d1578154e1f7aadbaebd27
|
7
|
+
data.tar.gz: 8b38d0ce05fae155ea22e05429670b5446105d4faa36a500159833f579a2402e9d9cc243c8aadbedc38f3a684af5ef9c10c2a6b201e1e2f500ea1f60d23560c9
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Ibrain::SocialCallbacksController < Devise::OmniauthCallbacksController
|
4
|
+
include ActionController::Helpers
|
5
|
+
include Ibrain::Core::ControllerHelpers::Response
|
6
|
+
include ActionController::MimeResponds
|
7
|
+
|
8
|
+
def instagram
|
9
|
+
generic_callback( 'instagram' )
|
10
|
+
end
|
11
|
+
|
12
|
+
def facebook
|
13
|
+
generic_callback( 'facebook' )
|
14
|
+
end
|
15
|
+
|
16
|
+
def twitter
|
17
|
+
generic_callback( 'twitter' )
|
18
|
+
end
|
19
|
+
|
20
|
+
def google_oauth2
|
21
|
+
generic_callback( 'google_oauth2' )
|
22
|
+
end
|
23
|
+
|
24
|
+
def apple
|
25
|
+
generic_callback( 'apple' )
|
26
|
+
end
|
27
|
+
|
28
|
+
def line
|
29
|
+
generic_callback( 'line' )
|
30
|
+
end
|
31
|
+
|
32
|
+
def create
|
33
|
+
user = line_repo.find_or_initialize!
|
34
|
+
|
35
|
+
render_json_ok(user, nil)
|
36
|
+
end
|
37
|
+
|
38
|
+
def new_user_session(*args)
|
39
|
+
new_session(*args)
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def repo
|
45
|
+
AuthRepository.new(resource, params)
|
46
|
+
end
|
47
|
+
|
48
|
+
def line_repo
|
49
|
+
LineRepository.new(resource, request.env['omniauth.auth'])
|
50
|
+
end
|
51
|
+
|
52
|
+
def apple_repo
|
53
|
+
AppleRepository.new(resource, request.env['omniauth.auth'])
|
54
|
+
end
|
55
|
+
|
56
|
+
def generic_callback( provider )
|
57
|
+
end
|
58
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module Ibrain::
|
4
|
-
class
|
3
|
+
module Ibrain::Mutations
|
4
|
+
class AuthMutation < Ibrain::Mutations::BaseMutation
|
5
5
|
include ActionController::Helpers
|
6
6
|
include Devise::Controllers::ScopedViews
|
7
7
|
include Devise::Controllers::Helpers
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module Ibrain::
|
4
|
-
class GenerateFirebaseTokenMutation <
|
3
|
+
module Ibrain::Mutations
|
4
|
+
class GenerateFirebaseTokenMutation < AuthMutation
|
5
5
|
field :result, Boolean, null: true
|
6
6
|
field :token, String, null: true
|
7
7
|
|
8
|
-
argument :attributes, ::Ibrain::
|
8
|
+
argument :attributes, ::Ibrain::Types::Input::GenerateFirebaseTokenInput, required: true
|
9
9
|
|
10
10
|
def resolve(_args)
|
11
11
|
token = repo.generate_custom_token!
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module Ibrain::
|
4
|
-
class SignInMutation <
|
3
|
+
module Ibrain::Mutations
|
4
|
+
class SignInMutation < AuthMutation
|
5
5
|
field :user, Types::Objects::UserType, null: true
|
6
6
|
field :token, String, null: true
|
7
7
|
field :result, Boolean, null: true
|
@@ -1,17 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module Ibrain::
|
4
|
-
class SocialSignInMutation <
|
3
|
+
module Ibrain::Mutations
|
4
|
+
class SocialSignInMutation < AuthMutation
|
5
5
|
field :user, Types::Objects::UserType, null: true
|
6
6
|
field :token, String, null: true
|
7
7
|
field :result, Boolean, null: true
|
8
|
-
field :is_verified, Boolean, null: true
|
9
8
|
|
10
9
|
argument :attributes, Ibrain::Auth::Config.social_sign_in_input, required: true
|
11
|
-
argument :device_token, String, description: 'Device token for
|
10
|
+
argument :device_token, String, description: 'Device token for notification', required: false
|
12
11
|
|
13
|
-
def resolve(
|
14
|
-
return
|
12
|
+
def resolve(_args)
|
13
|
+
return graphql_returning(false) if auth_resource.blank?
|
15
14
|
|
16
15
|
auth_resource.skip_confirmation! unless auth_resource.try(:confirmed?)
|
17
16
|
sign_in(resource_name, auth_resource)
|
@@ -30,16 +29,23 @@ module Ibrain::Auth::Mutations
|
|
30
29
|
|
31
30
|
context[:current_user] = current_user
|
32
31
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
is_verified: true
|
32
|
+
graphql_returning(
|
33
|
+
user_signed_in?,
|
34
|
+
user_signed_in? ? current_user : nil,
|
35
|
+
current_user.try(:jwt_token)
|
38
36
|
)
|
39
37
|
end
|
40
38
|
|
41
39
|
private
|
42
40
|
|
41
|
+
def load_resource
|
42
|
+
repo.sign_in
|
43
|
+
end
|
44
|
+
|
45
|
+
def repo
|
46
|
+
::AuthRepository.new(nil, normalize_parameters)
|
47
|
+
end
|
48
|
+
|
43
49
|
def normalize_parameters
|
44
50
|
attribute_params
|
45
51
|
rescue StandardError
|
@@ -50,12 +56,12 @@ module Ibrain::Auth::Mutations
|
|
50
56
|
{ scope: resource_name }
|
51
57
|
end
|
52
58
|
|
53
|
-
def
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
+
def graphql_returning(result, user = nil, token = nil)
|
60
|
+
OpenStruct.new(
|
61
|
+
user: user,
|
62
|
+
token: token,
|
63
|
+
result: result
|
64
|
+
)
|
59
65
|
end
|
60
66
|
end
|
61
67
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ibrain
|
4
|
+
module Types
|
5
|
+
module Input
|
6
|
+
class SignUpInput < Ibrain::Types::BaseInputObject
|
7
|
+
argument :first_name, String, required: false
|
8
|
+
argument :last_name, String, required: false
|
9
|
+
argument :email, String, required: false
|
10
|
+
argument :phone, String, required: false
|
11
|
+
argument :job_id, ID, required: false
|
12
|
+
argument :address, String, required: false
|
13
|
+
argument :password, String, required: false
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ibrain
|
4
|
+
class User < Ibrain::Base
|
5
|
+
attr_accessor :jwt_token
|
6
|
+
|
7
|
+
include Devise::JWT::RevocationStrategies::JTIMatcher
|
8
|
+
|
9
|
+
self.abstract_class = true
|
10
|
+
self.table_name = Ibrain::Auth::Config.user_table_name
|
11
|
+
|
12
|
+
devise :database_authenticatable, :registerable, :confirmable,
|
13
|
+
:recoverable, :validatable, :timeoutable, :omniauthable,
|
14
|
+
:jwt_authenticatable, jwt_revocation_strategy: self,
|
15
|
+
omniauth_providers: %i[apple facebook twitter line]
|
16
|
+
|
17
|
+
scope :find_by_line, ->(uid) {
|
18
|
+
find_by(uid: uid, provider: 'line')
|
19
|
+
}
|
20
|
+
|
21
|
+
scope :find_by_apple, ->(uid) {
|
22
|
+
find_by(uid: uid, provider: 'apple')
|
23
|
+
}
|
24
|
+
|
25
|
+
def jwt_payload
|
26
|
+
# for hasura
|
27
|
+
hasura_keys = {
|
28
|
+
'https://hasura.io/jwt/claims': {
|
29
|
+
'x-hasura-allowed-roles': Ibrain.user_class.roles.keys,
|
30
|
+
'x-hasura-default-role': role,
|
31
|
+
'x-hasura-user-id': id.to_s
|
32
|
+
}
|
33
|
+
}
|
34
|
+
|
35
|
+
super.merge({ 'role' => role }, hasura_keys)
|
36
|
+
end
|
37
|
+
|
38
|
+
def can_skip_confirmation?
|
39
|
+
try(:is_admin?) || email.blank?
|
40
|
+
end
|
41
|
+
|
42
|
+
class << self
|
43
|
+
def ibrain_find(params, available_columns)
|
44
|
+
matched_value = params[:username] || params[:email]
|
45
|
+
|
46
|
+
if matched_value.present?
|
47
|
+
query = available_columns.map do |column_name|
|
48
|
+
<<~RUBY
|
49
|
+
#{column_name} = '#{matched_value}'
|
50
|
+
RUBY
|
51
|
+
end.join(' OR ')
|
52
|
+
|
53
|
+
where(query).first
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def social_find_or_initialize(params)
|
58
|
+
user = find_by(provider: params[:provider], uid: params[:uid])
|
59
|
+
return user if user.present?
|
60
|
+
|
61
|
+
create!(params)
|
62
|
+
end
|
63
|
+
|
64
|
+
def create_with_line!(params)
|
65
|
+
user = created!({
|
66
|
+
uid: params['uid'],
|
67
|
+
provider: 'line',
|
68
|
+
remote_avatar_url: params['info']['image']
|
69
|
+
})
|
70
|
+
|
71
|
+
user.skip_confirmation! unless user&.confirmed?
|
72
|
+
user
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,17 @@
|
|
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
|
+
|
11
|
+
def find_or_initialize!
|
12
|
+
user = @collection.find_by_apple(uid: params['uid'])
|
13
|
+
return user if user.present?
|
14
|
+
|
15
|
+
@collection.create_with_line!
|
16
|
+
end
|
17
|
+
end
|
@@ -66,7 +66,7 @@ class AuthRepository < Ibrain::BaseRepository
|
|
66
66
|
try(:fetch, 'providerUserInfo', []).
|
67
67
|
try(:at, 0).try(:fetch, 'providerId', '').
|
68
68
|
try(:gsub, '.com', '')
|
69
|
-
raise
|
69
|
+
raise ActionController::InvalidAuthenticityToken, I18n.t('ibrain.errors.account.not_found') if uid.blank?
|
70
70
|
|
71
71
|
collection.social_find_or_initialize({
|
72
72
|
uid: uid,
|
data/config/routes.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
Ibrain::Auth::Engine.routes.draw do
|
4
|
-
devise_for
|
5
|
-
|
6
|
-
|
4
|
+
devise_for(:users, {
|
5
|
+
class_name: 'Ibrain::User',
|
6
|
+
controllers: {
|
7
|
+
sessions: 'ibrain/user_sessions',
|
8
|
+
registrations: 'ibrain/user_registrations',
|
9
|
+
passwords: 'ibrain/user_passwords',
|
10
|
+
confirmations: 'ibrain/user_confirmations',
|
11
|
+
omniauth_callbacks: 'ibrain/social_callbacks'
|
7
12
|
},
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
get "api/#{Ibrain::Config.api_version}/users/callback" => 'sessions#callback'
|
13
|
+
skip: [:unlocks],
|
14
|
+
path_prefix: "api/#{Ibrain::Config.api_version}"
|
15
|
+
})
|
12
16
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
class Ibrain::
|
3
|
+
class Ibrain::UserRegistrationsController < Devise::RegistrationsController
|
4
4
|
# before_action :configure_sign_up_params, only: [:create]
|
5
5
|
# before_action :configure_account_update_params, only: [:update]
|
6
6
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
class Ibrain::
|
3
|
+
class Ibrain::UserSessionsController < Devise::SessionsController
|
4
4
|
include ActionController::Helpers
|
5
5
|
include Ibrain::Core::ControllerHelpers::Response
|
6
6
|
include ActionController::MimeResponds
|
@@ -51,4 +51,8 @@ class Ibrain::Auth::SessionsController < Devise::SessionsController
|
|
51
51
|
def line_repo
|
52
52
|
LineRepository.new(resource, request.env['omniauth.auth'])
|
53
53
|
end
|
54
|
+
|
55
|
+
def apple_repo
|
56
|
+
AppleRepository.new(resource, request.env['omniauth.auth'])
|
57
|
+
end
|
54
58
|
end
|
@@ -12,10 +12,10 @@ Ibrain::Auth.config do |config|
|
|
12
12
|
config.user_table_name = 'ibrain_users'
|
13
13
|
|
14
14
|
# sign_up graphql input
|
15
|
-
config.sign_up_input = Ibrain::
|
15
|
+
config.sign_up_input = Ibrain::Types::Input::SignUpInput
|
16
16
|
|
17
17
|
# sign_in graphql input
|
18
|
-
config.sign_up_input = Ibrain::
|
18
|
+
config.sign_up_input = Ibrain::Types::Input::SignInInput
|
19
19
|
|
20
20
|
# firebase private json path
|
21
21
|
config.firebase_private_key_path = Rails.root.join('static/firebase.json')
|
@@ -27,5 +27,5 @@ Ibrain::Auth.config do |config|
|
|
27
27
|
config.firebase_owner_email = nil
|
28
28
|
|
29
29
|
# social sign_in input
|
30
|
-
config.social_sign_in_input = Ibrain::
|
30
|
+
config.social_sign_in_input = Ibrain::Types::Input::SocialSignInInput
|
31
31
|
end
|
@@ -8,5 +8,18 @@ Rails.application.config.middleware.use OmniAuth::Builder do
|
|
8
8
|
# provider :line, ENV['LINE_CLIENT_ID'], ENV['LINE_CLIENT_SECRET']
|
9
9
|
|
10
10
|
# For apple authenticate
|
11
|
-
# provider :apple, ENV['APPLE_CLIENT_ID'],
|
11
|
+
# provider :apple, ENV['APPLE_CLIENT_ID'], '',
|
12
|
+
# {
|
13
|
+
# scope: 'email name',
|
14
|
+
# team_id: ENV['APPLE_TEAM_ID'],
|
15
|
+
# key_id: ENV['APPLE_KEY_ID'],
|
16
|
+
# pem: ENV['APPLE_PRIVATE_KEY']
|
17
|
+
# }
|
18
|
+
|
19
|
+
# For facebook
|
20
|
+
# provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET'] scope: 'public_profile,email',
|
21
|
+
info_fields: 'email,first_name,last_name,gender,birthday,location,picture',
|
22
|
+
|
23
|
+
# For google
|
24
|
+
# provider :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET']
|
12
25
|
end
|
data/lib/ibrain/auth/version.rb
CHANGED
@@ -13,10 +13,10 @@ module Ibrain
|
|
13
13
|
preference :user_table_name, :string, default: 'ibrain_users'
|
14
14
|
|
15
15
|
# sign_up input
|
16
|
-
preference :sign_up_input, :class, default: Ibrain::
|
16
|
+
preference :sign_up_input, :class, default: Ibrain::Types::Input::SignUpInput
|
17
17
|
|
18
18
|
# sign_in input
|
19
|
-
preference :sign_in_input, :class, default: Ibrain::
|
19
|
+
preference :sign_in_input, :class, default: Ibrain::Types::Input::SignInInput
|
20
20
|
|
21
21
|
# firebase private json path
|
22
22
|
preference :firebase_private_key_path, :string, default: Rails.root.join('static/firebase.json')
|
@@ -27,6 +27,6 @@ module Ibrain
|
|
27
27
|
# firebase owner email
|
28
28
|
preference :firebase_owner_email, :string, default: nil
|
29
29
|
|
30
|
-
preference :social_sign_in_input, :class, default: Ibrain::
|
30
|
+
preference :social_sign_in_input, :class, default: Ibrain::Types::Input::SocialSignInInput
|
31
31
|
end
|
32
32
|
end
|
data/lib/ibrain_auth.rb
CHANGED
@@ -1,3 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "zeitwerk"
|
4
|
+
loader = Zeitwerk::Loader.new
|
5
|
+
loader.tag = File.basename(__FILE__, ".rb")
|
6
|
+
loader.inflector = Zeitwerk::GemInflector.new(__FILE__)
|
7
|
+
loader.enable_reloading
|
8
|
+
loader.setup
|
9
|
+
loader.reload
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ibrain-auth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.8
|
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-12-
|
11
|
+
date: 2022-12-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: devise
|
@@ -178,6 +178,20 @@ dependencies:
|
|
178
178
|
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: omniauth-rails_csrf_protection
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
181
195
|
- !ruby/object:Gem::Dependency
|
182
196
|
name: omniauth-twitter
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -202,22 +216,20 @@ files:
|
|
202
216
|
- MIT-LICENSE
|
203
217
|
- README.md
|
204
218
|
- Rakefile
|
205
|
-
- app/controllers/ibrain/
|
206
|
-
- app/
|
207
|
-
- app/
|
208
|
-
- app/
|
209
|
-
- app/
|
210
|
-
- app/graphql/ibrain/
|
211
|
-
- app/graphql/ibrain/
|
212
|
-
- app/graphql/ibrain/
|
213
|
-
- app/graphql/ibrain/
|
214
|
-
- app/graphql/ibrain/
|
215
|
-
- app/graphql/ibrain/
|
216
|
-
- app/graphql/ibrain/
|
217
|
-
- app/
|
218
|
-
- app/
|
219
|
-
- app/graphql/ibrain/auth/types/input/social_sign_in_input.rb
|
220
|
-
- app/models/ibrain/auth/user.rb
|
219
|
+
- app/controllers/ibrain/social_callbacks_controller.rb
|
220
|
+
- app/graphql/ibrain/mutations/auth_mutation.rb
|
221
|
+
- app/graphql/ibrain/mutations/generate_firebase_token_mutation.rb
|
222
|
+
- app/graphql/ibrain/mutations/sign_in_mutation.rb
|
223
|
+
- app/graphql/ibrain/mutations/sign_out_mutation.rb
|
224
|
+
- app/graphql/ibrain/mutations/sign_up_mutation.rb
|
225
|
+
- app/graphql/ibrain/mutations/social_sign_in_mutation.rb
|
226
|
+
- app/graphql/ibrain/types/input/generate_firebase_token_input.rb
|
227
|
+
- app/graphql/ibrain/types/input/sign_in_input.rb
|
228
|
+
- app/graphql/ibrain/types/input/sign_up_input.rb
|
229
|
+
- app/graphql/ibrain/types/input/social_login_input.rb
|
230
|
+
- app/graphql/ibrain/types/input/social_sign_in_input.rb
|
231
|
+
- app/models/ibrain/user.rb
|
232
|
+
- app/repositories/apple_repository.rb
|
221
233
|
- app/repositories/auth_repository.rb
|
222
234
|
- app/repositories/firebase_repository.rb
|
223
235
|
- app/repositories/line_repository.rb
|
@@ -226,6 +238,11 @@ files:
|
|
226
238
|
- config/locales/ja.yml
|
227
239
|
- config/locales/vi.yml
|
228
240
|
- config/routes.rb
|
241
|
+
- lib/controllers/ibrain/user_confirmations_controller.rb
|
242
|
+
- lib/controllers/ibrain/user_passwords_controller.rb
|
243
|
+
- lib/controllers/ibrain/user_registrations_controller.rb
|
244
|
+
- lib/controllers/ibrain/user_sessions_controller.rb
|
245
|
+
- lib/controllers/ibrain/user_unlocks_controller.rb
|
229
246
|
- lib/generators/ibrain/auth/install/install_generator.rb
|
230
247
|
- lib/generators/ibrain/auth/install/templates/config/initializers/devise.rb.tt
|
231
248
|
- lib/generators/ibrain/auth/install/templates/config/initializers/ibrain_auth.rb.tt
|
@@ -1,14 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Ibrain
|
4
|
-
module Auth
|
5
|
-
module Types
|
6
|
-
module Input
|
7
|
-
class SignInInput < Ibrain::Types::BaseInputObject
|
8
|
-
argument :username, String, required: true
|
9
|
-
argument :password, String, required: true
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Ibrain
|
4
|
-
module Auth
|
5
|
-
module Types
|
6
|
-
module Input
|
7
|
-
class SignUpInput < Ibrain::Types::BaseInputObject
|
8
|
-
argument :first_name, String, required: false
|
9
|
-
argument :last_name, String, required: false
|
10
|
-
argument :email, String, required: false
|
11
|
-
argument :phone, String, required: false
|
12
|
-
argument :job_id, ID, required: false
|
13
|
-
argument :address, String, required: false
|
14
|
-
argument :password, String, required: false
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Ibrain
|
4
|
-
module Auth
|
5
|
-
module Types
|
6
|
-
module Input
|
7
|
-
class SocialSignInInput < Ibrain::Types::BaseInputObject
|
8
|
-
argument :id_token, String, description: 'Id Token from firebase', required: true
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,73 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Ibrain
|
4
|
-
module Auth
|
5
|
-
class User < Ibrain::Base
|
6
|
-
attr_accessor :jwt_token
|
7
|
-
|
8
|
-
include Devise::JWT::RevocationStrategies::JTIMatcher
|
9
|
-
|
10
|
-
self.abstract_class = true
|
11
|
-
self.table_name = Ibrain::Auth::Config.user_table_name
|
12
|
-
|
13
|
-
devise :database_authenticatable, :registerable, :confirmable,
|
14
|
-
:recoverable, :validatable, :timeoutable,
|
15
|
-
:jwt_authenticatable, jwt_revocation_strategy: self
|
16
|
-
|
17
|
-
scope :find_by_line, ->(uid) {
|
18
|
-
find_by(uid: uid, provider: 'line')
|
19
|
-
}
|
20
|
-
|
21
|
-
def jwt_payload
|
22
|
-
# for hasura
|
23
|
-
hasura_keys = {
|
24
|
-
'https://hasura.io/jwt/claims': {
|
25
|
-
'x-hasura-allowed-roles': Ibrain.user_class.roles.keys,
|
26
|
-
'x-hasura-default-role': role,
|
27
|
-
'x-hasura-user-id': id.to_s
|
28
|
-
}
|
29
|
-
}
|
30
|
-
|
31
|
-
super.merge({ 'role' => role }, hasura_keys)
|
32
|
-
end
|
33
|
-
|
34
|
-
def can_skip_confirmation?
|
35
|
-
try(:is_admin?) || email.blank?
|
36
|
-
end
|
37
|
-
|
38
|
-
class << self
|
39
|
-
def ibrain_find(params, available_columns)
|
40
|
-
matched_value = params[:username] || params[:email]
|
41
|
-
|
42
|
-
if matched_value.present?
|
43
|
-
query = available_columns.map do |column_name|
|
44
|
-
<<~RUBY
|
45
|
-
#{column_name} = '#{matched_value}'
|
46
|
-
RUBY
|
47
|
-
end.join(' OR ')
|
48
|
-
|
49
|
-
where(query).first
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def social_find_or_initialize(params)
|
54
|
-
user = find_by(provider: params[:provider], uid: params[:uid])
|
55
|
-
return user if user.present?
|
56
|
-
|
57
|
-
create!(params)
|
58
|
-
end
|
59
|
-
|
60
|
-
def create_with_line!(params)
|
61
|
-
user = created!({
|
62
|
-
uid: params['uid'],
|
63
|
-
provider: 'line',
|
64
|
-
remote_avatar_url: params['info']['image']
|
65
|
-
})
|
66
|
-
|
67
|
-
user.skip_confirmation! unless user&.confirmed?
|
68
|
-
user
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|