<?php /** * The endpoint for starting webhooks simulation. * * @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\Webhooks\Status\WebhookSimulation; /** * Class SimulateEndpoint */ class SimulateEndpoint { const ENDPOINT = 'ppc-webhooks-simulate'; /** * The simulation handler. * * @var WebhookSimulation */ private $simulation; /** * The Request Data helper object. * * @var RequestData */ private $request_data; /** * SimulateEndpoint constructor. * * @param WebhookSimulation $simulation The simulation handler. * @param RequestData $request_data The Request Data helper object. */ public function __construct( WebhookSimulation $simulation, RequestData $request_data ) { $this->simulation = $simulation; $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() { if ( ! current_user_can( 'manage_woocommerce' ) ) { wp_send_json_error( 'Not admin.', 403 ); return false; } try { // Validate nonce. $this->request_data->read_request( $this->nonce() ); $this->simulation->start(); wp_send_json_success(); return true; } catch ( Exception $error ) { wp_send_json_error( $error->getMessage(), 500 ); return false; } } }