volcano-sdk 0.9.1 → 0.9.2

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: 9c502d5485b551f8308988375a3b89d581b46ef42af03143898afc583395cc0b
4
- data.tar.gz: 336f60885935dd30f4ff6886505095f90bfb4d9c7c7b1f572e5511b53e824897
3
+ metadata.gz: 92b94c10570347e736103b57ee437cf54d72ca334a8e87f3528087655fd80e78
4
+ data.tar.gz: 68c2e41eac585bc12ee2086c5574431136de600236737e820224b88579ca91ca
5
5
  SHA512:
6
- metadata.gz: 7849ada9eaa8cf569961c5a4b750c33610ff46ff0914321a753e09ff2b3b5f969b9879c11db7014199f2e31ba61052b45fa67ef61603b4fa7e427f9857628f84
7
- data.tar.gz: 782fbaf15537f564c4349cea3f206c63857b95f8e1b919203784f0e4963a0e31a0ce9739ac10011336847e84e9137b69232379acd96d9ee9e1d8218b14e5c1a1
6
+ metadata.gz: 76a68bc5ba09715be91401c60e8b7183f75450907e51d9b9fc1a0437d262538de69c8b22ab78f184ff0b3cb57f267a8bf45efd8f29c8669b2c82a0a655a95806
7
+ data.tar.gz: 1b055512555848049b55205e62fb9b60b126f333469d3c9eef8d09712201136c03dc70e93fe2cb2f67b388f6902f5dd4df8b76da7618c54ccfb9d9bb2ac3625e
data/lib/volcano/auth.rb CHANGED
@@ -33,6 +33,15 @@ module Volcano
33
33
 
34
34
  private
35
35
 
36
+ def session_payload(status, decode: nil)
37
+ binding = @client.capture_session_binding
38
+ request = yield
39
+ payload = Transport.body(session_request(binding: binding, &request), status)
40
+ result = decode ? send(decode, payload) : payload
41
+ owned_session_binding(binding)
42
+ result
43
+ end
44
+
36
45
  def sign_in_for_generation(email:, password:, generation:)
37
46
  raise Error::SessionChangedError unless @client.capture_session.first == generation
38
47
 
@@ -7,22 +7,15 @@ module Volcano
7
7
  private_constant :INVALID_EMAIL_CHANGE_RESULT
8
8
 
9
9
  def request_email_change(new_email:)
10
- generation, current = @client.capture_session
11
- raise Error::AuthenticationError, 'No active session' unless current
12
-
13
- payload = Transport.body(email_change_response(current.access_token, new_email), 200)
14
- result = email_change_result(payload)
15
- raise Error::SessionChangedError unless @client.capture_session.first == generation
16
-
17
- result
10
+ session_payload(200, decode: :email_change_result) do
11
+ request_email = new_email.dup.freeze
12
+ ->(token) { email_change_response(token, request_email) }
13
+ end
18
14
  end
19
15
 
20
16
  def cancel_email_change
21
- generation, current = @client.capture_session
22
- raise Error::AuthenticationError, 'No active session' unless current
23
-
24
- Transport.body(cancel_email_change_response(current.access_token), 200)
25
- raise Error::SessionChangedError unless @client.capture_session.first == generation
17
+ session_payload(200) { ->(token) { cancel_email_change_response(token) } }
18
+ nil
26
19
  end
27
20
 
28
21
  def confirm_email_change(token:)
@@ -7,35 +7,22 @@ module Volcano
7
7
  private_constant :OAUTH_PROVIDERS
8
8
 
9
9
  def list_linked_oauth_providers
10
- generation, current = @client.capture_session
11
- raise Error::AuthenticationError, 'No active session' unless current
12
-
13
- body = Transport.body(list_oauth_providers_response(current.access_token), 200)
14
- result = linked_oauth_providers(body)
15
- raise Error::SessionChangedError unless @client.capture_session.first == generation
16
-
17
- result
10
+ session_payload(200, decode: :linked_oauth_providers) { ->(token) { list_oauth_providers_response(token) } }
18
11
  end
