diff options
| author | Philipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de> | 2024-09-24 10:53:31 +0200 |
|---|---|---|
| committer | Philipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de> | 2024-09-24 10:53:31 +0200 |
| commit | 4459dd7917f4d1c34f40bb68f0e991e9c3d53e4c (patch) | |
| tree | 5c07151ae61276d334e88f6309c30d439a85c12e /lib/classes/auth_plugins/StudipAuthCAS.php | |
| parent | da0022e5c1abbf9825ae76debaabdff7e8623bb4 (diff) | |
| parent | 97a188592c679890a25c37ab78463add76a52ff7 (diff) | |
Merge branch 'main' into issue-3911issue-3911
Diffstat (limited to 'lib/classes/auth_plugins/StudipAuthCAS.php')
| -rw-r--r-- | lib/classes/auth_plugins/StudipAuthCAS.php | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/lib/classes/auth_plugins/StudipAuthCAS.php b/lib/classes/auth_plugins/StudipAuthCAS.php new file mode 100644 index 0000000..29deb75 --- /dev/null +++ b/lib/classes/auth_plugins/StudipAuthCAS.php @@ -0,0 +1,89 @@ +<?php +/** + * Stud.IP authentication against CAS Server + * + * @access public + * @author Dennis Reil <dennis.reil@offis.de> + * @package + */ + +require_once 'lib/classes/cas/CAS_PGTStorage_Cache.php'; + +class StudipAuthCAS extends StudipAuthSSO +{ + public $host; + public $port; + public $uri; + public $cacert; + + public $userdata; + + /** + * Constructor + */ + public function __construct($config = []) + { + parent::__construct($config); + if (!isset($this->plugin_fullname)) { + $this->plugin_fullname = _('CAS'); + } + if (!isset($this->login_description)) { + $this->login_description = _('für Single Sign On mit CAS'); + } + if (Request::get('sso') === $this->plugin_name) { + if ($this->proxy) { + URLHelper::setBaseUrl($GLOBALS['ABSOLUTE_URI_STUDIP']); + phpCAS::proxy(CAS_VERSION_2_0, $this->host, $this->port, $this->uri, false); + phpCAS::setPGTStorage(new CAS_PGTStorage_Cache(phpCAS::getCasClient())); + phpCAS::setFixedCallbackURL(URLHelper::getURL('dispatch.php/cas/proxy')); + } else { + phpCAS::client(CAS_VERSION_2_0, $this->host, $this->port, $this->uri, false); + } + + if (isset($this->cacert)) { + phpCAS::setCasServerCACert($this->cacert); + } else { + phpCAS::setNoCasServerValidation(); + } + } + } + + /** + * Return the current username. + */ + function getUser() + { + return phpCAS::getUser(); + } + + /** + * Validate the username passed to the auth plugin. + * Note: This triggers authentication if needed. + */ + function verifyUsername($username) + { + phpCAS::forceAuthentication(); + return $this->getUser(); + } + + function getUserData($key) + { + $userdataclassname = $this->user_data_mapping_class; + if (!class_exists($userdataclassname)) { + Log::error($this->plugin_name . ': no userdataclassname specified or found.'); + return; + } + // get the userdata + if (empty($this->userdata)) { + $this->userdata = new $userdataclassname(); + } + return $this->userdata->getUserData($key, phpCAS::getUser()); + } + + function logout() + { + // do a global cas logout + phpCAS::client(CAS_VERSION_2_0, $this->host, $this->port, $this->uri, false); + phpCAS::logout(); + } +} |
