phaxio 2.1.0.pre → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +17 -17
  3. data/lib/phaxio/client.rb +14 -12
  4. data/lib/phaxio/config.rb +6 -4
  5. data/lib/phaxio/error.rb +1 -0
  6. data/lib/phaxio/resource.rb +11 -5
  7. data/lib/phaxio/resources/account.rb +1 -1
  8. data/lib/phaxio/resources/ata.rb +85 -19
  9. data/lib/phaxio/resources/callback.rb +10 -56
  10. data/lib/phaxio/resources/fax.rb +11 -11
  11. data/lib/phaxio/resources/phax_code.rb +2 -2
  12. data/lib/phaxio/resources/phone_number.rb +31 -5
  13. data/lib/phaxio/resources/port_number.rb +42 -0
  14. data/lib/phaxio/resources/port_number_note.rb +51 -0
  15. data/lib/phaxio/resources/port_order.rb +172 -0
  16. data/lib/phaxio/resources/public/area_code.rb +1 -1
  17. data/lib/phaxio/resources/public/country.rb +1 -1
  18. data/lib/phaxio/resources/webhook.rb +65 -0
  19. data/lib/phaxio/version.rb +1 -1
  20. data/lib/phaxio.rb +12 -3
  21. data/spec/client_spec.rb +17 -0
  22. data/spec/phaxio_spec.rb +7 -1
  23. data/spec/resources/account_spec.rb +1 -7
  24. data/spec/resources/ata_spec.rb +207 -0
  25. data/spec/resources/fax_spec.rb +35 -103
  26. data/spec/resources/phax_code_spec.rb +10 -44
  27. data/spec/resources/phone_number_spec.rb +19 -30
  28. data/spec/resources/port_number_note_spec.rb +33 -0
  29. data/spec/resources/port_number_spec.rb +32 -0
  30. data/spec/resources/port_order_spec.rb +76 -0
  31. data/spec/resources/public/area_code_spec.rb +1 -1
  32. data/spec/resources/public/country_spec.rb +1 -7
  33. data/spec/resources/{callback_spec.rb → webhook_spec.rb} +8 -8
  34. data/spec/spec_helper.rb +1 -0
  35. data/spec/support/{vcr_cassettes/resources/account/status.yml → cassettes/account/get.yml} +7 -9
  36. data/spec/support/cassettes/ata/add_phone_number.yml +89 -0
  37. data/spec/support/{vcr_cassettes/resources/fax/resend.yml → cassettes/ata/create.yml} +12 -13
  38. data/spec/support/cassettes/ata/delete.yml +86 -0
  39. data/spec/support/cassettes/ata/get.yml +87 -0
  40. data/spec/support/cassettes/ata/list.yml +67 -0
  41. data/spec/support/{vcr_cassettes/resources/phax_code/get_id.yml → cassettes/ata/provisioning_urls.yml} +10 -13
  42. data/spec/support/cassettes/ata/reference.yml +87 -0
  43. data/spec/support/cassettes/ata/regenerate.yml +89 -0
  44. data/spec/support/cassettes/ata/remove_phone_number.yml +130 -0
  45. data/spec/support/cassettes/ata/update.yml +89 -0
  46. data/spec/support/{vcr_cassettes/resources/fax/create_for_cancel.yml → cassettes/fax/cancel.yml} +51 -11
  47. data/spec/support/{vcr_cassettes/resources/fax/create_for_reference.yml → cassettes/fax/create.yml} +11 -13
  48. data/spec/support/{vcr_cassettes/resources/fax/create.yml → cassettes/fax/delete.yml} +49 -11
  49. data/spec/support/{vcr_cassettes/resources/fax/create_for_delete.yml → cassettes/fax/delete_file.yml} +49 -11
  50. data/spec/support/cassettes/fax/file.yml +93 -0
  51. data/spec/support/{vcr_cassettes/resources/fax/create_for_download_file.yml → cassettes/fax/get.yml} +49 -11
  52. data/spec/support/{vcr_cassettes/resources → cassettes}/fax/list.yml +5 -7
  53. data/spec/support/cassettes/fax/reference.yml +88 -0
  54. data/spec/support/{vcr_cassettes/resources/fax/create_for_delete_file.yml → cassettes/fax/resend.yml} +51 -11
  55. data/spec/support/{vcr_cassettes/resources → cassettes}/fax/test_receive.yml +7 -9
  56. data/spec/support/{vcr_cassettes/resources → cassettes}/phax_code/create.yml +8 -10
  57. data/spec/support/{vcr_cassettes/resources → cassettes}/phax_code/create_png.yml +8 -10
  58. data/spec/support/cassettes/phax_code/get_by_id.yml +86 -0
  59. data/spec/support/{vcr_cassettes/resources/phax_code/get.yml → cassettes/phax_code/get_default.yml} +8 -10
  60. data/spec/support/{vcr_cassettes/resources/phax_code/get_png.yml → cassettes/phax_code/get_default_png.yml} +8 -10
  61. data/spec/support/cassettes/phax_code/get_png_by_id.yml +90 -0
  62. data/spec/support/{vcr_cassettes/resources → cassettes}/phone_number/create.yml +8 -10
  63. data/spec/support/{vcr_cassettes/resources → cassettes}/phone_number/get.yml +10 -12
  64. data/spec/support/cassettes/phone_number/list.yml +72 -0
  65. data/spec/support/cassettes/phone_number/reference.yml +45 -0
  66. data/spec/support/cassettes/phone_number/release.yml +86 -0
  67. data/spec/support/cassettes/port_number/get.yml +88 -0
  68. data/spec/support/cassettes/port_number_note/list.yml +88 -0
  69. data/spec/support/cassettes/port_order/create.yml +48 -0
  70. data/spec/support/cassettes/port_order/get.yml +91 -0
  71. data/spec/support/cassettes/port_order/list.yml +52 -0
  72. data/spec/support/{vcr_cassettes/resources/public/area_codes → cassettes/public/area_code}/list.yml +15 -17
  73. data/spec/support/{vcr_cassettes/resources → cassettes}/public/country/list.yml +5 -7
  74. data/spec/support/vcr.rb +24 -6
  75. metadata +115 -41
  76. data/spec/support/credentials.rb +0 -7
  77. data/spec/support/vcr_cassettes/resources/fax/cancel.yml +0 -47
  78. data/spec/support/vcr_cassettes/resources/fax/create_for_get.yml +0 -50
  79. data/spec/support/vcr_cassettes/resources/fax/create_for_resend.yml +0 -50
  80. data/spec/support/vcr_cassettes/resources/fax/delete.yml +0 -45
  81. data/spec/support/vcr_cassettes/resources/fax/delete_file.yml +0 -45
  82. data/spec/support/vcr_cassettes/resources/fax/file.yml +0 -50
  83. data/spec/support/vcr_cassettes/resources/fax/get.yml +0 -45
  84. data/spec/support/vcr_cassettes/resources/fax/reference.yml +0 -45
  85. data/spec/support/vcr_cassettes/resources/phax_code/get_id_png.yml +0 -50
  86. data/spec/support/vcr_cassettes/resources/phone_number/list.yml +0 -60
  87. data/spec/support/vcr_cassettes/resources/phone_number/release.yml +0 -45
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7f20cd3d8695312c8b64cf40cc01b8fe0e320b921a3527abc1ca005a9d140b11
4
- data.tar.gz: '088662055ff2bd6ebbeb5055ad7316bd6d99acf9a93249383d9ad1aa08133a4b'
3
+ metadata.gz: 414f3c2357ed3a6ea5afec63b0f365640fac3ac2cd3409554e36f579582b4931
4
+ data.tar.gz: b1409dd06f09a01afec33edded877041e682cfefad226bfa54fa86b77efef9b3
5
5
  SHA512:
6
- metadata.gz: 99cfc91fefd07016507eb20049f5c7afeca903d2c227941bcd55a1cd14913faa1b03e69a2ceea1798da457bf338a48e5ad7c212f107aba598378965210a0d24a
7
- data.tar.gz: cf3b858ff97a2b005f50a21709ee524fd20b6fc12080a59a48d57842b9e295f18de91a20f48ba5f9f1b64d632e5a38d7d375b0af8e323cea2232df49421deb93
6
+ metadata.gz: e79bb9271d141517d2d3cd640caf37dbd8a73a7783ee900ff27f51c12e485579b3bd2ae3f17fa0cf0c13b47cb621829d4c13b9b13ecc57fef083c791a1bdf0b7
7
+ data.tar.gz: 85199d1532aa1c29df9e1a1fae05b394f22af825bf9f23d35508b7267fdb8182337e554bf27024bda0b41f59988f8213f40a4606bd7d3aec810c0f036fc573d6
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![Build Status](https://travis-ci.org/phaxio/phaxio-ruby.svg?branch=master)](https://travis-ci.org/phaxio/phaxio-ruby)
4
4
 
5
- A Ruby gem for interacting with the [Phaxio API](https://www.phaxio.com/docs/api/v2).
5
+ A Ruby gem for interacting with the [Phaxio API](https://www.phaxio.com/docs/api/v2.1).
6
6
 
7
7
  ## Installation
8
8
 
@@ -26,14 +26,14 @@ $ gem install phaxio
26
26
 
27
27
  ## Usage
28
28
 
29
- Set up your API Key, API Secret, and, optionally, Callback Token.
29
+ Set up your API Key, API Secret, and, optionally, Webhook Token.
30
30
 
31
31
  ``` ruby
32
32
  require 'phaxio'
33
33
 
34
34
  Phaxio.api_key = '11111'
35
35
  Phaxio.api_secret = '22222'
36
- Phaxio.callback_token = '33333'
36
+ Phaxio.webhook_token = '33333'
37
37
  ```
38
38
 
39
39
  Try sending a fax:
@@ -243,32 +243,32 @@ Account.get
243
243
  # => Account(balance: 1000, faxes_today: 0, faxes_this_month: 100)
244
244
  ```
245
245
 
246
- #### Callback
246
+ #### Webhook
247
247
 
248
- ##### `Callback.valid_signature?`
248
+ ##### `Webhook.valid_signature?`
249
249
 
250
- Validate the callback signature sent with a Phaxio callback. Requires that Phaxio.callback_token be
250
+ Validate the webhook signature sent with a Phaxio webhook. Requires that Phaxio.webhook_token be
251
251
  set.
252
252
 
253
253
  ``` ruby
254
- Callback.valid_signature? received_signature, callback_url, received_params, received_files
254
+ Webhook.valid_signature? received_signature, webhook_url, received_params, received_files
255
255
  # => true
256
256
  ```
257
257
 
258
- ## Callback Validation Example with Sinatra
258
+ ## Webhook Validation Example with Sinatra
259
259
 
260
260
  ``` ruby
261
261
  require 'sinatra/base'
262
262
  require 'phaxio'
263
263
 
264
264
  class PhaxioWebhookExample < Sinatra::Base
265
- Phaxio.callback_token = 'YOUR WEBHOOK TOKEN HERE'
266
-
265
+ Phaxio.webhook_token = 'YOUR WEBHOOK TOKEN HERE'
266
+
267
267
  post '/webhook' do
268
268
  signature = request.env['HTTP_X_PHAXIO_SIGNATURE']
269
269
  url = request.url
270
270
  file_params = params[:file]
271
- if Phaxio::Callback.valid_signature? signature, url, webhook_params, file_params
271
+ if Phaxio::Webhook.valid_signature? signature, url, webhook_params, file_params
272
272
  'Success'
273
273
  else
274
274
  'Invalid webhook signature'
@@ -289,22 +289,22 @@ end
289
289
  class WebhookController < ApplicationController
290
290
  skip_before_action :verify_authenticity_token
291
291
 
292
- def index
292
+ def index
293
293
  signature = request.headers['X-Phaxio-Signature']
294
- Phaxio.callback_token = 'YOUR WEBHOOK TOKEN HERE'
294
+ Phaxio.webhook_token = 'YOUR WEBHOOK TOKEN HERE'
295
295
  url = request.original_url
296
296
 
297
297
  Rails.logger.debug "URL: " + url
298
298
  Rails.logger.debug "Signature: " + signature
299
299
  Rails.logger.debug "params: " + params.inspect
300
300
  Rails.logger.debug "webhook_params: " + webhook_params.to_h.inspect
301
-
302
- if Phaxio::Callback.valid_signature? signature, url, webhook_params.to_h, file_params
301
+
302
+ if Phaxio::Webhook.valid_signature? signature, url, webhook_params.to_h, file_params
303
303
  Rails.logger.debug "Success"
304
304
  render plain: 'Success'
305
305
  else
306
- Rails.logger.debug "Invalid callback signature"
307
- render plain: 'Invalid callback signature'
306
+ Rails.logger.debug "Invalid webhook signature"
307
+ render plain: 'Invalid webhook signature'
308
308
  end
309
309
  end
310
310
 
data/lib/phaxio/client.rb CHANGED
@@ -44,10 +44,6 @@ module Phaxio
44
44
  conn.request :multipart
45
45
  conn.request :url_encoded
46
46
  conn.adapter :net_http
47
-
48
- if Phaxio.api_key && Phaxio.api_secret
49
- conn.basic_auth Phaxio.api_key, Phaxio.api_secret
50
- end
51
47
  end
52
48
  end
53
49
 
@@ -56,13 +52,17 @@ module Phaxio
56
52
  def handle_response response
57
53
  content_type = response.headers[:content_type]
58
54
 
59
- if content_type.start_with? 'application/json'
60
- body = JSON.parse(response.body).with_indifferent_access
55
+ if content_type
56
+ if content_type.start_with? 'application/json'
57
+ body = JSON.parse(response.body).with_indifferent_access
58
+ else
59
+ extension = MimeTypeHelper.extension_for_mimetype content_type
60
+ filename = File.join Dir.tmpdir, tmpname(extension)
61
+ File.open(filename, 'wb') { |file| file.write response.body }
62
+ body = {'success' => response.success?, 'data' => File.open(filename, 'rb')}
63
+ end
61
64
  else
62
- extension = MimeTypeHelper.extension_for_mimetype content_type
63
- filename = File.join Dir.tmpdir, tmpname(extension)
64
- File.open(filename, 'wb') { |file| file.write response.body }
65
- body = {'success' => response.success?, 'data' => File.open(filename, 'rb')}
65
+ body = {}
66
66
  end
67
67
 
68
68
  if response.success?
@@ -89,6 +89,8 @@ module Phaxio
89
89
  raise Error::InvalidRequestError, "#{status}: #{message}"
90
90
  when 429
91
91
  raise Error::RateLimitExceededError, "#{status}: #{message}"
92
+ when 503
93
+ raise Error::ServiceUnavailableError, "#{status}: #{message}"
92
94
  else
93
95
  raise Error::GeneralError, "#{status}: #{message}"
94
96
  end
@@ -153,8 +155,8 @@ module Phaxio
153
155
  end
154
156
 
155
157
  def api_headers params
156
- api_key = params[:api_key] || Phaxio.api_key
157
- api_secret = params[:api_secret] || Phaxio.api_secret
158
+ api_key = params.delete(:api_key) || Phaxio.api_key
159
+ api_secret = params.delete(:api_secret) || Phaxio.api_secret
158
160
  return unless api_key && api_secret
159
161
  auth = Base64.strict_encode64("#{api_key}:#{api_secret}")
160
162
  {'Authorization' => "Basic #{auth}"}
data/lib/phaxio/config.rb CHANGED
@@ -13,14 +13,16 @@ module Phaxio
13
13
  # To find your API secret, visit https://console.phaxio.com/api_credentials
14
14
  attr_accessor :api_secret
15
15
 
16
- # Your Phaxio callback token. This will be used to verify that callback requests are coming
16
+ # Your Phaxio webhook token. This will be used to verify that webhook requests are coming
17
17
  # from Phaxio.
18
18
  #
19
- # To find your callback token, visit https://console.phaxio.com/user/callbacks/edit
20
- attr_accessor :callback_token
19
+ # To find your webhook token, visit https://console.phaxio.com/user/callbacks/edit
20
+ attr_accessor :webhook_token
21
+ alias callback_token webhook_token
22
+ alias callback_token= webhook_token=
21
23
 
22
24
  # The Phaxio API endpoint. Users generally shouldn't need to change it.
23
- # Defaults to https://api.phaxio.com/v2/
25
+ # Defaults to https://api.phaxio.com/v2.1/
24
26
  attr_writer :api_endpoint
25
27
 
26
28
  def api_endpoint
data/lib/phaxio/error.rb CHANGED
@@ -6,6 +6,7 @@ module Phaxio
6
6
  NotFoundError
7
7
  InvalidRequestError
8
8
  RateLimitExceededError
9
+ ServiceUnavailableError
9
10
  GeneralError
10
11
  ApiConnectionError
11
12
  ].each { |error_klass_name| const_set error_klass_name, Class.new(PhaxioError) }
@@ -139,12 +139,18 @@ module Phaxio
139
139
  #
140
140
  # @see Phaxio::Resource.response_collection
141
141
  def initialize response_data, resource
142
- if response_data.key? 'paging'
143
- self.total = response_data['paging']['total']
144
- self.per_page = response_data['paging']['per_page']
145
- self.page = response_data['paging']['page']
142
+ # For some endpoints we'll get a hash with `paging` and `data` attributes.
143
+ # For others, just an array.
144
+ if response_data.is_a? Hash
145
+ if response_data.key? 'paging'
146
+ self.total = response_data['paging']['total']
147
+ self.per_page = response_data['paging']['per_page']
148
+ self.page = response_data['paging']['page']
149
+ end
150
+ self.raw_data = response_data['data']
151
+ else
152
+ self.raw_data = response_data
146
153
  end
147
- self.raw_data = response_data['data']
148
154
  self.collection = raw_data.map { |record_data| resource.response_record record_data }
149
155
  end
150
156
 
@@ -22,7 +22,7 @@ module Phaxio
22
22
  # Any parameters to send to Phaxio. This action does not have any unique parameters.
23
23
  # @return [Phaxio::Resources::Acount] Your account information.
24
24
  # @raise [Phaxio::Error::PhaxioError]
25
- # @see https://www.phaxio.com/docs/api/v2/account/status
25
+ # @see https://www.phaxio.com/docs/api/v2.1/account/status
26
26
  def get params = {}
27
27
  response = Client.request :get, account_status_endpoint, params
28
28
  response_record response
@@ -20,14 +20,37 @@ module Phaxio
20
20
  # @return [String] The domain for the ATA.
21
21
  # @!attribute domain
22
22
 
23
+ # @return [String] The user agent for the ATA.
24
+ # @!attribute user_agent
25
+
26
+ # @return [String] The SIP URI for the ATA.
27
+ # @!attribute sip_uri
28
+
29
+ # @return [String] The mac address for the ATA.
30
+ # @!attribute mac_address
31
+
32
+ # @return [String] The name of the group which the ATA belongs to.
33
+ # @!attribute group
34
+
23
35
  # @return [String] The username for the ATA.
24
- # @!attribute uername
36
+ # @!attribute username
25
37
 
26
38
  # @return [String] The password for the ATA.
27
39
  # @!attribute password
28
40
 
29
41
  has_normal_attributes %w[
30
- id name description user_phone_number domain username password
42
+ id name description user_phone_number domain user_agent sip_uri
43
+ mac_address group username password
44
+ ]
45
+
46
+ # @return [Time] The time at which the ATA was last registered.
47
+ # @!attribute last_registered
48
+
49
+ # @return [Time] The time at which the ATA's registration expires.
50
+ # @!attribute expiry_time
51
+
52
+ has_time_attributes %w[
53
+ last_registered expiry_time
31
54
  ]
32
55
 
33
56
  # A reference to an ATA. This is returned by certain actions which don't
@@ -41,6 +64,14 @@ module Phaxio
41
64
  id
42
65
  end
43
66
 
67
+ # Gets the referenced ATA.
68
+ # @return [Phaxio::Resources::ATA]
69
+ def get
70
+ Ata.get self
71
+ end
72
+ alias :retrieve :get
73
+ alias :find :get
74
+
44
75
  private
45
76
 
46
77
  def initialize id
@@ -48,21 +79,33 @@ module Phaxio
48
79
  end
49
80
  end
50
81
 
51
- # A reference to a phone number, returned by ATA phone number management
52
- # actions.
53
- class PhoneNumberReference
54
- # @return [String]
55
- # The phone number.
56
- attr_accessor :phone_number
82
+ # A set of provisioning URLs.
83
+ class ProvisioningURLs
84
+ # @return [Hash<String: String>] The hash of provisioning URLs.
85
+ # @!attribute urls
86
+ attr_reader :urls
87
+
88
+ GRANDSTREAM = 'Grandstream'
89
+ OBI = 'OBi'
90
+ NETGEN = 'Netgen'
57
91
 
58
- def to_s
59
- phone_number
92
+ def initialize data
93
+ @urls = data
60
94
  end
61
95
 
62
- private
96
+ # @return [String] The Grandstream provisioning url.
97
+ def grandstream
98
+ self.urls.fetch(GRANDSTREAM)
99
+ end
100
+
101
+ # @return [String] The OBi provisioning url.
102
+ def obi
103
+ self.urls.fetch(OBI)
104
+ end
63
105
 
64
- def initialize phone_number
65
- self.phone_number = phone_number
106
+ # @return [String] The Netgen provisioning url.
107
+ def netgen
108
+ self.urls.fetch(NETGEN)
66
109
  end
67
110
  end
68
111
 
@@ -86,6 +129,7 @@ module Phaxio
86
129
  # - *name* [String] - A name used to identify the ATA.
87
130
  # - *description* [String] - A longer description of the ATA.
88
131
  # - *domain* [String] - A domain for the ATA.
132
+ # - *mac_address* [String] - A mac address for the ATA.
89
133
  # @return [Phaxio::Resources::Ata]
90
134
  # The created ATA, including the generated username and password.
91
135
  # @raise [Phaxio::Error::PhaxioError]
@@ -99,7 +143,9 @@ module Phaxio
99
143
  # @param id [Integer]
100
144
  # The ID of the ATA to retrieve information about.
101
145
  # @param params [Hash]
102
- # Any parameters to send to Phaxio. This action takes no unique parameters.
146
+ # Any parameters to send to Phaxio.
147
+ # - *with_credentials* [Boolean] - If enabled, the username and
148
+ # password for the ATA will be included in the response.
103
149
  # @return [Phaxio::Resources::Ata]
104
150
  # The requested ATA.
105
151
  # @raise [Phaxio::Error::PhaxioError]
@@ -118,7 +164,7 @@ module Phaxio
118
164
  # Any parameters to send to Phaxio.
119
165
  # - *name* [String] - A name used to identify the ATA.
120
166
  # - *description* [String] - A longer description of the ATA.
121
- # - *domain* [String] - A domain for the ATA.
167
+ # - *mac_address* [String] - A mac address for the ATA.
122
168
  # @return [Phaxio::Resources::Ata]
123
169
  # The updated ATA.
124
170
  # @raise [Phaxio::Error::PhaxioError]
@@ -144,7 +190,7 @@ module Phaxio
144
190
 
145
191
  # Delete an ATA
146
192
  # @param id [Integer]
147
- # The Id of the ATA to delete.
193
+ # The ID of the ATA to delete.
148
194
  # @param params [Hash]
149
195
  # Any parameters to send to Phaxio. This action takes no unique parameters.
150
196
  # @return [Phaxio::Resources::Ata::Reference]
@@ -163,7 +209,7 @@ module Phaxio
163
209
  # The phone number to add to the ATA.
164
210
  # @param params [Hash]
165
211
  # Any parameters to send to Phaxio. This action takes no unique parameters.
166
- # @return [Phaxio::Resources::Ata::PhoneNumberReference]
212
+ # @return [Phaxio::Resources::PhoneNumber::Reference]
167
213
  # A reference to the added phone number.
168
214
  # @raise [Phaxio::Error::PhaxioError]
169
215
  # @see https://www.phaxio.com/docs/api/v2.1/atas/add_phone_number
@@ -179,7 +225,7 @@ module Phaxio
179
225
  # The phone number you want to remove.
180
226
  # @param params [Hash]
181
227
  # Any parameters to send to Phaxio. This action takes no unique parameters.
182
- # @return [Phaxio::Resources::Ata::PhoneNumberReference]
228
+ # @return [Phaxio::Resources::PhoneNumber::Reference]
183
229
  # A reference to the removed phone number.
184
230
  # @raise [Phaxio::Error::PhaxioError]
185
231
  # @see https://www.phaxio.com/docs/api/v2.1/atas/remove_phone_number
@@ -188,6 +234,18 @@ module Phaxio
188
234
  response_phone_number_reference response
189
235
  end
190
236
 
237
+ # Get ATA provisioning URLs for your Phaxio account.
238
+ # @param params [Hash]
239
+ # Any parameters to send to Phaxio.
240
+ # - *group* [String] - If given, this action instead returns
241
+ # provisioning URLs for the named group.
242
+ # @return [Phaxio::Resources::Ata::ProvisioningURLs
243
+ # @see https://www.phaxio.com/docs/api/v2.1/atas/provisioning_urls
244
+ def provisioning_urls params = {}
245
+ response = Client.request :get, provisioning_urls_endpoint, params
246
+ response_provisioning_urls response
247
+ end
248
+
191
249
  private
192
250
 
193
251
  def response_reference response
@@ -195,7 +253,11 @@ module Phaxio
195
253
  end
196
254
 
197
255
  def response_phone_number_reference response
198
- PhoneNumberReference.new(response['phone_number'])
256
+ PhoneNumber::Reference.new(response['phone_number'])
257
+ end
258
+
259
+ def response_provisioning_urls response
260
+ ProvisioningURLs.new(response)
199
261
  end
200
262
 
201
263
  def atas_endpoint
@@ -213,6 +275,10 @@ module Phaxio
213
275
  def phone_number_endpoint id, phone_number
214
276
  "#{ata_endpoint(id)}/phone_numbers/#{phone_number}"
215
277
  end
278
+
279
+ def provisioning_urls_endpoint
280
+ "#{atas_endpoint}/provisioning_urls"
281
+ end
216
282
  end
217
283
  end
218
284
  end
@@ -1,63 +1,17 @@
1
1
  module Phaxio
2
2
  module Resources
3
- # Provides utilities for working with callbacks.
4
- # @see https://www.phaxio.com/docs/api/v2/faxes/send_callback
5
- # @see https://www.phaxio.com/docs/api/v2/faxes/receive_callback
3
+ # This class is provided for the sake of backwards compatibility; use the Webhook resource instead.
4
+ # @see Phaxio::Resources::Webhook
6
5
  class Callback
7
- DIGEST = OpenSSL::Digest.new('sha1')
8
- private_constant :DIGEST
9
-
10
6
  class << self
11
- # Determines whether or not the passed signature is valid for the given
12
- # url, params, and files.
13
- # @param signature [String]
14
- # The signature received from Phaxio.
15
- # @param url [String]
16
- # The callback URL used in this request.
17
- # @param params [Hash]
18
- # The parameters received with the callback, excluding files.
19
- # @param files [Array<File>]
20
- # The files received with the callback, if any.
21
- # @return [true, false]
22
- # @raise [Phaxio::Error::PhaxioError]
23
- # @see https://www.phaxio.com/docs/security/callbacks
24
- def valid_signature? signature, url, params, files = []
25
- check_signature = generate_check_signature url, params, files
26
- check_signature == signature
27
- end
28
-
29
- private
30
-
31
- def generate_check_signature url, params, files = []
32
- params_string = generate_params_string(params)
33
- files_string = generate_files_string(files)
34
- callback_data = "#{url}#{params_string}#{files_string}"
35
- OpenSSL::HMAC.hexdigest(DIGEST, callback_token, callback_data)
36
- end
37
-
38
- def callback_token
39
- Phaxio.callback_token or raise(Error::PhaxioError, 'No callback token has been set')
40
- end
41
-
42
- def generate_params_string(params)
43
- sorted_params = params.sort_by { |key, _value| key }
44
- params_strings = sorted_params.map { |key, value| "#{key}#{value}" }
45
- params_strings.join
46
- end
47
-
48
- def generate_files_string(files)
49
- files_array = files_to_array(files).reject(&:nil?)
50
- sorted_files = files_array.sort_by { |file| file[:name] }
51
- files_strings = sorted_files.map { |file| generate_file_string(file) }
52
- files_strings.join
53
- end
54
-
55
- def files_to_array(files)
56
- files.is_a?(Array) ? files : [files]
57
- end
58
-
59
- def generate_file_string(file)
60
- file[:name] + DIGEST.hexdigest(file[:tempfile].read)
7
+ def valid_signature? *args
8
+ Phaxio::Resources::Webhook.valid_signature? *args
9
+ rescue Error::PhaxioError => error
10
+ if error.message == 'No webhook token has been set'
11
+ raise Error::PhaxioError, 'No callback token has been set'
12
+ else
13
+ raise error
14
+ end
61
15
  end
62
16
  end
63
17
  end
@@ -84,7 +84,7 @@ module Phaxio
84
84
  attr_accessor :id
85
85
 
86
86
  # Gets the referenced fax.
87
- # @return [Phaxio::Resource::Fax]
87
+ # @return [Phaxio::Resources::Fax]
88
88
  # The referenced Fax.
89
89
  def get
90
90
  Fax.get self
@@ -120,7 +120,7 @@ module Phaxio
120
120
  # @return [Phaxio::Resource::Collection<Phaxio::Resources::Fax>]
121
121
  # The collection of faxes matching your request.
122
122
  # @raise [Phaxio::Error::PhaxioError]
123
- # @see https://www.phaxio.com/docs/api/v2/faxes/list_faxes
123
+ # @see https://www.phaxio.com/docs/api/v2.1/faxes/list_faxes
124
124
  def list params = {}
125
125
  response = Client.request :get, faxes_endpoint, params
126
126
  response_collection response
@@ -159,8 +159,8 @@ module Phaxio
159
159
  # @return [Phaxio::Resources::Fax]
160
160
  # The created fax.
161
161
  # @raise [Phaxio::Error::PhaxioError]
162
- # @see https://www.phaxio.com/docs/api/v2/faxes/create_and_send_fax
163
- # @see https://www.phaxio.com/docs/api/v2/faxes/batching
162
+ # @see https://www.phaxio.com/docs/api/v2.1/faxes/create_and_send_fax
163
+ # @see https://www.phaxio.com/docs/api/v2.1/faxes/batching
164
164
  def create params = {}
165
165
  response = Client.request :post, faxes_endpoint, params
166
166
  response_reference response
@@ -174,7 +174,7 @@ module Phaxio
174
174
  # A hash of parameters to send to Phaxio. This action takes no unique parameters.
175
175
  # @return [Phaxio::Resource::Fax] The requested fax.
176
176
  # @raise [Phaxio::Error::PhaxioError]
177
- # @see https://www.phaxio.com/docs/api/v2/faxes/get_fax
177
+ # @see https://www.phaxio.com/docs/api/v2.1/faxes/get_fax
178
178
  def get id, params = {}
179
179
  response = Client.request :get, fax_endpoint(id.to_i), params
180
180
  response_record response
@@ -191,7 +191,7 @@ module Phaxio
191
191
  # @return [Phaxio::Resources::Fax::Reference]
192
192
  # A reference to the canceled fax.
193
193
  # @raise [Phaxio::Error::PhaxioError]
194
- # @see https://www.phaxio.com/docs/api/v2/faxes/cancel
194
+ # @see https://www.phaxio.com/docs/api/v2.1/faxes/cancel
195
195
  def cancel id, params = {}
196
196
  response = Client.request :post, cancel_fax_endpoint(id), params
197
197
  response_reference response
@@ -207,7 +207,7 @@ module Phaxio
207
207
  # @return [Phaxio::Resources::Fax::Reference]
208
208
  # A reference to the resent fax.
209
209
  # @raise [Phaxio::Error::PhaxioError]
210
- # @see https://www.phaxio.com/docs/api/v2/faxes/resend
210
+ # @see https://www.phaxio.com/docs/api/v2.1/faxes/resend
211
211
  def resend id, params = {}
212
212
  response = Client.request :post, resend_fax_endpoint(id), params
213
213
  response_reference response
@@ -221,7 +221,7 @@ module Phaxio
221
221
  # parameters.
222
222
  # @return [true]
223
223
  # @raise [Phaxio::Error::PhaxioError]
224
- # @see https://www.phaxio.com/docs/api/v2/faxes/delete_fax
224
+ # @see https://www.phaxio.com/docs/api/v2.1/faxes/delete_fax
225
225
  def delete id, params = {}
226
226
  Client.request :delete, fax_endpoint(id), params
227
227
  true
@@ -235,7 +235,7 @@ module Phaxio
235
235
  # parameters.
236
236
  # @return [true]
237
237
  # @raise [Phaxio::Error::PhaxioError]
238
- # @see https://www.phaxio.com/docs/api/v2/faxes/delete_fax_file
238
+ # @see https://www.phaxio.com/docs/api/v2.1/faxes/delete_fax_file
239
239
  def delete_file id, params = {}
240
240
  Client.request :delete, fax_file_endpoint(id), params
241
241
  true
@@ -252,7 +252,7 @@ module Phaxio
252
252
  # @return [File]
253
253
  # The requested fax file.
254
254
  # @raise [Phaxio::Error::PhaxioError]
255
- # @see https://www.phaxio.com/docs/api/v2/faxes/get_fax_file
255
+ # @see https://www.phaxio.com/docs/api/v2.1/faxes/get_fax_file
256
256
  def file id, params = {}
257
257
  Client.request :get, fax_file_endpoint(id), params
258
258
  end
@@ -269,7 +269,7 @@ module Phaxio
269
269
  # number. Default is the public Phaxio phone number.
270
270
  # @return [true]
271
271
  # @raise [Phaxio::Error::PhaxioError]
272
- # @see https://www.phaxio.com/docs/api/v2/faxes/test_receive
272
+ # @see https://www.phaxio.com/docs/api/v2.1/faxes/test_receive
273
273
  def test_receive params = {}
274
274
  Client.request :post, faxes_endpoint, test_receive_params(params)
275
275
  true
@@ -28,7 +28,7 @@ module Phaxio
28
28
  # file instead of a PhaxCode object.
29
29
  # @return [Phaxio::Resources::PhaxCode | File] The created PhaxCode
30
30
  # @raise [Phaxio::Error::PhaxioError]
31
- # @see https://www.phaxio.com/docs/api/v2/phaxcodes/create_phax_code
31
+ # @see https://www.phaxio.com/docs/api/v2.1/phaxcodes/create_phax_code
32
32
  def create params = {}
33
33
  endpoint = case (params[:type] || params['type']).to_s
34
34
  when 'png' then phax_codes_endpoint_png
@@ -48,7 +48,7 @@ module Phaxio
48
48
  # PhaxCode object.
49
49
  # @return [Phaxio::Resources::PhaxCode | File]
50
50
  # @raise [Phaxio::Error::PhaxioError]
51
- # @see https://www.phaxio.com/docs/api/v2/phaxcodes/retrieve_phax_code
51
+ # @see https://www.phaxio.com/docs/api/v2.1/phaxcodes/retrieve_phax_code
52
52
  def get params = {}
53
53
  identifier = params[:identifier] || params['identifier']
54
54
  endpoint = case (identifier)