Skip to content
Snippets Groups Projects
Select Git revision
  • 004590f51090974dcce6628dd4eaf8f5ba6e83ce
  • master default protected
  • php84
  • 6.x
  • release_6.2.0
  • modif_maintenance_phtml
  • 6.0.x
  • detached2
  • detached
  • php82
  • feature_SearchAndSelectFilter
  • 5.x
  • 4.x
  • 7.2.0
  • 6.2.0
  • 7.1.0
  • 7.0.0
  • 1.1.1
  • 6.1.7
  • 6.1.6
  • 6.1.5
  • 6.0.16
  • 6.0.15
  • 6.1.4
  • 6.0.14
  • 6.1.3
  • 6.0.13
  • 6.1.2
  • 6.0.12
  • 6.1.1
  • 6.1.0
  • 6.0.11
  • 6.0.10
33 results

HostLocalization.php

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    HostLocalization.php 1.75 KiB
    <?php
    
    namespace UnicaenApp\HostLocalization;
    
    
    class HostLocalization implements HostLocalizationInterface
    {
    
        protected $activated;
    
        protected $proxies;
    
        protected $reverseProxies;
    
        protected $masqueIp;
    
    
    
        /**
         * Renvoie true si le'utilisateur utilise une machine connectée au réseau de l'établissement
         * ou bien si la machine est hors réseau
         *
         * @return bool
         */
    
        public function __construct($activated, $masqueIp, $proxies, $reverseProxies)
        {
            $this->activated      = $activated;
            $this->proxies        = $proxies;
            $this->reverseProxies = $reverseProxies;
            $this->masqueIp       = $masqueIp;
        }
    
    
    
        /**
         * Retourne selon les règles définies en config si on est dans l'établissement ou à l'extérieur.
         *
         * @return bool
         */
        public function inEtablissement(): bool
        {
            if (!$this->activated || empty($this->masqueIp)) {
                return true;
            }
            $ip        = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
            $forwarded = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : '';
    
            // Si on est en direct et en interne sans passer par le proxy (pas de redirection)
            if (0 === strpos($ip, $this->masqueIp) && $forwarded === '') return true;
    
            // Si on est en interne, que l'on sort puis on re-rentre en passant par le reverse proxy
            if (in_array($ip, $this->reverseProxies) && 0 === strpos($forwarded, $this->masqueIp)) return true;
    
            // Si on est en interne, que l'on passe par le proxy en interne
            if (in_array($ip, $this->proxies) && 0 === strpos($forwarded, $this->masqueIp)) return true;
    
            // Sinon, on vient de l'extérieur
            return false;
        }
    }