getBoolean('enable.authmemcookie', FALSE)) { throw new SimpleSAML_Error_Error('NOACCESS'); } /* Load Auth MemCookie configuration. */ $amc = SimpleSAML_AuthMemCookie::getInstance(); /* Determine the method we should use to authenticate the user and retrieve the attributes. */ $loginMethod = $amc->getLoginMethod(); switch($loginMethod) { case 'authsource': /* The default now. */ $sourceId = $amc->getAuthSource(); $s = new SimpleSAML_Auth_Simple($sourceId); break; case 'saml2': $s = new SimpleSAML_Auth_BWC('saml2/sp/initSSO.php', 'saml2'); break; case 'shib13': $s = new SimpleSAML_Auth_BWC('shib13/sp/initSSO.php', 'shib13'); break; default: /* Should never happen, as the login method is checked in the AuthMemCookie class. */ throw new Exception('Invalid login method.'); } /* Check if the user is authorized. We attempt to authenticate the user if not. */ $s->requireAuth(); /* Generate session id and save it in a cookie. */ $sessionID = SimpleSAML_Utilities::generateID(); $cookieName = $amc->getCookieName(); $sessionHandler = SimpleSAML_SessionHandler::getSessionHandler(); $sessionHandler->setCookie($cookieName, $sessionID); /* Generate the authentication information. */ $attributes = $s->getAttributes(); $authData = array(); /* Username. */ $usernameAttr = $amc->getUsernameAttr(); if(!array_key_exists($usernameAttr, $attributes)) { throw new Exception('The user doesn\'t have an attribute named \'' . $usernameAttr . '\'. This attribute is expected to contain the username.'); } $authData['UserName'] = $attributes[$usernameAttr]; /* Groups. */ $groupsAttr = $amc->getGroupsAttr(); if($groupsAttr !== NULL) { if(!array_key_exists($groupsAttr, $attributes)) { throw new Exception('The user doesn\'t have an attribute named \'' . $groupsAttr . '\'. This attribute is expected to contain the groups the user is a member of.'); } $authData['Groups'] = $attributes[$groupsAttr]; } else { $authData['Groups'] = array(); } $authData['RemoteIP'] = $_SERVER['REMOTE_ADDR']; foreach($attributes as $n => $v) { $authData['ATTR_' . $n] = $v; } /* Store the authentication data in the memcache server. */ $data = ''; foreach($authData as $n => $v) { if(is_array($v)) { $v = implode(':', $v); } $data .= $n . '=' . $v . "\r\n"; } $memcache = $amc->getMemcache(); $expirationTime = $s->getAuthData('Expire'); $memcache->set($sessionID, $data, 0, $expirationTime); /* Register logout handler. */ $session = SimpleSAML_Session::getSessionFromRequest(); $session->registerLogoutHandler('SimpleSAML_AuthMemCookie', 'logoutHandler'); /* Redirect the user back to this page to signal that the login is completed. */ SimpleSAML_Utilities::redirectTrustedURL(SimpleSAML_Utilities::selfURL()); } catch(Exception $e) { throw new SimpleSAML_Error_Error('CONFIG', $e); }