HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/web/matomo.vdk/plugins/AIAgents/Providers/ChatGPT.php
<?php

/**
 * Matomo - free/libre analytics platform
 *
 * @link    https://matomo.org
 * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
 */

declare(strict_types=1);

namespace Piwik\Plugins\AIAgents\Providers;

use Piwik\Request as PiwikRequest;
use Piwik\Tracker\Request;

class ChatGPT extends AgentAbstract
{
    public const HEADER_SIGNATURE       = 'HTTP_SIGNATURE';
    public const HEADER_SIGNATURE_AGENT = 'HTTP_SIGNATURE_AGENT';
    public const HEADER_SIGNATURE_INPUT = 'HTTP_SIGNATURE_INPUT';

    public const PARAM_SIGNATURE       = 'ai_s';
    public const PARAM_SIGNATURE_AGENT = 'ai_sa';
    public const PARAM_SIGNATURE_INPUT = 'ai_si';

    public function getId(): string
    {
        return 'ChatGPT';
    }

    public function isDetectedForTrackerRequest(Request $trackerRequest): bool
    {
        // cannot use \Piwik\Tracker\Request::getParam() for the custom parameters
        $matomoRequest = new PiwikRequest($trackerRequest->getParams());

        $signature = $matomoRequest->getStringParameter(
            self::PARAM_SIGNATURE,
            $_SERVER[self::HEADER_SIGNATURE] ?? ''
        );

        $signatureAgent = $matomoRequest->getStringParameter(
            self::PARAM_SIGNATURE_AGENT,
            $_SERVER[self::HEADER_SIGNATURE_AGENT] ?? ''
        );

        $signatureInput = $matomoRequest->getStringParameter(
            self::PARAM_SIGNATURE_INPUT,
            $_SERVER[self::HEADER_SIGNATURE_INPUT] ?? ''
        );

        return (
            '' !== $signature
            && '' !== $signatureInput
            // the value of the Signature-Agent header is wrapped in double quotes!
            && '"https://chatgpt.com"' === $signatureAgent
        );
    }
}