apple_id 1.0.0 → 1.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: 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