Select Git revision
IndexController.php
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'));
}
}