authsignal-ruby 4.1.0 → 5.0.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: 9c4fa986346960144f15616720f21828275ffabdf16a817e05cadb4ee3c33565
4
- data.tar.gz: 0b748a47e76e7af70786179cfde9fa037188da9c6beee9d25194e47f61adf98e
3
+ metadata.gz: 75bf7679eabfb897458c92a7b284ff2cdd1ea7eb833275e14c1c01c47de3ea89
4
+ data.tar.gz: 4a94529da1d514caa69e4498f68d19006a3fd09be8d094be463aa33b9bc5e4d9
5
5
  SHA512:
6
- metadata.gz: 6dfcbd7a4ef015d250e33eebf556f1c651d440de45df9155791748d77f9668e57a40d0e27fb5091290fe178130c3dd70c09cc8aa85829855e317ab263637c5af
7
- data.tar.gz: 9ed3d53d1cd3772b2c6744dfacf1ff1471f09e743e1b9ba102f3d731b0c39e185533bad167ceb6f536c0b77c2be49b79094e46fafca8840542dc5b73fd1eb31d
6
+ metadata.gz: c12dd82892ca7c69bf2ec0e981a1ff5276e5f0fca37e6ae173ef385af63649a322b8cdc96d3e39b7d13eea7494bba97c15c234251838e092f816aed7ecaefd20
7
+ data.tar.gz: e263f4d2eaa242a23e3aafce95ea7b1db01011d33c51b45b9c655b5e184b39ddf51a4e29d2a8b5b0e6684bd2f2e8b87e110d3848819fc89dc09076bf8e4e2147
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- authsignal-ruby (4.1.0)
4
+ authsignal-ruby (5.0.0)
5
5
  faraday (>= 2)
6
6
  faraday-retry (~> 2.2)
7
7
 
data/README.md CHANGED
@@ -32,22 +32,22 @@ end
32
32
 
33
33
  You can find your `api_secret_key` in the [Authsignal Portal](https://portal.authsignal.com/organisations/tenants/api).
34
34
 
35
- You must specify the correct `baseUrl` for your tenant's region.
35
+ You must specify the correct `api_url` for your tenant's region.
36
36
 
37
- | Region | Base URL |
37
+ | Region | API URL |
38
38
  | ----------- | ----------------------------------- |
39
39
  | US (Oregon) | https://signal.authsignal.com/v1 |
40
40
  | AU (Sydney) | https://au.signal.authsignal.com/v1 |
41
41
  | EU (Dublin) | https://eu.signal.authsignal.com/v1 |
42
42
 
43
- For example, to set the base URL to use our AU region:
43
+ For example, to set the API URL to use our AU region:
44
44
 
45
45
  ```
46
46
  require 'authsignal'
47
47
 
48
48
  Authsignal.setup do |config|
49
49
  config.api_secret_key = ENV["AUTHSIGNAL_SECRET_KEY"]
50
- config.base_uri = "https://au.signal.authsignal.com/v1"
50
+ config.api_url = "https://au.signal.authsignal.com/v1"
51
51
 
52
52
  # If you would like the Authsignal client to retry requests due to network issues
53
53
  config.retry = true # default value: false
@@ -92,8 +92,8 @@ Authsignal.enroll_verified_authenticator user_id: 'AS_001',
92
92
  # returns:
93
93
  # {
94
94
  # success?: false,
95
- # status: 400,
96
- # error: 'invalid_request',
95
+ # status_code: 400,
96
+ # error_code: 'invalid_request',
97
97
  # error_description: '/body/oobChannel must be equal to one of the allowed values'
98
98
  # }
99
99
  ```
@@ -109,7 +109,7 @@ Authsignal.enroll_verified_authenticator! user_id: 'AS_001',
109
109
  }
110
110
 
111
111
  # raise:
