firebase-auth-id_token_keeper 0.1.1 → 0.2.0

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: 9788905a37d9079fe4b06072e7971256b3fb3a755bf93d4865daa57c9331929b
4
- data.tar.gz: 421a110d3a665a3e7a714a04a120de4e99cb2689a50d88bc6ee5c37c66ab43dd
3
+ metadata.gz: 3b54959ace13bc7c20d267f3479311115a1c8b79c1d98d07de5486da0f3e1329
4
+ data.tar.gz: a6d1ee1877bb6db27f8093efa0a94f1dfccf90954a071ea3cbf58a625e241128
5
5
  SHA512:
6
- metadata.gz: 1f9b82094cd0ecd478cebb6df0ff995d2fb79e7d2b7a97e5e4ada740da56cbcf412d30826b544a96447321e508b9aa88d941c7ce9b96803dcabb3e39477c6182
7
- data.tar.gz: c6ab11dbafbcb958945f402b65dbe6608b2c069772527b6f975033c6fababffb5c73ea089a54599e067e17e8aa5edc7de36295e43d420b2e837383cd861217a5
6
+ metadata.gz: e5c1024769e1fae108c4c0f0610342b867ae9a8c8e878a469ed18a6e91e3c3843fa2f4033c2406c58980ef8bf527bd3ade3287ac14a1462c0ade5e25cf5b1c46
7
+ data.tar.gz: 5e04d018ea3fe0fbd120b45df7de1abac4f068dca8b5bea0125d14ead395e9b8650861edcb2ecc06c926a36a0620240aba1fdc151d2ef1f23e138cdb9bac8be4
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.gem
data/README.md CHANGED
@@ -1,8 +1,89 @@
1
1
  # Firebase::Auth::IDTokenKeeper
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/firebase/auth/id_token_keeper`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ ## Errors
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ ### Response body
6
+
7
+ ```json
8
+ {
9
+ "error": "<message>"
10
+ }
11
+ ```
12
+
13
+ ### Type
14
+
15
+ - `JWT::ExpiredSignature`
16
+ - code: 401
17
+ - message: "Signature has expired."
18
+ - You should refresh your token on the client side.
19
+ - `JWT::DecodeError`
20
+ - code: 401
21
+ - message: "Invalid JWT format."
22
+ - You should send JWT with valid format.
23
+
24
+
25
+ ## Test
26
+
27
+ We provide test id token generate method.
28
+
29
+ It can use like this.
30
+
31
+ ```ruby
32
+ decoded_jwt = {
33
+ "iss"=>"https://example.com/project-id",
34
+ "name"=>"Test Example",
35
+ "picture"=>"https://example.com",
36
+ "aud"=>"project-id",
37
+ "auth_time"=>1535353624,
38
+ "user_id"=>"badcd9971aa1ba6a46bf3379db78",
39
+ "sub"=>"teyOh0wMQyZQboYCW18wammaFkH2",
40
+ "iat"=>1535353624,
41
+ "exp"=>1535357224,
42
+ "email"=>"test.example@example.com",
43
+ "email_verified"=>false,
44
+ "firebase"=>{"identities"=>{"github.com"=>["xxxxxx"], "email"=>["test.example@example.com"]}, "sign_in_provider"=>"github.com"}
45
+ }
46
+
47
+ encoded_jwt = Firebase::Auth::IDTokenKeeper::Testing.generate_test_id_token(decoded_jwt)
48
+ # => "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJpc3MiOiJodHRwczovL2V4YW1wbGUuY29tL3Byb2plY3QtaWQiLCJuYW1lIjoiVGVzdCBFeGFtcGxlIiwicGljdHVyZSI6Imh0dHBzOi8vZXhhbXBsZS5jb20iLCJhdWQiOiJwcm9qZWN0LWlkIiwiYXV0aF90aW1lIjoxNTM1MzUzNjI0LCJ1c2VyX2lkIjoiYmFkY2Q5OTcxYWExYmE2YTQ2YmYzMzc5ZGI3OCIsInN1YiI6InRleU9oMHdNUXlaUWJvWUNXMTh3YW1tYUZrSDIiLCJpYXQiOjE1MzUzNTM2MjQsImV4cCI6MTUzNTM1NzIyNCwiZW1haWwiOiJ0ZXN0LmV4YW1wbGVAZXhhbXBsZS5jb20iLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImZpcmViYXNlIjp7ImlkZW50aXRpZXMiOnsiZ2l0aHViLmNvbSI6WyJ4eHh4eHgiXSwiZW1haWwiOlsidGVzdC5leGFtcGxlQGV4YW1wbGUuY29tIl19LCJzaWduX2luX3Byb3ZpZGVyIjoiZ2l0aHViLmNvbSJ9fQ."
49
+
50
+ Firebase::Auth::IDTokenKeeper::Testing.decode_test_id_token(encoded_jwt)
51
+ # => {
52
+ # "iss"=>"https://example.com/project-id",
53
+ # "name"=>"Test Example",
54
+ # "picture"=>"https://example.com",
55
+ # "aud"=>"project-id",
56
+ # "auth_time"=>1535353624,
57
+ # "user_id"=>"badcd9971aa1ba6a46bf3379db78",
58
+ # "sub"=>"teyOh0wMQyZQboYCW18wammaFkH2",
59
+ # "iat"=>1535353624,
60
+ # "exp"=>1535357224,
61
+ # "email"=>"test.example@example.com",
62
+ # "email_verified"=>false,
63
+ # "firebase"=>{"identities"=>{"github.com"=>["xxxxxx"], "email"=>["test.example@example.com"]}, "sign_in_provider"=>"github.com"}
64
+ # }
65
+ ```
66
+
67
+ ### For RSpec
68
+
69
+ Make a support file `spec/support/firebase_auth_id_token_keeper.rb` which contains following code.
70
+
71
+ ```ruby
72
+ RSpec.configure do |config|
73
+ config.include Firebase::Auth::IDTokenKeeper::Test::Helpers, type: :request
74
+ end
75
+ ```
76
+
77
+ Load the support file in your `spec/rails_helper.rb`.
78
+
79
+ ```ruby
80
+ ...
81
+ # Add additional requires below this line. Rails is not loaded until this point!
82
+ require 'support/firebase_auth_id_token_keeper'
83
+ ...
84
+ ```
85
+
86
+ Now, we can decode test ID Token which is generated via `Firebase::Auth::IDTokenKeeper::Testing.generate_test_id_token` method in `Firebase::Auth::IDTokenKeeper::IDToken#verified_id_token` method.
6
87
 
7
88
  ## Installation
8
89
 
@@ -73,6 +73,8 @@ module Firebase
73
73
 
74
74
  def decoded_jwt
75
75
  @decoded_jwt ||= JWT.decode(encoded_jwt, nil, false, { algorithm: FIREBASE_ALGORITHM })
76
+ rescue JWT::DecodeError => e
77
+ raise 'Invalid JWT format.'
76
78
  end
77
79
 
78
80
  def jwt_header
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Firebase
4
+ module Auth
5
+ module IDTokenKeeper
6
+ module Testing
7
+
8
+ def self.generate_test_id_token(decoded_jwt)
9
+ JWT.encode(decoded_jwt, nil, 'none')
10
+ end
11
+
12
+ def self.decode_test_id_token(encoded_jwt)
13
+ JWT.decode(encoded_jwt, nil, false)
14
+ end
15
+
16
+ module Helpers
17
+ extend ActiveSupport::Concern
18
+
19
+ ::Firebase::Auth::IDTokenKeeper::IDToken.class_eval do
20
+ def verified_id_token
21
+ ::Firebase::Auth::IDTokenKeeper::Testing.decode_test_id_token(encoded_jwt)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+
@@ -1,7 +1,7 @@
1
1
  module Firebase
2
2
  module Auth
3
3
  module IDTokenKeeper
4
- VERSION = '0.1.1'
4
+ VERSION = '0.2.0'
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: firebase-auth-id_token_keeper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rui Onodera
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-15 00:00:00.000000000 Z
11
+ date: 2018-08-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jwt
@@ -88,6 +88,7 @@ executables: []
88
88
  extensions: []
89
89
  extra_rdoc_files: []
90
90
  files:
91
+ - ".gitignore"
91
92
  - CODE_OF_CONDUCT.md
92
93
  - Gemfile
93
94
  - Gemfile.lock
@@ -101,6 +102,7 @@ files:
101
102
  - lib/firebase/auth/id_token_keeper/config.rb
102
103
  - lib/firebase/auth/id_token_keeper/id_token.rb
103
104
  - lib/firebase/auth/id_token_keeper/public_keys_endpoint.rb
105
+ - lib/firebase/auth/id_token_keeper/testing.rb
104
106
  - lib/firebase/auth/id_token_keeper/version.rb
105
107
  - lib/generators/firebase/auth/id_token_keeper/install_generator.rb
106
108
  - lib/generators/firebase/auth/id_token_keeper/templates/firebase_auth_id_token_keeper.rb