apple_id 0.4.0 → 1.1.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: '018fb2f186c24595a953c2fe8e79c9091fcf83d10915b701dac91021dacfc04b'
4
- data.tar.gz: a8b6bf32091ff20b60779551469a383f09ccf90d736ea1004046a9a635f993d2
3
+ metadata.gz: 1c660f0576768bf567a75575fc413a2edd9e1c805de1af2853be8fb6a04eeceb
4
+ data.tar.gz: '07494d150bfa11e09cf8216b2bb46b6686869ac8164baad467651fdedcd4b7ca'
5
5
  SHA512:
6
- metadata.gz: 195ae7e87dff57ca72ee84be036a2a5927c9fdb7cbd9fa2f48e3a7421a0a9d77cd9ef7a042e1c567cdfff8f72305d9623889fade86a18b3939c2d0ba1efb7d32
7
- data.tar.gz: acbc83c4ceb9c38e18db63b66a55855b96a26ca1b01f208cc7258bcb4c582487026c35bbe8b0446b0d8d0118c575b0201b7aab77b74e4d48f3b89bf83bc5d46c
6
+ metadata.gz: 13ede95f09ed940bd443001b63cc5fb3fc038c6d0e176f7d6ad52427325ec1764e5ec8eabcb38e94e7c6069f59c354c8be0947397bd29c55cd814734b024ee83
7
+ data.tar.gz: c8e8695d746b5a5431f45b0241530d2a49af18402e5f0f24924acd191eaac269e4a690e9998c4b5962905b89b3db98481900a75a3ced992aa3d95d3a35e5b8d6
@@ -4,6 +4,6 @@ language: ruby
4
4
  cache: bundler
5
5
  before_install: gem install bundler
6
6
  rvm:
7
- - 2.4.6
8
- - 2.5.5
9
- - 2.6.2
7
+ - 2.5.8
8
+ - 2.6.6
9
+ - 2.7.1
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 1.1.0
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_runtime_dependency 'rack-oauth2', '~> 1.10'
21
+ spec.add_runtime_dependency 'rack-oauth2', '~> 1.12'
22
22
  spec.add_runtime_dependency 'openid_connect', '~> 1.1.7'
23
23
  spec.add_development_dependency 'bundler'
24
24
  spec.add_development_dependency 'rake'
@@ -54,3 +54,5 @@ end
54
54
  require 'apple_id/client'
55
55
  require 'apple_id/access_token'
56
56
  require 'apple_id/id_token'
57
+ require 'apple_id/jwks'
58
+ require 'apple_id/api/user_migration'
@@ -1,6 +1,7 @@
1
1
  module AppleID
2
2
  class AccessToken < OpenIDConnect::AccessToken
3
3
  undef_required_attributes :client
4
+ attr_optional :client
4
5
 
5
6
  def initialize(access_token, attributes = {})
6
7
  super attributes.merge(access_token: access_token)
@@ -0,0 +1,36 @@
1
+ module AppleID
2
+ module API
3
+ module UserMigration
4
+ def transfer_from!(transfer_sub:)
5
+ resource_request do
6
+ post(
7
+ user_migration_endpoint,
8
+ transfer_sub: transfer_sub,
9
+ client_id: client.identifier,
10
+ client_secret: client.secret
11
+ )
12
+ end
13
+ end
14
+
15
+ def transfer_to!(sub:, target:)
16
+ resource_request do
17
+ post(
18
+ user_migration_endpoint,
19
+ sub: sub,
20
+ target: client.team_id,
21
+ client_id: client.identifier,
22
+ client_secret: client.secret
23
+ )
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def user_migration_endpoint
30
+ File.join(ISSUER, '/auth/usermigrationinfo')
31
+ end
32
+ end
33
+
34
+ AccessToken.include UserMigration
35
+ end
36
+ end
@@ -40,7 +40,7 @@ module AppleID
40
40
 
41
41
  def handle_success_response(response)
42
42
  token_hash = JSON.parse(response.body).with_indifferent_access
43
- AccessToken.new token_hash.delete(:access_token), token_hash
43
+ AccessToken.new token_hash.delete(:access_token), token_hash.merge(client: self)
44
44
  end
45
45
 
46
46
  def handle_error_response(response)
@@ -34,15 +34,8 @@ module AppleID
34
34
 
35
35
  private
36
36
 
37
- def jwks
38
- @jwks ||= JSON.parse(
39
- OpenIDConnect.http_client.get_content(JWKS_URI)
40
- ).with_indifferent_access
41
- JSON::JWK::Set.new @jwks[:keys]
42
- end
43
-
44
37
  def verify_signature!
45
- original_jwt.verify! jwks
38
+ original_jwt.verify! JWKS.fetch(original_jwt.kid)
46
39
  rescue
47
40
  raise VerificationFailed, 'Signature Verification Failed'
48
41
  end
@@ -0,0 +1,27 @@
1
+ module AppleID
2
+ class JWKS < JSON::JWK::Set
3
+ class Cache
4
+ def fetch(cache_key)
5
+ yield
6
+ end
7
+ end
8
+
9
+ def self.cache=(cache)
10
+ @@cache = cache
11
+ end
12
+ def self.cache
13
+ @@cache
14
+ end
15
+ self.cache = Cache.new
16
+
17
+ def self.fetch(cache_key)
18
+ jwks = cache.fetch("apple_id:jwks:#{cache_key}") do
19
+ new(
20
+ JSON.parse(
21
+ OpenIDConnect.http_client.get_content(JWKS_URI)
22
+ ).with_indifferent_access[:keys]
23
+ )
24
+ end
25
+ end
26
+ end
27
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apple_id
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - nov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-25 00:00:00.000000000 Z
11
+ date: 2020-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack-oauth2
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.10'
19
+ version: '1.12'
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: '1.10'
26
+ version: '1.12'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: openid_connect
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -143,8 +143,10 @@ files:
143
143
  - bin/setup
144
144
  - lib/apple_id.rb
145
145
  - lib/apple_id/access_token.rb
146
+ - lib/apple_id/api/user_migration.rb
146
147
  - lib/apple_id/client.rb
147
148
  - lib/apple_id/id_token.rb
149
+ - lib/apple_id/jwks.rb
148
150
  homepage: https://github.com/nov/apple_id
149
151
  licenses:
150
152
  - MIT