112
- # <Authsignal::ApiError: invalid_request status: 400, error: invalid_request, description: /body/oobChannel must be equal to one o...
112
+ # <Authsignal::ApiError: AuthsignalError: 400 - /body/oobChannel must be equal to one of the allowed values. status_code: 401, error_code: invalid_request, error_description: /body/oobChannel must be equal to one of the allowed values.
113
113
  ```
114
114
 
115
115
  ## Development
@@ -2,18 +2,30 @@
2
2
 
3
3
  module Authsignal
4
4
  class ApiError < StandardError
5
- attr_reader :status, :error, :description
5
+ attr_reader :status_code, :error_code, :error_description
6
6
 
7
- def initialize(message = "An unexpected API error occurred", status, error, description)
8
- @status = status || 500
9
- @error = error
10
- @description = description
7
+ def initialize(status_code, error_code, error_description = nil)
8
+ message = format_message(status_code, error_code, error_description)
11
9
 
12
10
  super(message)
11
+
12
+ @status_code = status_code
13
+ @error_code = error_code
14
+ @error_description = error_description
13
15
  end
14
16
 
15
17
  def to_s
16
- "#{super} status: #{status}, error: #{error}, description: #{description}"
18
+ "#{super} status_code: #{status_code}, error_code: #{error_code}, error_description: #{error_description}"
19
+ end
20
+
21
+ private
22
+
23
+ def format_message(status_code, error_code, error_description)
24
+ "AuthsignalError: #{status_code} - #{format_description(error_code, error_description)}"
25
+ end
26
+
27
+ def format_description(error_code, error_description)
28
+ error_description && error_description.length > 0 ? error_description : error_code
17
29
  end
18
30
  end
19
31
  end
@@ -17,7 +17,7 @@ module Authsignal
17
17
  @api_key = require_api_key
18
18
 
19
19
  @client = Faraday.new do |builder|
20
- builder.url_prefix = Authsignal.configuration.base_uri
20
+ builder.url_prefix = Authsignal.configuration.api_url
21
21
  builder.adapter :net_http
22
22
  builder.request :authorization, :basic, @api_key, nil
23
23
 
@@ -36,47 +36,50 @@ module Authsignal
36
36
  end
37
37
  end
38
38
 
39
- def track(event)
40
- user_id = url_encode(event[:user_id])
41
- action = event[:action]
39
+ def get_user(user_id:)
40
+ path = "users/#{url_encode(user_id)}"
41
+ make_request(:get, path)
42
+ end
42
43
 
43
- path = "users/#{user_id}/actions/#{action}"
44
- body = event.except(:user_id)
44
+ def update_user(user_id:, attributes:)
45
+ make_request(:post, "users/#{url_encode(user_id)}", body: attributes)
46
+ end
45
47
 
46
- make_request(:post, path, body: body)
48
+ def delete_user(user_id:)
49
+ make_request(:delete, "users/#{url_encode(user_id)}")
47
50
  end
48
51
 
49
- def get_user(user_id:, redirect_url: nil)
50
- if(redirect_url)
51
- path = "users/#{url_encode(user_id)}?redirectUrl=#{redirect_url}"
52
- else
53
- path = "users/#{url_encode(user_id)}"
54
- end
55
- make_request(:get, path)
52
+ def get_authenticators(user_id:)
53
+ make_request(:get, "users/#{url_encode(user_id)}/authenticators")
56
54
  end
57
55
 
58
- def update_user(user_id:, user:)
59
- make_request(:post, "users/#{url_encode(user_id)}", body: user)
56
+ def enroll_verified_authenticator(user_id:, attributes:)
57
+ make_request(:post, "users/#{url_encode(user_id)}/authenticators", body: attributes)
60
58
  end
61
59
 
62
- def delete_user(user_id:)
63
- make_request(:delete, "users/#{url_encode(user_id)}")
60
+ def delete_authenticator(user_id:, user_authenticator_id:)
61
+ make_request(:delete, "users/#{url_encode(user_id)}/authenticators/#{url_encode(user_authenticator_id)}")
62
+ end
63
+
64
+ def track(user_id:, action:, attributes:)
65
+ path = "users/#{user_id}/actions/#{action}"
66
+
67
+ make_request(:post, path, body: attributes)
64
68
  end
65
69
 
66
- def validate_challenge(user_id: nil, token:, action: nil)
70
+ def validate_challenge(token:, user_id: nil, action: nil)
67
71
  path = "validate"
68
72
  body = { user_id: user_id, token: token, action: action }
69
73
 
70
74
  make_request(:post, path, body: body)
71
75
  end
72
76
 
73
- def get_action(user_id, action, idempotency_key)
77
+ def get_action(user_id:, action:, idempotency_key:)
74
78
  make_request(:get, "users/#{url_encode(user_id)}/actions/#{action}/#{url_encode(idempotency_key)}")
75
79
  end
76
80
 
77
- def update_action_state(user_id:, action:, idempotency_key:, state:)
78
- body = { state: state }
79
- make_request(:patch, "users/#{url_encode(user_id)}/actions/#{action}/#{url_encode(idempotency_key)}", body: body)
81
+ def update_action(user_id:, action:, idempotency_key:, attributes:)
82
+ make_request(:patch, "users/#{url_encode(user_id)}/actions/#{action}/#{url_encode(idempotency_key)}", body: attributes)
80
83
  end
81
84
 
82
85
  ##
@@ -85,14 +88,6 @@ module Authsignal
85
88
  make_request(:post , "users/#{url_encode(user_id)}", body: user_payload)
86
89
  end
87
90
 
88
- def enroll_verified_authenticator(user_id, authenticator)
89
- make_request(:post, "users/#{url_encode(user_id)}/authenticators", body: authenticator)
90
- end
91
-
92
- def delete_authenticator(user_id:, user_authenticator_id:)
93
- make_request(:delete, "users/#{url_encode(user_id)}/authenticators/#{url_encode(user_authenticator_id)}")
94
- end
95
-
96
91
  private
97
92
 
98
93
  def url_encode(s)
@@ -13,7 +13,7 @@ module Authsignal
13
13
  end
14
14
 
15
15
  config_option :api_secret_key
16
- config_option :base_uri
16
+ config_option :api_url
17
17
  config_option :debug
18
18
  config_option :retry
19
19
 
@@ -22,7 +22,7 @@ module Authsignal
22
22
 
23
23
  # set default attribute values
24
24
  @defaults = OpenStruct.new({
25
- base_uri: 'https://signal.authsignal.com/v1/',
25
+ api_url: 'https://signal.authsignal.com/v1/',
26
26
  retry: false,
27
27
  debug: false
28
28
  })
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Authsignal
4
- VERSION = "4.1.0"
4
+ VERSION = "5.0.0"
5
5
  end
data/lib/authsignal.rb CHANGED
@@ -25,14 +25,14 @@ module Authsignal
25
25
  configuration.defaults
26
26
  end
27
27
 
28
- def get_user(user_id:, redirect_url: nil)
29
- response = Client.new.get_user(user_id: user_id, redirect_url: redirect_url)
28
+ def get_user(user_id:)
29
+ response = Client.new.get_user(user_id: user_id)
30
30
 
31
31
  handle_response(response)
32
32
  end
33
33
 
34
- def update_user(user_id:, user:)
35
- response = Client.new.update_user(user_id: user_id, user: user)
34
+ def update_user(user_id:, attributes:)
35
+ response = Client.new.update_user(user_id: user_id, attributes: attributes)
36
36
 
37
37
  handle_response(response)
38
38
  end
@@ -43,42 +43,44 @@ module Authsignal
43
43
  handle_response(response)
44
44
  end
45
45
 
46
- def get_action(user_id:, action:, idempotency_key:)
47
- response = Client.new.get_action(user_id, action, idempotency_key)
46
+ def get_authenticators(user_id:)
47
+ response = Client.new.get_authenticators(user_id: user_id)
48
48
 
49
49
  handle_response(response)
50
50
  end
51
51
 
52
- def update_action_state(user_id:, action:, idempotency_key:, state:)
53
- # NOTE: Rely on API to respond when given invalid state
54
- response = Client.new.update_action_state(user_id: user_id, action: action, idempotency_key: idempotency_key, state: state)
52
+ def enroll_verified_authenticator(user_id:, attributes:)
53
+ response = Client.new.enroll_verified_authenticator(user_id: user_id, attributes: attributes)
55
54
 
56
55
  handle_response(response)
57
56
  end
58
57
 
59
- def enroll_verified_authenticator(user_id:, authenticator:)
60
- response = Client.new.enroll_verified_authenticator(user_id, authenticator)
58
+ def delete_authenticator(user_id:, user_authenticator_id:)
59
+ response = Client.new.delete_authenticator(user_id: user_id, user_authenticator_id: user_authenticator_id)
61
60
 
62
61
  handle_response(response)
63
62
  end
64
63
 
65
- def delete_authenticator(user_id:, user_authenticator_id: )
66
- response = Client.new.delete_authenticator(user_id: user_id, user_authenticator_id: user_authenticator_id)
64
+ def track(user_id:, action:, attributes:)
65
+ response = Client.new.track(user_id: user_id, action: action, attributes: attributes)
66
+ handle_response(response)
67
+ end
67
68
 
69
+ def validate_challenge(token:, user_id: nil, action: nil)
70
+ response = Client.new.validate_challenge(token: token,user_id: user_id, action: action)
71
+
68
72
  handle_response(response)
69
73
  end
70
74
 
71
- def track(event, options={})
72
- raise ArgumentError, "Action Code is required" unless event[:action].to_s.length > 0
73
- raise ArgumentError, "User ID value" unless event[:user_id].to_s.length > 0
75
+ def get_action(user_id:, action:, idempotency_key:)
76
+ response = Client.new.get_action(user_id: user_id, action: action, idempotency_key: idempotency_key)
74
77
 
75
- response = Client.new.track(event)
76
78
  handle_response(response)
77
79
  end
78
80
 
79
- def validate_challenge(token:, user_id: nil, action: nil)
80
- response = Client.new.validate_challenge(user_id: user_id, token: token, action: action)
81
-
81
+ def update_action(user_id:, action:, idempotency_key:, attributes:)
82
+ response = Client.new.update_action(user_id: user_id, action: action, idempotency_key: idempotency_key, attributes: attributes)
83
+
82
84
  handle_response(response)
83
85
  end
84
86
 
@@ -93,15 +95,19 @@ module Authsignal
93
95
  end
94
96
 
95
97
  def handle_success_response(response)
96
- response.body.merge(success?: true)
98
+ if response.body.is_a?(Array)
99
+ { success?: true, data: response.body }
100
+ else
101
+ response.body.merge(success?: true)
102
+ end
97
103
  end
98
104
 
99
105
  def handle_error_response(response)
100
106
  case response.body
101
107
  when Hash
102
- response.body.merge(status: response.status, success?: false)
108
+ { status_code: response.status, success?: false, error_code: response.body[:error], error_description: response.body[:error_description] }
103
109
  else
104
- { status: response&.status || 500, success?: false }
110
+ { status_code: response&.status || 500, success?: false }
105
111
  end
106
112
  end
107
113
  end
@@ -110,11 +116,11 @@ module Authsignal
110
116
  (methods - NON_API_METHODS).each do |method|
111
117
  define_singleton_method("#{method}!") do |*args, **kwargs|
112
118
  send(method, *args, **kwargs).tap do |response|
113
- status = response[:status]
114
- err = response[:error]
115
- desc = response[:error_description]
119
+ status_code = response[:status_code]
120
+ error_code = response[:error_code]
121
+ error_description = response[:error_description]
116
122
 
117
- raise ApiError.new(err, status, err, desc) unless response[:success?]
123
+ raise ApiError.new(status_code, error_code, error_description) unless response[:success?]
118
124
  end
119
125
  end
120
126
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authsignal-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.0
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - justinsoong
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-11-05 00:00:00.000000000 Z
11
+ date: 2024-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -127,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
127
  - !ruby/object:Gem::Version
128
128
  version: '0'
129
129
  requirements: []
130
- rubygems_version: 3.5.16
130
+ rubygems_version: 3.5.22
131
131
  signing_key:
132
132
  specification_version: 4
133
133
  summary: The Authsignal ruby server side signal API.