ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
ilAuthContainerECS Class Reference

Custom PEAR Auth Container for ECS auth checks. More...

+ Inheritance diagram for ilAuthContainerECS:
+ Collaboration diagram for ilAuthContainerECS:

Public Member Functions

 __construct ($a_params=array())
 Constructor. More...
 
 getAbreviation ()
 get abbreviation More...
 
 getMID ()
 get mid More...
 
 setMID ($a_mid)
 
 setCurrentServer (ilECSSetting $server=null)
 Set current server. More...
 
 getCurrentServer ()
 Get current server. More...
 
 getServerSettings ()
 Get server settings. More...
 
 fetchData ($a_username, $a_pass)
 Check for valid ecs_hash. More...
 
 validateHash ()
 Validate ECS hash. More...
 
 loginObserver ($a_username, $a_auth)
 Called from base class after successful login. More...
 
 failedLoginObserver ()
 Called from base class after failed login. More...
 

Protected Member Functions

 createUser (ilECSUser $user)
 create new user More...
 
 updateUser (ilECSUser $user, $a_local_user_id)
 update existing user More...
 
 resetMailOptions ($a_usr_id)
 Reset mail options to "local only". More...
 

Protected Attributes

 $mid = null
 
 $abreviation = null
 
 $currentServer = null
 
 $servers = null
 
 $log
 

Private Member Functions

 initECSServices ()
 Init ECS Services @access private. More...
 
 sendNotification ($user_obj)
 Send notification. More...
 

Detailed Description

Custom PEAR Auth Container for ECS auth checks.

Author
Stefan Meyer meyer.nosp@m.@lei.nosp@m.fos.c.nosp@m.om
Version
$Id$

Definition at line 34 of file class.ilAuthContainerECS.php.

Constructor & Destructor Documentation

◆ __construct()

ilAuthContainerECS::__construct (   $a_params = array())

Constructor.

@access public

Parameters

Definition at line 51 of file class.ilAuthContainerECS.php.

52 {
53 parent::__construct($a_params);
54
55 $this->initECSServices();
56
57 $this->log = $GLOBALS['ilLog'];
58 }
initECSServices()
Init ECS Services @access private.
$GLOBALS['loaded']
Global hash that tracks already loaded includes.

References $GLOBALS, and initECSServices().

+ Here is the call graph for this function:

Member Function Documentation

◆ createUser()

ilAuthContainerECS::createUser ( ilECSUser  $user)
protected

create new user

@access protected

Definition at line 277 of file class.ilAuthContainerECS.php.

278 {
279 global $ilClientIniFile, $ilSetting, $rbacadmin, $ilLog;
280
281 $userObj = new ilObjUser();
282 $userObj->setOwner(SYSTEM_USER_ID);
283
284 include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
285 $local_user = ilAuthUtils::_generateLogin($this->getAbreviation() . '_' . $user->getLogin());
286
287 $newUser["login"] = $local_user;
288 $newUser["firstname"] = $user->getFirstname();
289 $newUser["lastname"] = $user->getLastname();
290 $newUser['email'] = $user->getEmail();
291 $newUser['institution'] = $user->getInstitution();
292
293 // set "plain md5" password (= no valid password)
294 $newUser["passwd"] = "";
295 $newUser["passwd_type"] = IL_PASSWD_CRYPTED;
296
297 $newUser["auth_mode"] = "ecs";
298 $newUser["profile_incomplete"] = 0;
299
300 // system data
301 $userObj->assignData($newUser);
302 $userObj->setTitle($userObj->getFullname());
303 $userObj->setDescription($userObj->getEmail());
304
305 // set user language to system language
306 $userObj->setLanguage($ilSetting->get("language"));
307
308 // Time limit
309 $userObj->setTimeLimitOwner(7);
310 $userObj->setTimeLimitUnlimited(0);
311 $userObj->setTimeLimitFrom(time() - 5);
312 $userObj->setTimeLimitUntil(time() + $ilClientIniFile->readVariable("session", "expire"));
313
314 #$now = new ilDateTime(time(), IL_CAL_UNIX);
315 #$userObj->setAgreeDate($now->get(IL_CAL_DATETIME));
316
317 // Create user in DB
318 $userObj->setOwner(6);
319 $userObj->create();
320 $userObj->setActive(1);
321 $userObj->updateOwner();
322 $userObj->saveAsNew();
323 $userObj->writePrefs();
324
325 if ($global_role = $this->getCurrentServer()->getGlobalRole()) {
326 $rbacadmin->assignUser($this->getCurrentServer()->getGlobalRole(), $userObj->getId(), true);
327 }
328 ilObject::_writeImportId($userObj->getId(), $user->getImportId());
329
330 $ilLog->write(__METHOD__ . ': Created new remote user with usr_id: ' . $user->getImportId());
331
332 // Send Mail
333 #$this->sendNotification($userObj);
334 $this->resetMailOptions($userObj->getId());
335
336 return $userObj->getLogin();
337 }
const IL_PASSWD_CRYPTED
resetMailOptions($a_usr_id)
Reset mail options to "local only".
getCurrentServer()
Get current server.
getAbreviation()
get abbreviation
static _generateLogin($a_login)
generate free login by starting with a default string and adding postfix numbers
getFirstname()
get firstname
getLastname()
getLastname
getLogin()
get login
getImportId()
get Email
getEmail()
get email
getInstitution()
get institution
static _writeImportId($a_obj_id, $a_import_id)
write import id to db (static)
global $ilSetting
Definition: privfeed.php:17

