Your IP : 216.73.217.79


Current Path : /var/www/v3.cesa.co.za/src/MemberBundle/Http/
Upload File :
Current File : /var/www/v3.cesa.co.za/src/MemberBundle/Http/CesaMainExternalCaller.php

<?php

namespace App\MemberBundle\Http;

use Symfony\Component\HttpFoundation\Request;

/**
 * IP whitelist checks for server-to-server calls from cesa-main / WordPress host.
 * Mirrors {@see \App\ContentBundle\Controller\ExternalFormApiController}.
 */
final class CesaMainExternalCaller
{
    public static function getAllowedIpsCsv(Request $request): string
    {
        return (string) (
            $_ENV['CESA_MAIN_ALLOWED_IPS']
            ?? $_SERVER['CESA_MAIN_ALLOWED_IPS']
            ?? getenv('CESA_MAIN_ALLOWED_IPS')
            ?? ''
        );
    }

    public static function isAuthorised(Request $request, ?string $allowedIpsCsv = null): bool
    {
        $allowedIpsCsv ??= self::getAllowedIpsCsv($request);
        if (trim($allowedIpsCsv) === '') {
            return false;
        }

        $allowedIps = [];
        foreach (explode(',', $allowedIpsCsv) as $ip) {
            $ip = trim((string) $ip);
            if ($ip !== '') {
                $allowedIps[] = $ip;
            }
        }

        $remoteAddr = (string) $request->server->get('REMOTE_ADDR', '');
        $forwardedFor = (string) $request->server->get('HTTP_X_FORWARDED_FOR', '');
        $candidateIps = [];

        if ($forwardedFor !== '') {
            foreach (explode(',', $forwardedFor) as $forwardedIp) {
                $forwardedIp = trim((string) $forwardedIp);
                if ($forwardedIp !== '') {
                    $candidateIps[] = $forwardedIp;
                }
            }
        }

        if ($remoteAddr !== '') {
            $candidateIps[] = $remoteAddr;
        }

        foreach ($candidateIps as $candidateIp) {
            if (\in_array($candidateIp, $allowedIps, true)) {
                return true;
            }
        }

        return false;
    }
}