phaxio 2.0.1 → 2.1.0.pre
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 +5 -5
- data/Gemfile +2 -1
- data/README.md +46 -13
- data/lib/phaxio.rb +2 -1
- data/lib/phaxio/client.rb +31 -10
- data/lib/phaxio/config.rb +1 -1
- data/lib/phaxio/resources/ata.rb +219 -0
- data/lib/phaxio/version.rb +1 -1
- data/phaxio.gemspec +1 -1
- data/spec/client_spec.rb +6 -6
- data/spec/resources/fax_spec.rb +40 -19
- data/spec/resources/phax_code_spec.rb +52 -24
- data/spec/support/vcr.rb +1 -2
- data/spec/support/vcr_cassettes/resources/account/status.yml +14 -13
- data/spec/support/vcr_cassettes/resources/fax/cancel.yml +16 -15
- data/spec/support/vcr_cassettes/resources/fax/create.yml +17 -197
- data/spec/support/vcr_cassettes/resources/fax/create_for_cancel.yml +50 -0
- data/spec/support/vcr_cassettes/resources/fax/create_for_delete.yml +50 -0
- data/spec/support/vcr_cassettes/resources/fax/create_for_delete_file.yml +50 -0
- data/spec/support/vcr_cassettes/resources/fax/create_for_download_file.yml +50 -0
- data/spec/support/vcr_cassettes/resources/fax/create_for_get.yml +50 -0
- data/spec/support/vcr_cassettes/resources/fax/create_for_reference.yml +50 -0
- data/spec/support/vcr_cassettes/resources/fax/create_for_resend.yml +50 -0
- data/spec/support/vcr_cassettes/resources/fax/delete.yml +11 -10
- data/spec/support/vcr_cassettes/resources/fax/delete_file.yml +11 -10
- data/spec/support/vcr_cassettes/resources/fax/file.yml +15 -216
- data/spec/support/vcr_cassettes/resources/fax/get.yml +14 -13
- data/spec/support/vcr_cassettes/resources/fax/list.yml +15 -20
- data/spec/support/vcr_cassettes/resources/fax/reference.yml +45 -0
- data/spec/support/vcr_cassettes/resources/fax/resend.yml +15 -14
- data/spec/support/vcr_cassettes/resources/fax/test_receive.yml +14 -194
- data/spec/support/vcr_cassettes/resources/phax_code/create.yml +12 -65
- data/spec/support/vcr_cassettes/resources/phax_code/create_png.yml +52 -0
- data/spec/support/vcr_cassettes/resources/phax_code/get.yml +13 -158
- data/spec/support/vcr_cassettes/resources/phax_code/get_id.yml +46 -0
- data/spec/support/vcr_cassettes/resources/phax_code/get_id_png.yml +50 -0
- data/spec/support/vcr_cassettes/resources/phax_code/get_png.yml +50 -0
- data/spec/support/vcr_cassettes/resources/phone_number/create.yml +16 -15
- data/spec/support/vcr_cassettes/resources/phone_number/get.yml +14 -13
- data/spec/support/vcr_cassettes/resources/phone_number/list.yml +24 -16
- data/spec/support/vcr_cassettes/resources/phone_number/release.yml +13 -12
- data/spec/support/vcr_cassettes/resources/public/area_codes/list.yml +23 -21
- data/spec/support/vcr_cassettes/resources/public/country/list.yml +15 -14
- metadata +26 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7f20cd3d8695312c8b64cf40cc01b8fe0e320b921a3527abc1ca005a9d140b11
|
4
|
+
data.tar.gz: '088662055ff2bd6ebbeb5055ad7316bd6d99acf9a93249383d9ad1aa08133a4b'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99cfc91fefd07016507eb20049f5c7afeca903d2c227941bcd55a1cd14913faa1b03e69a2ceea1798da457bf338a48e5ad7c212f107aba598378965210a0d24a
|
7
|
+
data.tar.gz: cf3b858ff97a2b005f50a21709ee524fd20b6fc12080a59a48d57842b9e295f18de91a20f48ba5f9f1b64d632e5a38d7d375b0af8e323cea2232df49421deb93
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -261,27 +261,60 @@ Callback.valid_signature? received_signature, callback_url, received_params, rec
|
|
261
261
|
require 'sinatra/base'
|
262
262
|
require 'phaxio'
|
263
263
|
|
264
|
-
class
|
265
|
-
Phaxio.
|
266
|
-
|
267
|
-
|
268
|
-
config.callback_token = '0123456789'
|
269
|
-
end
|
270
|
-
|
271
|
-
post '/phaxio_callback' do
|
264
|
+
class PhaxioWebhookExample < Sinatra::Base
|
265
|
+
Phaxio.callback_token = 'YOUR WEBHOOK TOKEN HERE'
|
266
|
+
|
267
|
+
post '/webhook' do
|
272
268
|
signature = request.env['HTTP_X_PHAXIO_SIGNATURE']
|
273
269
|
url = request.url
|
274
|
-
file_params = params[:
|
275
|
-
if Phaxio::Callback.valid_signature? signature, url,
|
270
|
+
file_params = params[:file]
|
271
|
+
if Phaxio::Callback.valid_signature? signature, url, webhook_params, file_params
|
276
272
|
'Success'
|
277
273
|
else
|
278
|
-
'Invalid
|
274
|
+
'Invalid webhook signature'
|
279
275
|
end
|
280
276
|
end
|
281
277
|
|
282
|
-
def
|
278
|
+
def webhook_params
|
283
279
|
params.select do |key, _value|
|
284
|
-
%w(success is_test direction fax metadata message).include?(key)
|
280
|
+
%w(success is_test direction fax metadata message event_type).include?(key)
|
281
|
+
end
|
282
|
+
end
|
283
|
+
end
|
284
|
+
```
|
285
|
+
|
286
|
+
## Webhook Validation Example with Rails Controller
|
287
|
+
|
288
|
+
``` ruby
|
289
|
+
class WebhookController < ApplicationController
|
290
|
+
skip_before_action :verify_authenticity_token
|
291
|
+
|
292
|
+
def index
|
293
|
+
signature = request.headers['X-Phaxio-Signature']
|
294
|
+
Phaxio.callback_token = 'YOUR WEBHOOK TOKEN HERE'
|
295
|
+
url = request.original_url
|
296
|
+
|
297
|
+
Rails.logger.debug "URL: " + url
|
298
|
+
Rails.logger.debug "Signature: " + signature
|
299
|
+
Rails.logger.debug "params: " + params.inspect
|
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
|
303
|
+
Rails.logger.debug "Success"
|
304
|
+
render plain: 'Success'
|
305
|
+
else
|
306
|
+
Rails.logger.debug "Invalid callback signature"
|
307
|
+
render plain: 'Invalid callback signature'
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
def webhook_params
|
312
|
+
params.permit(:success, :is_test, :direction, :fax, :metadata, :event_type, :message)
|
313
|
+
end
|
314
|
+
|
315
|
+
def file_params
|
316
|
+
if params[:file]
|
317
|
+
[{ :name => 'file', :tempfile => params[:file].tempfile }]
|
285
318
|
end
|
286
319
|
end
|
287
320
|
end
|
data/lib/phaxio.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'base64'
|
1
2
|
require 'json'
|
2
3
|
require 'tempfile'
|
3
4
|
require 'openssl'
|
@@ -16,7 +17,7 @@ Dir[File.expand_path(File.join('..', 'phaxio', 'helpers', '*.rb'), __FILE__)].ea
|
|
16
17
|
require file
|
17
18
|
end
|
18
19
|
|
19
|
-
%w[fax_recipient fax account callback phax_code phone_number public].each do |filename|
|
20
|
+
%w[fax_recipient fax account callback phax_code phone_number public ata].each do |filename|
|
20
21
|
require File.expand_path(File.join('..', 'phaxio', 'resources', filename), __FILE__)
|
21
22
|
end
|
22
23
|
|
data/lib/phaxio/client.rb
CHANGED
@@ -27,6 +27,7 @@ module Phaxio
|
|
27
27
|
begin
|
28
28
|
response = case method.to_s
|
29
29
|
when 'post' then post(endpoint, params)
|
30
|
+
when 'patch' then patch(endpoint, params)
|
30
31
|
when 'get' then get(endpoint, params)
|
31
32
|
when 'delete' then delete(endpoint, params)
|
32
33
|
else raise ArgumentError, "HTTP method `#{method}` is not supported."
|
@@ -43,6 +44,10 @@ module Phaxio
|
|
43
44
|
conn.request :multipart
|
44
45
|
conn.request :url_encoded
|
45
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
|
46
51
|
end
|
47
52
|
end
|
48
53
|
|
@@ -109,20 +114,35 @@ module Phaxio
|
|
109
114
|
params[k] = file_param
|
110
115
|
end
|
111
116
|
|
112
|
-
conn.post endpoint, params
|
117
|
+
conn.post endpoint, params, api_headers(params)
|
118
|
+
end
|
119
|
+
|
120
|
+
def patch endpoint, params = {}
|
121
|
+
# Handle file params
|
122
|
+
params.each do |k, v|
|
123
|
+
next unless k.to_s == 'file'
|
124
|
+
|
125
|
+
if v.is_a? Array
|
126
|
+
file_param = v.map { |file| file_to_param file }
|
127
|
+
else
|
128
|
+
file_param = file_to_param v
|
129
|
+
end
|
130
|
+
|
131
|
+
params[k] = file_param
|
132
|
+
end
|
133
|
+
|
134
|
+
conn.patch endpoint, params, api_headers(params)
|
113
135
|
end
|
114
136
|
|
115
137
|
def get endpoint, params = {}
|
116
|
-
conn.get endpoint, params
|
138
|
+
conn.get endpoint, params, api_headers(params)
|
117
139
|
end
|
118
140
|
|
119
141
|
def delete endpoint, params = {}
|
120
|
-
conn.delete endpoint, params
|
142
|
+
conn.delete endpoint, params, api_headers(params)
|
121
143
|
end
|
122
144
|
|
123
145
|
def api_params params
|
124
|
-
params = default_params.merge params
|
125
|
-
|
126
146
|
# Convert times to ISO 8601
|
127
147
|
params.each do |k, v|
|
128
148
|
next unless v.kind_of?(Time) || v.kind_of?(Date)
|
@@ -132,11 +152,12 @@ module Phaxio
|
|
132
152
|
params
|
133
153
|
end
|
134
154
|
|
135
|
-
def
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
}
|
155
|
+
def api_headers params
|
156
|
+
api_key = params[:api_key] || Phaxio.api_key
|
157
|
+
api_secret = params[:api_secret] || Phaxio.api_secret
|
158
|
+
return unless api_key && api_secret
|
159
|
+
auth = Base64.strict_encode64("#{api_key}:#{api_secret}")
|
160
|
+
{'Authorization' => "Basic #{auth}"}
|
140
161
|
end
|
141
162
|
|
142
163
|
def file_to_param file
|
data/lib/phaxio/config.rb
CHANGED
@@ -0,0 +1,219 @@
|
|
1
|
+
module Phaxio
|
2
|
+
module Resources
|
3
|
+
# Provides functionality for managing ATAs.
|
4
|
+
class Ata < Resource
|
5
|
+
ATAS_PATH = 'atas'.freeze
|
6
|
+
private_constant :ATAS_PATH
|
7
|
+
|
8
|
+
# @return [Integer] the ID of the ATA.
|
9
|
+
# @!attribute id
|
10
|
+
|
11
|
+
# @return [String] the name of the ATA.
|
12
|
+
# @!attribute name
|
13
|
+
|
14
|
+
# @return [String] the description of the ATA.
|
15
|
+
# @!attribute description
|
16
|
+
|
17
|
+
# @return [String] The user phone number associated with the ATA.
|
18
|
+
# @!attribute user_phone_number
|
19
|
+
|
20
|
+
# @return [String] The domain for the ATA.
|
21
|
+
# @!attribute domain
|
22
|
+
|
23
|
+
# @return [String] The username for the ATA.
|
24
|
+
# @!attribute uername
|
25
|
+
|
26
|
+
# @return [String] The password for the ATA.
|
27
|
+
# @!attribute password
|
28
|
+
|
29
|
+
has_normal_attributes %w[
|
30
|
+
id name description user_phone_number domain username password
|
31
|
+
]
|
32
|
+
|
33
|
+
# A reference to an ATA. This is returned by certain actions which don't
|
34
|
+
# return the full ATA.
|
35
|
+
class Reference
|
36
|
+
# @return [Integer]
|
37
|
+
# The ID of the referenced ATA.
|
38
|
+
attr_accessor :id
|
39
|
+
|
40
|
+
def to_i
|
41
|
+
id
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def initialize id
|
47
|
+
self.id = id
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
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
|
57
|
+
|
58
|
+
def to_s
|
59
|
+
phone_number
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def initialize phone_number
|
65
|
+
self.phone_number = phone_number
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class << self
|
70
|
+
# @macro paging
|
71
|
+
# List ATAs
|
72
|
+
# @param params[Hash]
|
73
|
+
# Any parameters to send to Phaxio.
|
74
|
+
# @return [Phaxio::Resource::Collection<Phaxio::Resources::Ata>]
|
75
|
+
# The collection of ATAs matching your request.
|
76
|
+
# @raise [Phaxio::Error::PhaxioError]
|
77
|
+
# @see https://www.phaxio.com/docs/api/v2.1/atas/list
|
78
|
+
def list params = {}
|
79
|
+
response = Client.request :get, atas_endpoint, params
|
80
|
+
response_collection response
|
81
|
+
end
|
82
|
+
|
83
|
+
# Create an ATA
|
84
|
+
# @param params [Hash]
|
85
|
+
# Any parameters to send to Phaxio.
|
86
|
+
# - *name* [String] - A name used to identify the ATA.
|
87
|
+
# - *description* [String] - A longer description of the ATA.
|
88
|
+
# - *domain* [String] - A domain for the ATA.
|
89
|
+
# @return [Phaxio::Resources::Ata]
|
90
|
+
# The created ATA, including the generated username and password.
|
91
|
+
# @raise [Phaxio::Error::PhaxioError]
|
92
|
+
# @see https://www.phaxio.com/docs/api/v2.1/atas/create
|
93
|
+
def create params = {}
|
94
|
+
response = Client.request :post, atas_endpoint, params
|
95
|
+
response_record response
|
96
|
+
end
|
97
|
+
|
98
|
+
# Get an ATA
|
99
|
+
# @param id [Integer]
|
100
|
+
# The ID of the ATA to retrieve information about.
|
101
|
+
# @param params [Hash]
|
102
|
+
# Any parameters to send to Phaxio. This action takes no unique parameters.
|
103
|
+
# @return [Phaxio::Resources::Ata]
|
104
|
+
# The requested ATA.
|
105
|
+
# @raise [Phaxio::Error::PhaxioError]
|
106
|
+
# @see https://www.phaxio.com/docs/api/v2.1/atas/get
|
107
|
+
def get id, params = {}
|
108
|
+
response = Client.request :get, ata_endpoint(id.to_i), params
|
109
|
+
response_record response
|
110
|
+
end
|
111
|
+
alias :retrieve :get
|
112
|
+
alias :find :get
|
113
|
+
|
114
|
+
# Update an ATA
|
115
|
+
# @param id [Integer]
|
116
|
+
# The ID of the ATA to update.
|
117
|
+
# @param params [Hash]
|
118
|
+
# Any parameters to send to Phaxio.
|
119
|
+
# - *name* [String] - A name used to identify the ATA.
|
120
|
+
# - *description* [String] - A longer description of the ATA.
|
121
|
+
# - *domain* [String] - A domain for the ATA.
|
122
|
+
# @return [Phaxio::Resources::Ata]
|
123
|
+
# The updated ATA.
|
124
|
+
# @raise [Phaxio::Error::PhaxioError]
|
125
|
+
# @see https://www.phaxio.com/docs/api/v2.1/atas/update
|
126
|
+
def update id, params = {}
|
127
|
+
response = Client.request :patch, ata_endpoint(id.to_i), params
|
128
|
+
response_record response
|
129
|
+
end
|
130
|
+
|
131
|
+
# Regenerate credentials for an ATA
|
132
|
+
# @param id [Integer]
|
133
|
+
# The ID of the ATA for which credentials should be regenerated.
|
134
|
+
# @param params [Hash]
|
135
|
+
# Any parameters to send to Phaxio. This action takes no unique parameters.
|
136
|
+
# @return [Phaxio::Resources::Ata]
|
137
|
+
# The ATA, including the new username and password.
|
138
|
+
# @raise Phaxio::Error::PhaxioError
|
139
|
+
# @see https://www.phaxio.com/docs/api/v2.1/atas/regenerate_credentials
|
140
|
+
def regenerate_credentials id, params = {}
|
141
|
+
response = Client.request :patch, regenerate_credentials_endpoint(id.to_i), params
|
142
|
+
response_record response
|
143
|
+
end
|
144
|
+
|
145
|
+
# Delete an ATA
|
146
|
+
# @param id [Integer]
|
147
|
+
# The Id of the ATA to delete.
|
148
|
+
# @param params [Hash]
|
149
|
+
# Any parameters to send to Phaxio. This action takes no unique parameters.
|
150
|
+
# @return [Phaxio::Resources::Ata::Reference]
|
151
|
+
# A reference to the deleted ATA.
|
152
|
+
# @raise [Phaxio::Error::PhaxioError]
|
153
|
+
# @see https://www.phaxio.com/docs/api/v2.1/atas/delete
|
154
|
+
def delete id, params = {}
|
155
|
+
response = Client.request :delete, ata_endpoint(id.to_i), params
|
156
|
+
response_reference response
|
157
|
+
end
|
158
|
+
|
159
|
+
# Add a phone number
|
160
|
+
# @param id [Integer]
|
161
|
+
# The ID of the ATA to which you want to add a number.
|
162
|
+
# @param phone_number [String]
|
163
|
+
# The phone number to add to the ATA.
|
164
|
+
# @param params [Hash]
|
165
|
+
# Any parameters to send to Phaxio. This action takes no unique parameters.
|
166
|
+
# @return [Phaxio::Resources::Ata::PhoneNumberReference]
|
167
|
+
# A reference to the added phone number.
|
168
|
+
# @raise [Phaxio::Error::PhaxioError]
|
169
|
+
# @see https://www.phaxio.com/docs/api/v2.1/atas/add_phone_number
|
170
|
+
def add_phone_number id, phone_number, params = {}
|
171
|
+
response = Client.request :post, phone_number_endpoint(id, phone_number), params
|
172
|
+
response_phone_number_reference response
|
173
|
+
end
|
174
|
+
|
175
|
+
# Remove a phone number
|
176
|
+
# @param id [Integer]
|
177
|
+
# The ID of the ATA from which you want to remove the phone number.
|
178
|
+
# @param phone_number [String]
|
179
|
+
# The phone number you want to remove.
|
180
|
+
# @param params [Hash]
|
181
|
+
# Any parameters to send to Phaxio. This action takes no unique parameters.
|
182
|
+
# @return [Phaxio::Resources::Ata::PhoneNumberReference]
|
183
|
+
# A reference to the removed phone number.
|
184
|
+
# @raise [Phaxio::Error::PhaxioError]
|
185
|
+
# @see https://www.phaxio.com/docs/api/v2.1/atas/remove_phone_number
|
186
|
+
def remove_phone_number id, phone_number, params = {}
|
187
|
+
response = Client.request :delete, phone_number_endpoint(id, phone_number), params
|
188
|
+
response_phone_number_reference response
|
189
|
+
end
|
190
|
+
|
191
|
+
private
|
192
|
+
|
193
|
+
def response_reference response
|
194
|
+
Reference.new Integer(response['id'])
|
195
|
+
end
|
196
|
+
|
197
|
+
def response_phone_number_reference response
|
198
|
+
PhoneNumberReference.new(response['phone_number'])
|
199
|
+
end
|
200
|
+
|
201
|
+
def atas_endpoint
|
202
|
+
ATAS_PATH
|
203
|
+
end
|
204
|
+
|
205
|
+
def ata_endpoint id
|
206
|
+
"#{atas_endpoint}/#{id}"
|
207
|
+
end
|
208
|
+
|
209
|
+
def regenerate_credentials_endpoint id
|
210
|
+
"#{ata_endpoint(id)}/regenerate_credentials"
|
211
|
+
end
|
212
|
+
|
213
|
+
def phone_number_endpoint id, phone_number
|
214
|
+
"#{ata_endpoint(id)}/phone_numbers/#{phone_number}"
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
data/lib/phaxio/version.rb
CHANGED
data/phaxio.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
|
|
17
17
|
gem.licenses = ['MIT']
|
18
18
|
|
19
19
|
gem.required_ruby_version = '>= 2.0'
|
20
|
-
gem.add_dependency 'faraday', '
|
20
|
+
gem.add_dependency 'faraday', '>= 0.10', '< 2.0'
|
21
21
|
gem.add_dependency 'mime-types', '~> 3.0'
|
22
22
|
gem.add_dependency 'activesupport'
|
23
23
|
end
|
data/spec/client_spec.rb
CHANGED
@@ -65,9 +65,9 @@ RSpec.describe Phaxio::Client do
|
|
65
65
|
end
|
66
66
|
|
67
67
|
it 'uses the configured API key and secret by default' do
|
68
|
-
expect(test_connection).to receive(:get) do |_endpoint,
|
69
|
-
|
70
|
-
expect(
|
68
|
+
expect(test_connection).to receive(:get) do |_endpoint, _request_params, request_headers|
|
69
|
+
auth_header = "Basic #{Base64.strict_encode64("#{Phaxio.api_key}:#{Phaxio.api_secret}")}"
|
70
|
+
expect(request_headers['Authorization']).to eq(auth_header)
|
71
71
|
test_response 200
|
72
72
|
end
|
73
73
|
client.request :get, 'test'
|
@@ -76,9 +76,9 @@ RSpec.describe Phaxio::Client do
|
|
76
76
|
it 'uses the api key specified in the params hash' do
|
77
77
|
custom_api_key = 'custom-api-key'
|
78
78
|
custom_api_secret = 'custom-api-secret'
|
79
|
-
expect(test_connection).to receive(:get) do |_endpoint,
|
80
|
-
|
81
|
-
expect(
|
79
|
+
expect(test_connection).to receive(:get) do |_endpoint, _request_params, request_headers|
|
80
|
+
auth_header = "Basic #{Base64.strict_encode64('custom-api-key:custom-api-secret')}"
|
81
|
+
expect(request_headers['Authorization']).to eq(auth_header)
|
82
82
|
test_response 200
|
83
83
|
end
|
84
84
|
client.request :get, 'test', api_key: custom_api_key, api_secret: custom_api_secret
|