apple_id 1.0.0 → 1.2.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: 0e9aeb4597a1a98ef66341021c5587910e618d8b3ad37e355c44abf2a9105803
4
- data.tar.gz: 312203fe9cf4ce80ed4b48cff8a024d7a83c03b0b7fda6b9895b9203a83efcd1
3
+ metadata.gz: 8f1661521a859bf390a20f26adc70587b74e8443d11af6f887d44b72a858423e
4
+ data.tar.gz: 883584d2104c9de4d4ccbb2fe82501d24a08a299f0b9c64dc9f7c3358cf4f96c
5
5
  SHA512:
6
- metadata.gz: 48e60bc4416e5516576b1e61386a72e40e27bc905e026d84444c247dfe1d226b6855abc0157a0955f90847d818c93cf7b33aab5fe8266214c1917ecf89502a04
7
- data.tar.gz: 71d120ad10a5179b6925b7014cc37758a238b63544594f21bfec4bd49bca1cd4510fda334a7f7b6590e572e1f56b8cb43967000304ebbcf2edd2721d47f44f81
6
+ metadata.gz: 61905204b8ae74d331a34ae379993a8d0c2de9419c65893adc76386bb8253dda24fb5dedda5fda73c090e6b65d4e522622849565de9912d2c28777d96898793c
7
+ data.tar.gz: cc07894558b23bb8fdd453d35069d69af2cd31eeda3465b57cd5efd654962cc1a978af2da942dae33ff009018a9340412b8e5c10376afae8ca670cbbb1677f67
data/.travis.yml CHANGED
@@ -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.2
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.2.0
data/apple_id.gemspec CHANGED
@@ -18,8 +18,8 @@ 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.12'
22
- spec.add_runtime_dependency 'openid_connect', '~> 1.1.7'
21
+ spec.add_runtime_dependency 'rack-oauth2', '~> 1.19'
22
+ spec.add_runtime_dependency 'openid_connect', '~> 1.3.0'
23
23
  spec.add_development_dependency 'bundler'
24
24
  spec.add_development_dependency 'rake'
25
25
  spec.add_development_dependency 'rspec'
@@ -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)
@@ -0,0 +1,27 @@
1
+ module AppleID
2
+ class IdToken::RealUserStatus
3
+ class UndefinedStatus < StandardError; end
4
+
5
+ attr_accessor :value
6
+
7
+ STATUSES = [
8
+ :unsupported,
9
+ :unknown,
10
+ :likely_real
11
+ ]
12
+
13
+ def initialize(value)
14
+ self.value = value
15
+ end
16
+
17
+ STATUSES.each do |expected_status|
18
+ define_method :"#{expected_status}?" do
19
+ send(:status) == expected_status
20
+ end
21
+ end
22
+
23
+ def status
24
+ STATUSES[value] or raise UndefinedStatus
25
+ end
26
+ end
27
+ end
@@ -2,7 +2,7 @@ module AppleID
2
2
  class IdToken < OpenIDConnect::ResponseObject::IdToken
3
3
  class VerificationFailed < StandardError; end
4
4
 
5
- attr_optional :email, :email_verified, :is_private_email, :nonce_supported
5
+ attr_optional :email, :email_verified, :is_private_email, :nonce_supported, :real_user_status
6
6
  attr_accessor :original_jwt_string
7
7
  alias_method :original_jwt, :raw_attributes
8
8
 
@@ -18,6 +18,13 @@ module AppleID
18
18
  end
19
19
  end
20
20
 
21
+ def initialize(attributes = {})
22
+ super
23
+ unless self.real_user_status.nil?
24
+ self.real_user_status = RealUserStatus.new(self.real_user_status)
25
+ end
26
+ end
27
+
21
28
  def verify!(verify_signature: true, client: nil, nonce: nil, state: nil, access_token: nil, code: nil)
22
29
  verify_signature! if verify_signature
23
30
  verify_claims! client, nonce, state, access_token, code
@@ -35,7 +42,7 @@ module AppleID
35
42
  private
36
43
 
37
44
  def verify_signature!
38
- original_jwt.verify! AppleID::JWKS.fetch(original_jwt.kid)
45
+ original_jwt.verify! JWKS.fetch(original_jwt.kid)
39
46
  rescue
40
47
  raise VerificationFailed, 'Signature Verification Failed'
41
48
  end
data/lib/apple_id/jwks.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module AppleID
2
- class JWKS
2
+ class JWKS < JSON::JWK::Set
3
3
  class Cache
4
4
  def fetch(cache_key)
5
5
  yield
@@ -16,7 +16,7 @@ module AppleID
16
16
 
17
17
  def self.fetch(cache_key)
18
18
  jwks = cache.fetch("apple_id:jwks:#{cache_key}") do
19
- JSON::JWK::Set.new(
19
+ new(
20
20
  JSON.parse(
21
21
  OpenIDConnect.http_client.get_content(JWKS_URI)
22
22
  ).with_indifferent_access[:keys]
data/lib/apple_id.rb CHANGED
@@ -54,4 +54,6 @@ 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/id_token/real_user_status'
57
58
  require 'apple_id/jwks'
59
+ require 'apple_id/api/user_migration'
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: 1.0.0
4
+ version: 1.2.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-05-16 00:00:00.000000000 Z
11
+ date: 2021-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack-oauth2
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.12'
19
+ version: '1.19'
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.12'
26
+ version: '1.19'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: openid_connect
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.1.7
33
+ version: 1.3.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.1.7
40
+ version: 1.3.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  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/id_token/real_user_status.rb
148
150
  - lib/apple_id/jwks.rb
149
151
  homepage: https://github.com/nov/apple_id
150
152
  licenses:
@@ -165,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
165
167
  - !ruby/object:Gem::Version
166
168
  version: '0'
167
169
  requirements: []
168
- rubygems_version: 3.0.3
170
+ rubygems_version: 3.1.4
169
171
  signing_key:
170
172
  specification_version: 4
171
173
  summary: Sign-in with Apple Backend