ILIAS  release_5-2 Revision v5.2.25-18-g3f80b82851
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 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.

public

Parameters

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

References $GLOBALS, and initECSServices().

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

Member Function Documentation

◆ createUser()

ilAuthContainerECS::createUser ( ilECSUser  $user)
protected

create new user

protected

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

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

Referenced by loginObserver().

303  {
304  global $ilClientIniFile, $ilSetting, $rbacadmin, $ilLog;
305 
306  $userObj = new ilObjUser();
307  $userObj->setOwner(SYSTEM_USER_ID);
308 
309  include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
310  $local_user = ilAuthUtils::_generateLogin($this->getAbreviation() . '_' . $user->getLogin());
311 
312  $newUser["login"] = $local_user;
313  $newUser["firstname"] = $user->getFirstname();
314  $newUser["lastname"] = $user->getLastname();
315  $newUser['email'] = $user->getEmail();
316  $newUser['institution'] = $user->getInstitution();
317 
318  // set "plain md5" password (= no valid password)
319  $newUser["passwd"] = "";
320  $newUser["passwd_type"] = IL_PASSWD_CRYPTED;
321 
322  $newUser["auth_mode"] = "ecs";
323  $newUser["profile_incomplete"] = 0;
324 
325  // system data
326  $userObj->assignData($newUser);
327  $userObj->setTitle($userObj->getFullname());
328  $userObj->setDescription($userObj->getEmail());
329 
330  // set user language to system language
331  $userObj->setLanguage($ilSetting->get("language"));
332 
333  // Time limit
334  $userObj->setTimeLimitOwner(7);
335  $userObj->setTimeLimitUnlimited(0);
336  $userObj->setTimeLimitFrom(time() - 5);
337  $userObj->setTimeLimitUntil(time() + $ilClientIniFile->readVariable("session", "expire"));
338 
339  #$now = new ilDateTime(time(), IL_CAL_UNIX);
340  #$userObj->setAgreeDate($now->get(IL_CAL_DATETIME));
341 
342  // Create user in DB
343  $userObj->setOwner(6);
344  $userObj->create();
345  $userObj->setActive(1);
346  $userObj->updateOwner();
347  $userObj->saveAsNew();
348  $userObj->writePrefs();
349 
350  if($global_role = $this->getCurrentServer()->getGlobalRole())
351  {
352  $rbacadmin->assignUser($this->getCurrentServer()->getGlobalRole(), $userObj->getId(), true);
353  }
354  ilObject::_writeImportId($userObj->getId(), $user->getImportId());
355 
356  $ilLog->write(__METHOD__ . ': Created new remote user with usr_id: ' . $user->getImportId());
357 
358  // Send Mail
359  #$this->sendNotification($userObj);
360  $this->resetMailOptions($userObj->getId());
361 
362  return $userObj->getLogin();
363  }
getFirstname()
get firstname
getAbreviation()
get abbreviation
const IL_PASSWD_CRYPTED
static _generateLogin($a_login)
generate free login by starting with a default string and adding postfix numbers
getLastname()
getLastname
getCurrentServer()
Get current server.
getEmail()
get email
getLogin()
get login
resetMailOptions($a_usr_id)
Reset mail options to "local only".
getImportId()
get Email
global $ilSetting
Definition: privfeed.php:17
static _writeImportId($a_obj_id, $a_import_id)
write import id to db (static)
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
getInstitution()
get institution
+ 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 289 of file class.ilAuthContainerECS.php.

290  {
291  $this->log->write(__METHOD__.': Login failed');
292  return false;
293  }

◆ 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.

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

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

◆ getAbreviation()

ilAuthContainerECS::getAbreviation ( )

get abbreviation

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().

101  {
102  return $this->currentServer;
103  }
+ Here is the caller graph for this function:

◆ getMID()

ilAuthContainerECS::getMID ( )

get mid

public

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

References $mid.

Referenced by loginObserver().

78  {
79  return $this->mid;
80  }
+ 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().

110  {
111  return $this->servers;
112  }
+ Here is the caller graph for this function:

◆ initECSServices()

ilAuthContainerECS::initECSServices ( )
private

Init ECS Services private.

Parameters

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

References ilECSServerSettings\getInstance().

Referenced by __construct().

430  {
431  include_once './Services/WebServices/ECS/classes/class.ilECSServerSettings.php';
432  $this->servers = ilECSServerSettings::getInstance();
433  }
static getInstance()
Get singleton instance.
+ 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 244 of file class.ilAuthContainerECS.php.

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

