phaxio 2.1.0.pre → 2.1.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.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +17 -17
  3. data/lib/phaxio/client.rb +2 -6
  4. data/lib/phaxio/config.rb +6 -4
  5. data/lib/phaxio/resource.rb +11 -5
  6. data/lib/phaxio/resources/account.rb +1 -1
  7. data/lib/phaxio/resources/ata.rb +85 -19
  8. data/lib/phaxio/resources/callback.rb +10 -56
  9. data/lib/phaxio/resources/fax.rb +11 -11
  10. data/lib/phaxio/resources/phax_code.rb +2 -2
  11. data/lib/phaxio/resources/phone_number.rb +31 -5
  12. data/lib/phaxio/resources/port_number.rb +42 -0
  13. data/lib/phaxio/resources/port_number_note.rb +51 -0
  14. data/lib/phaxio/resources/port_order.rb +172 -0
  15. data/lib/phaxio/resources/public/area_code.rb +1 -1
  16. data/lib/phaxio/resources/public/country.rb +1 -1
  17. data/lib/phaxio/resources/webhook.rb +65 -0
  18. data/lib/phaxio/version.rb +1 -1
  19. data/lib/phaxio.rb +12 -3
  20. data/spec/phaxio_spec.rb +7 -1
  21. data/spec/resources/account_spec.rb +1 -7
  22. data/spec/resources/ata_spec.rb +207 -0
  23. data/spec/resources/fax_spec.rb +35 -103
  24. data/spec/resources/phax_code_spec.rb +10 -44
  25. data/spec/resources/phone_number_spec.rb +19 -30
  26. data/spec/resources/port_number_note_spec.rb +33 -0
  27. data/spec/resources/port_number_spec.rb +32 -0
  28. data/spec/resources/port_order_spec.rb +76 -0
  29. data/spec/resources/public/area_code_spec.rb +1 -1
  30. data/spec/resources/public/country_spec.rb +1 -7
  31. data/spec/resources/{callback_spec.rb → webhook_spec.rb} +8 -8
  32. data/spec/spec_helper.rb +1 -0
  33. data/spec/support/{vcr_cassettes/resources/account/status.yml → cassettes/account/get.yml} +7 -9
  34. data/spec/support/cassettes/ata/add_phone_number.yml +89 -0
  35. data/spec/support/{vcr_cassettes/resources/fax/resend.yml → cassettes/ata/create.yml} +12 -13
  36. data/spec/support/cassettes/ata/delete.yml +86 -0
  37. data/spec/support/cassettes/ata/get.yml +87 -0
  38. data/spec/support/cassettes/ata/list.yml +67 -0
  39. data/spec/support/{vcr_cassettes/resources/phax_code/get_id.yml → cassettes/ata/provisioning_urls.yml} +10 -13
  40. data/spec/support/cassettes/ata/reference.yml +87 -0
  41. data/spec/support/cassettes/ata/regenerate.yml +89 -0
  42. data/spec/support/cassettes/ata/remove_phone_number.yml +130 -0
  43. data/spec/support/cassettes/ata/update.yml +89 -0
  44. data/spec/support/{vcr_cassettes/resources/fax/create_for_cancel.yml → cassettes/fax/cancel.yml} +51 -11
  45. data/spec/support/{vcr_cassettes/resources/fax/create_for_reference.yml → cassettes/fax/create.yml} +11 -13
  46. data/spec/support/{vcr_cassettes/resources/fax/create.yml → cassettes/fax/delete.yml} +49 -11
  47. data/spec/support/{vcr_cassettes/resources/fax/create_for_delete.yml → cassettes/fax/delete_file.yml} +49 -11
  48. data/spec/support/cassettes/fax/file.yml +93 -0
  49. data/spec/support/{vcr_cassettes/resources/fax/create_for_download_file.yml → cassettes/fax/get.yml} +49 -11
  50. data/spec/support/{vcr_cassettes/resources → cassettes}/fax/list.yml +5 -7
  51. data/spec/support/cassettes/fax/reference.yml +88 -0
  52. data/spec/support/{vcr_cassettes/resources/fax/create_for_delete_file.yml → cassettes/fax/resend.yml} +51 -11
  53. data/spec/support/{vcr_cassettes/resources → cassettes}/fax/test_receive.yml +7 -9
  54. data/spec/support/{vcr_cassettes/resources → cassettes}/phax_code/create.yml +8 -10
  55. data/spec/support/{vcr_cassettes/resources → cassettes}/phax_code/create_png.yml +8 -10
  56. data/spec/support/cassettes/phax_code/get_by_id.yml +86 -0
  57. data/spec/support/{vcr_cassettes/resources/phax_code/get.yml → cassettes/phax_code/get_default.yml} +8 -10
  58. data/spec/support/{vcr_cassettes/resources/phax_code/get_png.yml → cassettes/phax_code/get_default_png.yml} +8 -10
  59. data/spec/support/cassettes/phax_code/get_png_by_id.yml +90 -0
  60. data/spec/support/{vcr_cassettes/resources → cassettes}/phone_number/create.yml +8 -10
  61. data/spec/support/{vcr_cassettes/resources → cassettes}/phone_number/get.yml +10 -12
  62. data/spec/support/cassettes/phone_number/list.yml +72 -0
  63. data/spec/support/cassettes/phone_number/reference.yml +45 -0
  64. data/spec/support/cassettes/phone_number/release.yml +86 -0
  65. data/spec/support/cassettes/port_number/get.yml +88 -0
  66. data/spec/support/cassettes/port_number_note/list.yml +88 -0
  67. data/spec/support/cassettes/port_order/create.yml +48 -0
  68. data/spec/support/cassettes/port_order/get.yml +91 -0
  69. data/spec/support/cassettes/port_order/list.yml +52 -0
  70. data/spec/support/{vcr_cassettes/resources/public/area_codes → cassettes/public/area_code}/list.yml +15 -17
  71. data/spec/support/{vcr_cassettes/resources → cassettes}/public/country/list.yml +5 -7
  72. data/spec/support/vcr.rb +24 -6
  73. metadata +115 -41
  74. data/spec/support/credentials.rb +0 -7
  75. data/spec/support/vcr_cassettes/resources/fax/cancel.yml +0 -47
  76. data/spec/support/vcr_cassettes/resources/fax/create_for_get.yml +0 -50
  77. data/spec/support/vcr_cassettes/resources/fax/create_for_resend.yml +0 -50
  78. data/spec/support/vcr_cassettes/resources/fax/delete.yml +0 -45
  79. data/spec/support/vcr_cassettes/resources/fax/delete_file.yml +0 -45
  80. data/spec/support/vcr_cassettes/resources/fax/file.yml +0 -50
  81. data/spec/support/vcr_cassettes/resources/fax/get.yml +0 -45
  82. data/spec/support/vcr_cassettes/resources/fax/reference.yml +0 -45
  83. data/spec/support/vcr_cassettes/resources/phax_code/get_id_png.yml +0 -50
  84. data/spec/support/vcr_cassettes/resources/phone_number/list.yml +0 -60
  85. 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: 508fcbe635de23974bfdefe06aec6811fd7f91bd03377dd4a90b971cd1b6a44f
