1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
<?php
/**
* This is a helper class for the Auth MemCookie module.
* It handles the configuration, and implements the logout handler.
*
* @author Olav Morken, UNINETT AS.
* @package simpleSAMLphp
* @version $Id$
*/
class SimpleSAML_AuthMemCookie {
/**
* This is the singleton instance of this class.
*/
private static $instance = NULL;
/**
* The configuration for Auth MemCookie.
*/
private $amcConfig;
/**
* This function is used to retrieve the singleton instance of this class.
*
* @return The singleton instance of this class.
*/
public static function getInstance() {
if(self::$instance === NULL) {
self::$instance = new SimpleSAML_AuthMemCookie();
}
return self::$instance;
}
/**
* This function implements the constructor for this class. It loads the Auth MemCookie configuration.
*/
private function __construct() {
/* Load Auth MemCookie configuration. */
$globalConfig = SimpleSAML_Configuration::getInstance();
SimpleSAML_Configuration::init($GLOBALS['configdir'], 'authmemcookie', 'authmemcookie.php');
$this->amcConfig = SimpleSAML_Configuration::getInstance('authmemcookie');
}
/**
* Retrieve the login method which should be used to authenticate the user.
*
* @return The login type which should be used for Auth MemCookie.
*/
public function getLoginMethod() {
$loginMethod = $this->amcConfig->getValue('loginmethod', 'saml2');
$supportedLogins = array(
'saml2',
'shib13',
);
if(!in_array($loginMethod, $supportedLogins, TRUE)) {
throw new Exception('Configuration option \'loginmethod\' contains an invalid value.');
}
return $loginMethod;
}
/**
* This function retrieves the name of the cookie from the configuration.
*
* @return The name of the cookie.
*/
public function getCookieName() {
$cookieName = $this->amcConfig->getValue('cookiename', 'AuthMemCookie');
if(!is_string($cookieName) || strlen($cookieName) === 0) {
throw new Exception('Configuration option \'cookiename\' contains an invalid value. This option should be a string.');
}
return $cookieName;
}
/**
* This function retrieves the name of the attribute which contains the username from the configuration.
*
* @return The name of the attribute which contains the username.
*/
public function getUsernameAttr() {
$usernameAttr = $this->amcConfig->getValue('username');
if($usernameAttr === NULL) {
throw new Exception('Missing required configuration option \'username\' in authmemcookie.php.');
}
return $usernameAttr;
}
/**
* This function retrieves the name of the attribute which contains the groups from the configuration.
*
* @return The name of the attribute which contains the groups.
*/
public function getGroupsAttr() {
$groupsAttr = $this->amcConfig->getValue('groups');
return $groupsAttr;
}
/**
* This function creates and initializes a Memcache object from our configuration.
*
* @return A Memcache object initialized from our configuration.
*/
public function getMemcache() {
$memcacheHost = $this->amcConfig->getValue('memcache.host', '127.0.0.1');
if(!is_string($memcacheHost)) {
throw new Exception('Invalid value of the \'memcache.host\' configuration option. This option' .
' should be a string with a hostname or a string with an IP address.');
}
$memcachePort = $this->amcConfig->getValue('memcache.port', 11211);
if(!is_int($memcachePort)) {
throw new Exception('Invalid value of the \'memcache.port\' configuration option. This option' .
' should be an integer.');
}
$memcache = new Memcache;
$memcache->connect($memcacheHost, $memcachePort);
return $memcache;
}
/**
* This function logs the user out by deleting the session information from memcache.
*/
private function doLogout() {
$cookieName = $this->getCookieName();
/* Check if we have a valid cookie. */
if(!array_key_exists($cookieName, $_COOKIE)) {
return;
}
$sessionID = $_COOKIE[$cookieName];
/* Delete the session from memcache. */
$memcache = $this->getMemcache();
$memcache->delete($sessionID);
}
/**
* This function implements the logout handler. It deletes the information from Memcache.
*/
public static function logoutHandler() {
self::getInstance()->doLogout();
}
}
?>
|