| | |
| | | <?php |
| | | // Thrown when internal error occurs |
| | | class JasigException extends Exception {} |
| | | // Thrown when CAS server return authentication error |
| | | // Thrown when CAS server returns authentication error |
| | | class JasigAuthException extends JasigException {} |
| | | |
| | | class JasigUser { |
| | |
| | | } |
| | | } |
| | | |
| | | public function getServerUrl() { |
| | | return $this->serverUrl; |
| | | } |
| | | public function setServerUrl($serverUrl) { |
| | | $this->serverUrl = $serverUrl; |
| | | } |
| | | |
| | | public function getServiceUrl() { |
| | | return $this->serviceUrl; |
| | | } |
| | | public function setServiceUrl($serviceUrl) { |
| | | $this->serviceUrl = $serviceUrl; |
| | | } |
| | |
| | | return $this->serverUrl.'/login?method=POST&service='.urlencode($this->serviceUrl); |
| | | } |
| | | |
| | | public function logoutUrl() { |
| | | return $this->serverUrl.'/logout'; |
| | | public function logoutUrl($returnUrl = NULL) { |
| | | return $this->serverUrl.'/logout'.($returnUrl ? '?service='.urlencode($returnUrl) : ''); |
| | | } |
| | | |
| | | public function logout() { |
| | | public function logout($returnUrl = NULL) { |
| | | session_start(); |
| | | if(isset($_SESSION['uphpCAS-user'])) { |
| | | if($this->isAuthenticated()) { |
| | | unset($_SESSION['uphpCAS-user']); |
| | | header('Location: '.$this->logoutUrl($returnUrl)); |
| | | die(); |
| | | } elseif($returnUrl) { |
| | | header('Location: '.$returnUrl); |
| | | die(); |
| | | } |
| | | header('Location: '.$this->logoutUrl()); |
| | | die(); |
| | | } |
| | | |
| | | public function isAuthenticated() { |
| | | return isset($_SESSION['uphpCAS-user']); |
| | | } |
| | | |
| | | public function authenticate() { |
| | | session_start(); |
| | | if(isset($_SESSION['uphpCAS-user'])) { |
| | | if($this->isAuthenticated()) { |
| | | return $_SESSION['uphpCAS-user']; |
| | | } elseif(isset($_REQUEST['ticket'])) { |
| | | $user = $this->verifyTicket($_REQUEST['ticket']); |
| | |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | catch(Exception $e) { |
| | | } catch(Exception $e) { |
| | | throw new JasigException('Authentication error: CAS server' |
| | | .' response invalid - parse error', 0, $e); |
| | | } finally { |
| | |
| | | } |
| | | |
| | | $user = trim($user->item(0)->textContent); |
| | | if(strlen($user)<1) { |
| | | if(strlen($user) < 1) { |
| | | throw new JasigException('Authentication error: CAS server' |
| | | .' response invalid - user value'); |
| | | } |
| | |
| | | } |
| | | |
| | | return $jusr; |
| | | } |
| | | else |
| | | { |
| | | } else { |
| | | throw new JasigException('Authentication error: CAS server' |
| | | .' response invalid - required tag not found'); |
| | | } |