References $ilLog, $ilSetting, ilAuthUtils\_generateLogin(), ilObject\_writeImportId(), getAbreviation(), getCurrentServer(), ilECSUser\getEmail(), ilECSUser\getFirstname(), ilECSUser\getImportId(), ilECSUser\getInstitution(), ilECSUser\getLastname(), ilECSUser\getLogin(), IL_PASSWD_CRYPTED, and resetMailOptions().

Referenced by loginObserver().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ failedLoginObserver()

ilAuthContainerECS::failedLoginObserver ( )

Called from base class after failed login.

Parameters
stringusername

Definition at line 264 of file class.ilAuthContainerECS.php.

265 {
266 $this->log->write(__METHOD__ . ': Login failed');
267 return false;
268 }

◆ fetchData()

ilAuthContainerECS::fetchData (   $a_username,
  $a_pass 
)

Check for valid ecs_hash.

Parameters
string$a_username
string$a_pass

Definition at line 119 of file class.ilAuthContainerECS.php.

120 {
121 global $ilLog;
122
123 $ilLog->write(__METHOD__ . ': Starting ECS authentication.');
124
125 if (!$this->getServerSettings()->activeServerExists()) {
126 $GLOBALS['ilLog']->write(__METHOD__ . ': no active ecs server found. Aborting');
127 return false;
128 }
129
130 // Iterate through all active ecs instances
131 include_once './Services/WebServices/ECS/classes/class.ilECSServerSettings.php';
132 foreach ($this->getServerSettings()->getServers() as $server) {
133 $this->setCurrentServer($server);
134 if ($this->validateHash()) {
135 return true;
136 }
137 }
138 $GLOBALS['ilLog']->write(__METHOD__ . ': Could not validate ecs hash for any server');
139 return false;
140 }
validateHash()
Validate ECS hash.
getServerSettings()
Get server settings.
setCurrentServer(ilECSSetting $server=null)
Set current server.
$server
Definition: getUserInfo.php:12

References $GLOBALS, $ilLog, $server, getServerSettings(), setCurrentServer(), and validateHash().

+ Here is the call graph for this function:

◆ getAbreviation()

ilAuthContainerECS::getAbreviation ( )

get abbreviation

@access public

Parameters

Definition at line 67 of file class.ilAuthContainerECS.php.

References $abreviation.

Referenced by createUser().

+ Here is the caller graph for this function:

◆ getCurrentServer()

ilAuthContainerECS::getCurrentServer ( )

Get current server.

Returns
ilECSSetting

Definition at line 100 of file class.ilAuthContainerECS.php.

References $currentServer.

