Subversion-Projekte lars-tiefland.prado

Revision

Blame | Letzte Änderung | Log anzeigen | RSS feed

<?php
/**
 * Custom Authentication manager permits authentication using
 * a string token saved in the cookie.
 *
 * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
 * @version $Id: TrackerAuthManager.php 1400 2006-09-09 03:13:44Z wei $
 * @package Demos
 * @since 3.1
 */
class TrackerAuthManager extends TAuthManager
{
        /**
         * @const string signon token cookie name.
         */
        const SignonCookieName = 'time-tracker-signon';
        
        /**
         * Performs the real authentication work. Overrides and calls parent
         * implementation. Trys to authenticate using token saved in cookie. 
         * @param mixed parameter to be passed to OnAuthenticate event
         */
        public function onAuthenticate($param)
        {
                parent::onAuthenticate($param);
                $currentUser = $this->Application->User; 
                if(!$currentUser || $currentUser->IsGuest)
                        $this->authenticateFromCookie($param);
        }
        
        /**
         * If the user is not set or is still a guest, try to authenticate the user
         * using a string token saved in the cookie if any.
         * @param mixed parameter to be passed to OnAuthenticate event 
         */
        protected function authenticateFromCookie($param)
        {
                $cookie = $this->Request->Cookies[self::SignonCookieName];
                if(!is_null($cookie))
                {
                        $daos = $this->getApplication()->getModule('daos');
                        $userDao = $daos->getDao('UserDao');
                        $user = $userDao->validateSignon($cookie->Value);
                        if($user instanceof TimeTrackerUser)
                                $this->updateCredential($user);
                }
        }
        
        /**
         * Changes the user credentials.
         * @param TUser new user details.
         */
        public function updateCredential($user)
        {
                $user->IsGuest = false;
                $this->updateSessionUser($user);
                $this->Application->User = $user;               
        }
        
        /**
         * Generate a token to be saved in the cookie for later authentication.
         * @param TimeTrackerUser user details.
         */
        public function rememberSignon($user)
        {
                $daos = $this->getApplication()->getModule('daos');
                $userDao = $daos->getDao('UserDao');
                $token = $userDao->createSignonToken($user);
                $cookie = new THttpCookie(self::SignonCookieName, $token);
                $cookie->Expire = strtotime('+1 month');
                $this->Response->Cookies[] = $cookie;
        }
        
        /**
         * Logs out the user and delete the token from cookie.
         */
        public function logout()
        {
                parent::logout();
                $cookie = new THttpCookie(self::SignonCookieName,'');
                $this->Response->Cookies[] = $cookie;
        }
}

?>