<?php
/**
* The endpoint for resubscribing webhooks.
*
* @package WooCommerce\PayPalCommerce\Webhooks\Endpoint
*/
declare (strict_types=1);
namespace WooCommerce\PayPalCommerce\Webhooks\Endpoint;
use Exception;
use WooCommerce\PayPalCommerce\Button\Endpoint\RequestData;
use WooCommerce\PayPalCommerce\Button\Exception\NonceValidationException;
use WooCommerce\PayPalCommerce\Webhooks\WebhookRegistrar;
/**
* Class ResubscribeEndpoint
*/
class ResubscribeEndpoint
{
const ENDPOINT = 'ppc-webhooks-resubscribe';
/**
* The webhooks registrar.
*
* @var WebhookRegistrar
*/
private $registrar;
/**
* The Request Data helper object.
*
* @var RequestData
*/
private $request_data;
/**
* ResubscribeEndpoint constructor.
*
* @param WebhookRegistrar $registrar The webhooks registrar.
* @param RequestData $request_data The Request Data helper object.
*/
public function __construct(WebhookRegistrar $registrar, RequestData $request_data)
{
$this->registrar = $registrar;
$this->request_data = $request_data;
}
/**
* Returns the nonce for the endpoint.
*
* @return string
*/
public static function nonce(): string
{
return self::ENDPOINT;
}
/**
* Handles the incoming request.
*/
public function handle_request(): void
{
if (!current_user_can('manage_woocommerce')) {
wp_send_json_error('Not admin.', 403);
}
try {
// Validate nonce.
$this->request_data->read_request($this->nonce());
if (!$this->registrar->register()) {
wp_send_json_error('Webhook subscription failed.', 500);
}
wp_send_json_success();
} catch (NonceValidationException $error) {
wp_send_json_error(array('message' => $error->getMessage()), 400);
} catch (Exception $error) {
wp_send_json_error($error->getMessage(), 403);
}
}
}