4
+ data.tar.gz: e33347de232350332fe604ecae8c0f511a3774fb9ef7c863f6a269bb53bad787
5
5
  SHA512:
6
- metadata.gz: 99cfc91fefd07016507eb20049f5c7afeca903d2c227941bcd55a1cd14913faa1b03e69a2ceea1798da457bf338a48e5ad7c212f107aba598378965210a0d24a
7
- data.tar.gz: cf3b858ff97a2b005f50a21709ee524fd20b6fc12080a59a48d57842b9e295f18de91a20f48ba5f9f1b64d632e5a38d7d375b0af8e323cea2232df49421deb93
6
+ metadata.gz: 6a041ed3d71f144ae2c2776a69be5d947982f1eb76c2a2e748f07b245d48ac8714c9199702b71a9b8c0cd404ea6318518834cb9da9365f569cc6b35633c66e83
7
+ data.tar.gz: d50baaa1fc873a3a20268fb0c56d1b902d0b922d8fcdb731d40e23d89c74bd9c6fea3e35aa66e8c7472502b5af7ac1ad060b5cec22d3fe244e816d98d9be10d5
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
 
@@ -153,8 +149,8 @@ module Phaxio
153
149
  end
154
150
 
155
151
  def api_headers params
156
- api_key = params[:api_key] || Phaxio.api_key
157
- api_secret = params[:api_secret] || Phaxio.api_secret
152
+ api_key = params.delete(:api_key) || Phaxio.api_key
153
+ api_secret = params.delete(:api_secret) || Phaxio.api_secret
158
154
  return unless api_key && api_secret
