Skip to content
Snippets Groups Projects
Select Git revision
  • 6bf82f18441c3b7a636d8889c747b6dbb2add358
  • master default
2 results

IndexController.php

Blame
  • user avatar
    Tim Steiner authored
    6bf82f18
    History
    IndexController.php 2.60 KiB
    <?php
    
    class Auth_IndexController extends Unl_Controller_Action
    {
        
        public function indexAction()
        {
            $this->_redirect('/auth/index/login');
        }
        
        public function loginAction()
        {
            $session = new Zend_Session_Namespace(__CLASS__);
            $baseUrl = Zend_Controller_Front::getInstance()->getBaseUrl();
            try {
                $referer = Zend_Uri_Http::factory($_SERVER['HTTP_REFERER']);
            } catch (Exception $e) {
            }
            if ($referer && 
                $referer->getHost() == $_SERVER['HTTP_HOST'] &&
                (!$referer->getPort() || $referer->getPort() == $_SERVER['SERVER_PORT']) &&
                substr($referer->getPath(), 0, strlen($baseUrl)) == $baseUrl) {
                $session->referer = substr($referer->getPath(), strlen($baseUrl));
                if ($referer->getQuery()) {
                    $session->referer .= '?' . $referer->getQuery();
                }
                if ($referer->getFragment()) {
                    $session->referer .= '#' . $referer->getFragment();
                }
            } else {
                $session->referer = '/';
            }
            
            $this->_redirect($this->_getCasAdapter()->getLoginUrl());
        }
        
        public function logoutAction()
        {
            Zend_Auth::getInstance()->clearIdentity();
            $this->_redirect($this->_getCasAdapter()->getLogoutUrl());
        }
        
        public function validateAction()
        {
            $auth = Unl_Auth::getInstance();
            $casAdapter = $this->_getCasAdapter();
    		if ($this->_getParam('logoutRequest')) {
    			$casAdapter->handleLogoutRequest($this->_getParam('logoutRequest'));
    		}
            $auth->pushAdapter($casAdapter);
            
            try {
                $result = $auth->authenticate();
            } catch (Exception $e) {
                //
            }
            
            if (!$result || !$result->isValid()) {
    			Zend_Auth::getInstance()->clearIdentity();
    			$this->redirect('/');
            }
            
            $session = new Zend_Session_Namespace(__CLASS__);
            if ($session->referer) {
                $this->_redirect($session->referer);
            } else {
                $this->_redirect('/');
            }
        }
        
    	/**
    	 * Sets up the CAS adapter and returns it.
    	 * @return Unl_Auth_Adapter_Cas
    	 */
        protected function _getCasAdapter()
        {
            if ($_SERVER['HTTPS'] == 'on') {
                $serviceUrl = 'https://';
            } else {
                $serviceUrl = 'http://';
            }
            $serviceUrl .= $_SERVER['SERVER_NAME'] . Zend_Controller_Front::getInstance()->getBaseUrl() . '/auth/index/validate';
            return new Unl_Auth_Adapter_Cas($serviceUrl, 'https://login.unl.edu/cas', $this->_getParam('ticket'));
        }
        
    }