Referenced by createUser(), loginObserver(), sendNotification(), updateUser(), and validateHash().

+ Here is the caller graph for this function:

◆ getMID()

ilAuthContainerECS::getMID ( )

get mid

@access public

Definition at line 77 of file class.ilAuthContainerECS.php.

References $mid.

Referenced by loginObserver().

+ Here is the caller graph for this function:

◆ getServerSettings()

ilAuthContainerECS::getServerSettings ( )

Get server settings.

Returns
ilECSServerSettings

Definition at line 109 of file class.ilAuthContainerECS.php.

References $servers.

Referenced by fetchData().

+ Here is the caller graph for this function:

◆ initECSServices()

ilAuthContainerECS::initECSServices ( )
private

Init ECS Services @access private.

Parameters

Definition at line 397 of file class.ilAuthContainerECS.php.

398 {
399 include_once './Services/WebServices/ECS/classes/class.ilECSServerSettings.php';
400 $this->servers = ilECSServerSettings::getInstance();
401 }
static getInstance()
Get singleton instance.

References ilECSServerSettings\getInstance().

Referenced by __construct().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ loginObserver()

ilAuthContainerECS::loginObserver (   $a_username,
  $a_auth 
)

Called from base class after successful login.

Parameters
stringusername

Definition at line 223 of file class.ilAuthContainerECS.php.

224 {
225 include_once('./Services/WebServices/ECS/classes/class.ilECSUser.php');
226
227 $user = new ilECSUser($_GET);
228
229 if (!$usr_id = ilObject::_lookupObjIdByImportId($user->getImportId())) {
230 $username = $this->createUser($user);
231 } else {
232 $username = $this->updateUser($user, $usr_id);
233 }
234
235 // set user imported
236 include_once './Services/WebServices/ECS/classes/class.ilECSImport.php';
237 $import = new ilECSImport($this->getCurrentServer()->getServerId(), $usr_id);
238 $import->save();
239
240 // Store remote user data
241 include_once './Services/WebServices/ECS/classes/class.ilECSRemoteUser.php';
242 $remote = new ilECSRemoteUser();
243 $remote->setServerId($this->getCurrentServer()->getServerId());
244 $remote->setMid($this->getMID());
245 $remote->setRemoteUserId($user->getImportId());
246 $remote->setUserId(ilObjUser::_lookupId($username));
247
248 $GLOBALS['ilLog']->write(__METHOD__ . ': Current username ' . $username);
249
250 if (!$remote->exists()) {
251 $remote->create();
252 }
253
254 $a_auth->setAuth($username);
255 $this->log->write(__METHOD__ . ': Login succesesful');
256 return true;
257 }
$_GET["client_id"]
createUser(ilECSUser $user)
create new user
updateUser(ilECSUser $user, $a_local_user_id)
update existing user
Storage of ECS imported objects.
Storage of ecs remote user.
Stores relevant user data.
static _lookupId($a_user_str)
Lookup id by login.
static _lookupObjIdByImportId($a_import_id)

References $_GET, $GLOBALS, ilObjUser\_lookupId(), ilObject\_lookupObjIdByImportId(), createUser(), getCurrentServer(), getMID(), and updateUser().

+ Here is the call graph for this function:

◆ resetMailOptions()

ilAuthContainerECS::resetMailOptions (   $a_usr_id)
protected

Reset mail options to "local only".

Definition at line 382 of file class.ilAuthContainerECS.php.

383 {
384 include_once './Services/Mail/classes/class.ilMailOptions.php';
385 $options = new ilMailOptions($a_usr_id);
386 $options->setIncomingType(ilMailOptions::INCOMING_LOCAL);
387 $options->updateOptions();
388 }
if(!isset( $_REQUEST[ 'ReturnTo'])) if(!isset($_REQUEST['AuthId'])) $options
Definition: as_login.php:20
Class ilMailOptions this class handles user mails.

References $options, and ilMailOptions\INCOMING_LOCAL.

Referenced by createUser(), and updateUser().

+ Here is the caller graph for this function:

◆ sendNotification()

ilAuthContainerECS::sendNotification (   $user_obj)
private