19
12
 
20
13
  def link_oauth_provider(provider)
21
- provider_name = oauth_provider_name(provider)
22
- generation, current = @client.capture_session
23
- raise Error::AuthenticationError, 'No active session' unless current
24
-
25
- body = Transport.body(link_oauth_provider_response(current.access_token, provider_name), 200)
26
- result = oauth_authorization_url(body)
27
- raise Error::SessionChangedError unless @client.capture_session.first == generation
28
-
29
- result
14
+ session_payload(200, decode: :oauth_authorization_url) do
15
+ provider_name = oauth_provider_name(provider)
16
+ ->(token) { link_oauth_provider_response(token, provider_name) }
17
+ end
30
18
  end
31
19
 
32
20
  def unlink_oauth_provider(provider)
33
- provider_name = oauth_provider_name(provider)
34
- generation, current = @client.capture_session
35
- raise Error::AuthenticationError, 'No active session' unless current
36
-
37
- Transport.body(unlink_oauth_provider_response(current.access_token, provider_name), 204)
38
- raise Error::SessionChangedError unless @client.capture_session.first == generation
21
+ session_payload(204) do
22
+ provider_name = oauth_provider_name(provider)
23
+ ->(token) { unlink_oauth_provider_response(token, provider_name) }
24
+ end
25
+ nil
39
26
  end
40
27
 
41
28
  private
@@ -59,7 +46,7 @@ module Volcano
59
46
  end
60
47
 
61
48
  def oauth_provider_name(provider)
62
- return provider if provider.is_a?(String) && OAUTH_PROVIDERS.include?(provider)
49
+ return provider.dup.freeze if provider.is_a?(String) && OAUTH_PROVIDERS.include?(provider)
63
50
 
64
51
  raise ArgumentError, 'Unsupported OAuth provider'
65
52
  end
@@ -4,17 +4,12 @@ module Volcano
4
4
  # Fixed-host OAuth-provider API proxy behavior for the auth facade.
5
5
  class Auth
6
6
  def call_oauth_api(provider, endpoint:, method: 'GET', body: nil)
7
- provider_name = oauth_provider_name(provider)
8
- generation, current = @client.capture_session
9
- raise Error::AuthenticationError, 'No active session' unless current
10
-
11
- response = oauth_api_response(
12
- current.access_token, provider_name, endpoint: endpoint, method: method, body: body
13
- )
14
- result = oauth_api_data(Transport.body(response, 200))
15
- raise Error::SessionChangedError unless @client.capture_session.first == generation
16
-
17
- result
7
+ session_payload(200, decode: :oauth_api_data) do
8
+ provider_name = oauth_provider_name(provider)
9
+ request = { endpoint: endpoint.dup.freeze, method: method.dup.freeze,
10
+ body: body.nil? ? nil : JSON.parse(JSON.generate(body), freeze: true) }
11
+ ->(token) { oauth_api_response(token, provider_name, **request) }
12
+ end
18
13
  end
19
14
 
20
15
  private
@@ -4,27 +4,17 @@ module Volcano
4
4
  # Server-held OAuth-provider token metadata behavior for the auth facade.
5
5
  class Auth
6
6
  def get_oauth_provider_token(provider)
7
- provider_name = oauth_provider_name(provider)
8
- generation, current = @client.capture_session
9
- raise Error::AuthenticationError, 'No active session' unless current
10
-
11
- body = Transport.body(oauth_provider_token_response(current.access_token, provider_name), 200)
12
- result = oauth_provider_token_status(body)
13
- raise Error::SessionChangedError unless @client.capture_session.first == generation
14
-
15
- result
7
+ session_payload(200, decode: :oauth_provider_token_status) do
8
+ provider_name = oauth_provider_name(provider)
9
+ ->(token) { oauth_provider_token_response(token, provider_name) }
10
+ end
16
11
  end
17
12
 