159
155
  auth = Base64.strict_encode64("#{api_key}:#{api_secret}")
160
156
  {'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
@@ -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)
@@ -33,6 +33,32 @@ module Phaxio
33
33
 
34
34
  has_time_attributes %w(provisioned_at last_billed_at)
35
35
 
36
+ # A reference to a phone number, returned by some actions.
37
+ class Reference
38
+ # @return [String]
39
+ # The phone number in E.164 format.
40
+ attr_accessor :phone_number
41
+
42
+ def to_s
43
+ phone_number
44
+ end
45
+
46
+ # Gets the referenced phone number.
47
+ # @return [Phaxio::Resources::PhoneNumber]
48
+ # The referenced phone number.
49
+ def get
50
+ PhoneNumber.get self
51
+ end
52
+ alias :retrieve :get
53
+ alias :find :get
54
+
55
+ private
56
+
57
+ def initialize phone_number
58
+ self.phone_number = phone_number
59
+ end
60
+ end
61
+
36
62
  private
37
63
 
38
64
  class << self
@@ -44,7 +70,7 @@ module Phaxio
44
70
  # - *callback_url* [String] - A callback URL that we'll post to when a fax is received by this number. This will override the global receive callback URL, if you have one specified.
45
71
  # @return [Phaxio::Resources::PhoneNumber] The newly provisioned number.
46
72
  # @raise [Phaxio::Error::PhaxioError]
47
- # @see https://www.phaxio.com/docs/api/v2/phone_numbers/provision
73
+ # @see https://www.phaxio.com/docs/api/v2.1/phone_numbers/provision
48
74
  def create params = {}
49
75
  response = Client.request :post, phone_numbers_endpoint, params
50
76
  response_record response
@@ -58,9 +84,9 @@ module Phaxio
58
84
  # A hash of parameters to send to Phaxio. This action has no unique parameters.
59
85
  # @return [Phaxio::Resources::PhoneNumber] The requested number.
60
86
  # @raise [Phaxio::Error::PhaxioError]
61
- # @see https://www.phaxio.com/docs/api/v2/phone_numbers/get_number
87
+ # @see https://www.phaxio.com/docs/api/v2.1/phone_numbers/get_number
62
88
  def get phone_number, params = {}
63
- response = Client.request :get, phone_number_endpoint(phone_number), params
89
+ response = Client.request :get, phone_number_endpoint(phone_number.to_s), params
64
90
  response_record response
65
91
  end
66
92
  alias :find :get
@@ -76,7 +102,7 @@ module Phaxio
76
102
  # @return [Phaxio::Resource::Collection<Phaxio::Resources::PhoneNumber>]
77
103
  # A collection of phone numbers.
78
104
  # @raise [Phaxio::Error::PhaxioError]
79
- # @see https://www.phaxio.com/docs/api/v2/phone_numbers/list
105
+ # @see https://www.phaxio.com/docs/api/v2.1/phone_numbers/list
80
106
  def list params = {}
81
107
  response = Client.request :get, phone_numbers_endpoint, params
82
108
  response_collection response
@@ -90,7 +116,7 @@ module Phaxio
90
116
  # A hash of parameters to send to Phaxio. This action has no unique parameters.
91
117
  # @return true
92
118
  # @raise [Phaxio::Error::PhaxioError]
93
- # @see https://www.phaxio.com/docs/api/v2/phone_numbers/release
119
+ # @see https://www.phaxio.com/docs/api/v2.1/phone_numbers/release
94
120
  def delete phone_number, params = {}
95
121
  Client.request :delete, phone_number_endpoint(phone_number), params
96
122
  true