245  {
246  include_once('./Services/WebServices/ECS/classes/class.ilECSUser.php');
247 
248  $user = new ilECSUser($_GET);
249 
250  if(!$usr_id = ilObject::_lookupObjIdByImportId($user->getImportId()))
251  {
252  $username = $this->createUser($user);
253  }
254  else
255  {
256  $username = $this->updateUser($user,$usr_id);
257  }
258 
259  // set user imported
260  include_once './Services/WebServices/ECS/classes/class.ilECSImport.php';
261  $import = new ilECSImport($this->getCurrentServer()->getServerId(), $usr_id);
262  $import->save();
263 
264  // Store remote user data
265  include_once './Services/WebServices/ECS/classes/class.ilECSRemoteUser.php';
266  $remote = new ilECSRemoteUser();
267  $remote->setServerId($this->getCurrentServer()->getServerId());
268  $remote->setMid($this->getMID());
269  $remote->setRemoteUserId($user->getImportId());
270  $remote->setUserId(ilObjUser::_lookupId($username));
271 
272  $GLOBALS['ilLog']->write(__METHOD__.': Current username '.$username);
273 
274  if(!$remote->exists())
275  {
276  $remote->create();
277  }
278 
279  $a_auth->setAuth($username);
280  $this->log->write(__METHOD__.': Login succesesful');
281  return true;
282  }
updateUser(ilECSUser $user, $a_local_user_id)
update existing user
$_GET["client_id"]
Storage of ecs remote user.
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
static _lookupId($a_user_str)
Lookup id by login.
createUser(ilECSUser $user)
create new user
getCurrentServer()
Get current server.
Storage of ECS imported objects.
Stores relevant user data.
static _lookupObjIdByImportId($a_import_id)
+ Here is the call graph for this function:

◆ resetMailOptions()

ilAuthContainerECS::resetMailOptions (   $a_usr_id)
protected

Reset mail options to "local only".

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

References $options, and IL_MAIL_LOCAL.

Referenced by createUser(), and updateUser().

411  {
412  include_once './Services/Mail/classes/class.ilMailOptions.php';
413  $options = new ilMailOptions($a_usr_id);
414  $options->updateOptions(
415  $options->getSignature(),
416  $options->getLinebreak(),
418  $options->getCronjobNotification()
419  );
420  }
Class UserMail this class handles user mails.
const IL_MAIL_LOCAL
if(!is_array($argv)) $options
+ Here is the caller graph for this function:

◆ sendNotification()

ilAuthContainerECS::sendNotification (   $user_obj)
private

Send notification.

private

Parameters

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

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

443  {
444  if(!count($this->getCurrentServer()->getUserRecipients()))
445  {
446  return true;
447  }
448 
449  include_once('./Services/Language/classes/class.ilLanguageFactory.php');
450  include_once './Services/Language/classes/class.ilLanguage.php';
452  $GLOBALS['lng'] = $lang;
453  $GLOBALS['ilUser'] = $user_obj;
454  $lang->loadLanguageModule('ecs');
455 
456  include_once('./Services/Mail/classes/class.ilMail.php');
457  $mail = new ilMail(6);
458  $mail->enableSoap(false);
459  $subject = $lang->txt('ecs_new_user_subject');
460 
461  // build body
462  $body = $lang->txt('ecs_new_user_body')."\n\n";
463  $body .= $lang->txt('ecs_new_user_profile')."\n\n";
464  $body .= $user_obj->getProfileAsString($lang)."\n\n";
465  $body .= ilMail::_getAutoGeneratedMessageString($lang);
466 
467  $mail->sendMail(
468  $this->getCurrentServer()->getUserRecipientsAsString(),
469  "",
470  "",
471  $subject,
472  $body,
473  array(),
474  array("normal")
475  );
476  }
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
static _getLanguage($a_lang_key='')
Get langauge object.
This class handles base functions for mail handling.
getCurrentServer()
Get current server.
Create styles array
The data for the language used.
for($i=1; $i<=count($kw_cases_sel); $i+=1) $lang
Definition: langwiz.php:349
+ 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.

References $server.

Referenced by fetchData().

92  {
93  $this->currentServer = $server;
94  }
$server
+ Here is the caller graph for this function:

◆ setMID()

ilAuthContainerECS::setMID (   $a_mid)

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

Referenced by validateHash().

83  {
84  $this->mid = $a_mid;
85  }
+ Here is the caller graph for this function:

◆ updateUser()

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

update existing user

protected

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

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

Referenced by loginObserver().

