From 8891c7c5e6c5857eec83205815fa023939e1e126 Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <Jacek@jacekk.info> Date: Thu, 03 Sep 2015 21:09:26 +0000 Subject: [PATCH] Extract code constructing current URL to getCurrentUrl() method --- uphpCAS.php | 94 +++++++++++++++++++++++++++-------------------- 1 files changed, 54 insertions(+), 40 deletions(-) diff --git a/uphpCAS.php b/uphpCAS.php index acc9c21..e1276bb 100644 --- a/uphpCAS.php +++ b/uphpCAS.php @@ -1,7 +1,7 @@ <?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 { @@ -13,8 +13,9 @@ const VERSION = '1.0'; protected $serverUrl = ''; protected $serviceUrl; + protected $sessionName = 'uphpCAS-user'; - function __construct($serverUrl = NULL, $serviceUrl = NULL) { + function __construct($serverUrl = NULL, $serviceUrl = NULL, $sessionName = NULL) { if($serverUrl != NULL) { $this->serverUrl = rtrim($serverUrl, '/'); } @@ -22,31 +23,37 @@ if($serviceUrl != NULL) { $this->serviceUrl = $serviceUrl; } else { - $url = 'http://'; - $port = 0; - if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') { - $url = 'https://'; - if(isset($_SERVER['SERVER_PORT']) - && $_SERVER['SERVER_PORT'] != '443') { - $port = $_SERVER['SERVER_PORT']; - } - } elseif(isset($_SERVER['SERVER_PORT']) - && $_SERVER['SERVER_PORT'] != '80') { - $port = $_SERVER['SERVER_PORT']; - } - - $url .= $_SERVER['SERVER_NAME']; - - if($port != 0) { - $url .= ':'.$port; - } - $url .= $_SERVER['REQUEST_URI']; - - $this->serviceUrl = $url; + $this->serviceUrl = $this->getCurrentUrl(); + } + + if($sessionName) { + $this->sessionName = $sessionName; } } - public function getServerUrl($serverUrl) { + public function getCurrentUrl() { + $url = 'http://'; + $port = 0; + if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') { + $url = 'https://'; + if(isset($_SERVER['SERVER_PORT']) + && $_SERVER['SERVER_PORT'] != '443') { + $port = $_SERVER['SERVER_PORT']; + } + } elseif(isset($_SERVER['SERVER_PORT']) + && $_SERVER['SERVER_PORT'] != '80') { + $port = $_SERVER['SERVER_PORT']; + } + + $url .= $_SERVER['SERVER_NAME']; + + if($port != 0) { + $url .= ':'.$port; + } + $url .= $_SERVER['REQUEST_URI']; + } + + public function getServerUrl() { return $this->serverUrl; } public function setServerUrl($serverUrl) { @@ -60,34 +67,44 @@ $this->serviceUrl = $serviceUrl; } + public function getSessionName($sessionName) { + return $this->sessionName; + } + public function setSessionName($sessionName) { + $this->sessionName = $sessionName; + } + public function loginUrl() { 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'])) { - unset($_SESSION['uphpCAS-user']); + if($this->isAuthenticated()) { + unset($_SESSION[$this->sessionName]); + 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']); + return isset($_SESSION[$this->sessionName]); } public function authenticate() { session_start(); if($this->isAuthenticated()) { - return $_SESSION['uphpCAS-user']; + return $_SESSION[$this->sessionName]; } elseif(isset($_REQUEST['ticket'])) { $user = $this->verifyTicket($_REQUEST['ticket']); - $_SESSION['uphpCAS-user'] = $user; + $_SESSION[$this->sessionName] = $user; return $user; } else { header('Location: '.$this->loginUrl()); @@ -157,8 +174,7 @@ break; } } - } - catch(Exception $e) { + } catch(Exception $e) { throw new JasigException('Authentication error: CAS server' .' response invalid - parse error', 0, $e); } finally { @@ -192,7 +208,7 @@ } $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'); } @@ -209,9 +225,7 @@ } return $jusr; - } - else - { + } else { throw new JasigException('Authentication error: CAS server' .' response invalid - required tag not found'); } -- Gitblit v1.9.1