Send notification.

@access private

Parameters

Definition at line 410 of file class.ilAuthContainerECS.php.

411 {
412 if (!count($this->getCurrentServer()->getUserRecipients())) {
413 return true;
414 }
415
416 include_once('./Services/Language/classes/class.ilLanguageFactory.php');
417 include_once './Services/Language/classes/class.ilLanguage.php';
419 $GLOBALS['lng'] = $lang;
420 $GLOBALS['ilUser'] = $user_obj;
421 $lang->loadLanguageModule('ecs');
422
423 include_once('./Services/Mail/classes/class.ilMail.php');
424 $mail = new ilMail(6);
425 $mail->enableSoap(false);
426 $subject = $lang->txt('ecs_new_user_subject');
427
428 // build body
429 $body = $lang->txt('ecs_new_user_body') . "\n\n";
430 $body .= $lang->txt('ecs_new_user_profile') . "\n\n";
431 $body .= $user_obj->getProfileAsString($lang) . "\n\n";
433
434 $mail->sendMail(
435 $this->getCurrentServer()->getUserRecipientsAsString(),
436 "",
437 "",
438 $subject,
439 $body,
440 array(),
441 array("normal")
442 );
443 }
static _getLanguage($a_lang_key='')
Get langauge object.
This class handles base functions for mail handling.
static _getAutoGeneratedMessageString(ilLanguage $lang=null)
Get auto generated info string.
$lang
Definition: consent.php:3

References $GLOBALS, $lang, ilMail\_getAutoGeneratedMessageString(), ilLanguageFactory\_getLanguage(), and getCurrentServer().

+ Here is the call graph for this function:

◆ setCurrentServer()

ilAuthContainerECS::setCurrentServer ( ilECSSetting  $server = null)

Set current server.

Parameters
ilECSSetting$server

Definition at line 91 of file class.ilAuthContainerECS.php.

92 {
93 $this->currentServer = $server;
94 }

References $server.

Referenced by fetchData().

+ Here is the caller graph for this function:

◆ setMID()

ilAuthContainerECS::setMID (   $a_mid)

Definition at line 82 of file class.ilAuthContainerECS.php.

83 {
84 $this->mid = $a_mid;
85 }

Referenced by validateHash().

+ Here is the caller graph for this function:

◆ updateUser()

ilAuthContainerECS::updateUser ( ilECSUser  $user,
  $a_local_user_id 
)
protected

update existing user

@access protected

Definition at line 344 of file class.ilAuthContainerECS.php.

345 {
346 global $ilClientIniFile,$ilLog,$rbacadmin;
347
348 $user_obj = new ilObjUser($a_local_user_id);
349 $user_obj->setFirstname($user->getFirstname());
350 $user_obj->setLastname($user->getLastname());
351 $user_obj->setEmail($user->getEmail());
352 $user_obj->setInstitution($user->getInstitution());
353 $user_obj->setActive(true);
354
355 $until = $user_obj->getTimeLimitUntil();
356
357 if ($until < (time() + $ilClientIniFile->readVariable('session', 'expire'))) {
358 $user_obj->setTimeLimitFrom(time() - 60);
359 $user_obj->setTimeLimitUntil(time() + $ilClientIniFile->readVariable("session", "expire"));
360 }
361 $user_obj->update();
362 $user_obj->refreshLogin();
363
364 if ($global_role = $this->getCurrentServer()->getGlobalRole()) {
365 $rbacadmin->assignUser(
366 $this->getCurrentServer()->getGlobalRole(),
367 $user_obj->getId(),
368 true
369 );
370 }
371
372 $this->resetMailOptions($a_local_user_id);
373
374 $ilLog->write(__METHOD__ . ': Finished update of remote user with usr_id: ' . $user->getImportId());
375 return $user_obj->getLogin();
376 }

References $ilLog, getCurrentServer(), ilECSUser\getEmail(), ilECSUser\getFirstname(), ilECSUser\getImportId(), ilECSUser\getInstitution(), ilECSUser\getLastname(), and resetMailOptions().