371  {
372  global $ilClientIniFile,$ilLog,$rbacadmin;
373 
374  $user_obj = new ilObjUser($a_local_user_id);
375  $user_obj->setFirstname($user->getFirstname());
376  $user_obj->setLastname($user->getLastname());
377  $user_obj->setEmail($user->getEmail());
378  $user_obj->setInstitution($user->getInstitution());
379  $user_obj->setActive(true);
380 
381  $until = $user_obj->getTimeLimitUntil();
382 
383  if($until < (time() + $ilClientIniFile->readVariable('session','expire')))
384  {
385  $user_obj->setTimeLimitFrom(time() - 60);
386  $user_obj->setTimeLimitUntil(time() + $ilClientIniFile->readVariable("session","expire"));
387  }
388  $user_obj->update();
389  $user_obj->refreshLogin();
390 
391  if($global_role = $this->getCurrentServer()->getGlobalRole())
392  {
393  $rbacadmin->assignUser(
394  $this->getCurrentServer()->getGlobalRole(),
395  $user_obj->getId(),
396  true
397  );
398  }
399 
400  $this->resetMailOptions($a_local_user_id);
401 
402  $ilLog->write(__METHOD__.': Finished update of remote user with usr_id: '.$user->getImportId());
403  return $user_obj->getLogin();
404  }
getFirstname()
get firstname
getLastname()
getLastname
getCurrentServer()
Get current server.
getEmail()
get email
resetMailOptions($a_usr_id)
Reset mail options to "local only".
getImportId()
get Email
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
getInstitution()
get institution
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ validateHash()

ilAuthContainerECS::validateHash ( )

Validate ECS hash.

public

Parameters
stringusername
stringpass

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

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

Referenced by fetchData().

156  {
157  global $ilLog;
158 
159  // fetch hash
160  if(isset($_GET['ecs_hash']) and strlen($_GET['ecs_hash']))
161  {
162  $hash = $_GET['ecs_hash'];
163  }
164  if(isset($_GET['ecs_hash_url']))
165  {
166  $hashurl = urldecode($_GET['ecs_hash_url']);
167  $hash = basename(parse_url($hashurl,PHP_URL_PATH));
168  //$hash = urldecode($_GET['ecs_hash_url']);
169  }
170 
171  $GLOBALS['ilLog']->write(__METHOD__.': Using ecs hash '. $hash);
172 
173  // Check if hash is valid ...
174  try
175  {
176  include_once('./Services/WebServices/ECS/classes/class.ilECSConnector.php');
177  $connector = new ilECSConnector($this->getCurrentServer());
178  $res = $connector->getAuth($hash);
179  $auths = $res->getResult();
180 
181  $GLOBALS['ilLog']->write(__METHOD__.': Auths: '.print_r($auths,TRUE));
182 
183  if($auths->pid)
184  {
185  try
186  {
187  include_once './Services/WebServices/ECS/classes/class.ilECSCommunityReader.php';
189  $part = $reader->getParticipantByMID($auths->pid);
190 
191  if(is_object($part) and is_object($part->getOrganisation()))
192  {
193  $this->abreviation = $part->getOrganisation()->getAbbreviation();
194  }
195  else
196  {
197  $this->abreviation = $auths->abbr;
198  }
199  }
200  catch(Exception $e)
201  {
202  $ilLog->write(__METHOD__.': Authentication failed with message: '.$e->getMessage());
203  return false;
204  }
205  }
206  else
207  {
208  $this->abreviation = $auths->abbr;
209  }
210 
211  $ilLog->write(__METHOD__.': Got abr: '.$this->abreviation);
212  }
213  catch(ilECSConnectorException $e)
214  {
215  $ilLog->write(__METHOD__.': Authentication failed with message: '.$e->getMessage());
216  return false;
217  }
218 
219  // read current mid
220  try
221  {
222  include_once('./Services/WebServices/ECS/classes/class.ilECSConnector.php');
223  $connector = new ilECSConnector($this->getCurrentServer());
224  $details = $connector->getAuth($hash,TRUE);
225 
226  $GLOBALS['ilLog']->write(__METHOD__.': '.print_r($details,TRUE));
227  $GLOBALS['ilLog']->write(__METHOD__.': Token created for mid '. $details->getFirstSender());
228 
229  $this->setMID($details->getFirstSender());
230  }
231  catch(ilECSConnectorException $e)
232  {
233  $ilLog->write(__METHOD__.': Receiving mid failed with message: '.$e->getMessage());
234  return false;
235  }
236  return TRUE;
237  }
$_GET["client_id"]
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
static getInstanceByServerId($a_server_id)
Get instance by server id.
getCurrentServer()
Get current server.
+ 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: