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

Auth prvider for ecs auth. More...

+ Inheritance diagram for ilAuthProviderECS:
+ Collaboration diagram for ilAuthProviderECS:

Public Member Functions

 __construct (\ilAuthCredentials $credentials)
 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...
 
 doAuthentication (\ilAuthStatus $status)
 Tra ecs authentication. More...
 
 handleLogin ()
 Called from base class after successful login. More...
 
 validateHash ()
 Validate ECS hash. More...
 
- Public Member Functions inherited from ilAuthProvider
 __construct (ilAuthCredentials $credentials)
 Constructor. More...
 
 getLogger ()
 Get logger. More...
 
 getCredentials ()
 

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 Member Functions inherited from ilAuthProvider
 handleAuthenticationFail (ilAuthStatus $status, $a_reason)
 Handle failed authentication. More...
 

Protected Attributes

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

Private Member Functions

 initECSServices ()
 Init ECS Services private. More...
 

Additional Inherited Members

- Data Fields inherited from ilAuthProvider
const STATUS_UNDEFINED = 0
 
const STATUS_AUTHENTICATION_SUCCESS = 1
 
const STATUS_AUTHENTICATION_FAILED = 2
 
const STATUS_MIGRATION = 3
 

Detailed Description

Auth prvider for ecs auth.

Author
Stefan Meyer smeye.nosp@m.r.il.nosp@m.ias@g.nosp@m.mx.d.nosp@m.e

Definition at line 14 of file class.ilAuthProviderECS.php.

Constructor & Destructor Documentation

◆ __construct()

ilAuthProviderECS::__construct ( \ilAuthCredentials  $credentials)

Constructor.

Parameters
\ilAuthCredentials$credentials

Definition at line 27 of file class.ilAuthProviderECS.php.

References initECSServices().

28  {
29  parent::__construct($credentials);
30 
31  $this->initECSServices();
32  }
initECSServices()
Init ECS Services private.
+ Here is the call graph for this function:

Member Function Documentation

◆ createUser()

ilAuthProviderECS::createUser ( ilECSUser  $user)
protected

create new user

protected

Definition at line 256 of file class.ilAuthProviderECS.php.

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

Referenced by handleLogin().

257  {
258  global $ilClientIniFile, $ilSetting, $rbacadmin, $ilLog;
259 
260  $userObj = new ilObjUser();
261  $userObj->setOwner(SYSTEM_USER_ID);
262 
263  include_once('./Services/Authentication/classes/class.ilAuthUtils.php');
264  $local_user = ilAuthUtils::_generateLogin($this->getAbreviation() . '_' . $user->getLogin());
265 
266  $newUser["login"] = $local_user;
267  $newUser["firstname"] = $user->getFirstname();
268  $newUser["lastname"] = $user->getLastname();
269  $newUser['email'] = $user->getEmail();
270  $newUser['institution'] = $user->getInstitution();
271 
272  // set "plain md5" password (= no valid password)
273  $newUser["passwd"] = "";
274  $newUser["passwd_type"] = IL_PASSWD_CRYPTED;
275 
276  $newUser["auth_mode"] = "ecs";
277  $newUser["profile_incomplete"] = 0;
278 
279  // system data
280  $userObj->assignData($newUser);
281  $userObj->setTitle($userObj->getFullname());
282  $userObj->setDescription($userObj->getEmail());
283 
284  // set user language to system language
285  $userObj->setLanguage($ilSetting->get("language"));
286 
287  // Time limit
288  $userObj->setTimeLimitOwner(7);
289  $userObj->setTimeLimitUnlimited(0);
290  $userObj->setTimeLimitFrom(time() - 5);
291  $userObj->setTimeLimitUntil(time() + $ilClientIniFile->readVariable("session", "expire"));
292 
293  #$now = new ilDateTime(time(), IL_CAL_UNIX);
294  #$userObj->setAgreeDate($now->get(IL_CAL_DATETIME));
295 
296  // Create user in DB
297  $userObj->setOwner(6);
298  $userObj->create();
299  $userObj->setActive(1);
300  $userObj->updateOwner();
301  $userObj->saveAsNew();
302  $userObj->writePrefs();
303 
304  if ($global_role = $this->getCurrentServer()->getGlobalRole()) {
305  $rbacadmin->assignUser($this->getCurrentServer()->getGlobalRole(), $userObj->getId(), true);
306  }
307  ilObject::_writeImportId($userObj->getId(), $user->getImportId());
308 
309  $this->getLogger()->info('Created new remote user with usr_id: ' . $user->getImportId());
310 
311  // Send Mail
312  #$this->sendNotification($userObj);
313  $this->resetMailOptions($userObj->getId());
314 
315  return $userObj->getLogin();
316  }
resetMailOptions($a_usr_id)
Reset mail options to "local only".
getFirstname()
get firstname
getCurrentServer()
Get current server.
const IL_PASSWD_CRYPTED
static _generateLogin($a_login)
generate free login by starting with a default string and adding postfix numbers
getAbreviation()
get abbreviation
getLastname()
getLastname
getLogger()
Get logger.
getEmail()
get email
getLogin()
get login
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:

