From 44b838e3f40277a4e55a9c8804365ab973e11d4b Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <jkowalsk@student.agh.edu.pl> Date: Sat, 05 Sep 2015 23:52:14 +0000 Subject: [PATCH] Fix incorrect serviceUrl passed to CAS when GET method was used --- uphpCAS.php | 67 ++++++++++++++++++++++++++------- 1 files changed, 53 insertions(+), 14 deletions(-) diff --git a/uphpCAS.php b/uphpCAS.php index 5ded1ea..d073771 100644 --- a/uphpCAS.php +++ b/uphpCAS.php @@ -14,6 +14,8 @@ protected $serverUrl = ''; protected $serviceUrl; protected $sessionName = 'uphpCAS-user'; + protected $method = 'POST'; + protected $caFile = NULL; function __construct($serverUrl = NULL, $serviceUrl = NULL, $sessionName = NULL) { if($serverUrl != NULL) { @@ -28,6 +30,10 @@ if($sessionName) { $this->sessionName = $sessionName; + } + + if(version_compare(PHP_VERSION, '5.6', '<')) { + $this->caFile = $this->findCaFile(); } } @@ -50,7 +56,18 @@ if($port != 0) { $url .= ':'.$port; } + $url .= $_SERVER['REQUEST_URI']; + + if(isset($_GET['ticket'])) { + $pos = max( + strrpos($url, '?ticket='), + strrpos($url, '&ticket=') + ); + $url = substr($url, 0, $pos); + } + + return $url; } public function getServerUrl() { @@ -74,12 +91,35 @@ $this->sessionName = $sessionName; } + public function getMethod() { + return $this->method; + } + public function setMethod($method) { + if($method != 'GET' && $method != 'POST') { + throw new DomainException('Unsupported CAS response' + .' method: '.$method); + } + $this->method = $method; + } + + public function getCaFile() { + return $this->caFile; + } + public function setCaFile($caFile) { + if(!is_file($caFile)) { + throw new DomainException('Invalid CA file: '.$caFile); + } + $this->caFile = $caFile; + } + public function loginUrl() { - return $this->serverUrl.'/login?method=POST&service='.urlencode($this->serviceUrl); + return $this->serverUrl.'/login?method='.$this->method + .'&service='.urlencode($this->serviceUrl); } public function logoutUrl($returnUrl = NULL) { - return $this->serverUrl.'/logout'.($returnUrl ? '?service='.urlencode($returnUrl) : ''); + return $this->serverUrl.'/logout' + .($returnUrl ? '?service='.urlencode($returnUrl) : ''); } public function logout($returnUrl = NULL) { @@ -131,7 +171,7 @@ } protected function createStreamContext($hostname) { - $context = stream_context_create(array( + $context = array( 'http' => array( 'method' => 'GET', 'user_agent' => 'uphpCAS/'.self::VERSION, @@ -144,20 +184,19 @@ 'allow_self_signed' => FALSE, 'disable_compression' => TRUE, ), - )); + ); - if(version_compare(PHP_VERSION, '5.6', '<')) { - stream_context_set_option($context, array( - 'ssl' => array( - 'cafile' => $this->findCaFile(), - 'ciphers' => 'ECDH:DH:AES:CAMELLIA:!SSLv2:!aNULL:!eNULL' - .':!EXPORT:!DES:!3DES:!MD5:!RC4:!ADH:!PSK:!SRP', - 'CN_match' => $hostname, - ), - )); + if($this->caFile) { + $context['ssl']['cafile'] = $this->caFile; } - return $context; + if(version_compare(PHP_VERSION, '5.6', '<')) { + $context['ssl']['ciphers'] = 'ECDH:DH:AES:CAMELLIA:!SSLv2:!aNULL' + .':!eNULL:!EXPORT:!DES:!3DES:!MD5:!RC4:!ADH:!PSK:!SRP'; + $context['ssl']['CN_match'] = $hostname; + } + + return stream_context_create($context); } public function verifyTicket($ticket) { -- Gitblit v1.9.1