19declare(strict_types=1);
25use Psr\Http\Message\ServerRequestInterface;
84 $this->
ctrl = $DIC->ctrl();
85 $this->
lng = $DIC->language();
86 $this->
lng->loadLanguageModule(
'auth');
88 $this->authSession =
$DIC[
'ilAuthSession'];
89 $this->eventHandler =
$DIC->event();
90 $this->setting =
$DIC->settings();
91 $this->
access = $DIC->access();
92 $this->db =
$DIC->database();
93 $this->
help = $DIC->help();
94 $this->
http = $DIC->http();
96 $this->ui_factory =
$DIC->ui()->factory();
97 $this->ui_renderer =
$DIC->ui()->renderer();
99 $this->
ctrl->saveParameter($this, [
'rep_ref_id',
'lang',
'target',
'client_id']);
100 $this->
user->setLanguage($this->
lng->getLangKey());
101 $this->
help->setScreenIdComponent(
'init');
106 self::$forced_cmd = $cmd;
111 if (self::$forced_cmd) {
113 self::$forced_cmd =
'';
121 return $this->
refinery->custom()->transformation(
static function (array $values): array {
122 return array_merge(...$values);
128 return $this->
refinery->custom()->transformation(
static function (array $values): array {
129 $processed_values = array_merge(
131 isset($values[self::PROP_PASSWORD]) ? [self::PROP_PASSWORD => $values[self::PROP_PASSWORD]] : []
134 return $processed_values;
140 return $this->
http->wrapper()->query()->retrieve(
142 $this->
refinery->byTrying([$this->refinery->kindlyTo()->string(), $this->refinery->always(
'')])
156 'doStandardAuthentication',
157 'doLTIAuthentication'
165 $next_class = $this->
ctrl->getNextClass($this) ??
'';
167 switch (strtolower($next_class)) {
168 case strtolower(ilLoginPageGUI::class):
171 case strtolower(ilAccountRegistrationGUI::class):
175 case strtolower(ilPasswordAssistanceGUI::class):
179 case strtolower(ilAccessibilityControlConceptGUI::class):
184 if (method_exists($this, $cmd)) {
203 $this->
ctrl->redirectByClass(ilAccountRegistrationGUI::class);
208 $this->
ctrl->saveParameterByClass(ilPasswordAssistanceGUI::class,
'key');
209 $this->
ctrl->redirectByClass(ilPasswordAssistanceGUI::class);
222 if ($this->authSession->isValid() && $this->authSession->getUserId() > 0 && !$this->user->isAnonymous()) {
226 $is_forced_login = $this->
http->wrapper()->query()->retrieve(
229 $this->refinery->kindlyTo()->string(),
230 $this->refinery->always(
231 $this->http->wrapper()->post()->retrieve(
233 $this->refinery->byTrying([
234 $this->refinery->kindlyTo()->string(),
235 $this->refinery->always(
'')
242 if ($is_forced_login) {
244 $this->
logger->debug(
'Force login');
246 if ($this->authSession->isValid()) {
248 $this->
logger->debug(
'Valid session -> logout current user');
250 $this->authSession->logout();
252 $this->eventHandler->raise(
253 'components/ILIAS/Authentication',
256 'username' => $this->
user->getLogin(),
257 'is_explicit_logout' =>
false,
261 $this->dic->user()->setId($this->authSession->getUserId());
262 $this->dic->user()->read();
265 $this->
logger->debug(
'Show login page');
266 foreach ($messages as $type => $content) {
267 $this->
mainTemplate->setOnScreenMessage($type, $content);
274 if ($this->authSession->isValid()) {
275 $this->
logger->debug(
'Valid session -> redirect to starting page');
280 $this->
logger->debug(
'No valid session -> show login');
288 $this->
help->setSubScreenId(
'login');
290 $this->
getLogger()->debug(
'Showing login page');
292 $extUid = $this->
http->wrapper()->query()->retrieve(
294 $this->
refinery->byTrying([$this->refinery->kindlyTo()->string(), $this->refinery->always(
'')])
297 $soapPw = $this->
http->wrapper()->query()->retrieve(
299 $this->
refinery->byTrying([$this->refinery->kindlyTo()->string(), $this->refinery->always(
'')])
308 $credentials->setUsername($extUid);
309 $credentials->setPassword($soapPw);
310 $credentials->tryAuthenticationOnLoginPage();
313 $frontend->tryAuthenticationOnLoginPage();
322 $page_editor_html = $this->
showLoginForm($page_editor_html, $form);
330 if ($this->authSession->isExpired() || $this->http->wrapper()->query()->has(
'session_expired')) {
331 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'auth_err_expired'));
332 } elseif ($this->
http->wrapper()->query()->has(
'reg_confirmation_msg')) {
333 $this->
lng->loadLanguageModule(
'registration');
334 $message_key = $this->
http->wrapper()->query()->retrieve(
335 'reg_confirmation_msg',
336 $this->
refinery->kindlyTo()->string()
338 $message_type = $message_key ===
'reg_account_confirmation_successful' ?
342 $this->
lng->txt($message_key)
346 if ($page_editor_html !==
'') {
347 $tpl->setVariable(
'LPE', $page_editor_html);
350 if ($this->authSession->isExpired()) {
353 $this->dic->user()->setId($this->authSession->getUserId());
354 $this->dic->user()->read();
357 $this->
mainTemplate->setPermanentLink(
'auth',
null,
'login');
368 $gtpl->setContent($tpl->get());
369 $gtpl->printToStdout(
'DEFAULT',
false,
true);
385 foreach ($message_types as $message_type) {
395 ?
string $username =
null,
398 $this->
help->setSubScreenId(
'code_input');
400 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'time_limit_reached'));
403 $tpl->setVariable(
'FORM', $this->ui_renderer->render($form ?? $this->buildCodeForm($username)));
409 $this->
lng->loadLanguageModule(
'auth');
411 $field_factory = $this->ui_factory->input()->field();
413 $username_field = $field_factory
415 ->withRequired(
true);
416 if ($username !==
null) {
417 $username_field = $username_field->withValue($username);
420 return $this->ui_factory
425 $this->
ctrl->getFormAction($this,
'processCode'),
427 $field_factory->section(
429 self::PROP_CODE => $field_factory
431 $this->lng->txt(
'auth_account_code'),
432 $this->lng->txt(
'auth_account_code_info')
434 ->withRequired(
true),
436 self::PROP_USERNAME => $username_field,
438 $this->lng->txt(
'auth_account_code_title'),
442 ->withSubmitLabel($this->
lng->txt(
'send'))
443 ->withAdditionalTransformation($this->mergeValuesTrafo())
444 ->withAdditionalTransformation($this->saniziteArrayElementsTrafo());
449 $form = $this->buildCodeForm();
452 if ($this->
http->request()->getMethod() ===
'POST') {
453 $form = $form->withRequest($this->
http->request());
454 $form_data = $form->getData();
455 $form_valid = $form_data !==
null;
460 $code = $form_data[self::PROP_CODE];
461 $uname = $form_data[self::PROP_USERNAME];
465 $this->showLoginPage();
468 $invalid_code =
false;
470 if ($valid_until ===
'0') {
473 if (is_numeric($valid_until)) {
474 $valid_until = strtotime(
'+' . $valid_until .
'days');
476 $valid_until = explode(
'-', $valid_until);
477 $valid_until = mktime(
481 (
int) $valid_until[1],
482 (
int) $valid_until[2],
483 (
int) $valid_until[0]
485 if ($valid_until < time()) {
486 $invalid_code =
true;
490 if (!$invalid_code) {
496 if (!$invalid_code) {
506 $this->
ctrl->setParameter($this,
'cu', 1);
507 $this->
lng->loadLanguageModule(
'auth');
513 $this->
ctrl->redirect($this,
'showLoginPage');
517 $this->
lng->loadLanguageModule(
'user');
518 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'user_account_code_not_valid'));
520 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'form_input_not_valid'));
523 $this->showCodeForm($uname, $form);
528 $field_factory = $this->ui_factory->input()->field();
533 $auth_mode = $field_factory->radio($this->
lng->txt(
'auth_selection'))->withRequired(
true);
534 $visible_auth_methods = [];
536 if (isset($option[
'hide_in_ui']) && $option[
'hide_in_ui']) {
540 $auth_mode = $auth_mode->withOption((
string) $key, $option[
'txt']);
542 if (isset($option[
'checked'])) {
543 $auth_mode = $auth_mode->withValue($key);
545 $visible_auth_methods[] = $key;
548 if (count($visible_auth_methods) === 1) {
549 $auth_mode = $field_factory->hidden()->withRequired(
true)->withValue(current($visible_auth_methods));
552 $fields[self::PROP_AUTH_MODE] = $auth_mode;
556 self::PROP_USERNAME => $field_factory
557 ->text($this->
lng->txt(
'username'))
560 $this->
refinery->custom()->constraint(
561 static function (
string $value):
bool {
562 return $value !==
'';
564 static function (Closure
$lng,
string $value):
string {
565 return $lng(
'auth_required_username');
569 self::PROP_PASSWORD => $field_factory
570 ->password($this->
lng->txt(
'password'))
571 ->withRevelation(
true)
574 $this->
refinery->custom()->constraint(
575 static function (
string $value):
bool {
576 return $value !==
'';
578 static function (Closure
$lng,
string $value):
string {
579 return $lng(
'auth_required_password');
583 ->withAdditionalTransformation(
584 $this->
refinery->custom()->transformation(
586 return $value->toString();
592 $sections = [$field_factory->section($fields, $this->
lng->txt(
'login_to_ilias_via_login_form'))];
594 return $this->ui_factory
598 ->standard($this->
ctrl->getFormAction($this,
'doStandardAuthentication'), $sections)
599 ->withDedicatedName(
'login_form')
600 ->withSubmitLabel($this->
lng->txt(
'log_in'))
607 $this->getLogger()->debug(
'Trying lti authentication');
610 $credentials->initFromRequest();
619 $frontend = $frontend_factory->getFrontend(
625 $frontend->authenticate();
627 setcookie(session_name(), session_id(), [
630 'domain' => IL_COOKIE_DOMAIN,
638 if (is_array($lti_context_ids) && isset($lti_context_ids[0])) {
644 switch ($status->getStatus()) {
651 $this->
ctrl->redirect($this,
'showAccountMigration');
655 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt($status->getReason()),
true);
656 $this->
ctrl->redirect($this,
'showLoginPage');
659 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_wrong_login'));
660 $this->showLoginPage();
665 $this->getLogger()->debug(
'Trying apache authentication');
668 $credentials->initFromRequest();
675 $frontend_factory = new \ilAuthFrontendFactory();
677 $frontend = $frontend_factory->getFrontend(
683 $frontend->authenticate();
685 switch ($status->getStatus()) {
687 if ($credentials->hasValidTargetUrl()) {
690 'Authentication successful. Redirecting to starting page: %s',
691 $credentials->getTargetUrl()
694 $this->
ctrl->redirectToURL($credentials->getTargetUrl());
697 'Authentication successful, but no valid target URL given. Redirecting to default starting page.'
703 $this->
ctrl->redirect($this,
'showAccountMigration');
707 $this->
mainTemplate->setOnScreenMessage(
'failure', $status->getTranslatedReason(),
true);
708 $this->
ctrl->redirectToURL(
710 $this->
ctrl->getLinkTarget($this,
'showLoginPage',
'',
false,
false),
716 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_wrong_login'));
717 $this->showLoginPage();
722 $form = $this->buildStandardLoginForm();
725 if ($this->
http->request()->getMethod() ===
'POST') {
726 $form = $form->withRequest($this->
http->request());
727 $form_data = $form->getData();
728 $form_valid = $form_data !==
null;
732 $this->showLoginPage($form);
736 $this->getLogger()->debug(
'Trying to authenticate user.');
738 $auth_callback =
function () use ($form_data) {
740 $credentials->setUsername($form_data[self::PROP_USERNAME]);
741 $credentials->setPassword($form_data[self::PROP_PASSWORD]);
745 $credentials->setAuthMode($form_data[self::PROP_AUTH_MODE]);
749 $providers = $provider_factory->getProviders($credentials);
755 $frontend = $frontend_factory->getFrontend(
761 $frontend->authenticate();
766 if (($auth_duration = $this->setting->get(
'auth_duration')) !==
null) {
767 $duration = $this->
http->durations()->callbackDuration((
int) $auth_duration);
768 $status =
$duration->stretch($auth_callback);
770 $status = $auth_callback();
773 switch ($status->getStatus()) {
776 'Authentication successful; Redirecting to starting page.'
783 $this->showLoginPage($this->buildCodeForm($uname));
787 $this->
ctrl->redirect($this,
'showAccountMigration');
791 $this->
mainTemplate->setOnScreenMessage(
'failure', $status->getTranslatedReason());
792 $this->showLoginPage($form);
797 string $page_editor_html,
802 return $this->substituteLoginPageElements(
805 $this->ui_renderer->render($form ?? $this->buildStandardLoginForm()),
813 if ($page_editor_html !==
'') {
814 return $page_editor_html;
817 return $page_editor_html;
822 $target = $this->initTargetFromQuery();
824 if ($this->setting->get(
'shib_active')) {
825 $tpl =
new ilTemplate(
'tpl.login_form_shibboleth.html',
true,
true,
'components/ILIAS/Init');
831 $federation_name = $this->setting->get(
'shib_federation_name');
832 $admin_mail =
' <a href="mailto:' . $this->setting->get(
'admin_email') .
'">ILIAS ' . $this->
lng->txt(
835 if ($this->setting->get(
'shib_hos_type') ===
'external_wayf') {
836 $tpl->setCurrentBlock(
'shibboleth_login');
837 $tpl->setVariable(
'TXT_SHIB_LOGIN', $this->
lng->txt(
'login_to_ilias_via_shibboleth'));
838 $tpl->setVariable(
'IL_TARGET', $target);
839 $tpl->setVariable(
'TXT_SHIB_FEDERATION_NAME', $this->setting->get(
'shib_federation_name'));
840 $tpl->setVariable(
'TXT_SHIB_LOGIN_BUTTON', $this->setting->get(
'shib_login_button'));
842 'TXT_SHIB_LOGIN_INSTRUCTIONS',
844 $this->
lng->txt(
'shib_general_login_instructions'),
849 $tpl->setVariable(
'TXT_SHIB_CUSTOM_LOGIN_INSTRUCTIONS', $this->setting->get(
'shib_login_instructions'));
850 $tpl->parseCurrentBlock();
851 } elseif ($this->setting->get(
'shib_hos_type') ==
'embedded_wayf') {
852 $tpl->setCurrentBlock(
'shibboleth_custom_login');
853 $customInstructions = stripslashes($this->setting->get(
'shib_login_instructions'));
854 $tpl->setVariable(
'TXT_SHIB_CUSTOM_LOGIN_INSTRUCTIONS', $customInstructions);
855 $tpl->parseCurrentBlock();
857 $tpl->setCurrentBlock(
'shibboleth_wayf_login');
858 $tpl->setVariable(
'TXT_SHIB_LOGIN', $this->
lng->txt(
'login_to_ilias_via_shibboleth'));
859 $tpl->setVariable(
'TXT_SHIB_FEDERATION_NAME', $this->setting->get(
'shib_federation_name'));
861 'TXT_SELECT_HOME_ORGANIZATION',
863 $this->
lng->txt(
'shib_select_home_organization'),
864 $this->setting->get(
'shib_federation_name')
867 $tpl->setVariable(
'TXT_CONTINUE', $this->
lng->txt(
'btn_next'));
868 $tpl->setVariable(
'TXT_SHIB_HOME_ORGANIZATION', $this->
lng->txt(
'shib_home_organization'));
870 'TXT_SHIB_LOGIN_INSTRUCTIONS',
872 $this->
lng->txt(
'shib_general_wayf_login_instructions'),
876 $tpl->setVariable(
'TXT_SHIB_CUSTOM_LOGIN_INSTRUCTIONS', $this->setting->get(
'shib_login_instructions'));
880 $tpl->setVariable(
'TXT_SHIB_INVALID_SELECTION', $ilShibbolethWAYF->showNotice());
881 $tpl->setVariable(
'SHIB_IDP_LIST', $ilShibbolethWAYF->generateSelection());
882 $tpl->setVariable(
'ILW_TARGET', $target);
883 $tpl->parseCurrentBlock();
886 return $this->substituteLoginPageElements(
890 '[list-shibboleth-login-form]',
895 return $page_editor_html;
903 string $page_editor_html,
904 string $element_html,
906 string $fallback_tplvar
908 if ($page_editor_html ===
'') {
909 $tpl->setVariable($fallback_tplvar, $element_html);
910 return $page_editor_html;
913 if (stripos($page_editor_html, $placeholder) ===
false) {
914 $tpl->setVariable($fallback_tplvar, $element_html);
915 return $page_editor_html;
918 return str_replace($placeholder, $element_html, $page_editor_html);
925 $ipe_language = $ipe_settings->getIliasEditorLanguage($this->
lng->getLangKey());
926 if (!$ipe_language) {
939 $page_gui->setStyleId(0);
941 $page_gui->setPresentationTitle(
'');
942 $page_gui->setTemplateOutput(
false);
943 $page_gui->setHeader(
'');
945 return $page_gui->showPage();
952 $rtpl =
new ilTemplate(
'tpl.login_registration_links.html',
true,
true,
'components/ILIAS/Init');
956 $rtpl->setCurrentBlock(
'new_registration');
957 $rtpl->setVariable(
'REGISTER', $this->
lng->txt(
'registration'));
960 $this->
ctrl->getLinkTargetByClass(ilAccountRegistrationGUI::class)
962 $rtpl->parseCurrentBlock();
965 if ($this->setting->get(
'password_assistance')) {
966 $rtpl->setCurrentBlock(
'password_assistance');
967 $rtpl->setVariable(
'FORGOT_PASSWORD', $this->
lng->txt(
'forgot_password'));
968 $rtpl->setVariable(
'FORGOT_USERNAME', $this->
lng->txt(
'forgot_username'));
970 'CMD_FORGOT_PASSWORD',
971 $this->
ctrl->getLinkTargetByClass(ilPasswordAssistanceGUI::class)
974 'CMD_FORGOT_USERNAME',
975 $this->
ctrl->getLinkTargetByClass(ilPasswordAssistanceGUI::class,
'showUsernameAssistanceForm')
977 $rtpl->setVariable(
'LANG_ID', $this->
lng->getLangKey());
978 $rtpl->parseCurrentBlock();
983 $rtpl->setCurrentBlock(
'homelink');
986 '?client_id=' .
CLIENT_ID .
'&lang=' . $this->
lng->getLangKey()
988 $rtpl->setVariable(
'TXT_HOME', $this->
lng->txt(
'home'));
989 $rtpl->parseCurrentBlock();
992 return $this->substituteLoginPageElements(
996 '[list-registration-link]',
997 'REG_PWD_CLIENT_LINKS'
1006 if (0 === $this->
user->getId()) {
1010 $page_editor_html = $this->substituteLoginPageElements(
1013 $DIC[
'legalDocuments']->loginPageHTML(TermsOfService::ID),
1014 '[list-user-agreement]',
1017 $page_editor_html = $this->substituteLoginPageElements(
1020 $DIC[
'legalDocuments']->loginPageHTML(DataProtection::ID),
1021 '[list-dpro-agreement]',
1025 return $page_editor_html;
1032 '[list-language-selection]',
1033 '[list-registration-link]',
1034 '[list-user-agreement]',
1035 '[list-dpro-agreement]',
1036 '[list-login-form]',
1037 '[list-saml-login]',
1038 '[list-shibboleth-login-form]',
1039 '[list-openid-connect-login]'
1048 $field_factory = $this->ui_factory->input()->field();
1050 $keep = $field_factory->group(
1052 self::PROP_USERNAME => $field_factory->text($this->lng->txt(
'login'))->withRequired(
true),
1053 self::PROP_PASSWORD => $field_factory
1054 ->password($this->lng->txt(
'password'))
1055 ->withRequired(
true)
1056 ->withRevelation(
true)
1057 ->withAdditionalTransformation(
1058 $this->refinery->custom()->transformation(
1060 return $value->toString();
1065 $this->
lng->txt(
'auth_account_migration_keep'),
1066 $this->lng->txt(
'auth_info_migrate')
1069 $new = $field_factory->group(
1071 $this->
lng->txt(
'auth_account_migration_new'),
1072 $this->lng->txt(
'auth_info_add')
1076 self::PROP_ACCOUNT_MIGRATION => $field_factory->switchableGroup(
1078 self::PROP_ACCOUNT_MIGRATION_MIGRATE => $keep,
1079 self::PROP_ACCOUNT_MIGRATION_NEW => $new,
1081 $this->
lng->txt(
'auth_account_migration_name')
1082 )->withRequired(
true)->withValue(self::PROP_ACCOUNT_MIGRATION_MIGRATE)
1085 $sections = [$field_factory->section($fields, $this->
lng->txt(
'auth_account_migration'))];
1087 return $this->ui_factory->input()
1090 ->standard($this->
ctrl->getFormAction($this,
'migrateAccount'), $sections)
1091 ->withDedicatedName(
'login_form')
1092 ->withSubmitLabel($this->
lng->txt(
'save'))
1093 ->withAdditionalTransformation($this->mergeValuesTrafo())
1094 ->withAdditionalTransformation($this->saniziteArrayElementsTrafo());
1099 string $message =
''
1101 $this->
help->setSubScreenId(
'account_migration');
1103 $tpl = self::initStartUpTemplate(
'tpl.login_account_migration.html');
1104 $tpl->setVariable(
'MIG_FORM', $this->ui_renderer->render($form ?? $this->buildAccountMigrationForm()));
1106 if ($message !==
'') {
1107 $this->
mainTemplate->setOnScreenMessage(
'failure', $message);
1110 self::printToGlobalTemplate($tpl);
1115 $form = $this->buildAccountMigrationForm();
1116 $form_valid =
false;
1118 if ($this->
http->request()->getMethod() ===
'POST') {
1119 $form = $form->withRequest($this->
http->request());
1120 $form_data = $form->getData();
1121 $form_valid = $form_data !==
null;
1125 $this->showAccountMigration($form, $this->
lng->txt(
'form_input_not_valid'));
1129 $account_migration = $form_data[self::PROP_ACCOUNT_MIGRATION];
1130 $account_migration_mode = $account_migration[0];
1131 if ($account_migration_mode === self::PROP_ACCOUNT_MIGRATION_MIGRATE) {
1132 $this->doMigration($account_migration[1]);
1133 } elseif ($account_migration_mode === self::PROP_ACCOUNT_MIGRATION_NEW) {
1134 $this->doMigrationNewAccount();
1136 $this->showAccountMigration(
1138 $this->
lng->txt(
'form_input_not_valid')
1149 $provider = $provider_factory->getProviderByAuthMode(
1154 $this->
logger->debug(
'Using provider: ' . get_class(
$provider) .
' for further processing.');
1160 $frontend = $frontend_factory->getFrontend(
1167 if ($frontend->migrateAccountNew()) {
1171 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_wrong_login'));
1172 $this->
ctrl->redirect($this,
'showAccountMigration');
1180 $username = $migration_request_data[self::PROP_USERNAME];
1181 $password = $migration_request_data[self::PROP_PASSWORD];
1183 $this->
logger->debug(
'Starting account migration for user: ' .
ilSession::get(
'mig_ext_account'));
1186 $credentials->setUsername($username);
1187 $credentials->setPassword($password);
1196 $frontend = $frontend_factory->getFrontend(
1202 $frontend->authenticate();
1204 switch ($status->getStatus()) {
1206 $this->getLogger()->debug(
'Account migration: authentication successful for ' . $username);
1208 $provider = $provider_factory->getProviderByAuthMode(
1213 $frontend = $frontend_factory->getFrontend(
1220 if ($frontend->migrateAccount(
$GLOBALS[
'DIC'][
'ilAuthSession'])) {
1224 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_wrong_login'),
true);
1225 $this->
ctrl->redirect($this,
'showAccountMigration');
1229 $this->getLogger()->info(
'Account migration failed for user ' . $username);
1230 $this->showAccountMigration(
null,
$GLOBALS[
'lng']->txt(
'err_wrong_login'));
1236 if (!$this->authSession->isExpired() &&
1237 $this->authSession->isAuthenticated() &&
1242 $this->
help->setSubScreenId(
'logout');
1244 $tpl = self::initStartUpTemplate(
'tpl.logout.html');
1247 $this->
refinery->byTrying([$this->refinery->kindlyTo()->string(), $this->refinery->always(
'')])
1252 $tpl->setCurrentBlock(
'homelink');
1253 $tpl->setVariable(
'CLIENT_ID',
'?client_id=' .
$client_id .
'&lang=' . $this->
lng->getLangKey());
1254 $tpl->setVariable(
'TXT_HOME', $this->
lng->txt(
'home'));
1255 $tpl->parseCurrentBlock();
1258 $tpl->setVariable(
'LPE', $this->getAuthPageEditorHtml(AuthPageEditorContext::LOGOUT));
1259 $tpl->setVariable(
'TXT_PAGEHEADLINE', $this->
lng->txt(
'logout'));
1260 $tpl->setVariable(
'TXT_LOGIN', $this->
lng->txt(
'login_to_ilias'));
1263 '?client_id=' .
$client_id .
'&cmd=force_login&lang=' . $this->
lng->getLangKey()
1266 self::printToGlobalTemplate($tpl);
1269 private function doLogout(): void
1272 $legal_documents = $this->dic[
'legalDocuments'];
1274 $this->eventHandler->raise(
1275 'components/ILIAS/Authentication',
1278 'user_id' => $this->
user->getId()
1282 $user_language = $this->
user->getLanguage();
1284 $used_external_auth_mode =
ilSession::get(
'used_external_auth_mode');
1287 $this->authSession->logout();
1295 $target = $legal_documents->logoutTarget($target);
1296 $url = $target->asURI();
1298 $this->eventHandler->raise(
1299 'components/ILIAS/Authentication',
1302 'username' => $this->
user->getLogin(),
1303 'is_explicit_logout' =>
true,
1304 'used_external_auth_mode' => $used_external_auth_mode,
1305 'logout_target' =>
$url
1310 $this->mainTemplate::MESSAGE_TYPE_INFO,
1311 $this->
lng->txt(
'logout_text') . $legal_documents->logoutText(),
1318 $this->
ctrl->setParameter($this,
'lang', $user_language);
1320 $this->
ctrl->redirectToURL((
string)
$url);
1326 $tpl = self::initStartUpTemplate([
'agreement.html',
'components/ILIAS/LegalDocuments'],
true,
false);
1327 $tpl->setVariable(
'CONTENT',
$DIC[
'legalDocuments']->agreeContent(self::class, __FUNCTION__));
1328 self::printToGlobalTemplate($tpl);
1333 if ($this->authSession->isValid()) {
1334 if (!$this->
user->isAnonymous() || (
1336 $this->httpRequest->getServerParams()[
'SERVER_NAME']
1349 $this->showLoginPage();
1355 public static function _checkGoto(
string $a_target)
1359 $component_factory =
$DIC[
'component.factory'];
1361 $access =
$DIC->access();
1363 foreach ($component_factory->getActivePluginsInSlot(
'uihk') as $ui_plugin) {
1365 $gui_class = $ui_plugin->getUIClassInstance();
1366 $resp = $gui_class->checkGotoHook($a_target);
1367 if (isset(
$resp[
'target']) && is_string(
$resp[
'target']) &&
$resp[
'target'] !==
'') {
1368 $a_target =
$resp[
'target'];
1373 if ($a_target ===
'') {
1377 $t_arr = explode(
'_', $a_target);
1380 if ($type ===
'git') {
1384 if ($type ===
'pg' | $type ===
'st') {
1388 $class =
$DIC[
'objDefinition']->getClassName($type);
1389 if ($class ===
'') {
1394 $full_class =
'ilObj' . $class .
'Access';
1396 $ret = call_user_func([$full_class,
'_checkGoto'], $a_target);
1401 !str_contains($a_target,
'_wsp') &&
1402 !
$DIC->user()->isAnonymous() &&
1403 !
$DIC[
'objDefinition']->isAdministrationObject($type) &&
1404 $DIC[
'objDefinition']->isRBACObject($type)) {
1407 if ($t_arr[0] ===
'pg') {
1408 if (isset($t_arr[2])) {
1414 $ref_id = array_shift($ref_ids);
1430 foreach (
$path as $path_ref_id) {
1431 $redirect_infopage =
false;
1432 $add_member_role =
false;
1438 if (!$access->
doActivationCheck(
'read',
'', $path_ref_id,
$DIC->user()->getId(), $pobj_id, $ptype) ||
1439 !$access->
doStatusCheck(
'read',
'', $path_ref_id,
$DIC->user()->getId(), $pobj_id, $ptype)) {
1442 } elseif ($ptype ===
'crs') {
1445 if (!$participants->isAssigned()) {
1448 $block_obj[] = $path_ref_id;
1449 $add_member_role =
true;
1451 $redirect_infopage =
true;
1454 } elseif ($ptype ===
'grp') {
1459 if ($group_obj->isRegistrationEnabled()) {
1460 $block_obj[] = $path_ref_id;
1461 $add_member_role =
true;
1463 $redirect_infopage =
true;
1469 if ($add_member_role) {
1471 $DIC->rbac()->system()->resetPACache(
$DIC->user()->getId(), $path_ref_id);
1472 if (!
$DIC->rbac()->system()->checkAccess(
'join', $path_ref_id)) {
1473 $redirect_infopage =
true;
1475 $DIC->rbac()->system()->addTemporaryRole(
1476 $DIC->user()->getId(),
1483 if ($redirect_infopage) {
1484 if (
$DIC->rbac()->system()->checkAccess(
'visible', $path_ref_id)) {
1486 'ilias.php?baseClass=ilRepositoryGUI&ref_id=' . $path_ref_id .
'&cmd=infoScreen'
1496 if ($block_obj !== [] &&
$DIC->rbac()->system()->checkAccess(
'read',
$ref_id)) {
1503 'ilias.php?baseClass=ilRepositoryGUI&ref_id=' . array_shift($block_obj)
1513 $this->
lng->loadLanguageModule(
'registration');
1518 ->toNew(PendingRegistrationHash::class)
1519 ->transform([$this->
http->wrapper()->query()->retrieve(
'rh', $this->refinery->byTrying([
1520 $this->refinery->kindlyTo()->string(),
1521 $this->refinery->always(
null)
1527 $this->dic->database(),
1528 $this->dic->logger()->user(),
1529 (
new \
ILIAS\Data\Factory())->clock()
1531 $user = $dual_opt_in_service->verifyHashAndActivateUser($reg_hash);
1534 \
ILIAS\UICore\GlobalTemplate::MESSAGE_TYPE_SUCCESS,
1535 $this->
lng->txt(
'reg_account_confirmation_successful'),
1538 $this->
ctrl->redirectToURL(sprintf(
'./login.php?cmd=force_login&lang=%s', $user->
getLanguage()));
1541 \
ILIAS\UICore\GlobalTemplate::MESSAGE_TYPE_FAILURE,
1542 $this->
lng->txt($exception->getMessage()),
1545 $this->
ctrl->redirectToURL(sprintf(
'./login.php?cmd=force_login&lang=%s', $this->
lng->getLangKey()));
1546 }
catch (Exception) {
1548 \
ILIAS\UICore\GlobalTemplate::MESSAGE_TYPE_FAILURE,
1549 $this->
lng->txt(
'reg_confirmation_hash_not_passed'),
1552 $this->
ctrl->redirectToURL(sprintf(
'./login.php?cmd=force_login&lang=%s', $this->
lng->getLangKey()));
1562 bool $a_show_back =
false,
1563 bool $a_show_logout =
false
1569 $tpl->addBlockfile(
'CONTENT',
'content',
'tpl.startup_screen.html',
'components/ILIAS/Init');
1571 $view_title =
$DIC->language()->txt(
'login_to_ilias');
1576 $tpl->setCurrentBlock(
'link_item_bl');
1577 $tpl->setVariable(
'LINK_TXT', $view_title);
1578 $tpl->setVariable(
'LINK_URL',
'login.php?cmd=force_login&' .
$param);
1579 $tpl->parseCurrentBlock();
1583 $tpl->setVariable(
'LINK_URL',
'index.php?' .
$param);
1584 $tpl->setVariable(
'LINK_TXT',
$DIC->language()->txt(
'home'));
1585 $tpl->parseCurrentBlock();
1587 } elseif ($a_show_logout) {
1588 $view_title =
$DIC->language()->txt(
'logout');
1589 $tpl->setCurrentBlock(
'link_item_bl');
1590 $tpl->setVariable(
'LINK_TXT', $view_title);
1591 $tpl->setVariable(
'LINK_URL', self::logoutUrl());
1592 $tpl->parseCurrentBlock();
1595 if (is_array($a_tmpl)) {
1596 $template_file = $a_tmpl[0];
1597 $template_dir = $a_tmpl[1];
1599 $template_file = $a_tmpl;
1600 $template_dir =
'components/ILIAS/Init';
1603 $tpl->addBlockFile(
'STARTUP_CONTENT',
'startup_content', $template_file, $template_dir);
1605 PageContentProvider::setViewTitle($view_title);
1606 $short_title = trim(
$DIC->settings()->get(
'short_inst_name') ??
'');
1607 if ($short_title ===
'') {
1608 $short_title =
'ILIAS';
1610 PageContentProvider::setShortTitle($short_title);
1613 PageContentProvider::setTitle($header_title);
1621 $tpl =
new ilTemplate(
'tpl.login_form_saml.html',
true,
true,
'components/ILIAS/Saml');
1624 $target = $this->initTargetFromQuery();
1625 if ($target !==
'') {
1629 $tpl->setVariable(
'SAML_SCRIPT_URL',
'./saml.php' . $return);
1630 $tpl->setVariable(
'TXT_LOGIN', $this->
lng->txt(
'saml_log_in'));
1631 $tpl->setVariable(
'LOGIN_TO_ILIAS_VIA_SAML', $this->
lng->txt(
'login_to_ilias_via_saml'));
1632 $tpl->setVariable(
'TXT_SAML_LOGIN_TXT', $this->
lng->txt(
'saml_login_form_txt'));
1633 $tpl->setVariable(
'TXT_SAML_LOGIN_INFO_TXT', $this->
lng->txt(
'saml_login_form_info_txt'));
1635 return $this->substituteLoginPageElements(
1639 '[list-saml-login]',
1644 return $page_editor_html;
1650 if ($oidc_settings->getActive()) {
1651 $tpl =
new ilTemplate(
'tpl.login_element.html',
true,
true,
'components/ILIAS/OpenIdConnect');
1653 $this->
lng->loadLanguageModule(
'auth');
1654 $tpl->setVariable(
'TXT_OIDCONNECT_HEADER', $this->
lng->txt(
'auth_oidc_login_element_info'));
1656 $target = $this->initTargetFromQuery();
1657 $target_str = empty($target) ?
'' : (
'?target=' . $target);
1658 switch ($oidc_settings->getLoginElementType()) {
1660 $tpl->setVariable(
'SCRIPT_OIDCONNECT_T',
'./openidconnect.php' . $target_str);
1661 $tpl->setVariable(
'TXT_OIDC', $oidc_settings->getLoginElemenText());
1665 $tpl->setVariable(
'SCRIPT_OIDCONNECT_I',
'./openidconnect.php' . $target_str);
1666 $tpl->setVariable(
'IMG_SOURCE', $oidc_settings->getImageFilePath());
1670 return $this->substituteLoginPageElements(
1674 '[list-openid-connect-login]',
1675 'OPEN_ID_CONNECT_LOGIN_FORM'
1679 return $page_editor_html;
1684 $this->getLogger()->debug(
'Trying openid connect authentication');
1687 $credentials->initFromRequest();
1696 $frontend = $frontend_factory->getFrontend(
1702 $frontend->authenticate();
1704 switch ($status->getStatus()) {
1706 $this->
logger->debug(
'Authentication successful; Redirecting to starting page.');
1707 if ($credentials->getRedirectionTarget()) {
1714 $this->
mainTemplate->setOnScreenMessage(
'failure', $status->getTranslatedReason(),
true);
1715 $this->
ctrl->redirect($this,
'showLoginPage');
1718 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_wrong_login'));
1719 $this->showLoginPage();
1724 $this->getLogger()->debug(
'Trying saml authentication');
1725 $request = $this->httpRequest;
1726 $params = $request->getQueryParams();
1729 $auth = $factory->auth();
1731 if (isset(
$params[
'action']) &&
$params[
'action'] ===
'logout') {
1732 $logout_url =
$params[
'logout_url'] ??
'';
1733 $this->
logger->info(sprintf(
'Requested SAML logout: %s', $logout_url));
1734 $auth->logout($logout_url);
1741 if (isset(
$params[
'returnTo'])) {
1742 $auth->storeParam(
'target',
$params[
'returnTo']);
1745 $this->
logger->debug(
'Started SAML authentication request');
1746 if (!$auth->isAuthenticated()) {
1748 if (!isset($request->getQueryParams()[
'idpentityid'], $request->getQueryParams()[
'saml_idp_id'])) {
1750 if (count($activeIdps) === 1) {
1751 $idp = current($activeIdps);
1755 'Found exactly one active IDP with id %s: %s',
1761 $this->
ctrl->setParameter($this,
'idpentityid', $idp->getEntityId());
1762 $this->
ctrl->setParameter($this,
'saml_idp_id', $idp->getIdpId());
1763 $this->
ctrl->setTargetScript(
'saml.php');
1764 $this->
ctrl->redirect($this,
'doSamlAuthentication');
1765 } elseif ($activeIdps === []) {
1766 $this->
logger->debug(
'Did not find any active IDP, skipp authentication process');
1767 $this->
ctrl->redirect($this,
'showLoginPage');
1769 $this->
logger->debug(
'Found multiple active IPDs, presenting IDP selection...');
1770 $this->showSamlIdpSelection($auth, $activeIdps);
1775 $auth->storeParam(
'idpId', (
int) $request->getQueryParams()[
'saml_idp_id']);
1776 $this->
logger->debug(sprintf(
'Stored relevant IDP id in session: %s', $auth->getParam(
'idpId')));
1779 $auth = $factory->auth();
1781 $this->
logger->debug(
'Checking SAML authentication status...');
1782 $auth->protectResource();
1784 'SAML authentication successful, continuing with ILIAS internal authentication process...'
1787 $idpId = (
int) $auth->getParam(
'idpId');
1791 'Internal SAML IDP id fetched from session: %s',
1798 'No valid internal IDP id found (most probably due to IDP initiated SSO), trying fallback determination...'
1800 $authData = $auth->getAuthDataArray();
1801 if (isset($authData[
'saml:sp:IdP'])) {
1805 'Searching active ILIAS IDP by entity id "%s" results in: %s',
1806 $authData[
'saml:sp:IdP'],
1812 'Could not execute fallback determination, no IDP entity ID found SAML authentication session data'
1817 $target = $auth->popParam(
'target');
1819 $this->
logger->debug(sprintf(
'Retrieved "target" parameter: %s', print_r($target,
true)));
1822 $credentials->initFromRequest();
1825 $provider = $provider_factory->getProviderByAuthMode(
1833 $credentials->setReturnTo($target);
1835 $target = $credentials->getReturnTo();
1842 $frontend = $frontend_factory->getFrontend(
1848 $frontend->authenticate();
1850 switch ($status->getStatus()) {
1852 $this->
logger->debug(
'Authentication successful; Redirecting to starting page.');
1857 $this->
ctrl->redirect($this,
'showAccountMigration');
1861 $this->
mainTemplate->setOnScreenMessage(
'failure', $status->getTranslatedReason(),
true);
1862 $this->
ctrl->redirect($this,
'showLoginPage');
1865 $this->
mainTemplate->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_wrong_login'));
1866 $this->showLoginPage();
1874 $this->
help->setSubScreenId(
'saml_idp_selection');
1876 self::initStartUpTemplate([
'tpl.saml_idp_selection.html',
'components/ILIAS/Saml']);
1878 $this->
ctrl->setTargetScript(
'saml.php');
1880 foreach ($idps as $idp) {
1881 $this->
ctrl->setParameter($this,
'saml_idp_id', $idp->getIdpId());
1882 $this->
ctrl->setParameter($this,
'idpentityid', urlencode($idp->getEntityId()));
1884 $items[] = $this->ui_factory->link()->standard(
1885 $idp->getEntityId(),
1886 $this->ctrl->getLinkTarget($this,
'doSamlAuthentication')
1891 $this->ui_factory->panel()->standard(
1892 $this->
lng->txt(
'auth_saml_idp_selection_table_title'),
1894 $this->ui_factory->messageBox()->info($this->lng->txt(
'auth_saml_idp_selection_table_desc')),
1895 $this->ui_factory->listing()->unordered(
1897 fn($item) => $this->ui_renderer->render($item),
1914 public static function logoutUrl(array $parameters = []): string
1918 $defaults = [
'lang' =>
$DIC->user()->getCurrentLanguage()];
1919 $parameters =
'&' . http_build_query(array_merge($defaults, $parameters));
1921 $DIC->ctrl()->setTargetScript(
'logout.php');
1922 $url =
$DIC->ctrl()->getLinkTargetByClass([self::class],
'doLogout') . $parameters;
1923 $DIC->ctrl()->setTargetScript(
'ilias.php');
Customizing of pimple-DIC for ILIAS.
Builds a Color from either hex- or rgb values.
@phpstan-type PendingRegistrationRecord array{id: string, usr_id: int, reg_hash: string,...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
@ilCtrl_Calls ilAccountRegistrationGUI:
static stripSlashesRecursive($a_data, bool $a_strip_html=true, string $a_allow="")
Auth credentials for lti oauth based authentication.
const int CONTEXT_STANDARD_FORM
Authentication with id and password.
const string MIG_TRIGGER_AUTHMODE
const string MIG_EXTERNAL_ACCOUNT
static getInstance(AuthPageEditorContext $context)
const int STATUS_AUTHENTICATION_FAILED
const int STATUS_CODE_ACTIVATION_REQUIRED
const int STATUS_ACCOUNT_MIGRATION_REQUIRED
const int STATUS_AUTHENTICATED
static getInstance()
Get status instance.
static _getMultipleAuthModeOptions(ilLanguage $lng)
const int AUTH_OPENID_CONNECT
static _hasMultipleAuthenticationMethods()
const int AUTH_PROVIDER_LTI
static _getInstanceByObjId(int $a_obj_id, int $a_usr_id)
special template class to simplify handling of ITX/PEAR
static _isParticipant(int $a_ref_id, int $a_usr_id)
Static function to check if a user is a participant of the container object.
static goToPublicSection()
go to public section
static redirectToStartingPage(string $target='')
static _lookupContObjID(int $a_id)
get learning module id for lm object
static lookupId(string $a_lang_key)
Lookup obj_id of language.
static getLogger(string $a_component_id)
Get component logger.
Component logger with individual log levels by component id.
static getAuthSettingsRefId()
static _registrationEnabled(int $a_obj_id)
Registration enabled? Method is in Access class, since it is needed by Access/ListGUI.
static _isActivated(int $a_obj_id)
Is activated.
static getContentStylePath(int $a_style_id, bool $add_random=true, bool $add_token=true)
get content style path static (to avoid full reading)
static getSyntaxStylePath()
static _isAnonymous(int $usr_id)
setTimeLimitUntil(?int $a_until)
setActive(bool $active, int $owner=0)
set user active state and updates system fields appropriately
static _lookupId(string|array $a_user_str)
setTimeLimitUnlimited(bool $unlimited)
static _lookupLogin(int $a_user_id)
static _lookupType(int $id, bool $reference=false)
static _getAllReferences(int $id)
get all reference ids for object ID
static _lookupObjId(int $ref_id)
const LOGIN_ELEMENT_TYPE_IMG
const LOGIN_ELEMENT_TYPE_TXT
static _existsAndNotEmpty(string $a_parent_type, int $a_id, string $a_lang="-")
checks whether page exists and is not empty (may return true on some empty pages)
static getDefaultMemberRole(int $a_ref_id)
static getCodeValidUntil(string $code)
static useCode(string $code)
static isUnusedCode(string $code)
static applyAccessLimits(ilObjUser $user, string $code)
static applyRoleAssignments(ilObjUser $user, string $code)
Class ilObjAuthSettingsGUI.
static _lookupRegistrationType()
static getActiveIdpList()
static geIdpIdByEntityId(string $entityId)
static get(string $a_var)
static setClosingContext(int $a_context)
set closing context (for statistics)
static set(string $a_var, $a_val)
Set a value.
const int SESSION_CLOSE_USER
@ilCtrl_Calls ilStartUpGUI: ilAccountRegistrationGUI, ilPasswordAssistanceGUI, ilLoginPageGUI,...
showShibbolethLoginForm(string $page_editor_html)
static string $forced_cmd
substituteLoginPageElements( $tpl, string $page_editor_html, string $element_html, string $placeholder, string $fallback_tplvar)
ServerRequestInterface $httpRequest
static logoutUrl(array $parameters=[])
Return the logout URL with a valid CSRF token.
showLoginInformation(string $page_editor_html, ilGlobalTemplateInterface $tpl)
showOpenIdConnectLoginForm(string $page_editor_html)
ilAppEventHandler $eventHandler
doStandardAuthentication()
saniziteArrayElementsTrafo()
const PROP_ACCOUNT_MIGRATION_MIGRATE
showLoginForm(string $page_editor_html, ?ILIAS\UI\Component\Input\Container\Form\Form $form=null)
doOpenIdConnectAuthentication()
static initStartUpTemplate( $a_tmpl, bool $a_show_back=false, bool $a_show_logout=false)
This method enriches the global template with some user interface elements (language selection,...
const PROP_ACCOUNT_MIGRATION_NEW
ilGlobalTemplateInterface $mainTemplate
getAuthPageEditorHtml(AuthPageEditorContext $ipe_context)
ILIAS UI Renderer $ui_renderer
getSafePostCommands()
This method must return a list of safe POST commands.
checkForcedCommand(string $cmd)
static setForcedCommand(string $cmd)
static printToGlobalTemplate($tpl)
__construct(?ilObjUser $user=null, ?ilGlobalTemplateInterface $mainTemplate=null, ?ServerRequestInterface $httpRequest=null)
ilAuthSession $authSession
ILIAS UI Factory $ui_factory
showAccountMigration(?ILIAS\UI\Component\Input\Container\Form\Form $form=null, string $message='')
buildCodeForm(?string $username=null)
showSamlLoginForm(string $page_editor_html)
retrieveMessagesFromSession()
doMigration(array $migration_request_data)
jumpToPasswordAssistance()
getUnsafeGetCommands()
This method must return a list of unsafe GET commands.
RefineryFactory $refinery
showLoginPageOrStartupPage()
showLoginPage(?ILIAS\UI\Component\Input\Container\Form\Form $form=null)
purgePlaceholders(string $page_editor_html)
showSamlIdpSelection(ilSamlAuth $auth, array $idps)
showLegalDocumentsLinks(string $page_editor_html)
showCodeForm(?string $username=null, ?ILIAS\UI\Component\Input\Container\Form\Form $form=null)
const PROP_ACCOUNT_MIGRATION
showRegistrationLinks(string $page_editor_html)
buildAccountMigrationForm()
special template class to simplify handling of ITX/PEAR
static getStartingPointAsUrl()
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
static appendUrlParameterString(string $a_url, string $a_par, bool $xml_style=false)
static redirect(string $a_script)
static setCookie(string $a_cookie_name, string $a_cookie_value='', bool $a_also_set_super_global=true, bool $a_set_cookie_invalid=false)
const MESSAGE_TYPE_QUESTION
const MESSAGE_TYPE_SUCCESS
const MESSAGE_TYPE_FAILURE
An entity that renders components to a string output.
Interface ilAccessHandler This interface combines all available interfaces which can be called via gl...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
doActivationCheck(string $a_permission, string $a_cmd, int $a_ref_id, int $a_user_id, int $a_obj_id, string $a_type)
check for activation and centralized offline status.
doStatusCheck(string $a_permission, string $a_cmd, int $a_ref_id, int $a_user_id, int $a_obj_id, string $a_type)
object type specific check
if(! $DIC->user() ->getId()||!ilLTIConsumerAccess::hasCustomProviderCreationAccess()) $params
static http()
Fetches the global http state from ILIAS.
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.
if(!file_exists('../ilias.ini.php'))