Skip to content

Commit 6e33d81

Browse files
authored
Added validation for Silent Auth (#491)
1 parent 3cbc6a8 commit 6e33d81

File tree

3 files changed

+106
-0
lines changed

3 files changed

+106
-0
lines changed

src/Verify2/Client.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
use Vonage\Client\Exception\Exception;
88
use Vonage\Client\Exception\Request;
99
use Vonage\Verify2\Request\BaseVerifyRequest;
10+
use Vonage\Verify2\Request\SilentAuthRequest;
11+
use Vonage\Verify2\VerifyObjects\VerificationWorkflow;
1012

1113
class Client implements APIClient
1214
{
@@ -21,6 +23,14 @@ public function getAPIResource(): APIResource
2123

2224
public function startVerification(BaseVerifyRequest $request): ?array
2325
{
26+
if (self::isSilentAuthRequest($request)) {
27+
if (SilentAuthRequest::isValidWorkflow($request->getWorkflows())) {
28+
return $this->getAPIResource()->create($request->toArray());
29+
}
30+
31+
throw new \InvalidArgumentException('Silent Auth must be the first workflow if used');
32+
}
33+
2434
return $this->getAPIResource()->create($request->toArray());
2535
}
2636

@@ -53,4 +63,15 @@ public function nextWorkflow(string $requestId): bool
5363

5464
return true;
5565
}
66+
67+
public static function isSilentAuthRequest(BaseVerifyRequest $request): bool
68+
{
69+
foreach ($request->getWorkflows() as $workflow) {
70+
if ($workflow['channel'] == VerificationWorkflow::WORKFLOW_SILENT_AUTH) {
71+
return true;
72+
}
73+
}
74+
75+
return false;
76+
}
5677
}

src/Verify2/Request/SilentAuthRequest.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,15 @@ public function toArray(): array
3232
'workflow' => $this->getWorkflows()
3333
];
3434
}
35+
36+
public static function isValidWorkflow(array $workflows): bool
37+
{
38+
$firstWorkflow = $workflows[0];
39+
40+
if ($firstWorkflow['channel'] == VerificationWorkflow::WORKFLOW_SILENT_AUTH) {
41+
return true;
42+
}
43+
44+
return false;
45+
}
3546
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace VonageTest\Verify2\Request;
6+
7+
use PHPUnit\Framework\TestCase;
8+
use Vonage\Client;
9+
use Vonage\Verify2\Request\BaseVerifyRequest;
10+
use Vonage\Verify2\Request\SilentAuthRequest;
11+
use Vonage\Verify2\Request\SMSRequest;
12+
use Vonage\Verify2\VerifyObjects\VerificationLocale;
13+
use Vonage\Verify2\VerifyObjects\VerificationWorkflow;
14+
15+
class SilentAuthRequestTest extends TestCase
16+
{
17+
public function testIsValidSilentAuthRequest(): void
18+
{
19+
$silentAuthRequest = new SilentAuthRequest(
20+
'077377775555',
21+
'VONAGE',
22+
'https://silent-auth.example'
23+
);
24+
25+
$extraWorkflow = new VerificationWorkflow(
26+
VerificationWorkflow::WORKFLOW_SMS,
27+
'077377775555'
28+
);
29+
30+
$silentAuthRequest->addWorkflow($extraWorkflow);
31+
32+
$client = new Client(new Client\Credentials\Basic('test', 'test2'));
33+
$this->assertTrue($client->verify2()::isSilentAuthRequest($silentAuthRequest));
34+
$this->assertTrue(SilentAuthRequest::isValidWorkflow($silentAuthRequest->getWorkflows()));
35+
}
36+
37+
public function testIsInvalidSilentAuthRequest(): void
38+
{
39+
$request = new SMSRequest(
40+
'077377775555',
41+
'VONAGE',
42+
);
43+
44+
$extraWorkflow = new VerificationWorkflow(
45+
VerificationWorkflow::WORKFLOW_SILENT_AUTH,
46+
'077377775555'
47+
);
48+
49+
$request->addWorkflow($extraWorkflow);
50+
$client = new Client(new Client\Credentials\Basic('test', 'test2'));
51+
52+
$this->assertTrue($client->verify2()::isSilentAuthRequest($request));
53+
$this->assertFalse(SilentAuthRequest::isValidWorkflow($request->getWorkflows()));
54+
}
55+
56+
public function testIsNotSilentAuthRequest(): void
57+
{
58+
$request = new SMSRequest(
59+
'077377775555',
60+
'VONAGE',
61+
);
62+
63+
$extraWorkflow = new VerificationWorkflow(
64+
VerificationWorkflow::WORKFLOW_EMAIL,
65+
'jim@jim.com'
66+
);
67+
68+
$request->addWorkflow($extraWorkflow);
69+
$client = new Client(new Client\Credentials\Basic('test', 'test2'));
70+
71+
$this->assertFalse($client->verify2()::isSilentAuthRequest($request));
72+
// No second test to see if the workflow is valid, why are you checking a workflow on a non SA request?
73+
}
74+
}

0 commit comments

Comments
 (0)