Beispiel #1
0
 public static function hasContextAccess($paUserContext = null)
 {
     $lsUserIp = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : "";
     $lsAppClient = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "";
     $lsToken = isset($_SERVER['HTTP_TOKEN']) ? $_SERVER['HTTP_TOKEN'] : "";
     $lbReturn = false;
     Debug::debug(array($lsUserIp, $lsAppClient, $lsToken));
     $laConfigAcl = Config::getAppOptions('acl');
     $laContext = isset($laConfigAcl['acl']['context']) ? $laConfigAcl['acl']['context'] : null;
     if ($paUserContext !== null) {
         $laContext = Config::merge($paUserContext, $laContext);
     }
     Debug::debug($laContext);
     if (is_array($laContext)) {
         foreach ($laContext as $lsIp => $laIpContext) {
             $lsIpPattern = preg_replace(array("/^!([\\d\\.?]*)\$/", "/\\./", "/\\?/"), array("[^\$1]", "\\.", "[\\d]*"), $lsIp);
             if (preg_match("/^{$lsIpPattern}\$/", $lsUserIp)) {
                 Debug::debug("IP: {$lsUserIp}");
                 if (isset($laIpContext['denied']) && $laIpContext['denied'] == true) {
                     $lbReturn = false;
                     Debug::debug("IP [{$lsUserIp}] DENIED FOR {$lsIpPattern}");
                     break;
                 }
                 if (isset($laIpContext['user-agent'][$lsAppClient])) {
                     Debug::debug("USER-AGENT: {$lsAppClient}");
                     if ($laIpContext['user-agent'][$lsAppClient] == $lsToken) {
                         Debug::debug("TOKEN: {$lsToken}");
                         $lbReturn = true;
                         break;
                     }
                 } elseif (isset($laIpContext['user-agent']['*'])) {
                     Debug::debug("USER-AGENT: *");
                     if ($laIpContext['user-agent']['*'] == $lsToken) {
                         Debug::debug("TOKEN: {$lsToken}");
                         $lbReturn = true;
                         break;
                     }
                 }
             } else {
                 Debug::debug("IP [{$lsUserIp}] DENIED FOR {$lsIpPattern}");
             }
         }
     } else {
         $lbReturn = true;
     }
     return $lbReturn;
 }