diff --git a/application/modules/auth/controllers/IndexController.php b/application/modules/auth/controllers/IndexController.php index d383236e6646215be0cb0b3fc22c12a68b486952..d8624c791e7c4cb6fd7154844dd7af7f2330921b 100644 --- a/application/modules/auth/controllers/IndexController.php +++ b/application/modules/auth/controllers/IndexController.php @@ -21,7 +21,7 @@ class Auth_IndexController extends App_Controller_Action { $session = new Zend_Session_Namespace(__CLASS__); $baseUrl = Zend_Controller_Front::getInstance()->getBaseUrl(); try { - $referer = Zend_Uri_Http::factory($_SERVER['HTTP_REFERER']); + $referer = Zend_Uri_Http::factory($_SERVER['HTTP_REFERER']); } catch (Exception $e) { } if ($referer && @@ -39,35 +39,20 @@ class Auth_IndexController extends App_Controller_Action { $session->referer = '/'; } - $this->_redirect('/auth/index/validate'); - return; + $this->_redirect($this->_getCasAdapter()->getLoginUrl()); } public function logoutAction() { Zend_Auth::getInstance()->clearIdentity(); - $this->_redirect('/'); + $this->_getCasAdapter()->clearIdentity(); + $this->_redirect($this->_getCasAdapter()->getLogoutUrl()); } public function validateAction() { - $username = $this->getRequest()->getParam('username'); - $password = $this->getRequest()->getParam('password'); - $auth = Unl_Auth::getInstance(); - - //$ldap = new Unl_Ldap('ldap://localhost:10389'); - //$ldapAdapter = new Unl_Auth_Adapter_Ldap($ldap, $username, $password); - //$auth->pushAdapter($ldapAdapter); - - if ($_SERVER['HTTPS'] == 'on') { - $serviceUrl = 'https://'; - } else { - $serviceUrl = 'http://'; - } - $serviceUrl .= $_SERVER['SERVER_NAME'] . Zend_Controller_Front::getInstance()->getBaseUrl() . '/auth/index/validate'; - $casAdapter = new Unl_Auth_Adapter_Cas($serviceUrl, 'https://login.unl.edu/cas', $this->_getParam('ticket')); - $auth->pushAdapter($casAdapter); + $auth->pushAdapter($this->_getCasAdapter()); try { $result = $auth->authenticate(); @@ -75,18 +60,11 @@ class Auth_IndexController extends App_Controller_Action { // } - if (!$result || !$result->isValid()) { - $session = new Zend_Session_Namespace(__CLASS__); - $session->errorMessage = 'Login Failed'; - // Don't redirect, CAS is already doing it. - //$this->_redirect('/auth/index'); - $this->_disableLayoutAndView(); - return; - } - - $user = Auth_UserModel::findCurrentUser(); - if (!$user) { - $user = Auth_UserModel::fetchNewFromLdap($auth->getIdentity()); + if ($result && $result->isValid()) { + $user = Auth_UserModel::findCurrentUser(); + if (!$user) { + $user = Auth_UserModel::fetchNewFromLdap($auth->getIdentity()); + } } $session = new Zend_Session_Namespace(__CLASS__); @@ -96,5 +74,20 @@ class Auth_IndexController extends App_Controller_Action { $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')); + } } diff --git a/application/modules/courses/models/ApprovalActionEmailCourseInfoModel.php b/application/modules/courses/models/ApprovalActionEmailCourseInfoModel.php index 086c795b794d88698f74dcaf6dbd59d29b58f4d8..2371e791f084346b59d22af8648acbc5884a7028 100644 --- a/application/modules/courses/models/ApprovalActionEmailCourseInfoModel.php +++ b/application/modules/courses/models/ApprovalActionEmailCourseInfoModel.php @@ -142,7 +142,9 @@ class Courses_ApprovalActionEmailCourseInfoModel extends Requests_ApprovalAction $previousRequests = Requests_RequestModel::find($previousRequestIds); $this->_requestPreviousRequests = new Unl_Model_Collection('Requests_RequestModel'); foreach ($previousRequestIds as $childId => $parentId) { - $this->_requestPreviousRequests[$childId] = $previousRequests[$parentId]; + if ($previousRequests[$parentId]) { + $this->_requestPreviousRequests[$childId] = $previousRequests[$parentId]; + } } $ownerIds = array(); @@ -192,6 +194,10 @@ class Courses_ApprovalActionEmailCourseInfoModel extends Requests_ApprovalAction $text = strtr($text, array( '%rse-%' => $parentOwner->getEmail() )); + } else { + $text = strtr($text, array( + '%rse-%' => 'nobody@example.com' + )); } return $text; diff --git a/application/modules/courses/views/scripts/view/index.phtml b/application/modules/courses/views/scripts/view/index.phtml index 4cb8420e9652fc7f8c792fa26cebab9bef5fb1da..d7744d9bf230e5e1d483bf780e496e95c4d03e84 100644 --- a/application/modules/courses/views/scripts/view/index.phtml +++ b/application/modules/courses/views/scripts/view/index.phtml @@ -154,6 +154,7 @@ $this->layout()->breadcrumbs = array($breadcrumb . ': ' . $this->course->getCour <?php if ($this->action) { ?> <form id="decisionForm" action="<?php echo $this->baseUrl(); ?>/requests/index/decide.post"> + <?php echo $this->formHidden('xsrfToken', Unl_XsrfToken::getInstance()->create()); ?> Action: <?php echo $this->action->getName(); ?><br /> <?php echo $this->formHidden('returnUrl', '/courses/view/index/id/' . $this->request->getId()); ?> <?php echo $this->formSelect('decisions[' . $this->request->getId() . ']', $this->selectedDecision, null, array('_null' => $this->defaultDecision) + $this->action->getResultStatusStrings($this->user)); ?> diff --git a/application/modules/default/views/scripts/layout.phtml b/application/modules/default/views/scripts/layout.phtml index 2769a5cf223d1e446b6a170d24a57941fefe74ed..7df5e3b3e703d9d6a96bc501ca26997ba9be9d03 100644 --- a/application/modules/default/views/scripts/layout.phtml +++ b/application/modules/default/views/scripts/layout.phtml @@ -1,5 +1,7 @@ <?php +$baseUrl = Zend_Controller_Front::getInstance()->getBaseUrl(); + $staticBaseUrl = ''; if ($_SERVER['HTTPS']) { $staticBaseUrl = 'https://'; @@ -7,7 +9,7 @@ if ($_SERVER['HTTPS']) { $staticBaseUrl = 'http://'; } $staticBaseUrl .= $_SERVER['HTTP_HOST'] - . Zend_Controller_Front::getInstance()->getBaseUrl(); + . $baseUrl; $this->headLink()->appendStylesheet($this->baseUrl() . '/css/index.css', 'all'); $this->headLink()->appendStylesheet($this->baseUrl() . '/css/print.css', 'print'); @@ -100,6 +102,8 @@ try { pageTracker._initData(); pageTracker._trackPageview(); } catch(err) {} + +WDN.idm.setLogoutURL('$baseUrl/auth/index/logout'); </script> EOF; diff --git a/application/modules/ping/controllers/IndexController.php b/application/modules/ping/controllers/IndexController.php new file mode 100644 index 0000000000000000000000000000000000000000..de6bd0ff3945b640e749605615885732de51354e --- /dev/null +++ b/application/modules/ping/controllers/IndexController.php @@ -0,0 +1,11 @@ +<?php + +class Ping_IndexController extends Unl_Controller_Action +{ + public function indexAction() + { + $this->getResponse()->setHeader('Content-type', 'text/plain'); + $this->_disableLayoutAndView(); + echo 'pong'; + } +} diff --git a/application/modules/requests/controllers/IndexController.php b/application/modules/requests/controllers/IndexController.php index 97adc9047ab96e2f19cde3a242889a4dcc7eb7cb..b67d5d06a11d45dd880900abdacfdc5ffcbc38ce 100644 --- a/application/modules/requests/controllers/IndexController.php +++ b/application/modules/requests/controllers/IndexController.php @@ -239,11 +239,17 @@ class Requests_IndexController extends App_Controller_Action } } } + + $this->view->xsrfToken = Unl_XsrfToken::getInstance()->create(); } public function decidePostAction() { $in = $this->getRequest()->getParams(); + + if (!Unl_XsrfToken::getInstance()->verify($in['xsrfToken'])) { + throw new Zend_Exception('Invalid XSRF Token! Please go back click the Refresh button while holding Shift.'); + } $requestDecisions = array(); foreach ($in['decisions'] as $requestId => $decision) { diff --git a/application/modules/requests/views/scripts/index/index.phtml b/application/modules/requests/views/scripts/index/index.phtml index a38e2504c0be7c187f9445dea8edd3d76bd43416..7a56ca934942d9f809df16c9ad18779ca4c256f8 100644 --- a/application/modules/requests/views/scripts/index/index.phtml +++ b/application/modules/requests/views/scripts/index/index.phtml @@ -110,6 +110,7 @@ </div> <div class="content"> <form action="<?php echo $this->baseUrl(); ?>/requests/index/decide.post" method="post"> + <?php echo $this->formHidden('xsrfToken', $this->xsrfToken); ?> <?php if(count($this->userRequests) == 0) { ?> <h2>You currently have no requests.</h2> <?php } else { ?> @@ -269,6 +270,7 @@ foreach($this->roles as $roleData) { <?php } ?> <form action="<?php echo $this->baseUrl(); ?>/requests/index/decide.post" method="post"> + <?php echo $this->formHidden('xsrfToken', $this->xsrfToken); ?> <div class="setAllDecisions"> <?php echo $this->formSubmit('submit', 'Submit Decisions'); ?> </div> diff --git a/application/modules/ucc/controllers/ReportsController.php b/application/modules/ucc/controllers/ReportsController.php index 4ee4c0d59ae7bb06d2758a272bef4b21d85d7034..217e2e566de363f5e3c9d2c5c8242eccbae80e6a 100644 --- a/application/modules/ucc/controllers/ReportsController.php +++ b/application/modules/ucc/controllers/ReportsController.php @@ -17,8 +17,8 @@ class Ucc_ReportsController extends App_Controller_Action if (!$year && !$month) { $startDate = new Zend_Date(); $startDate->setYear(2008); - $startDate->setMonth(9); $startDate->setDay(15); + $startDate->setMonth(9); $startDate->setHour(0); $startDate->setMinute(0); $startDate->setSecond(0); @@ -33,9 +33,9 @@ class Ucc_ReportsController extends App_Controller_Action } $startDate = new Zend_Date(); + $startDate->setDay(1); $startDate->setYear($year); $startDate->setMonth($month); - $startDate->setDay(1); $startDate->setHour(0); $startDate->setMinute(0); $startDate->setSecond(0); @@ -56,8 +56,8 @@ class Ucc_ReportsController extends App_Controller_Action $startDate = new Zend_Date(); $startDate->setYear($year); - $startDate->setMonth(1); $startDate->setDay(1); + $startDate->setMonth(1); $startDate->setHour(0); $startDate->setMinute(0); $startDate->setSecond(0);