apple_id 0.4.0 → 1.1.0

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: '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