Skip to content

Commit e3ed0b8

Browse files
committed
Add Credential Validation endpoint (#181)
1 parent d4cb936 commit e3ed0b8

File tree

6 files changed

+76
-1
lines changed

6 files changed

+76
-1
lines changed

src/BigCommerce/Api/Customers/CustomersApi.php

+19
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
use BigCommerce\ApiV3\Api\Subscribers\SubscribersApi;
77
use BigCommerce\ApiV3\ResponseModels\Customer\CustomersResponse;
88
use BigCommerce\ApiV3\ResourceModels\Customer\Customer;
9+
use BigCommerce\ApiV3\ResponseModels\Customer\ValidateCredentialsResponse;
10+
use GuzzleHttp\RequestOptions;
911
use UnexpectedValueException;
1012

1113
class CustomersApi extends CustomerApiBase
@@ -59,6 +61,23 @@ public function update(array $customers): CustomersResponse
5961
return new CustomersResponse($this->updateResources($customers));
6062
}
6163

64+
public function validateCredentials(string $email, string $password, ?int $channel_id = null): ValidateCredentialsResponse
65+
{
66+
$credentials = ['email' => $email, 'password' => $password];
67+
if (!is_null($channel_id)) {
68+
$credentials['channel_id'] = $channel_id;
69+
}
70+
71+
$response = $this->getClient()->getRestClient()->post(
72+
'customers/validate-credentials',
73+
[
74+
RequestOptions::JSON => $credentials,
75+
]
76+
);
77+
78+
return new ValidateCredentialsResponse($response);
79+
}
80+
6281
protected function resourceName(): string
6382
{
6483
return self::RESOURCE_NAME;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace BigCommerce\ApiV3\ResourceModels\Customer;
4+
5+
use BigCommerce\ApiV3\ResourceModels\ResourceModel;
6+
7+
class CustomerCredentialsValidation extends ResourceModel
8+
{
9+
public ?int $customer_id;
10+
public bool $is_valid;
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace BigCommerce\ApiV3\ResponseModels\Customer;
4+
5+
use BigCommerce\ApiV3\ResourceModels\Customer\CustomerCredentialsValidation;
6+
use BigCommerce\ApiV3\ResponseModels\SingleResourceResponse;
7+
use Psr\Http\Message\ResponseInterface;
8+
use stdClass;
9+
10+
class ValidateCredentialsResponse extends SingleResourceResponse
11+
{
12+
private CustomerCredentialsValidation $credentialsValidation;
13+
14+
protected function decodeResponseBody(object $responseBody): object
15+
{
16+
return $responseBody;
17+
}
18+
19+
public function getCredentialsValidation(): CustomerCredentialsValidation
20+
{
21+
return $this->credentialsValidation;
22+
}
23+
24+
protected function addData(stdClass $rawData): void
25+
{
26+
$this->credentialsValidation = new CustomerCredentialsValidation($rawData);
27+
}
28+
}

src/BigCommerce/ResponseModels/SingleResourceResponse.php

+6-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@ abstract class SingleResourceResponse
99
{
1010
public function __construct(ResponseInterface $response)
1111
{
12-
$this->addData(json_decode($response->getBody())->data);
12+
$this->addData($this->decodeResponseBody(json_decode($response->getBody())));
13+
}
14+
15+
protected function decodeResponseBody(object $responseBody): object
16+
{
17+
return $responseBody->data;
1318
}
1419

1520
abstract protected function addData(stdClass $rawData): void;

tests/BigCommerce/Api/Customers/CustomersApiTest.php

+9
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,13 @@ public function testCanDeleteCustomersIn()
8181

8282
$this->assertTrue($this->getApi()->customers()->delete([1, 2]));
8383
}
84+
85+
public function testCanValidateCredentials()
86+
{
87+
$this->setReturnData('customers__validate-credentials.json');
88+
89+
$validation = $this->getApi()->customers()->validateCredentials('[email protected]', 'Password123');
90+
91+
$this->assertFalse($validation->getCredentialsValidation()->is_valid);
92+
}
8493
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"is_valid": false
3+
}

0 commit comments

Comments
 (0)