◆ doAuthentication()

ilAuthProviderECS::doAuthentication ( \ilAuthStatus  $status)

Tra ecs authentication.

Parameters
\ilAuthStatus$status
Returns
boolean

Implements ilAuthProviderInterface.

Definition at line 94 of file class.ilAuthProviderECS.php.

References $server, ilAuthProvider\getLogger(), getServerSettings(), ilAuthProvider\handleAuthenticationFail(), handleLogin(), ilAuthStatus\setAuthenticatedUserId(), setCurrentServer(), ilAuthStatus\setStatus(), ilAuthStatus\STATUS_AUTHENTICATED, and validateHash().

95  {
96  $this->getLogger()->debug('Starting ECS authentication');
97  if (!$this->getServerSettings()->activeServerExists()) {
98  $this->getLogger()->warning('No active ecs server found. Aborting');
99  $this->handleAuthenticationFail($status, 'err_wrong_login');
100  return false;
101  }
102 
103  // Iterate through all active ecs instances
104  include_once './Services/WebServices/ECS/classes/class.ilECSServerSettings.php';
105  foreach ($this->getServerSettings()->getServers() as $server) {
106  $this->setCurrentServer($server);
107  if ($this->validateHash()) {
108  // handle successful authentication
109  $new_usr_id = $this->handleLogin();
110  $this->getLogger()->info('ECS authentication successful.');
112  $status->setAuthenticatedUserId($new_usr_id);
113  return true;
114  }
115  }
116 
117  $this->getLogger()->warning('Could not validate ecs hash for any active server.');
118  $this->handleAuthenticationFail($status, 'err_wrong_login');
119  return false;
120  }
handleLogin()
Called from base class after successful login.
getServerSettings()
Get server settings.
setCurrentServer(ilECSSetting $server=null)
Set current server.
getLogger()
Get logger.
$server
Definition: getUserInfo.php:12
handleAuthenticationFail(ilAuthStatus $status, $a_reason)
Handle failed authentication.
validateHash()
Validate ECS hash.
+ Here is the call graph for this function:

◆ getAbreviation()

ilAuthProviderECS::getAbreviation ( )

get abbreviation

public

Parameters

Definition at line 41 of file class.ilAuthProviderECS.php.

References $abreviation.

Referenced by createUser().

42  {
43  return $this->abreviation;
44  }
+ Here is the caller graph for this function:

◆ getCurrentServer()

ilAuthProviderECS::getCurrentServer ( )

Get current server.

Returns
ilECSSetting

Definition at line 74 of file class.ilAuthProviderECS.php.

References $currentServer.

Referenced by createUser(), handleLogin(), updateUser(), and validateHash().

75  {
76  return $this->currentServer;
77  }
+ Here is the caller graph for this function:

◆ getMID()

ilAuthProviderECS::getMID ( )

get mid

public

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

References $mid.

Referenced by handleLogin().

52  {
53  return $this->mid;
54  }
+ Here is the caller graph for this function:

◆ getServerSettings()

ilAuthProviderECS::getServerSettings ( )

Get server settings.

Returns
ilECSServerSettings

Definition at line 83 of file class.ilAuthProviderECS.php.

References $servers.

Referenced by doAuthentication().

84  {
85  return $this->servers;
86  }
+ Here is the caller graph for this function:

◆ handleLogin()

ilAuthProviderECS::handleLogin ( )

Called from base class after successful login.

Parameters
stringusername

Definition at line 128 of file class.ilAuthProviderECS.php.

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

Referenced by doAuthentication().