Referenced by loginObserver().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ validateHash()

ilAuthContainerECS::validateHash ( )

Validate ECS hash.

@access public

Parameters
stringusername
stringpass

Definition at line 151 of file class.ilAuthContainerECS.php.

152 {
153 global $ilLog;
154
155 // fetch hash
156 if (isset($_GET['ecs_hash']) and strlen($_GET['ecs_hash'])) {
157 $hash = $_GET['ecs_hash'];
158 }
159 if (isset($_GET['ecs_hash_url'])) {
160 $hashurl = urldecode($_GET['ecs_hash_url']);
161 $hash = basename(parse_url($hashurl, PHP_URL_PATH));
162 //$hash = urldecode($_GET['ecs_hash_url']);
163 }
164
165 $GLOBALS['ilLog']->write(__METHOD__ . ': Using ecs hash ' . $hash);
166
167 // Check if hash is valid ...
168 try {
169 include_once('./Services/WebServices/ECS/classes/class.ilECSConnector.php');
170 $connector = new ilECSConnector($this->getCurrentServer());
171 $res = $connector->getAuth($hash);
172 $auths = $res->getResult();
173
174 $GLOBALS['ilLog']->write(__METHOD__ . ': Auths: ' . print_r($auths, true));
175
176 if ($auths->pid) {
177 try {
178 include_once './Services/WebServices/ECS/classes/class.ilECSCommunityReader.php';
180 $part = $reader->getParticipantByMID($auths->pid);
181
182 if (is_object($part) and is_object($part->getOrganisation())) {
183 $this->abreviation = $part->getOrganisation()->getAbbreviation();
184 } else {
185 $this->abreviation = $auths->abbr;
186 }
187 } catch (Exception $e) {
188 $ilLog->write(__METHOD__ . ': Authentication failed with message: ' . $e->getMessage());
189 return false;
190 }
191 } else {
192 $this->abreviation = $auths->abbr;
193 }
194
195 $ilLog->write(__METHOD__ . ': Got abr: ' . $this->abreviation);
196 } catch (ilECSConnectorException $e) {
197 $ilLog->write(__METHOD__ . ': Authentication failed with message: ' . $e->getMessage());
198 return false;
199 }
200
201 // read current mid
202 try {
203 include_once('./Services/WebServices/ECS/classes/class.ilECSConnector.php');
204 $connector = new ilECSConnector($this->getCurrentServer());
205 $details = $connector->getAuth($hash, true);
206
207 $GLOBALS['ilLog']->write(__METHOD__ . ': ' . print_r($details, true));
208 $GLOBALS['ilLog']->write(__METHOD__ . ': Token created for mid ' . $details->getFirstSender());
209
210 $this->setMID($details->getFirstSender());
211 } catch (ilECSConnectorException $e) {
212 $ilLog->write(__METHOD__ . ': Receiving mid failed with message: ' . $e->getMessage());
213 return false;
214 }
215 return true;
216 }
static getInstanceByServerId($a_server_id)
Get instance by server id.
foreach($_POST as $key=> $value) $res

References $_GET, $GLOBALS, $ilLog, $reader, $res, getCurrentServer(), ilECSCommunityReader\getInstanceByServerId(), and setMID().

Referenced by fetchData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Field Documentation

◆ $abreviation

ilAuthContainerECS::$abreviation = null
protected

Definition at line 37 of file class.ilAuthContainerECS.php.

Referenced by getAbreviation().

◆ $currentServer

ilAuthContainerECS::$currentServer = null
protected

Definition at line 39 of file class.ilAuthContainerECS.php.

Referenced by getCurrentServer().

◆ $log

ilAuthContainerECS::$log
protected

Definition at line 42 of file class.ilAuthContainerECS.php.

◆ $mid

ilAuthContainerECS::$mid = null
protected

Definition at line 36 of file class.ilAuthContainerECS.php.

Referenced by getMID().

◆ $servers

ilAuthContainerECS::$servers = null
protected

Definition at line 40 of file class.ilAuthContainerECS.php.

Referenced by getServerSettings().


The documentation for this class was generated from the following file: