ibrain-auth 0.2.6 → 0.2.7

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
2
  SHA256:
3
- metadata.gz: 6f6effd595af545581f20acbc9fd7c50c8758fdf471075a001c96cc2d6741490
4
- data.tar.gz: 7171e0aa32520f98085c44baad66941dc5a74efecf28275dc52be6aadb2c8b01
3
+ metadata.gz: 9deb56fb20025aafc070789b5bfa07422ed6d101c176d02650222e9a79b32736
4
+ data.tar.gz: 466ef586478d5c5643982d369a85da485601dcaec871b32a7bf7423e089d141b
5
5
  SHA512:
6
- metadata.gz: 838a3e121f20c914e33118a04e68017f4927a4107d7863d7b9b69e817bab43352742ccc98ed4fb22e0ee72a5282ae38243c4349aa986e11ad0bb62f33cc8394a
7
- data.tar.gz: 39e411cf62805c44c6376bcc8152ec26121a03601e94ac444f4370059e77f7a4213965c1d3c754e83a7c9b69617b1b83030f6c269ae57350f7c0698a038483e2
6
+ metadata.gz: 3d92287766c4a26ee54357eb4f966ac4a51a0417228a2f8ba47f779eff4b316e2821f637863be06c18460a5ce2150fe062150653dfc9c3f3a66a567b98a623f0
7
+ data.tar.gz: 5a20e97b2e6a721f592c8cb4b0a27624c430a4a18e1bb80406328d42efc6ef1e9d787af93564767e17e728992efe8b0cc361840efae12d5353d09058ff6bd6f8
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ibrain::Auth::Mutations
4
+ class GenerateFirebaseTokenMutation < BaseMutation
5
+ field :result, Boolean, null: true
6
+ field :token, String, null: true
7
+
8
+ argument :attributes, ::Ibrain::Auth::Types::Input::GenerateFirebaseTokenInput, required: true
9
+
10
+ def resolve(_args)
11
+ token = repo.generate_custom_token!
12
+
13
+ graphql_returning(token)
14
+ end
15
+
16
+ private
17
+
18
+ def normalize_parameters
19
+ attribute_params.permit(:uid)
20
+ rescue StandardError
21
+ ActionController::Parameters.new({})
22
+ end
23
+
24
+ def repo
25
+ ::FirebaseRepository.new(nil, normalize_parameters)
26
+ end
27
+
28
+ def graphql_returning(token)
29
+ OpenStruct.new(
30
+ token: token,
31
+ result: true
32
+ )
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ibrain
4
+ module Auth
5
+ module Types
6
+ module Input
7
+ class GenerateFirebaseTokenInput < Ibrain::Types::BaseInputObject
8
+ argument :uid, String, required: true
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ class FirebaseRepository < Ibrain::BaseRepository
4
+ def initialize(record, _params)
5
+ super(nil, record)
6
+
7
+ @private_key_json = File.open(Ibrain::Auth::Config.firebase_private_key_path).read
8
+ @firebase_owner_email = Ibrain::Auth::Config.firebase_owner_email
9
+ end
10
+
11
+ def generate_custom_token!
12
+ now = Time.now.to_i
13
+
14
+ payload = {
15
+ iss: firebase_owner_email,
16
+ sub: firebase_owner_email,
17
+ aud: Ibrain::Auth::Config.firebase_aud_url,
18
+ iat: now,
19
+ exp: now + 3600,
20
+ uid: params[:uid],
21
+ claims: {}
22
+ }
23
+
24
+ JWT.encode payload, private_key, "RS256"
25
+ end
26
+
27
+ private
28
+
29
+ attr_reader :private_key_json, :firebase_owner_email
30
+
31
+ def method_name
32
+ end
33
+
34
+ def json_firebase
35
+ JSON.parse(private_key_json, symbolize_names: true)
36
+ end
37
+
38
+ def private_key
39
+ OpenSSL::PKey::RSA.new json_firebase[:private_key]
40
+ end
41
+ end
@@ -16,4 +16,13 @@ Ibrain::Auth.config do |config|
16
16
 
17
17
  # sign_in graphql input
18
18
  config.sign_up_input = Ibrain::Auth::Types::Input::SignInInput
19
+
20
+ # firebase private json path
21
+ config.firebase_private_key_path = Rails.root.join('static/firebase.json')
22
+
23
+ # firebase aud url
24
+ config.firebase_auth_url = "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit"
25
+
26
+ # firebase owner email
27
+ config.firebase_owner_email = nil
19
28
  end
@@ -4,14 +4,14 @@ module Ibrain
4
4
  # frozen_string_literal: true
5
5
 
6
6
  module Auth
7
- VERSION = '0.2.6'
7
+ VERSION = '0.2.7'
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.5'
14
+ '0.2.6'
15
15
  end
16
16
 
17
17
  def self.ibrain_auth_gem_version
@@ -17,5 +17,14 @@ module Ibrain
17
17
 
18
18
  # sign_in input
19
19
  preference :sign_in_input, :class, default: Ibrain::Auth::Types::Input::SignInInput
20
+
21
+ # firebase private json path
22
+ preference :firebase_private_key_path, :string, default: Rails.root.join('static/firebase.json')
23
+
24
+ # firebase aud url
25
+ preference :firebase_auth_url, :string, default: "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit"
26
+
27
+ # firebase owner email
28
+ preference :firebase_owner_email, :string, default: nil
20
29
  end
21
30
  end
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.2.6
4
+ version: 0.2.7
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-09-30 00:00:00.000000000 Z
11
+ date: 2022-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: devise-encryptable
@@ -194,15 +194,18 @@ files:
194
194
  - app/controllers/ibrain/auth/sessions_controller.rb
195
195
  - app/controllers/ibrain/auth/unlocks_controller.rb
196
196
  - app/graphql/ibrain/auth/mutations/base_mutation.rb
197
+ - app/graphql/ibrain/auth/mutations/generate_firebase_token_mutation.rb
197
198
  - app/graphql/ibrain/auth/mutations/sign_in_mutation.rb
198
199
  - app/graphql/ibrain/auth/mutations/sign_out_mutation.rb
199
200
  - app/graphql/ibrain/auth/mutations/sign_up_mutation.rb
200
201
  - app/graphql/ibrain/auth/mutations/social_sign_in_mutation.rb
202
+ - app/graphql/ibrain/auth/types/input/generate_firebase_token_input.rb
201
203
  - app/graphql/ibrain/auth/types/input/sign_in_input.rb
202
204
  - app/graphql/ibrain/auth/types/input/sign_up_input.rb
203
205
  - app/models/ibrain/auth/user.rb
204
206
  - app/repositories/apple_repository.rb
205
207
  - app/repositories/auth_repository.rb
208
+ - app/repositories/firebase_repository.rb
206
209
  - app/repositories/twitter_repository.rb
207
210
  - config/initializers/devise.rb
208
211
  - config/locales/en.yml
@@ -245,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
245
248
  - !ruby/object:Gem::Version
246
249
  version: '0'
247
250
  requirements: []
248
- rubygems_version: 3.3.7
251
+ rubygems_version: 3.2.22
249
252
  signing_key:
250
253
  specification_version: 4
251
254
  summary: Its Auth is an sso authen gem for Ruby on Rails.