/**
  * @param array $a_data
  *
  * @return bool
  */
 public function doesMatch(array $a_data)
 {
     if ($this->isPluginActive()) {
         return ilShibbolethRoleAssignmentRules::callPlugin($this->getPluginId(), $a_data);
     }
     if (!isset($a_data[$this->getName()])) {
         return false;
     }
     $values = $a_data[$this->getName()];
     if (is_array($values)) {
         return in_array($this->getValue(), $values);
     } else {
         $pattern = str_replace('*', '.*?', $this->getValue());
         return (bool) preg_match('/^' . $pattern . '$/us', $values);
     }
 }
示例#2
0
 /**
  * Login function
  *
  * @access private
  * @return void
  */
 public function login()
 {
     $shibServerData = shibServerData::getInstance($_SERVER);
     if ($shibServerData->getLogin()) {
         $shibUser = shibUser::getInstance($shibServerData);
         if ($shibUser->isNew()) {
             $shibUser->createFields();
             $shibUser = ilShibbolethPluginWrapper::getInstance()->beforeCreateUser($shibUser);
             $shibUser->create();
             $shibUser->updateOwner();
             $shibUser->saveAsNew();
             $shibUser = ilShibbolethPluginWrapper::getInstance()->afterCreateUser($shibUser);
             ilShibbolethRoleAssignmentRules::doAssignments($shibUser->getId(), $_SERVER);
         } else {
             $shibUser->updateFields();
             $shibUser->update();
             $shibUser = ilShibbolethPluginWrapper::getInstance()->beforeUpdateUser($shibUser);
             $shibUser->update();
             $shibUser = ilShibbolethPluginWrapper::getInstance()->afterUpdateUser($shibUser);
             ilShibbolethRoleAssignmentRules::updateAssignments($shibUser->getId(), $_SERVER);
         }
         $this->setAuth($shibUser->getLogin(), $shibUser);
         ilObjUser::_updateLastLogin($shibUser->getId());
         if ($_GET['target'] != '') {
             ilUtil::redirect('goto.php?target=' . $_GET['target'] . '&client_id=' . CLIENT_ID);
         }
     } else {
         $this->status = AUTH_WRONG_LOGIN;
     }
 }
 /**
  * @param $a_plugin_id
  * @param $a_user_data
  *
  * @return bool
  */
 public static function callPlugin($a_plugin_id, $a_user_data)
 {
     global $ilPluginAdmin;
     if (self::$active_plugins == NULL) {
         self::$active_plugins = $ilPluginAdmin->getActivePluginsForSlot(IL_COMP_SERVICE, 'AuthShibboleth', 'shibhk');
     }
     $assigned = false;
     foreach (self::$active_plugins as $plugin_name) {
         $ok = false;
         $plugin_obj = $ilPluginAdmin->getPluginObject(IL_COMP_SERVICE, 'AuthShibboleth', 'shibhk', $plugin_name);
         if ($plugin_obj instanceof ilShibbolethRoleAssignmentPlugin) {
             $ok = $plugin_obj->checkRoleAssignment($a_plugin_id, $a_user_data);
         }
         if ($ok) {
             $assigned = true;
         }
     }
     return $assigned;
 }
 /**
  * Login function
  *
  * @access private
  * @return void
  */
 function login()
 {
     global $ilias, $rbacadmin, $ilSetting;
     if (!empty($_SERVER[$ilias->getSetting('shib_login')])) {
         // Store user's Shibboleth sessionID for logout
         $this->session['shibboleth_session_id'] = $_SERVER['Shib-Session-ID'];
         // Get loginname of user, new login name is generated if user is new
         $username = $this->generateLogin();
         // Authorize this user
         $this->setAuth($username);
         $userObj = new ilObjUser();
         // Check wether this account exists already, if not create it
         if (!ilObjUser::getUserIdByLogin($username)) {
             $newUser["firstname"] = $this->getFirstString($_SERVER[$ilias->getSetting('shib_firstname')]);
             $newUser["lastname"] = $this->getFirstString($_SERVER[$ilias->getSetting('shib_lastname')]);
             $newUser["login"] = $username;
             // Password must be random to prevent users from manually log in using the login data from Shibboleth users
             $newUser["passwd"] = md5(end(ilUtil::generatePasswords(1)));
             $newUser["passwd_type"] = IL_PASSWD_MD5;
             if ($ilias->getSetting('shib_update_gender') && ($_SERVER[$ilias->getSetting('shib_gender')] == 'm' || $_SERVER[$ilias->getSetting('shib_gender')] == 'f')) {
                 $newUser["gender"] = $_SERVER[$ilias->getSetting('shib_gender')];
             }
             // Save mapping between ILIAS user and Shibboleth uniqueID
             $newUser["ext_account"] = $_SERVER[$ilias->getSetting('shib_login')];
             // other data
             $newUser["title"] = $_SERVER[$ilias->getSetting('shib_title')];
             $newUser["institution"] = $_SERVER[$ilias->getSetting('shib_institution')];
             $newUser["department"] = $_SERVER[$ilias->getSetting('shib_department')];
             $newUser["street"] = $_SERVER[$ilias->getSetting('shib_street')];
             $newUser["city"] = $_SERVER[$ilias->getSetting('shib_city')];
             $newUser["zipcode"] = $_SERVER[$ilias->getSetting('shib_zipcode')];
             $newUser["country"] = $_SERVER[$ilias->getSetting('shib_country')];
             $newUser["phone_office"] = $this->getFirstString($_SERVER[$ilias->getSetting('shib_phone_office')]);
             $newUser["phone_home"] = $this->getFirstString($_SERVER[$ilias->getSetting('shib_phone_home')]);
             $newUser["phone_mobile"] = $this->getFirstString($_SERVER[$ilias->getSetting('shib_phone_mobile')]);
             $newUser["fax"] = $this->getFirstString($_SERVER[$ilias->getSetting('shib_fax')]);
             $newUser["matriculation"] = $_SERVER[$ilias->getSetting('shib_matriculation')];
             $newUser["email"] = $this->getFirstString($_SERVER[$ilias->getSetting('shib_email')]);
             $newUser["hobby"] = $_SERVER[$ilias->getSetting('shib_hobby')];
             $newUser["auth_mode"] = "shibboleth";
             // system data
             $userObj->assignData($newUser);
             $userObj->setTitle($userObj->getFullname());
             $userObj->setDescription($userObj->getEmail());
             $userObj->setLanguage($this->getFirstString($_SERVER[$ilias->getSetting('shib_language')]));
             // Time limit
             $userObj->setTimeLimitOwner(7);
             $userObj->setTimeLimitUnlimited(1);
             $userObj->setTimeLimitFrom(time());
             $userObj->setTimeLimitUntil(time());
             // Modify user data before creating the user
             // Include custom code that can be used to further modify
             // certain Shibboleth user attributes
             if ($ilias->getSetting('shib_data_conv') && $ilias->getSetting('shib_data_conv') != '' && is_readable($ilias->getSetting('shib_data_conv'))) {
                 include $ilias->getSetting('shib_data_conv');
             }
             // Create use in DB
             $userObj->create();
             $userObj->setActive(1);
             $userObj->updateOwner();
             //insert user data in table user_data
             $userObj->saveAsNew();
             // store acceptance of user agreement
             //$userObj->writeAccepted();
             // Default prefs
             $userObj->setPref('hits_per_page', $ilSetting->get('hits_per_page', 30));
             $userObj->setPref('show_users_online', $ilSetting->get('show_users_online', 'y'));
             // setup user preferences
             $userObj->writePrefs();
             //set role entries
             #$rbacadmin->assignUser($ilias->getSetting('shib_user_default_role'), $userObj->getId(),true);
             // New role assignment
             include_once './Services/AuthShibboleth/classes/class.ilShibbolethRoleAssignmentRules.php';
             ilShibbolethRoleAssignmentRules::doAssignments($userObj->getId(), $_SERVER);
             // Authorize this user
             $this->setAuth($userObj->getLogin());
         } else {
             // Update user account
             $uid = $userObj->checkUserId();
             $userObj->setId($uid);
             $userObj->read($uid);
             if ($ilias->getSetting('shib_update_gender') && ($_SERVER[$ilias->getSetting('shib_gender')] == 'm' || $_SERVER[$ilias->getSetting('shib_gender')] == 'f')) {
                 $userObj->setGender($_SERVER[$ilias->getSetting('shib_gender')]);
             }
             if ($ilias->getSetting('shib_update_title')) {
                 $userObj->setTitle($_SERVER[$ilias->getSetting('shib_title')]);
             }
             $userObj->setFirstname($this->getFirstString($_SERVER[$ilias->getSetting('shib_firstname')]));
             $userObj->setLastname($this->getFirstString($_SERVER[$ilias->getSetting('shib_lastname')]));
             $userObj->setFullname();
             if ($ilias->getSetting('shib_update_institution')) {
                 $userObj->setInstitution($_SERVER[$ilias->getSetting('shib_institution')]);
             }
             if ($ilias->getSetting('shib_update_department')) {
                 $userObj->setDepartment($_SERVER[$ilias->getSetting('shib_department')]);
             }
             if ($ilias->getSetting('shib_update_street')) {
                 $userObj->setStreet($_SERVER[$ilias->getSetting('shib_street')]);
             }
             if ($ilias->getSetting('shib_update_city')) {
                 $userObj->setCity($_SERVER[$ilias->getSetting('shib_city')]);
             }
             if ($ilias->getSetting('shib_update_zipcode')) {
                 $userObj->setZipcode($_SERVER[$ilias->getSetting('shib_zipcode')]);
             }
             if ($ilias->getSetting('shib_update_country')) {
                 $userObj->setCountry($_SERVER[$ilias->getSetting('shib_country')]);
             }
             if ($ilias->getSetting('shib_update_phone_office')) {
                 $userObj->setPhoneOffice($this->getFirstString($_SERVER[$ilias->getSetting('shib_phone_office')]));
             }
             if ($ilias->getSetting('shib_update_phone_home')) {
                 $userObj->setPhoneHome($this->getFirstString($_SERVER[$ilias->getSetting('shib_phone_home')]));
             }
             if ($ilias->getSetting('shib_update_phone_mobile')) {
                 $userObj->setPhoneMobile($this->getFirstString($_SERVER[$ilias->getSetting('shib_phone_mobile')]));
             }
             if ($ilias->getSetting('shib_update_fax')) {
                 $userObj->setFax($_SERVER[$ilias->getSetting('shib_fax')]);
             }
             if ($ilias->getSetting('shib_update_matriculation')) {
                 $userObj->setMatriculation($_SERVER[$ilias->getSetting('shib_matriculation')]);
             }
             if ($ilias->getSetting('shib_update_email')) {
                 $userObj->setEmail($this->getFirstString($_SERVER[$ilias->getSetting('shib_email')]));
             }
             if ($ilias->getSetting('shib_update_hobby')) {
                 $userObj->setHobby($_SERVER[$ilias->getSetting('shib_hobby')]);
             }
             if ($ilias->getSetting('shib_update_language')) {
                 $userObj->setLanguage($_SERVER[$ilias->getSetting('shib_language')]);
             }
             // Include custom code that can be used to further modify
             // certain Shibboleth user attributes
             if ($ilias->getSetting('shib_data_conv') && $ilias->getSetting('shib_data_conv') != '' && is_readable($ilias->getSetting('shib_data_conv'))) {
                 include $ilias->getSetting('shib_data_conv');
             }
             $userObj->update();
             // Update role assignments
             include_once './Services/AuthShibboleth/classes/class.ilShibbolethRoleAssignmentRules.php';
             ilShibbolethRoleAssignmentRules::updateAssignments($userObj->getId(), $_SERVER);
         }
         // we are authenticated: redirect, if possible
         if ($_GET["target"] != "") {
             ilUtil::redirect("goto.php?target=" . $_GET["target"] . "&client_id=" . CLIENT_ID);
         }
     } else {
         // This should never occur unless Shibboleth is not configured properly
         $this->status = AUTH_WRONG_LOGIN;
     }
 }
 protected function setSubTabs()
 {
     global $ilSetting;
     include_once './Services/AuthShibboleth/classes/class.ilShibbolethRoleAssignmentRules.php';
     if ($ilSetting->get('shib_active') == 0 and ilShibbolethRoleAssignmentRules::getCountRules() == 0) {
         return false;
     }
     // DONE: show sub tabs if there is any role assignment rule
     $this->tabs_gui->addSubTabTarget('shib_settings', $this->ctrl->getLinkTarget($this, 'settings'));
     $this->tabs_gui->addSubTabTarget('shib_role_assignment', $this->ctrl->getLinkTarget($this, 'roleAssignment'));
     return true;
 }
