File: /wordpress/plugins/wp-cloud-client/beta/src/Mail/MailCleaner.php
<?php
declare(strict_types=1);
namespace VPlugins\WPCloudClient\Mail;
use VPlugins\WPCloudClient\Api\ApiResponse;
use VPlugins\WPCloudClient\Auth\AuthMiddleware;
use VPlugins\WPCloudClient\Support\Logger;
use WP_REST_Request;
use WP_REST_Response;
/**
* REST handler for the mail cleanup endpoint.
*
* POST wp-cloud/v1/mail/clean
* Body: { "mail_id": 1234567890 }
*
* Requires API key authentication (same as /actions).
*
* Ported from wsp-bootstrapper: api/wsp-mail-clean.php
*/
final readonly class MailCleaner {
/**
* Constructor.
*
* @param MailManager $manager Mail manager instance.
* @param AuthMiddleware $auth HMAC authentication middleware.
* @param Logger $logger Logger instance.
*/
public function __construct(
private MailManager $manager,
private AuthMiddleware $auth,
private Logger $logger,
) {}
/**
* Register the REST cleanup route.
*/
public function register(): void {
register_rest_route(
'wp-cloud/v1',
'/mail/clean',
[
'methods' => 'POST',
'callback' => [ $this, 'handle' ],
'permission_callback' => [ $this->auth, 'check' ],
]
);
}
/**
* Handle the cleanup request.
*
* @param WP_REST_Request $request Incoming REST request.
* @return WP_REST_Response
*/
public function handle( WP_REST_Request $request ): WP_REST_Response {
$params = $request->get_json_params();
$mailId = isset( $params['mail_id'] ) ? (int) $params['mail_id'] : 0;
if ( $mailId <= 0 ) {
return ApiResponse::error( 'wpcc_invalid_mail_id', 'Invalid or missing mail_id.', 400 )->toWpResponse();
}
// Honour debug flag that prevents deletion during local development.
if ( defined( 'WPCC_KEEP_EMAIL' ) && WPCC_KEEP_EMAIL ) {
$this->logger->info( 'MailCleaner: skipping delete (WPCC_KEEP_EMAIL is set)', [ 'mail_id' => $mailId ] );
return ApiResponse::success(
[
'mail_id' => $mailId,
'kept' => true,
]
)->toWpResponse();
}
try {
$this->manager->clean( $mailId );
} catch ( \Throwable $e ) {
$this->logger->error( 'MailCleaner: failed to clean mail', $e );
return ApiResponse::error( 'wpcc_clean_failed', 'Failed to clean mail.', 500 )->toWpResponse();
}
return ApiResponse::success(
[
'mail_id' => $mailId,
'cleaned' => true,
]
)->toWpResponse();
}
}