129  {
130  include_once('./Services/WebServices/ECS/classes/class.ilECSUser.php');
131 
132  $user = new ilECSUser($_GET);
133 
134  if (!$usr_id = ilObject::_lookupObjIdByImportId($user->getImportId())) {
135  $username = $this->createUser($user);
136  } else {
137  $username = $this->updateUser($user, $usr_id);
138  }
139 
140  // set user imported
141  include_once './Services/WebServices/ECS/classes/class.ilECSImport.php';
142  $import = new ilECSImport($this->getCurrentServer()->getServerId(), $usr_id);
143  $import->save();
144 
145  // Store remote user data
146  include_once './Services/WebServices/ECS/classes/class.ilECSRemoteUser.php';
147  $remote = new ilECSRemoteUser();
148  $remote->setServerId($this->getCurrentServer()->getServerId());
149  $remote->setMid($this->getMID());
150  $remote->setRemoteUserId($user->getImportId());
151  $remote->setUserId(ilObjUser::_lookupId($username));
152 
153  $this->getLogger()->info('Current user is: ' . $username);
154 
155  if (!$remote->exists()) {
156  $remote->create();
157  }
158  return ilObjUser::_lookupId($username);
159  }
$_GET["client_id"]
getCurrentServer()
Get current server.
Storage of ecs remote user.
static _lookupId($a_user_str)
Lookup id by login.
createUser(ilECSUser $user)
create new user
Storage of ECS imported objects.
getLogger()
Get logger.
updateUser(ilECSUser $user, $a_local_user_id)
update existing user
Stores relevant user data.
static _lookupObjIdByImportId($a_import_id)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ initECSServices()

ilAuthProviderECS::initECSServices ( )
private

Init ECS Services private.

Parameters

Definition at line 245 of file class.ilAuthProviderECS.php.

References ilECSServerSettings\getInstance().

Referenced by __construct().

246  {
247  include_once './Services/WebServices/ECS/classes/class.ilECSServerSettings.php';
248  $this->servers = ilECSServerSettings::getInstance();
249  }
static getInstance()
Get singleton instance.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ resetMailOptions()

ilAuthProviderECS::resetMailOptions (   $a_usr_id)
protected

Reset mail options to "local only".

Definition at line 361 of file class.ilAuthProviderECS.php.

References $options, and ilMailOptions\INCOMING_LOCAL.

Referenced by createUser(), and updateUser().

362  {
363  include_once './Services/Mail/classes/class.ilMailOptions.php';
364  $options = new ilMailOptions($a_usr_id);
365  $options->setIncomingType(ilMailOptions::INCOMING_LOCAL);
366  $options->updateOptions();
367  }
Class ilMailOptions this class handles user mails.
if(!isset($_REQUEST['ReturnTo'])) if(!isset($_REQUEST['AuthId'])) $options
Definition: as_login.php:20
+ Here is the caller graph for this function:

◆ setCurrentServer()

ilAuthProviderECS::setCurrentServer ( ilECSSetting  $server = null)

Set current server.

Parameters
ilECSSetting$server

Definition at line 65 of file class.ilAuthProviderECS.php.

References $server.

Referenced by doAuthentication().

66  {
67  $this->currentServer = $server;
68  }
$server
Definition: getUserInfo.php:12
+ Here is the caller graph for this function:

◆ setMID()

ilAuthProviderECS::setMID (   $a_mid)

Definition at line 56 of file class.ilAuthProviderECS.php.

Referenced by validateHash().

57  {
58  $this->mid = $a_mid;
59  }
+ Here is the caller graph for this function:

◆ updateUser()

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

update existing user

protected

Definition at line 323 of file class.ilAuthProviderECS.php.

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

Referenced by handleLogin().

324  {
325  global $ilClientIniFile,$ilLog,$rbacadmin;
326 
327  $user_obj = new ilObjUser($a_local_user_id);
328  $user_obj->setFirstname($user->getFirstname());
329  $user_obj->setLastname($user->getLastname());
330  $user_obj->setEmail($user->getEmail());
331  $user_obj->setInstitution($user->getInstitution());
332  $user_obj->setActive(true);
333 
334  $until = $user_obj->getTimeLimitUntil();
335 
336  if ($until < (time() + $ilClientIniFile->readVariable('session', 'expire'))) {
337  $user_obj->setTimeLimitFrom(time() - 60);
338  $user_obj->setTimeLimitUntil(time() + $ilClientIniFile->readVariable("session", "expire"));
339  }
340  $user_obj->update();
341  $user_obj->refreshLogin();
342 
343  if ($global_role = $this->getCurrentServer()->getGlobalRole()) {
344  $rbacadmin->assignUser(
345  $this->getCurrentServer()->getGlobalRole(),
346  $user_obj->getId(),
347  true
348  );
349  }
350 
351  $this->resetMailOptions($a_local_user_id);
352 
353  $this->getLogger()->debug('Finished update of remote user with usr_id: ' . $user->getImportId());
354  return $user_obj->getLogin();
355  }
resetMailOptions($a_usr_id)
Reset mail options to "local only".
getFirstname()
get firstname
getCurrentServer()
Get current server.
getLastname()
getLastname
getLogger()
Get logger.
getEmail()
get email
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()