18
13
  def refresh_oauth_provider_token(provider)
19
- provider_name = oauth_provider_name(provider)
20
- generation, current = @client.capture_session
21
- raise Error::AuthenticationError, 'No active session' unless current
22
-
23
- body = Transport.body(refresh_oauth_provider_token_response(current.access_token, provider_name), 200)
24
- result = oauth_provider_token_status(body)
25
- raise Error::SessionChangedError unless @client.capture_session.first == generation
26
-
27
- result
14
+ session_payload(200, decode: :oauth_provider_token_status) do
15
+ provider_name = oauth_provider_name(provider)
16
+ ->(token) { refresh_oauth_provider_token_response(token, provider_name) }
17
+ end
28
18
  end
29
19
 
30
20
  private
@@ -47,31 +47,22 @@ module Volcano
47
47
  include SessionPageMapping
48
48
 
49
49
  def list_sessions(page: 1, limit: 20)
50
- generation, current = @client.capture_session
51
- raise Error::AuthenticationError, 'No active session' unless current
52
-
53
- body = Transport.body(list_sessions_response(current.access_token, page, limit), 200)
54
- result = session_page(body)
55
- raise Error::SessionChangedError unless @client.capture_session.first == generation
56
-
57
- result
50
+ session_payload(200, decode: :session_page) { ->(token) { list_sessions_response(token, page, limit) } }
58
51
  end
59
52
 
60
53
  def delete_all_other_sessions
61
- generation, current = @client.capture_session
62
- raise Error::AuthenticationError, 'No active session' unless current
63
-
64
- Transport.body(delete_all_other_sessions_response(current.access_token), 204)
65
- raise Error::SessionChangedError unless @client.capture_session.first == generation
54
+ session_payload(204) { ->(token) { delete_all_other_sessions_response(token) } }
55
+ nil
66
56
  end
67
57
 
68
58
  def delete_session(session_id)
69
- generation, current = @client.capture_session
70
- raise Error::AuthenticationError, 'No active session' unless current
59
+ binding = @client.capture_session_binding
60
+ raise Error::AuthenticationError, 'No active session' unless binding.last
71
61
 
72
- deletes_current = same_session_id?(current.access_token, session_id)
73
- error = delete_session_error(current.access_token, session_id)
74
- current_unchanged = session_unchanged_after_deletion?(deletes_current, error, generation)
62
+ request_id = session_id.dup.freeze
63
+ deletes_current = same_session_id?(binding.last.access_token, request_id)
64
+ error = delete_bound_session_error(binding, request_id)
65
+ current_unchanged = session_unchanged_after_deletion?(deletes_current, error, binding)
75
66
  raise Error::SessionChangedError, cause: error unless current_unchanged
76
67
 
77
68
  raise error if error
@@ -111,11 +102,20 @@ module Volcano
111
102
  e
112
103
  end
113
104
 
114
- def session_unchanged_after_deletion?(deletes_current, error, generation)
105
+ def delete_bound_session_error(binding, session_id)
106
+ response = session_request(binding: binding) { |token| delete_session_response(token, session_id) }
107
+ Transport.body(response, 204)
108
+ nil
109
+ rescue Error::VolcanoError => e
110
+ e
111
+ end
112
+
113
+ def session_unchanged_after_deletion?(deletes_current, error, binding)
115
114
  uncertain = error.nil? || error.is_a?(Error::TransportError)
116
- return @client.clear_session_if_current?(generation) if deletes_current && uncertain
115
+ return @client.clear_session_if_current?(binding.first, lineage: binding[1]) if deletes_current && uncertain
117
116
 
118
- @client.capture_session.first == generation
117
+ active = @client.capture_session_binding
118
+ (active.last && active[1] == binding[1]) || (error && rejected_refresh?(binding, active))
119
119
  end
120
120
 
121
121
  def same_session_id?(access_token, session_id)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Volcano
4
- VERSION = '0.9.1'
4
+ VERSION = '0.9.2'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: volcano-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kong