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     // Kein gültiges Token und keine Fehlerunterdrückung
00026     if (!$this->_hasValidToken && !$suppressError)
00027     {
00028       // Ohne Umschweife umleiten
00029       $this->getActionController()->forward('token','error', 'default');
00030     }
00031 
00032     return (bool) $this->_hasValidToken;
00033   }
00034 
00044   public function init()
00045   {
00046     // Falls Ajax-Anfrage vorliegt
00047     if ($this->getActionController()->isXmlHttpRequest())
00048     {
00049       $this->_hasValidToken = true;
00050 
00051       return;
00052     }
00053 
00054     // Namensbereich
00055     $namespaceToken = new Zend_Session_Namespace('token');
00056 
00057     // Falls Token übergeben wurde und in Session vorhanden ist
00058     if ($this->getActionController()->getUri()->token && isset($namespaceToken->token))
00059     {
00060       $this->_hasValidToken =
00061         ($this->getActionController()->getUri()->token == $namespaceToken->token);
00062     }
00063 
00064     // Falls Token gültig oder noch weitere Aktionen ausgeführt werden sollen,
00065     // dieses nehmen
00066     if (isset($namespaceToken->valid) || !$this->getRequest()->isDispatched())
00067     {
00068       Dsao_Uri_Http::setToken($namespaceToken->token);
00069     }
00070     // Ansonsten neues Token erstellen
00071     else
00072     {
00073       $namespaceToken->token = Dsao_Uri_Http::setToken();
00074       $namespaceToken->valid = true;
00075 
00076       // Anzahl Aufrufe, nach der Token ablaufen soll
00077       $expirationHops = (int) $this->getActionController()->getConfig()
00078         ->session->token->expiration->hops;
00079 
00080       // Zeit, nach der Token ablaufen soll
00081       $expirationTime = (int) $this->getActionController()->getConfig()
00082         ->session->token->expiration->time;
00083 
00084       // Zeit und Hops ungültig -> Hops auf 1 setzen
00085       if (!$expirationTime && !$expirationHops)
00086       {
00087         $expirationHops = 1;
00088       }
00089       // Falls Zeit gültig
00090       else if ($expirationTime > 0)
00091       {
00092         $namespaceToken->setExpirationSeconds($expirationTime, 'valid');
00093       }
00094 
00095       // Falls Hops gültig
00096       if ($expirationHops > 0)
00097       {
00098         $namespaceToken->setExpirationHops($expirationHops, 'valid');
00099       }
00100     }
00101   }
00102 }

Erzeugt am Fri Sep 18 19:04:11 2009 für DSA online - Morgendaemmerung von  doxygen 1.5.7.1