aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/auth_plugins/StudipAuthCAS.php
diff options
context:
space:
mode:
authorPhilipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de>2024-09-24 10:53:31 +0200
committerPhilipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de>2024-09-24 10:53:31 +0200
commit4459dd7917f4d1c34f40bb68f0e991e9c3d53e4c (patch)
tree5c07151ae61276d334e88f6309c30d439a85c12e /lib/classes/auth_plugins/StudipAuthCAS.php
parentda0022e5c1abbf9825ae76debaabdff7e8623bb4 (diff)
parent97a188592c679890a25c37ab78463add76a52ff7 (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.php89
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();
+ }
+}