Beispiel #1
0
 /**
  * Set fields that need additional manipulation after retrieval.
  *
  * @param $User
  * @throws Exception
  */
 public function setCalculatedFields(&$User)
 {
     if ($v = val('Attributes', $User)) {
         if (is_string($v)) {
             setValue('Attributes', $User, @unserialize($v));
         }
     }
     if ($v = val('Permissions', $User)) {
         if (is_string($v)) {
             setValue('Permissions', $User, @unserialize($v));
         }
     }
     if ($v = val('Preferences', $User)) {
         if (is_string($v)) {
             setValue('Preferences', $User, @unserialize($v));
         }
     }
     if ($v = val('Photo', $User)) {
         if (!isUrl($v)) {
             $PhotoUrl = Gdn_Upload::url(changeBasename($v, 'n%s'));
         } else {
             $PhotoUrl = $v;
         }
         setValue('PhotoUrl', $User, $PhotoUrl);
     }
     if ($v = val('AllIPAddresses', $User)) {
         if (is_string($v)) {
             $IPAddresses = explode(',', $v);
             foreach ($IPAddresses as $i => $IPAddress) {
                 $IPAddresses[$i] = ForceIPv4($IPAddress);
             }
             setValue('AllIPAddresses', $User, $IPAddresses);
         }
     }
     setValue('_CssClass', $User, '');
     if ($v = val('Banned', $User)) {
         setValue('_CssClass', $User, 'Banned');
     }
     $this->EventArguments['User'] =& $User;
     $this->fireEvent('SetCalculatedFields');
 }
 /**
  * Load the basics of the current environment
  *
  * The purpose of this method is to consolidate all the various environment information into one
  * array under a set of common names, thereby removing the tedium of figuring out which superglobal
  * and key combination contain the requested information each time it is needed.
  *
  * @return void
  */
 protected function _LoadEnvironment()
 {
     $this->_EnvironmentElement('ConfigWebRoot', Gdn::Config('Garden.WebRoot'));
     $this->_EnvironmentElement('ConfigStripUrls', Gdn::Config('Garden.StripWebRoot', FALSE));
     $this->RequestHost(isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? val('HTTP_X_FORWARDED_HOST', $_SERVER) : (isset($_SERVER['HTTP_HOST']) ? val('HTTP_HOST', $_SERVER) : val('SERVER_NAME', $_SERVER)));
     $this->RequestMethod(isset($_SERVER['REQUEST_METHOD']) ? val('REQUEST_METHOD', $_SERVER) : 'CONSOLE');
     // Request IP
     // Loadbalancers
     if ($TestIP = val('HTTP_X_CLUSTER_CLIENT_IP', $_SERVER)) {
         $IP = $TestIP;
     } elseif ($TestIP = val('HTTP_CLIENT_IP', $_SERVER)) {
         $IP = $TestIP;
     } elseif ($TestIP = val('HTTP_X_FORWARDED_FOR', $_SERVER)) {
         $IP = $TestIP;
     } else {
         $IP = val('REMOTE_ADDR', $_SERVER);
     }
     if (strpos($IP, ',') !== FALSE) {
         $Matched = preg_match_all('/([\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3})(?:, )?/i', $IP, $Matches);
         // If we found matching IPs
         if ($Matched) {
             $IPs = $Matches[1];
             $IP = $IPs[0];
             // Fallback
         } else {
             $IP = $_SERVER['REMOTE_ADDR'];
         }
     }
     // Varnish
     $OriginalIP = val('HTTP_X_ORIGINALLY_FORWARDED_FOR', $_SERVER, NULL);
     if (!is_null($OriginalIP)) {
         $IP = $OriginalIP;
     }
     $IP = ForceIPv4($IP);
     $this->RequestAddress($IP);
     // Request Scheme
     $Scheme = 'http';
     // Webserver-originated SSL
     if (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') {
         $Scheme = 'https';
     }
     // Loadbalancer-originated (and terminated) SSL
     if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') {
         $Scheme = 'https';
     }
     // Varnish
     $OriginalProto = val('HTTP_X_ORIGINALLY_FORWARDED_PROTO', $_SERVER, NULL);
     if (!is_null($OriginalProto)) {
         $Scheme = $OriginalProto;
     }
     $this->RequestScheme($Scheme);
     if (isset($_SERVER['SERVER_PORT'])) {
         $Port = $_SERVER['SERVER_PORT'];
     } elseif ($Scheme === 'https') {
         $Port = 443;
     } else {
         $Port = 80;
     }
     $this->Port($Port);
     if (is_array($_GET)) {
         $Get = FALSE;
         if ($Get === FALSE) {
             $Get =& $_GET;
         }
         if (!is_array($Get)) {
             $Original = array();
             parse_str($Get, $Original);
             SafeParseStr($Get, $Get, $Original);
         }
         if (isset($Get['_p'])) {
             $Path = $Get['_p'];
             unset($_GET['_p']);
         } elseif (isset($Get['p'])) {
             $Path = $Get['p'];
             unset($_GET['p']);
         } else {
             $Path = '';
         }
         $this->RequestURI($Path);
     }
     $PossibleScriptNames = array();
     if (isset($_SERVER['SCRIPT_NAME'])) {
         $PossibleScriptNames[] = $_SERVER['SCRIPT_NAME'];
     }
     if (isset($_ENV['SCRIPT_NAME'])) {
         $PossibleScriptNames[] = $_ENV['SCRIPT_NAME'];
     }
     if (PHP_SAPI === 'cgi' && isset($_ENV['SCRIPT_URL'])) {
         $PossibleScriptNames[] = $_ENV['SCRIPT_URL'];
     }
     if (isset($_SERVER['SCRIPT_FILENAME'])) {
         $PossibleScriptNames[] = $_SERVER['SCRIPT_FILENAME'];
     }
     if (isset($_SERVER['ORIG_SCRIPT_NAME'])) {
         $PossibleScriptNames[] = $_SERVER['ORIG_SCRIPT_NAME'];
     }
     $this->RequestFolder('');
     $TrimURI = trim($this->RequestURI(), '/');
     foreach ($PossibleScriptNames as $ScriptName) {
         $Script = basename($ScriptName);
         $this->RequestScript($Script);
         $Folder = substr($ScriptName, 0, 0 - strlen($Script));
         $TrimFolder = trim($Folder, '/');
         $TrimScript = trim($Script, '/');
         if (isset($_SERVER['DOCUMENT_ROOT'])) {
             $DocumentRoot = $_SERVER['DOCUMENT_ROOT'];
         } else {
             $AbsolutePath = str_replace("\\", "/", realpath($Script));
             $DocumentRoot = substr($AbsolutePath, 0, strpos($AbsolutePath, $ScriptName));
         }
         if (!$DocumentRoot) {
             continue;
         }
         $TrimRoot = rtrim($DocumentRoot);
         $RealFolder = str_replace($TrimRoot, '', $Folder);
         if (!empty($RealFolder)) {
             $this->RequestFolder(ltrim($RealFolder, '/'));
             break;
         }
     }
 }