Skip to content

Commit 2c04bc4

Browse files
authored
Verify v2 Validation Updates (#309)
* Adding validation to `from` and `brand` parameters for sms and whatsapp channels
1 parent 35e4214 commit 2c04bc4

File tree

13 files changed

+102
-16
lines changed

13 files changed

+102
-16
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
strategy:
2525
matrix:
2626
os: [ubuntu-latest, windows-latest, macos-latest]
27-
ruby: [2.5, 2.6, 2.7, 3.0, 3.1]
27+
ruby: [3.0, 3.1, 3.2, 3.3]
2828
runs-on: ${{ matrix.os }}
2929
steps:
3030
- uses: actions/checkout@v2

CHANGES.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# 7.25.0
2+
3+
* Validation updates to Verify v2 SMS and WhatsApp channels. [#309](https://github.com/Vonage/vonage-ruby-sdk/pull/309)
4+
15
# 7.24.0
26

37
* Updating Video API functionality with methods for Live Captions, Audio Connector, Experience Composer, and a `publisheronly` cleint token role. [#307](https://github.com/Vonage/vonage-ruby-sdk/pull/307)

lib/vonage/verify2.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class Verify2 < Namespace
1717
# )
1818
#
1919
# @param [required, String] :brand The brand that is sending the verification request
20+
# - Must be between 1 and 16 characters in length
2021
#
2122
# @param [required, Array<Hash>] :workflow An array of hashes for channels in the workflow
2223
#
@@ -32,6 +33,8 @@ class Verify2 < Namespace
3233
# @see https://developer.vonage.com/en/api/verify.v2#newRequest
3334
#
3435
def start_verification(brand:, workflow:, **opts)
36+
raise ArgumentError, ':brand must be a String' unless brand.is_a?(String)
37+
raise ArgumentError, "Invalid 'brand' value #{brand}. Length must be between 1 and 16 characters." unless brand.length.between?(1, 16)
3538
raise ArgumentError, ':workflow must be an Array' unless workflow.is_a?(Array)
3639
raise ArgumentError, ':workflow must not be empty' if workflow.empty?
3740

lib/vonage/verify2/channels/sms.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ def to=(to)
2020
end
2121

2222
def from=(from)
23+
validate_from(from)
2324
@from = from
2425
end
2526

@@ -49,5 +50,14 @@ def to_h
4950
private
5051

5152
attr_writer :channel
53+
54+
def validate_from(from)
55+
if from.match?(/\D/)
56+
raise ArgumentError, "Invalid alpha-numeric 'from' value #{from}. Length must be between 3 and 11 characters." unless from.length.between?(3, 11)
57+
else
58+
raise ArgumentError, "Invalid numeric 'from' value #{from}. Length must be between 11 and 15 characters." unless from.length.between?(11, 15)
59+
raise ArgumentError, "Invalid 'from' value #{from}. Expected to be in E.164 format" unless Phonelib.parse(from).valid?
60+
end
61+
end
5262
end
5363
end

lib/vonage/verify2/channels/whats_app.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ def to=(to)
1919
end
2020

2121
def from=(from)
22+
raise ArgumentError, "Invalid 'from' value #{from}. Length must be between 11 and 15 characters." unless from.length.between?(11, 15)
2223
raise ArgumentError, "Invalid 'from' value #{from}. Expected to be in E.164 format" unless Phonelib.parse(from.to_i).valid?
2324
@from = from
2425
end

lib/vonage/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# typed: strong
22

33
module Vonage
4-
VERSION = '7.24.0'
4+
VERSION = '7.25.0'
55
end

test/vonage/test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,7 @@ def e164_compliant_number
408408
'447000000000'
409409
end
410410

411-
def invalid_number
411+
def non_e164_compliant_number
412412
'abcdefg'
413413
end
414414

test/vonage/verify2/channels/silent_auth_test.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ def test_to_setter_method
2121
assert_equal new_number, sa_workflow.instance_variable_get(:@to)
2222
end
2323

24-
def test_to_setter_method_with_invalid_number
24+
def test_to_setter_method_with_non_e164_compliant_number
2525
assert_raises ArgumentError do
26-
silent_auth_channel.to = invalid_number
26+
silent_auth_channel.to = non_e164_compliant_number
2727
end
2828
end
2929

test/vonage/verify2/channels/sms_test.rb

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,24 +29,56 @@ def test_to_setter_method
2929
assert_equal new_number, channel.instance_variable_get(:@to)
3030
end
3131

32-
def test_to_setter_method_with_invalid_number
32+
def test_to_setter_method_with_non_e164_compliant_number
3333
assert_raises ArgumentError do
34-
sms_channel.to = invalid_number
34+
sms_channel.to = non_e164_compliant_number
3535
end
3636
end
3737

3838
def test_from_getter_method
3939
assert_nil sms_channel.from
4040
end
4141

42-
def test_from_setter_method
42+
def test_from_setter_method_with_valid_numeric
4343
channel = sms_channel
4444
new_number = '447000000002'
4545
channel.from = new_number
4646

4747
assert_equal new_number, channel.instance_variable_get(:@from)
4848
end
4949

50+
def test_from_setter_method_with_valid_alphanumeric
51+
channel = sms_channel
52+
new_number = 'abc123'
53+
channel.from = new_number
54+
55+
assert_equal new_number, channel.instance_variable_get(:@from)
56+
end
57+
58+
def test_from_setter_method_with_numeric_too_short
59+
assert_raises ArgumentError do
60+
sms_channel.from = '4470000002'
61+
end
62+
end
63+
64+
def test_from_setter_method_with_numeric_too_long
65+
assert_raises ArgumentError do
66+
sms_channel.from = '4470000000000002'
67+
end
68+
end
69+
70+
def test_from_setter_method_with_alphanumeric_too_short
71+
assert_raises ArgumentError do
72+
sms_channel.from = 'ab'
73+
end
74+
end
75+
76+
def test_from_setter_method_with_alphanumeric_too_long
77+
assert_raises ArgumentError do
78+
sms_channel.from = 'abcdefghijkl'
79+
end
80+
end
81+
5082
def test_entity_id_getter_method
5183
assert_nil sms_channel.entity_id
5284
end

test/vonage/verify2/channels/voice_test.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ def test_to_setter_method
2525
assert_equal new_number, channel.instance_variable_get(:@to)
2626
end
2727

28-
def test_to_setter_method_with_invalid_number
28+
def test_to_setter_method_with_non_e164_compliant_number
2929
assert_raises ArgumentError do
30-
voice_channel.to = invalid_number
30+
voice_channel.to = non_e164_compliant_number
3131
end
3232
end
3333

0 commit comments

Comments
 (0)