HEX
Server: nginx
System: Linux pool195-106-36.bur.atomicsites.net 6.12.57+deb12-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.57-1~bpo12+1 (2025-11-17) x86_64
User: (0)
PHP: 8.3.32
Disabled: pcntl_fork
Upload Files
File: //wordpress/plugins/wp-cloud-client/1.0.3/src/Api/RestRouter.php
<?php

declare(strict_types=1);

namespace VPlugins\WPCloudClient\Api;

use VPlugins\WPCloudClient\Api\Controller\ActionController;
use VPlugins\WPCloudClient\Api\Controller\MailController;
use VPlugins\WPCloudClient\Api\Controller\WooCommerceController;
use VPlugins\WPCloudClient\Auth\AuthMiddleware;

final readonly class RestRouter {

	private const NAMESPACE = 'wp-cloud/v1';

	/**
	 * Construct the REST router.
	 *
	 * @param AuthMiddleware        $auth            Authentication middleware instance.
	 * @param ActionController      $controller      Action controller instance.
	 * @param WooCommerceController $wooCommerce     WooCommerce controller instance.
	 * @param MailController        $mail            Mail controller instance.
	 */
	public function __construct(
		private AuthMiddleware $auth,
		private ActionController $controller,
		private WooCommerceController $wooCommerce,
		private MailController $mail,
	) {}

	/**
	 * Register the REST API routes for the plugin.
	 *
	 * @return void
	 */
	public function register(): void {
		// Authenticated dispatch endpoint
		register_rest_route(
			self::NAMESPACE,
			'/actions',
			[
				'methods'             => 'POST',
				'callback'            => [ $this->controller, 'dispatch' ],
				'permission_callback' => [ $this->auth, 'check' ],
			]
		);

		// Public health endpoint (no auth for uptime monitoring)
		register_rest_route(
			self::NAMESPACE,
			'/health',
			[
				'methods'             => 'GET',
				'callback'            => [ $this->controller, 'health' ],
				'permission_callback' => '__return_true',
			]
		);

		// WooCommerce entity retrieval endpoint
		register_rest_route(
			self::NAMESPACE,
			'/woocommerce',
			[
				'methods'             => 'GET',
				'callback'            => [ $this->wooCommerce, 'fetch' ],
				'permission_callback' => [ $this->auth, 'check' ],
			]
		);

		// Mail list endpoint — returns pending (unnotified) emails
		register_rest_route(
			self::NAMESPACE,
			'/mail',
			[
				'methods'             => 'GET',
				'callback'            => [ $this->mail, 'list' ],
				'permission_callback' => [ $this->auth, 'check' ],
			]
		);

		// Mail single-record endpoint
		register_rest_route(
			self::NAMESPACE,
			'/mail/(?P<id>\d+)',
			[
				'methods'             => 'GET',
				'callback'            => [ $this->mail, 'fetch' ],
				'permission_callback' => [ $this->auth, 'check' ],
			]
		);
	}
}