ilAuthProviderECS::validateHash ( )

Validate ECS hash.

public

Parameters
stringusername
stringpass

Definition at line 170 of file class.ilAuthProviderECS.php.

References $_GET, $ilLog, $reader, $res, ilLogLevel\DEBUG, getCurrentServer(), ilECSCommunityReader\getInstanceByServerId(), ilAuthProvider\getLogger(), and setMID().

Referenced by doAuthentication().

171  {
172  global $ilLog;
173 
174  // fetch hash
175  if (isset($_GET['ecs_hash']) and strlen($_GET['ecs_hash'])) {
176  $hash = $_GET['ecs_hash'];
177  }
178  if (isset($_GET['ecs_hash_url'])) {
179  $hashurl = urldecode($_GET['ecs_hash_url']);
180  $hash = basename(parse_url($hashurl, PHP_URL_PATH));
181  //$hash = urldecode($_GET['ecs_hash_url']);
182  }
183 
184  $this->getLogger()->info('Using ecs hash: ' . $hash);
185  // Check if hash is valid ...
186  try {
187  include_once('./Services/WebServices/ECS/classes/class.ilECSConnector.php');
188  $connector = new ilECSConnector($this->getCurrentServer());
189  $res = $connector->getAuth($hash);
190  $auths = $res->getResult();
191 
192  $this->getLogger()->dump($auths, ilLogLevel::DEBUG);
193 
194  if ($auths->pid) {
195  try {
196  include_once './Services/WebServices/ECS/classes/class.ilECSCommunityReader.php';
198  foreach ($reader->getParticipantsByPid($auths->pid) as $participant) {
199  if ($participant->getOrganisation() instanceof \ilECSOrganisation) {
200  $this->abreviation = $participant->getOrganisation()->getAbbreviation();
201  break;
202  }
203  }
204  if (!$this->abreviation) {
205  $this->abreviation = $auths->abbr;
206  }
207  } catch (Exception $e) {
208  $this->getLogger()->warning('Authentication failed with message: ' . $e->getMessage());
209  return false;
210  }
211  } else {
212  $this->abreviation = $auths->abbr;
213  }
214 
215  $this->getLogger()->debug('Got abbreviation: ' . $this->abreviation);
216  } catch (ilECSConnectorException $e) {
217  $this->getLogger()->warning('Authentication failed with message: ' . $e->getMessage());
218  return false;
219  }
220 
221  // read current mid
222  try {
223  include_once('./Services/WebServices/ECS/classes/class.ilECSConnector.php');
224  $connector = new ilECSConnector($this->getCurrentServer());
225  $details = $connector->getAuth($hash, true);
226 
227  $this->getLogger()->dump($details, ilLogLevel::DEBUG);
228  $this->getLogger()->debug('Token create for mid: ' . $details->getFirstSender());
229 
230  $this->setMID($details->getFirstSender());
231  } catch (ilECSConnectorException $e) {
232  $this->getLogger()->warning('Receiving mid failed with message: ' . $e->getMessage());
233  return false;
234  }
235  return true;
236  }
$_GET["client_id"]
getCurrentServer()
Get current server.
static getInstanceByServerId($a_server_id)
Get instance by server id.
foreach($_POST as $key=> $value) $res
getLogger()
Get logger.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Field Documentation

◆ $abreviation

ilAuthProviderECS::$abreviation = null
protected

Definition at line 17 of file class.ilAuthProviderECS.php.

Referenced by getAbreviation().

◆ $currentServer

ilAuthProviderECS::$currentServer = null
protected

Definition at line 19 of file class.ilAuthProviderECS.php.

Referenced by getCurrentServer().

◆ $mid

ilAuthProviderECS::$mid = null
protected

Definition at line 16 of file class.ilAuthProviderECS.php.

Referenced by getMID().

◆ $servers

ilAuthProviderECS::$servers = null
protected

Definition at line 20 of file class.ilAuthProviderECS.php.

Referenced by getServerSettings().


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