File "PhoneVerificationController.php"
Full Path: /home/warrior1/public_html/wp-content/plugins/google-listings-and-ads/src/API/Site/Controllers/MerchantCenter/PhoneVerificationController.php
File size: 5.04 KB
MIME-type: text/x-php
Charset: utf-8
<?php
declare( strict_types=1 );
namespace Automattic\WooCommerce\GoogleListingsAndAds\API\Site\Controllers\MerchantCenter;
use Automattic\WooCommerce\GoogleListingsAndAds\API\Site\Controllers\BaseOptionsController;
use Automattic\WooCommerce\GoogleListingsAndAds\API\Site\Controllers\EmptySchemaPropertiesTrait;
use Automattic\WooCommerce\GoogleListingsAndAds\API\TransportMethods;
use Automattic\WooCommerce\GoogleListingsAndAds\MerchantCenter\PhoneVerification;
use Automattic\WooCommerce\GoogleListingsAndAds\Proxies\RESTServer;
use Automattic\WooCommerce\GoogleListingsAndAds\Value\PhoneNumber;
use Exception;
use WP_REST_Request as Request;
use WP_REST_Response as Response;
defined( 'ABSPATH' ) || exit;
/**
* Class PhoneVerificationController
*
* @since 1.5.0
*
* @package Automattic\WooCommerce\GoogleListingsAndAds\API\Site\Controllers\MerchantCenter
*/
class PhoneVerificationController extends BaseOptionsController {
use EmptySchemaPropertiesTrait;
/**
* @var PhoneVerification
*/
protected $phone_verification;
/**
* PhoneVerificationController constructor.
*
* @param RESTServer $server
* @param PhoneVerification $phone_verification Phone verification service.
*/
public function __construct( RESTServer $server, PhoneVerification $phone_verification ) {
parent::__construct( $server );
$this->phone_verification = $phone_verification;
}
/**
* Register rest routes with WordPress.
*/
public function register_routes(): void {
$verification_method = [
'description' => __( 'Method used to verify the phone number.', 'google-listings-and-ads' ),
'enum' => [
PhoneVerification::VERIFICATION_METHOD_SMS,
PhoneVerification::VERIFICATION_METHOD_PHONE_CALL,
],
'required' => true,
'type' => 'string',
'validate_callback' => 'rest_validate_request_arg',
];
$this->register_route(
'/mc/phone-verification/request',
[
[
'methods' => TransportMethods::CREATABLE,
'callback' => $this->get_request_phone_verification_callback(),
'permission_callback' => $this->get_permission_callback(),
'args' => [
'phone_region_code' => [
'description' => __( 'Two-letter country code (ISO 3166-1 alpha-2) for the phone number.', 'google-listings-and-ads' ),
'required' => true,
'type' => 'string',
'validate_callback' => 'rest_validate_request_arg',
],
'phone_number' => [
'description' => __( 'The phone number to verify.', 'google-listings-and-ads' ),
'required' => true,
'type' => 'string',
'validate_callback' => 'rest_validate_request_arg',
],
'verification_method' => $verification_method,
],
],
]
);
$this->register_route(
'/mc/phone-verification/verify',
[
[
'methods' => TransportMethods::CREATABLE,
'callback' => $this->get_verify_phone_callback(),
'permission_callback' => $this->get_permission_callback(),
'args' => [
'verification_id' => [
'description' => __( 'The verification ID returned by the /request call.', 'google-listings-and-ads' ),
'required' => true,
'type' => 'string',
'validate_callback' => 'rest_validate_request_arg',
],
'verification_code' => [
'description' => __( 'The verification code that was sent to the phone number for validation.', 'google-listings-and-ads' ),
'required' => true,
'type' => 'string',
'validate_callback' => 'rest_validate_request_arg',
],
'verification_method' => $verification_method,
],
],
]
);
}
/**
* Get callback for requesting phone verification endpoint.
*
* @return callable
*/
protected function get_request_phone_verification_callback(): callable {
return function( Request $request ) {
try {
$verification_id = $this->phone_verification->request_phone_verification(
$request->get_param( 'phone_region_code' ),
new PhoneNumber( $request->get_param( 'phone_number' ) ),
$request->get_param( 'verification_method' ),
);
return [
'verification_id' => $verification_id,
];
} catch ( Exception $e ) {
return $this->response_from_exception( $e );
}
};
}
/**
* Get callback for verifying a phone number.
*
* @return callable
*/
protected function get_verify_phone_callback(): callable {
return function( Request $request ) {
try {
$this->phone_verification->verify_phone_number(
$request->get_param( 'verification_id' ),
$request->get_param( 'verification_code' ),
$request->get_param( 'verification_method' ),
);
return new Response( null, 204 );
} catch ( Exception $e ) {
return $this->response_from_exception( $e );
}
};
}
/**
* Get the item schema name for the controller.
*
* @return string
*/
protected function get_schema_title(): string {
return 'phone_verification';
}
}