diff -r 877f952ae2bd -r 6b6c2214f778 web/lib/Zend/Http/Header/SetCookie.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/Zend/Http/Header/SetCookie.php Thu Mar 21 19:52:38 2013 +0100 @@ -0,0 +1,546 @@ +getName() === NULL) { + $header->setName($headerKey); + $header->setValue($headerValue); + continue; + } + + // Process the remanining elements + switch (str_replace(array('-', '_'), '', strtolower($headerKey))) { + case 'expires' : $header->setExpires($headerValue); break; + case 'domain' : $header->setDomain($headerValue); break; + case 'path' : $header->setPath($headerValue); break; + case 'secure' : $header->setSecure(true); break; + case 'httponly': $header->setHttponly(true); break; + case 'version' : $header->setVersion((int) $headerValue); break; + case 'maxage' : $header->setMaxAge((int) $headerValue); break; + default: + // Intentionally omitted + } + } + $headers[] = $header; + } + return count($headers) == 1 ? array_pop($headers) : $headers; + } + + /** + * Cookie object constructor + * + * @todo Add validation of each one of the parameters (legal domain, etc.) + * + * @param string $name + * @param string $value + * @param int $expires + * @param string $path + * @param string $domain + * @param bool $secure + * @param bool $httponly + * @param string $maxAge + * @param int $version + * @return SetCookie + */ + public function __construct($name = null, $value = null, $expires = null, $path = null, $domain = null, $secure = false, $httponly = false, $maxAge = null, $version = null) + { + $this->type = 'Cookie'; + + if ($name) { + $this->setName($name); + } + + if ($value) { + $this->setValue($value); // in parent + } + + if ($version) { + $this->setVersion($version); + } + + if ($maxAge) { + $this->setMaxAge($maxAge); + } + + if ($domain) { + $this->setDomain($domain); + } + + if ($expires) { + $this->setExpires($expires); + } + + if ($path) { + $this->setPath($path); + } + + if ($secure) { + $this->setSecure($secure); + } + + if ($httponly) { + $this->setHttponly($httponly); + } + } + + /** + * @return string 'Set-Cookie' + */ + public function getFieldName() + { + return 'Set-Cookie'; + } + + /** + * @throws Zend_Http_Header_Exception_RuntimeException + * @return string + */ + public function getFieldValue() + { + if ($this->getName() == '') { + throw new Zend_Http_Header_Exception_RuntimeException('A cookie name is required to generate a field value for this cookie'); + } + + $value = $this->getValue(); + if (strpos($value,'"')!==false) { + $value = '"'.urlencode(str_replace('"', '', $value)).'"'; + } else { + $value = urlencode($value); + } + $fieldValue = $this->getName() . '=' . $value; + + $version = $this->getVersion(); + if ($version!==null) { + $fieldValue .= '; Version=' . $version; + } + + $maxAge = $this->getMaxAge(); + if ($maxAge!==null) { + $fieldValue .= '; Max-Age=' . $maxAge; + } + + $expires = $this->getExpires(); + if ($expires) { + $fieldValue .= '; Expires=' . $expires; + } + + $domain = $this->getDomain(); + if ($domain) { + $fieldValue .= '; Domain=' . $domain; + } + + $path = $this->getPath(); + if ($path) { + $fieldValue .= '; Path=' . $path; + } + + if ($this->isSecure()) { + $fieldValue .= '; Secure'; + } + + if ($this->isHttponly()) { + $fieldValue .= '; HttpOnly'; + } + + return $fieldValue; + } + + /** + * @param string $name + * @return SetCookie + */ + public function setName($name) + { + if (preg_match("/[=,; \t\r\n\013\014]/", $name)) { + throw new Zend_Http_Header_Exception_InvalidArgumentException("Cookie name cannot contain these characters: =,; \\t\\r\\n\\013\\014 ({$name})"); + } + + $this->name = $name; + return $this; + } + + /** + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * @param string $value + */ + public function setValue($value) + { + $this->value = $value; + return $this; + } + + /** + * @return string + */ + public function getValue() + { + return $this->value; + } + + /** + * Set version + * + * @param integer $version + */ + public function setVersion($version) + { + if (!is_int($version)) { + throw new Zend_Http_Header_Exception_InvalidArgumentException('Invalid Version number specified'); + } + $this->version = $version; + } + + /** + * Get version + * + * @return integer + */ + public function getVersion() + { + return $this->version; + } + + /** + * Set Max-Age + * + * @param integer $maxAge + */ + public function setMaxAge($maxAge) + { + if (!is_int($maxAge) || ($maxAge<0)) { + throw new Zend_Http_Header_Exception_InvalidArgumentException('Invalid Max-Age number specified'); + } + $this->maxAge = $maxAge; + } + + /** + * Get Max-Age + * + * @return integer + */ + public function getMaxAge() + { + return $this->maxAge; + } + + /** + * @param int $expires + * @return SetCookie + */ + public function setExpires($expires) + { + if (!empty($expires)) { + if (is_string($expires)) { + $expires = strtotime($expires); + } elseif (!is_int($expires)) { + throw new Zend_Http_Header_Exception_InvalidArgumentException('Invalid expires time specified'); + } + $this->expires = (int) $expires; + } + return $this; + } + + /** + * @return int + */ + public function getExpires($inSeconds = false) + { + if ($this->expires == null) { + return; + } + if ($inSeconds) { + return $this->expires; + } + return gmdate('D, d-M-Y H:i:s', $this->expires) . ' GMT'; + } + + /** + * @param string $domain + */ + public function setDomain($domain) + { + $this->domain = $domain; + return $this; + } + + /** + * @return string + */ + public function getDomain() + { + return $this->domain; + } + + /** + * @param string $path + */ + public function setPath($path) + { + $this->path = $path; + return $this; + } + + /** + * @return string + */ + public function getPath() + { + return $this->path; + } + + /** + * @param boolean $secure + */ + public function setSecure($secure) + { + $this->secure = $secure; + return $this; + } + + /** + * @return boolean + */ + public function isSecure() + { + return $this->secure; + } + + /** + * @param bool $httponly + */ + public function setHttponly($httponly) + { + $this->httponly = $httponly; + return $this; + } + + /** + * @return bool + */ + public function isHttponly() + { + return $this->httponly; + } + + /** + * Check whether the cookie has expired + * + * Always returns false if the cookie is a session cookie (has no expiry time) + * + * @param int $now Timestamp to consider as "now" + * @return boolean + */ + public function isExpired($now = null) + { + if ($now === null) { + $now = time(); + } + + if (is_int($this->expires) && $this->expires < $now) { + return true; + } else { + return false; + } + } + + /** + * Check whether the cookie is a session cookie (has no expiry time set) + * + * @return boolean + */ + public function isSessionCookie() + { + return ($this->expires === null); + } + + public function isValidForRequest($requestDomain, $path, $isSecure = false) + { + if ($this->getDomain() && (strrpos($requestDomain, $this->getDomain()) !== false)) { + return false; + } + + if ($this->getPath() && (strpos($path, $this->getPath()) !== 0)) { + return false; + } + + if ($this->secure && $this->isSecure()!==$isSecure) { + return false; + } + + return true; + + } + + public function toString() + { + return $this->getFieldName() . ': ' . $this->getFieldValue(); + } + + public function __toString() + { + return $this->toString(); + } + + public function toStringMultipleHeaders(array $headers) + { + $headerLine = $this->toString(); + /* @var $header SetCookie */ + foreach ($headers as $header) { + if (!$header instanceof Zend_Http_Header_SetCookie) { + throw new Zend_Http_Header_Exception_RuntimeException( + 'The SetCookie multiple header implementation can only accept an array of SetCookie headers' + ); + } + $headerLine .= ', ' . $header->getFieldValue(); + } + return $headerLine; + } + + +}