示例#6
0
 /**
  * Login function
  *
  * @access private
  * @return void
  */
 public function login()
 {
     global $ilias, $ilSetting;
     // for backword compatibility of hook environment variables
     $shibServerData = shibServerData::getInstance($_SERVER);
     if ($shibServerData->getLogin()) {
         $shibUser = shibUser::buildInstance($shibServerData);
         // for backword compatibility of hook environment variables
         $userObj =& $shibUser;
         // For shib_data_conv included Script
         $newUser = $shibUser->isNew();
         // For shib_data_conv included Script
         if ($shibUser->isNew()) {
             $shibUser->createFields();
             $shibUser->setPref('hits_per_page', $ilSetting->get('hits_per_page'));
             // Modify user data before creating the user
             // Include custom code that can be used to further modify
             // certain Shibboleth user attributes
             if ($ilias->getSetting('shib_data_conv') and $ilias->getSetting('shib_data_conv') != '' and is_readable($ilias->getSetting('shib_data_conv'))) {
                 include $ilias->getSetting('shib_data_conv');
             }
             $shibUser = ilShibbolethPluginWrapper::getInstance()->beforeCreateUser($shibUser);
             $shibUser->create();
             $shibUser->updateOwner();
             $shibUser->saveAsNew();
             $shibUser->writePrefs();
             $shibUser = ilShibbolethPluginWrapper::getInstance()->afterCreateUser($shibUser);
             ilShibbolethRoleAssignmentRules::doAssignments($shibUser->getId(), $_SERVER);
         } else {
             $shibUser->updateFields();
             // Include custom code that can be used to further modify
             // certain Shibboleth user attributes
             if ($ilias->getSetting('shib_data_conv') and $ilias->getSetting('shib_data_conv') != '' and is_readable($ilias->getSetting('shib_data_conv'))) {
                 include $ilias->getSetting('shib_data_conv');
             }
             //				$shibUser->update();
             $shibUser = ilShibbolethPluginWrapper::getInstance()->beforeUpdateUser($shibUser);
             $shibUser->update();
             $shibUser = ilShibbolethPluginWrapper::getInstance()->afterUpdateUser($shibUser);
             ilShibbolethRoleAssignmentRules::updateAssignments($shibUser->getId(), $_SERVER);
         }
         $this->setAuth($shibUser->getLogin(), $shibUser);
         ilObjUser::_updateLastLogin($shibUser->getId());
         if ($_GET['target'] != '') {
             ilUtil::redirect('goto.php?target=' . $_GET['target'] . '&client_id=' . CLIENT_ID);
         }
     } else {
         $this->status = AUTH_WRONG_LOGIN;
     }
 }
 public function matches($a_data)
 {
     if ($this->isPluginActive()) {
         include_once './Services/AuthShibboleth/classes/class.ilShibbolethRoleAssignmentRules.php';
         return ilShibbolethRoleAssignmentRules::callPlugin($this->getPluginId(), $a_data);
     }
     // No value
     if (!isset($a_data[$this->getName()])) {
         return false;
     }
     $values = $a_data[$this->getName()];
     if (is_array($values)) {
         return in_array($this->getValue(), $values);
     } else {
         return $this->wildcardCompare($this->getValue(), $values);
         #return $this->getValue() == $values;
     }
 }