HEX
Server: Apache
System: Linux srv13.cpanelhost.cl 3.10.0-962.3.2.lve1.5.38.el7.x86_64 #1 SMP Thu Jun 18 05:28:41 EDT 2020 x86_64
User: cca63905 (4205)
PHP: 7.3.20
Disabled: NONE
Upload Files
File: //home/cca63905/.trash/wp-content/plugins/tidio-live-chat/src/Admin/AdminController.php
<?php

namespace TidioLiveChat\Admin;

if (!defined('WPINC')) {
    die('File loaded directly. Exiting.');
}

use TidioLiveChat\Admin\Notice\DismissibleNoticeService;
use TidioLiveChat\Sdk\Api\Exception\TidioApiException;
use TidioLiveChat\Sdk\IntegrationFacade;
use TidioLiveChat\IntegrationState;
use TidioLiveChat\TidioLiveChat;
use TidioLiveChat\Utils\QueryParameters;

class AdminController
{
    /**
     * @var IntegrationFacade
     */
    private $integrationFacade;
    /**
     * @var IntegrationState
     */
    private $integrationState;
    /**
     * @var NonceValidator
     */
    private $nonceValidator;
    /**
     * @var DismissibleNoticeService
     */
    private $dismissibleNoticeService;

    /**
     * @param IntegrationFacade $integrationFacade
     * @param IntegrationState $integrationState
     * @param NonceValidator $nonceValidator
     * @param DismissibleNoticeService $dismissibleNoticeService
     */
    public function __construct($integrationFacade, $integrationState, $nonceValidator, $dismissibleNoticeService)
    {
        $this->integrationFacade = $integrationFacade;
        $this->integrationState = $integrationState;
        $this->nonceValidator = $nonceValidator;
        $this->dismissibleNoticeService = $dismissibleNoticeService;
    }

    public function handleIntegrateProjectAction()
    {
        if (!$this->isRequestNonceValid(AdminRouting::INTEGRATE_PROJECT_ACTION)) {
            wp_die('', 403);
        }

        $refreshToken = QueryParameters::get('refreshToken');
        try {
            $data = $this->integrationFacade->integrateProject($refreshToken);
        } catch (TidioApiException $exception) {
            $errorCode = $exception->getMessage();
            $this->redirectToPluginAdminDashboardWithError($errorCode);
        }

        $this->integrationState->integrate(
            $data['projectPublicKey'],
            $data['accessToken'],
            $data['refreshToken']
        );

        $this->redirectToPluginAdminDashboard();
    }

    public function handleToggleAsyncLoadingAction()
    {
        if (!$this->isRequestNonceValid(AdminRouting::TOGGLE_ASYNC_LOADING_ACTION)) {
            wp_die('', 403);
        }

        $this->integrationState->toggleAsyncLoading();

        $this->redirectToPluginsListDashboard();
    }

    public function handleClearAccountDataAction()
    {
        if (!$this->isRequestNonceValid(AdminRouting::CLEAR_ACCOUNT_DATA_ACTION)) {
            wp_die('', 403);
        }

        $this->integrationState->removeIntegration();
        $this->dismissibleNoticeService->clearDismissedNoticesHistory();

        $this->redirectToPluginsListDashboard();
    }

    /**
     * @param string $nonce
     * @return bool
     */
    private function isRequestNonceValid($nonce)
    {
        return $this->nonceValidator->isRequestNonceValid($nonce);
    }

    private function redirectToPluginsListDashboard()
    {
        wp_redirect(admin_url('plugins.php'));
        die();
    }

    private function redirectToPluginAdminDashboard()
    {
        $url = 'admin.php?page=' . TidioLiveChat::TIDIO_PLUGIN_NAME;
        wp_redirect(admin_url($url));
        die();
    }

    /**
     * @param string $errorCode
     */
    private function redirectToPluginAdminDashboardWithError($errorCode)
    {
        $url = sprintf('admin.php?page=%s&error=%s', TidioLiveChat::TIDIO_PLUGIN_NAME, $errorCode);
        wp_redirect(admin_url($url));
        die();
    }
}