SessionToken.php
00001 <?php
00009 class Dsao_Controller_Action_Helper_SessionToken
00010 extends Zend_Controller_Action_Helper_Abstract
00011 {
00015 protected $_hasValidToken = false;
00016
00023 public function hasValidToken($suppressError = false)
00024 {
00025
00026 if (!$this->_hasValidToken && !$suppressError)
00027 {
00028
00029 $this->getActionController()->forward('token','error', 'default');
00030 }
00031
00032 return (bool) $this->_hasValidToken;
00033 }
00034
00044 public function init()
00045 {
00046
00047 if ($this->getActionController()->isXmlHttpRequest())
00048 {
00049 $this->_hasValidToken = true;
00050
00051 return;
00052 }
00053
00054
00055 $namespaceToken = new Zend_Session_Namespace('token');
00056
00057
00058 if ($this->getActionController()->getUri()->token && isset($namespaceToken->token))
00059 {
00060 $this->_hasValidToken =
00061 ($this->getActionController()->getUri()->token == $namespaceToken->token);
00062 }
00063
00064
00065
00066 if (isset($namespaceToken->valid) || !$this->getRequest()->isDispatched())
00067 {
00068 Dsao_Uri_Http::setToken($namespaceToken->token);
00069 }
00070
00071 else
00072 {
00073 $namespaceToken->token = Dsao_Uri_Http::setToken();
00074 $namespaceToken->valid = true;
00075
00076
00077 $expirationHops = (int) $this->getActionController()->getConfig()
00078 ->session->token->expiration->hops;
00079
00080
00081 $expirationTime = (int) $this->getActionController()->getConfig()
00082 ->session->token->expiration->time;
00083
00084
00085 if (!$expirationTime && !$expirationHops)
00086 {
00087 $expirationHops = 1;
00088 }
00089
00090 else if ($expirationTime > 0)
00091 {
00092 $namespaceToken->setExpirationSeconds($expirationTime, 'valid');
00093 }
00094
00095
00096 if ($expirationHops > 0)
00097 {
00098 $namespaceToken->setExpirationHops($expirationHops, 'valid');
00099 }
00100 }
00101 }
00102 }