ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilObjAuthSettingsGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
26
34{
35 private const string CMD_SHOW_APACHE_SETTINGS = 'apacheAuthSettings';
36 private const string CMD_SAVE_APACHE_SETTINGS = 'saveApacheSettings';
37 private const string PROP_AUTH_MODE_KIND = 'kind';
38 private const string PROP_AUTH_MODE_SEQUENCE = 'sequence';
39
41
43
44 public function __construct($a_data, int $a_id, bool $a_call_by_reference, bool $a_prepare_output = true)
45 {
46 $this->type = 'auth';
47 parent::__construct($a_data, $a_id, $a_call_by_reference, $a_prepare_output);
48
49 global $DIC;
50 $this->logger = $DIC->logger()->auth();
51
52 $this->lng->loadLanguageModule('registration');
53 $this->lng->loadLanguageModule('auth');
54 $this->lng->loadLanguageModule('content');
55 $this->content_style_gui = $DIC->contentStyle()->gui();
56 }
57
58 public function viewObject(): void
59 {
60 $this->authSettingsObject();
61 }
62
63 private function authSettingsObject(
64 ?ILIAS\UI\Component\Input\Container\Form\Form $auth_mode_determination_form = null,
65 ?ILIAS\UI\Component\Input\Container\Form\Form $registration_role_mapping_form = null
66 ): void {
67 if (!$this->rbac_system->checkAccess('visible,read', $this->object->getRefId())) {
68 $this->ilias->raiseError($this->lng->txt('permission_denied'), $this->ilias->error_obj->MESSAGE);
69 }
70
71 $this->tabs_gui->setTabActive('authentication_settings');
72 $this->setSubTabs('authSettings');
73 $this->tabs_gui->setSubTabActive('auth_settings');
74
75 $generalSettingsTpl = new ilTemplate('tpl.auth_general.html', true, true, 'components/ILIAS/Authentication');
76
77 $generalSettingsTpl->setVariable('FORMACTION', $this->ctrl->getFormAction($this));
78
79 $generalSettingsTpl->setVariable('TXT_AUTH_MODE', $this->lng->txt('auth_mode'));
80 $generalSettingsTpl->setVariable('TXT_AUTH_DEFAULT', $this->lng->txt('default'));
81 $generalSettingsTpl->setVariable('TXT_AUTH_ACTIVE', $this->lng->txt('active'));
82 $generalSettingsTpl->setVariable('TXT_AUTH_NUM_USERS', $this->lng->txt('num_users'));
83
84 $generalSettingsTpl->setVariable('TXT_LOCAL', $this->lng->txt('auth_local'));
85 $generalSettingsTpl->setVariable('TXT_LDAP', $this->lng->txt('auth_ldap'));
86 $generalSettingsTpl->setVariable('TXT_SHIB', $this->lng->txt('auth_shib'));
87
88 $generalSettingsTpl->setVariable('TXT_SCRIPT', $this->lng->txt('auth_script'));
89
90 $generalSettingsTpl->setVariable('TXT_APACHE', $this->lng->txt('auth_apache'));
91
93 $auth_modes = ilAuthUtils::_getAllAuthModes();
94 $valid_modes = [
101 ];
102
103 $icon_ok = $this->ui_renderer->render(
104 $this->ui_factory->symbol()->icon()->custom(
105 ilUtil::getImagePath('standard/icon_ok.svg'),
106 $this->lng->txt('enabled')
107 )
108 );
109 $icon_not_ok = $this->ui_renderer->render(
110 $this->ui_factory->symbol()->icon()->custom(
111 ilUtil::getImagePath('standard/icon_not_ok.svg'),
112 $this->lng->txt('disabled')
113 )
114 );
115
116 $this->logger->debug(print_r($auth_modes, true));
117 foreach ($auth_modes as $mode => $mode_name) {
118 if (!in_array($mode, $valid_modes, true) && !ilLDAPServer::isAuthModeLDAP(
119 (string) $mode
120 ) && !ilSamlIdp::isAuthModeSaml((string) $mode)) {
121 continue;
122 }
123
124 $generalSettingsTpl->setCurrentBlock('auth_mode');
125
126 if (ilLDAPServer::isAuthModeLDAP((string) $mode)) {
128 $generalSettingsTpl->setVariable('AUTH_NAME', $server->getName());
129 $generalSettingsTpl->setVariable('AUTH_ACTIVE', $server->isActive() ? $icon_ok : $icon_not_ok);
130 } elseif (ilSamlIdp::isAuthModeSaml((string) $mode)) {
132 $generalSettingsTpl->setVariable('AUTH_NAME', $idp->getEntityId());
133 $generalSettingsTpl->setVariable('AUTH_ACTIVE', $idp->isActive() ? $icon_ok : $icon_not_ok);
134 } elseif ($mode === ilAuthUtils::AUTH_OPENID_CONNECT) {
135 $generalSettingsTpl->setVariable('AUTH_NAME', $this->lng->txt('auth_' . $mode_name));
136 $generalSettingsTpl->setVariable(
137 'AUTH_ACTIVE',
138 ilOpenIdConnectSettings::getInstance()->getActive() ? $icon_ok : $icon_not_ok
139 );
140 } else {
141 $generalSettingsTpl->setVariable('AUTH_NAME', $this->lng->txt('auth_' . $mode_name));
142 $generalSettingsTpl->setVariable(
143 'AUTH_ACTIVE',
144 $this->ilias->getSetting(
145 $mode_name . '_active'
146 ) || (int) $mode === ilAuthUtils::AUTH_LOCAL ? $icon_ok : $icon_not_ok
147 );
148 }
149
150 $auth_cnt_mode = $auth_cnt[$mode_name] ?? 0;
151 if ($this->settings->get('auth_mode') === (string) $mode) {
152 $generalSettingsTpl->setVariable('AUTH_CHECKED', 'checked="checked"');
153 $auth_cnt_default = $auth_cnt['default'] ?? 0;
154 $generalSettingsTpl->setVariable(
155 'AUTH_USER_NUM',
156 ((int) $auth_cnt_mode + $auth_cnt_default) . ' (' . $this->lng->txt('auth_per_default') .
157 ': ' . $auth_cnt_default . ')'
158 );
159 } else {
160 $generalSettingsTpl->setVariable(
161 'AUTH_USER_NUM',
162 (int) $auth_cnt_mode
163 );
164 }
165 $generalSettingsTpl->setVariable('AUTH_ID', $mode_name);
166 $generalSettingsTpl->setVariable('AUTH_VAL', $mode);
167 $generalSettingsTpl->parseCurrentBlock();
168 }
169
170 $generalSettingsTpl->setVariable('TXT_CONFIGURE', $this->lng->txt('auth_configure'));
171
172 if ($this->rbac_system->checkAccess('write', $this->object->getRefId())) {
173 $generalSettingsTpl->setVariable('TXT_AUTH_REMARK', $this->lng->txt('auth_remark_non_local_auth'));
174 $generalSettingsTpl->setCurrentBlock('auth_mode_submit');
175 $generalSettingsTpl->setVariable('TXT_SUBMIT', $this->lng->txt('save'));
176 $generalSettingsTpl->setVariable('CMD_SUBMIT', 'setAuthMode');
177 $generalSettingsTpl->parseCurrentBlock();
178 }
179
180 $page_content = [
181 $this->ui_factory->panel()->standard(
182 $this->lng->txt('auth_select'),
183 $this->ui_factory->legacy()->content(implode('', [
184 $this->ui_renderer->render($this->ui_factory->messageBox()->info(
185 $this->lng->txt('auth_mode_default_change_info')
186 )),
187 $generalSettingsTpl->get()
188 ])),
189 )
190 ];
191
192 $auth_mode_determination_form = $auth_mode_determination_form ?? $this->buildAuthModeDeterminationForm();
193 if ($auth_mode_determination_form !== null) {
194 $page_content[] = $this->ui_factory->panel()->standard(
195 $this->lng->txt('auth_auth_mode_determination'),
196 $auth_mode_determination_form
197 );
198 }
199
200 $page_content[] = $this->ui_factory->panel()->standard(
201 $this->lng->txt('auth_active_roles'),
202 $registration_role_mapping_form ?? $this->buildRegistrationRoleMappingForm()
203 );
204
205 $this->tpl->setContent(
206 $this->ui_renderer->render($page_content)
207 );
208 }
209
210 private function buildRegistrationRoleMappingForm(): ILIAS\UI\Component\Input\Container\Form\Form
211 {
212 $disabled_fields = !$this->rbac_system->checkAccess('write', $this->object->getRefId());
213
214 $fields = [];
216
217 $excluded_auth_names = ['default', 'saml', 'shibboleth', 'ldap', 'apache', 'ecs', 'openid'];
218 // do not list auth modes with external login screen
219 // even not default, because it can easily be set to
220 // a non-working auth mode
221 $active_auth_modes = array_filter(
223 static fn(string $auth_name): bool => in_array($auth_name, $excluded_auth_names, true),
224 ARRAY_FILTER_USE_KEY
225 );
226
227 foreach ($reg_roles as $role) {
228 $options = [];
229 $value = null;
230 foreach ($active_auth_modes as $auth_name => $auth_key) {
231 if ($auth_name === 'default') {
232 $name = $this->lng->txt('auth_' . $auth_name) . ' (' . $this->lng->txt(
233 'auth_' . ilAuthUtils::_getAuthModeName($auth_key)
234 ) . ')';
235 } elseif ($id = ilLDAPServer::getServerIdByAuthMode((string) $auth_key)) {
237 $name = $server->getName();
238 } elseif ($id = ilSamlIdp::getIdpIdByAuthMode((string) $auth_key)) {
240 $name = $idp->getEntityId();
241 } else {
242 $name = $this->lng->txt('auth_' . $auth_name);
243 }
244
245 $options[$auth_name] = $name;
246
247 if ($role['auth_mode'] === $auth_name) {
248 $value = $auth_name;
249 }
250 }
251
252 if ($options === []) {
253 continue;
254 }
255
256 $value = $value ?? ilAuthUtils::AUTH_LOCAL;
257
258 $fields['r_' . $role['id']] = $this->ui_factory
259 ->input()
260 ->field()
261 ->select(
262 $role['title'],
263 $options,
264 $this->lng->txt('auth_role_auth_mode')
265 )
266 ->withRequired(true)
267 ->withValue($value)
268 ->withDedicatedName('r_' . $role['id'])
269 ->withDisabled($disabled_fields);
270 }
271
272 return $this->ui_factory
273 ->input()
274 ->container()
275 ->form()
276 ->standard($this->ctrl->getFormAction($this, 'updateRegistrationRoleMapping'), $fields)
277 ->withDedicatedName('registration_role_mapping');
278 }
279
280 private function updateRegistrationRoleMappingObject(): void
281 {
282 if (!$this->rbac_system->checkAccess('write', $this->object->getRefId())) {
283 $this->ilias->raiseError($this->lng->txt('permission_denied'), $this->ilias->error_obj->MESSAGE);
284 }
285
286 $form = $this->buildRegistrationRoleMappingForm();
287 $form_valid = false;
288 $form_data = null;
289 if ($this->http->request()->getMethod() === 'POST') {
290 $form = $form->withRequest($this->http->request());
291 $form_data = $form->getData();
292 $form_valid = $form_data !== null;
293 }
294
295 if (!$form_valid) {
296 $this->tpl->setOnScreenMessage(
297 $this->tpl::MESSAGE_TYPE_FAILURE,
298 $this->lng->txt('err_wrong_login')
299 );
300 $this->authSettingsObject(null, $form);
301 return;
302 }
303
304 $f_object = [];
305 foreach ($form_data as $role_id => $auth_mode) {
306 $f_object[substr($role_id, 2)] = $auth_mode;
307 }
309
310 $this->tpl->setOnScreenMessage(
311 $this->tpl::MESSAGE_TYPE_SUCCESS,
312 $this->lng->txt('auth_mode_roles_changed'),
313 true
314 );
315 $this->ctrl->redirect($this, 'authSettings');
316 }
317
318 private function buildAuthModeDeterminationForm(): ?ILIAS\UI\Component\Input\Container\Form\Form
319 {
321 if ($det->getCountActiveAuthModes() <= 1) {
322 return null;
323 }
324
325 $disabled_fields = !$this->rbac_system->checkAccess('write', $this->object->getRefId());
326
327 $automatic_options = [];
328 $counter = 1;
329 $auth_sequenced = $det->getAuthModeSequence();
330 foreach ($auth_sequenced as $auth_mode) {
331 $text = '';
332 switch ($auth_mode) {
333 case ilLDAPServer::isAuthModeLDAP((string) $auth_mode):
334 $auth_id = ilLDAPServer::getServerIdByAuthMode($auth_mode);
336 $text = $server->getName();
337 break;
339 $text = $this->lng->txt('auth_local');
340 break;
342 $text = $this->lng->txt('auth_soap');
343 break;
345 $text = $this->lng->txt('auth_apache');
346 break;
347 default:
348 foreach (ilAuthUtils::getAuthPlugins() as $pl) {
349 $option = $pl->getMultipleAuthModeOptions($auth_mode);
350 $text = $option[$auth_mode]['txt'];
351 }
352 break;
353 }
354
355 $automatic_options['m' . $auth_mode] = $this->ui_factory
356 ->input()
357 ->field()
358 ->numeric($text)
359 ->withDedicatedName('m' . $auth_mode)
360 ->withValue($counter++)
361 ->withDisabled($disabled_fields);
362 }
363
364 $options = [
365 (string) ilAuthModeDetermination::TYPE_MANUAL => $this->ui_factory
366 ->input()
367 ->field()
368 ->group(
369 [],
370 $this->lng->txt('auth_by_user')
371 )
372 ->withDedicatedName((string) ilAuthModeDetermination::TYPE_MANUAL)
373 ->withDisabled($disabled_fields),
374 (string) ilAuthModeDetermination::TYPE_AUTOMATIC => $this->ui_factory
375 ->input()
376 ->field()
377 ->group(
378 $automatic_options,
379 $this->lng->txt('auth_automatic')
380 )
381 ->withDedicatedName((string) ilAuthModeDetermination::TYPE_AUTOMATIC)
382 ->withDisabled($disabled_fields)
383 ];
384
385 $sections = [
386 self::PROP_AUTH_MODE_KIND => $this->ui_factory
387 ->input()
388 ->field()
389 ->switchableGroup(
390 $options,
391 $this->lng->txt('auth_kind_determination'),
392 $this->lng->txt('auth_mode_determination_info')
393 )
394 ->withDedicatedName(self::PROP_AUTH_MODE_KIND)
395 ->withValue((string) $det->getKind())
396 ->withDisabled($disabled_fields)
397 ->withRequired(true)
398 ];
399
400 return $this->ui_factory
401 ->input()
402 ->container()
403 ->form()
404 ->standard($this->ctrl->getFormAction($this, 'updateAuthModeDetermination'), $sections)
405 ->withDedicatedName('auth_mode_determination')
406 ->withAdditionalTransformation(
407 $this->refinery->custom()->transformation(function ($value): array {
408 $auth_mode_kind = (int) ($value[self::PROP_AUTH_MODE_KIND][0] ?? ilAuthModeDetermination::TYPE_MANUAL);
409 $sequence = [];
410 if ($auth_mode_kind === ilAuthModeDetermination::TYPE_AUTOMATIC) {
411 $sequence = (array) ($value[self::PROP_AUTH_MODE_KIND][1] ?? []);
412 }
413
414 $merged_values = array_merge(
415 [
416 self::PROP_AUTH_MODE_KIND => $auth_mode_kind,
417 ],
418 [
419 self::PROP_AUTH_MODE_SEQUENCE => $sequence
420 ]
421 );
422
423 return $merged_values;
424 })
425 );
426 }
427
428 private function updateAuthModeDeterminationObject(): void
429 {
430 if (!$this->rbac_system->checkAccess('write', $this->object->getRefId())) {
431 $this->ilias->raiseError($this->lng->txt('permission_denied'), $this->ilias->error_obj->MESSAGE);
432 }
433
434 $form = $this->buildAuthModeDeterminationForm();
435 if ($form === null) {
436 $this->authSettingsObject();
437 return;
438 }
439
440 $form_valid = false;
441 $form_data = null;
442 if ($this->http->request()->getMethod() === 'POST') {
443 $form = $form->withRequest($this->http->request());
444 $form_data = $form->getData();
445 $form_valid = $form_data !== null;
446 }
447
448 if (!$form_valid) {
449 $this->tpl->setOnScreenMessage(
450 $this->tpl::MESSAGE_TYPE_FAILURE,
451 $this->lng->txt('err_wrong_login')
452 );
453 $this->authSettingsObject($form);
454 return;
455 }
456
458 $kind = (int) $form_data[self::PROP_AUTH_MODE_KIND];
459 $det->setKind($kind);
461 $sequence = $form_data[self::PROP_AUTH_MODE_SEQUENCE];
462 $this->logger->debug('pos mode:' . print_r($sequence, true));
463 asort($sequence, SORT_NUMERIC);
464 $this->logger->debug('pos mode:' . print_r($sequence, true));
465 $counter = 0;
466 $position = [];
467 foreach (array_keys($sequence) as $auth_mode) {
468 $position[$counter++] = substr($auth_mode, 1);
469 }
470 $this->logger->debug('position mode:' . print_r($position, true));
471 $det->setAuthModeSequence($position);
472 }
473 $det->save();
474
475 $this->tpl->setOnScreenMessage(
476 $this->tpl::MESSAGE_TYPE_SUCCESS,
477 $this->lng->txt('settings_saved'),
478 true
479 );
480 $this->ctrl->redirect($this, 'authSettings');
481 }
482
483 public function cancelObject(): void
484 {
485 $this->ctrl->redirect($this, 'authSettings');
486 }
487
488 public function setAuthModeObject(): void
489 {
490 if (!$this->rbac_system->checkAccess('write', $this->object->getRefId())) {
491 $this->ilias->raiseError($this->lng->txt('permission_denied'), $this->ilias->error_obj->MESSAGE);
492 }
493 $this->logger->debug('auth mode available:' . $this->request_wrapper->has('auth_mode'));
494
495 if (!$this->http->wrapper()->post()->has('auth_mode')) {
496 $this->ilias->raiseError($this->lng->txt('auth_err_no_mode_selected'), $this->ilias->error_obj->MESSAGE);
497 }
498 $new_auth_mode = $this->http->wrapper()->post()->retrieve('auth_mode', $this->refinery->to()->string());
499 $this->logger->debug('auth mode:' . $new_auth_mode);
500 $current_auth_mode = $this->settings->get('auth_mode', '');
501 if ($new_auth_mode === $current_auth_mode) {
502 $this->tpl->setOnScreenMessage(
503 'info',
504 $this->lng->txt('auth_mode') . ': ' . $this->getAuthModeTitle() . ' ' . $this->lng->txt(
505 'auth_mode_not_changed'
506 ),
507 true
508 );
509 $this->ctrl->redirect($this, 'authSettings');
510 }
511
512 switch ((int) $new_auth_mode) {
514 break;
515
516 // @fix changed from AUTH_SHIB > is not defined
518 if ($this->object->checkAuthSHIB() !== true) {
519 $this->tpl->setOnScreenMessage('failure', $this->lng->txt('auth_shib_not_configured'), true);
521 $this->getReturnLocation(
522 'authSettings',
523 $this->ctrl->getLinkTargetByClass(
524 ilAuthShibbolethSettingsGUI::class,
525 'settings',
526 '',
527 false,
528 false
529 )
530 )
531 );
532 }
533 break;
534
536 if ($this->object->checkAuthScript() !== true) {
537 $this->tpl->setOnScreenMessage('failure', $this->lng->txt('auth_script_not_configured'), true);
539 $this->getReturnLocation(
540 'authSettings',
541 $this->ctrl->getLinkTarget($this, 'editScript', '', false, false)
542 )
543 );
544 }
545 break;
546 }
547
548 $this->ilias->setSetting('auth_mode', $new_auth_mode);
549
550 $this->tpl->setOnScreenMessage(
551 'success',
552 $this->lng->txt('auth_default_mode_changed_to') . ' ' . $this->getAuthModeTitle(),
553 true
554 );
555 $this->ctrl->redirect($this, 'authSettings');
556 }
557
558 private function buildSOAPForm(
559 string $submit_action
560 ): \ILIAS\UI\Component\Input\Container\Form\Form {
561 $role_list = $this->rbac_review->getRolesByFilter(2, $this->object->getId());
562 $roles = [];
563
564 foreach ($role_list as $role) {
565 $roles[$role['obj_id']] = $role['title'];
566 }
567
568 $active = $this->ui_factory
569 ->input()
570 ->field()
571 ->checkbox($this->lng->txt('active'))
572 ->withValue((bool) $this->settings->get('soap_auth_active', ''));
573
574 $server = $this->ui_factory
575 ->input()
576 ->field()
577 ->text(
578 $this->lng->txt('server'),
579 $this->lng->txt('auth_soap_server_desc')
580 )
581 ->withMaxLength(256)
582 ->withRequired(true)
583 ->withValue($this->settings->get('soap_auth_server', ''));
584
585 $port = $this->ui_factory
586 ->input()
587 ->field()
588 ->numeric(
589 $this->lng->txt('port'),
590 $this->lng->txt('auth_soap_port_desc')
591 )
592 ->withAdditionalTransformation($this->refinery->int()->isGreaterThan(0))
593 ->withAdditionalTransformation(
594 $this->refinery->int()->isLessThan(65536)
595 )
596 ->withValue((int) $this->settings->get('soap_auth_port', '0'));
597
598 $use_https = $this->ui_factory
599 ->input()
600 ->field()
601 ->checkbox($this->lng->txt('auth_soap_use_https'))
602 ->withValue((bool) $this->settings->get('soap_auth_use_https', ''));
603
604 $uri = $this->ui_factory
605 ->input()
606 ->field()
607 ->text(
608 $this->lng->txt('uri'),
609 $this->lng->txt('auth_soap_uri_desc')
610 )
611 ->withMaxLength(256)
612 ->withValue($this->settings->get('soap_auth_uri', ''));
613
614 $namespace = $this->ui_factory
615 ->input()
616 ->field()
617 ->text(
618 $this->lng->txt('auth_soap_namespace'),
619 $this->lng->txt('auth_soap_namespace_desc')
620 )
621 ->withMaxLength(256)
622 ->withValue($this->settings->get('soap_auth_namespace', ''));
623
624 $dotnet = $this->ui_factory
625 ->input()
626 ->field()
627 ->checkbox($this->lng->txt('auth_soap_use_dotnet'))
628 ->withValue((bool) $this->settings->get('soap_auth_use_dotnet', ''));
629
630 $createuser = $this->ui_factory
631 ->input()
632 ->field()
633 ->checkbox(
634 $this->lng->txt('auth_create_users'),
635 $this->lng->txt('auth_soap_create_users_desc')
636 )
637 ->withValue((bool) $this->settings->get('soap_auth_create_users', ''));
638
639 $sendmail = $this->ui_factory
640 ->input()
641 ->field()
642 ->checkbox(
643 $this->lng->txt('user_send_new_account_mail'),
644 $this->lng->txt('auth_new_account_mail_desc')
645 )
646 ->withValue((bool) $this->settings->get('soap_auth_account_mail', ''));
647
648 $defaultrole = $this->ui_factory
649 ->input()
650 ->field()
651 ->select(
652 $this->lng->txt('auth_user_default_role'),
653 $roles,
654 $this->lng->txt('auth_soap_user_default_role_desc')
655 )
656 ->withValue($this->settings->get('soap_auth_user_default_role', '4'))
657 ->withAdditionalTransformation($this->refinery->int()->isGreaterThan(0));
658
659 $allowlocal = $this->ui_factory
660 ->input()
661 ->field()
662 ->checkbox(
663 $this->lng->txt('auth_allow_local'),
664 $this->lng->txt('auth_soap_allow_local_desc')
665 )
666 ->withValue((bool) $this->settings->get('soap_auth_user_default_role', ''));
667
668 $form = $this->ui_factory->input()->container()->form()->standard(
669 $submit_action,
670 [
671 'active' => $active,
672 'server' => $server,
673 'port' => $port,
674 'use_https' => $use_https,
675 'uri' => $uri,
676 'namespace' => $namespace,
677 'dotnet' => $dotnet,
678 'createuser' => $createuser,
679 'sendmail' => $sendmail,
680 'defaultrole' => $defaultrole,
681 'allowlocal' => $allowlocal
682 ]
683 );
684 return $form;
685 }
686
687 private function buildSOAPTestForm(
688 string $submit_action
689 ): \ILIAS\UI\Component\Input\Container\Form\Form {
690 $ext_uid = $this->ui_factory->input()->field()->text(
691 'ext_uid'
692 );
693 $soap_pw = $this->ui_factory->input()->field()->text(
694 'soap_pw'
695 );
696 $new_user = $this->ui_factory->input()->field()
697 ->checkbox('new_user');
698 return $this->ui_factory->input()->container()->form()->standard(
699 $submit_action,
700 [
701 'ext_uid' => $ext_uid,
702 'soap_pw' => $soap_pw,
703 'new_user' => $new_user
704 ]
705 )->withSubmitLabel('Send');
706 }
707
708 public function editSOAPObject(): void
709 {
710 if (!$this->rbac_system->checkAccess('read', $this->object->getRefId())) {
711 $this->ilias->raiseError($this->lng->txt('permission_denied'), $this->ilias->error_obj->MESSAGE);
712 }
713
714 $soap_form = $this->buildSOAPForm($this->ctrl->getFormAction($this, 'saveSOAP'));
715 $test_form = $this->buildSOAPTestForm($this->ctrl->getFormAction($this, 'testSoapAuthConnection'));
716
717 $this->tabs_gui->setTabActive('auth_soap');
718 $panel = $this->ui_factory->panel()->standard('SOAP', [$soap_form, $test_form]);
719 $this->tpl->setContent($this->ui_renderer->render($panel));
720 }
721
722 public function testSoapAuthConnectionObject(): void
723 {
724 if (!$this->rbac_system->checkAccess('read', $this->object->getRefId())) {
725 $this->ilias->raiseError($this->lng->txt('permission_denied'), $this->ilias->error_obj->MESSAGE);
726 }
727
728 $soap_form = $this->buildSOAPForm($this->ctrl->getFormAction($this, 'saveSOAP'));
729 $test_form = $this->buildSOAPTestForm($this->ctrl->getFormAction($this, 'testSoapAuthConnection'));
730 $panel_content = [$soap_form, $test_form];
731 if ($this->request->getMethod() === 'POST') {
732 $test_form = $test_form->withRequest($this->request);
733 $result = $test_form->getData();
734 if ($result !== null) {
735 $panel_content[] = $this->ui_factory->legacy()->content(
736 ilSOAPAuth::testConnection($result['ext_uid'], $result['soap_pw'], $result['new_user'])
737 );
738 }
739 }
740 $this->tabs_gui->setTabActive('auth_soap');
741 $panel = $this->ui_factory->panel()->standard('SOAP', $panel_content);
742 $this->tpl->setContent($this->ui_renderer->render($panel));
743 }
744
745 public function saveSOAPObject(): void
746 {
747 if (!$this->rbac_system->checkAccess('write', $this->object->getRefId())) {
748 $this->ilias->raiseError($this->lng->txt('permission_denied'), $this->ilias->error_obj->MESSAGE);
749 }
750
751 $soap_form = $this->buildSOAPForm($this->ctrl->getFormAction($this, 'saveSOAP'));
752 $test_form = $this->buildSOAPTestForm($this->ctrl->getFormAction($this, 'testSoapAuthConnection'));
753 if ($this->request->getMethod() === 'POST') {
754 $soap_form = $soap_form->withRequest($this->request);
755 $result = $soap_form->getData();
756 if ($result !== null) {
757 $this->settings->set('soap_auth_active', (string) $result['active']);
758 $this->settings->set('soap_auth_server', $result['server']);
759 $this->settings->set('soap_auth_port', (string) $result['port']);
760 $this->settings->set('soap_auth_use_https', (string) $result['use_https']);
761 $this->settings->set('soap_auth_uri', $result['uri']);
762 $this->settings->set('soap_auth_namespace', $result['namespace']);
763 $this->settings->set('soap_auth_use_dotnet', (string) $result['dotnet']);
764 $this->settings->set('soap_auth_create_users', (string) $result['createuser']);
765 $this->settings->set('soap_auth_account_mail', (string) $result['sendmail']);
766 $this->settings->set('soap_auth_user_default_role', (string) $result['defaultrole']);
767 $this->settings->set('soap_auth_allow_local', (string) $result['allowlocal']);
768
769 $this->tpl->setOnScreenMessage('success', $this->lng->txt('auth_soap_settings_saved'), true);
770 $this->logger->info('data' . print_r($result, true));
771 $this->ctrl->redirect($this, 'editSOAP');
772 }
773 }
774
775 $this->tabs_gui->setTabActive('auth_soap');
776 $panel = $this->ui_factory->panel()->standard('SOAP', [$soap_form, $test_form]);
777 $this->tpl->setContent($this->ui_renderer->render($panel));
778 }
779
780 public function editScriptObject(): void
781 {
782 if (!$this->rbac_system->checkAccess('write', $this->object->getRefId())) {
783 $this->ilias->raiseError($this->lng->txt('permission_denied'), $this->ilias->error_obj->MESSAGE);
784 }
785
786 if ($_SESSION['error_post_vars']) {
787 $this->tpl->setVariable('AUTH_SCRIPT_NAME', $_SESSION['error_post_vars']['auth_script']['name']);
788 } else {
789 $settings = $this->ilias->getAllSettings();
790
791 $this->tpl->setVariable('AUTH_SCRIPT_NAME', $settings['auth_script_name']);
792 }
793
794 $this->tabs_gui->setTabActive('auth_script');
795
796 $this->tpl->addBlockFile(
797 'ADM_CONTENT',
798 'adm_content',
799 'tpl.auth_script.html',
800 'components/ILIAS/Authentication'
801 );
802
803 $this->tpl->setVariable('FORMACTION', $this->ctrl->getFormAction($this));
804 $this->tpl->setVariable('COLSPAN', 3);
805 $this->tpl->setVariable('TXT_AUTH_SCRIPT_TITLE', $this->lng->txt('auth_script_configure'));
806 $this->tpl->setVariable('TXT_OPTIONS', $this->lng->txt('options'));
807 $this->tpl->setVariable('TXT_AUTH_SCRIPT_NAME', $this->lng->txt('auth_script_name'));
808
809 $this->tpl->setVariable('TXT_REQUIRED_FLD', $this->lng->txt('required_field'));
810 $this->tpl->setVariable('TXT_CANCEL', $this->lng->txt('cancel'));
811 $this->tpl->setVariable('TXT_SUBMIT', $this->lng->txt('save'));
812 $this->tpl->setVariable('CMD_SUBMIT', 'saveScript');
813 }
814
815 public function saveScriptObject(): void
816 {
817 if (!$_POST['auth_script']['name']) {
818 $this->ilias->raiseError($this->lng->txt('fill_out_all_required_fields'), $this->ilias->error_obj->MESSAGE);
819 }
820
821 $this->ilias->setSetting('auth_script_name', $_POST['auth_script']['name']);
822 $this->ilias->setSetting('auth_mode', (string) ilAuthUtils::AUTH_SCRIPT);
823
824 $this->tpl->setOnScreenMessage(
825 'success',
826 $this->lng->txt('auth_mode_changed_to') . ' ' . $this->getAuthModeTitle(),
827 true
828 );
829 $this->ctrl->redirect($this, 'editScript');
830 }
831
832 private function getAuthModeTitle(): string
833 {
834 return match ((int) $this->ilias->getSetting('auth_mode')) {
835 ilAuthUtils::AUTH_LOCAL => $this->lng->txt('auth_local'),
836 ilAuthUtils::AUTH_LDAP => $this->lng->txt('auth_ldap'),
837 ilAuthUtils::AUTH_SHIBBOLETH => $this->lng->txt('auth_shib'),
838 ilAuthUtils::AUTH_SAML => $this->lng->txt('auth_saml'),
839 ilAuthUtils::AUTH_SCRIPT => $this->lng->txt('auth_script'),
840 ilAuthUtils::AUTH_APACHE => $this->lng->txt('auth_apache'),
841 default => $this->lng->txt('unknown'),
842 };
843 }
844
845 public function executeCommand(): void
846 {
847 $next_class = $this->ctrl->getNextClass($this) ?? '';
848 $cmd = $this->ctrl->getCmd() ?? '';
849 $this->prepareOutput();
850
851 if (!$this->rbac_system->checkAccess('visible,read', $this->object->getRefId())) {
852 $this->error->raiseError($this->lng->txt('msg_no_perm_read'), $this->error->WARNING);
853 }
854
855 switch ($next_class) {
856 case 'ilopenidconnectsettingsgui':
857 $this->tabs_gui->activateTab('auth_oidconnect');
858
859 $oid = new ilOpenIdConnectSettingsGUI($this->object->getRefId());
860 $this->ctrl->forwardCommand($oid);
861 break;
862
863 case 'ilsamlsettingsgui':
864 $this->tabs_gui->setTabActive('auth_saml');
865
866 $os = new ilSamlSettingsGUI($this->object->getRefId());
867 $this->ctrl->forwardCommand($os);
868 break;
869
870 case 'ilregistrationsettingsgui':
871 $this->tabs_gui->setTabActive('registration_settings');
872
873 $registration_gui = new ilRegistrationSettingsGUI();
874 $this->ctrl->forwardCommand($registration_gui);
875 break;
876
877 case 'ilpermissiongui':
878 $this->tabs_gui->setTabActive('perm_settings');
879
880 $perm_gui = new ilPermissionGUI($this);
881 $this->ctrl->forwardCommand($perm_gui);
882 break;
883
884 case 'illdapsettingsgui':
885 $this->tabs_gui->setTabActive('auth_ldap');
886
887 $ldap_settings_gui = new ilLDAPSettingsGUI($this->object->getRefId());
888 $this->ctrl->forwardCommand($ldap_settings_gui);
889 break;
890
891 case 'ilauthshibbolethsettingsgui':
892 $this->tabs_gui->setTabActive('auth_shib');
893
894 $shib_settings_gui = new ilAuthShibbolethSettingsGUI($this->object->getRefId());
895 $this->ctrl->forwardCommand($shib_settings_gui);
896 break;
897
898 case strtolower(ilAuthPageEditorGUI::class):
899 $this->setSubTabs('authSettings');
900 $this->tabs_gui->setTabActive('authentication_settings');
901 $this->tabs_gui->setSubTabActive('auth_login_editor');
902
903 $lpe = new ilAuthPageEditorGUI($this->object->getRefId());
904 $this->ctrl->forwardCommand($lpe);
905 break;
906
907 case strtolower(ilObjectContentStyleSettingsGUI::class):
908 $this->checkPermission('write');
909 $this->setTitleAndDescription();
910 $this->setSubTabs('authSettings');
911 $this->tabs_gui->activateTab('authentication_settings');
912 $this->tabs_gui->activateSubTab('style');
913
914 $settings_gui = $this->content_style_gui
915 ->objectSettingsGUIForRefId(
916 null,
917 $this->object->getRefId()
918 );
919 $this->ctrl->forwardCommand($settings_gui);
920 break;
921
922 case strtolower(ilAuthLogoutBehaviourGUI::class):
923 $this->setSubTabs('authSettings');
924 $this->tabs_gui->setTabActive('authentication_settings');
925 $this->tabs_gui->setSubTabActive('logout_behaviour');
926
927 $gui = new ilAuthLogoutBehaviourGUI();
928 $this->ctrl->forwardCommand($gui);
929 break;
930
931 default:
932 if (!$cmd) {
933 $cmd = 'authSettings';
934 }
935 $cmd .= 'Object';
936 $this->$cmd();
937
938 break;
939 }
940 }
941
942 public function getAdminTabs(): void
943 {
944 $this->getTabs();
945 }
946
947 protected function getTabs(): void
948 {
949 $this->ctrl->setParameter($this, 'ref_id', $this->object->getRefId());
950
951 if ($this->rbac_system->checkAccess('visible,read', $this->object->getRefId())) {
952 $this->tabs_gui->addTarget(
953 'authentication_settings',
954 $this->ctrl->getLinkTarget($this, 'authSettings'),
955 '',
956 '',
957 ''
958 );
959
960 $this->tabs_gui->addTarget(
961 'registration_settings',
962 $this->ctrl->getLinkTargetByClass('ilregistrationsettingsgui', 'view')
963 );
964
965 $this->tabs_gui->addTarget(
966 'auth_ldap',
967 $this->ctrl->getLinkTargetByClass('illdapsettingsgui', 'serverList'),
968 '',
969 '',
970 ''
971 );
972
973 $this->tabs_gui->addTarget(
974 'auth_shib',
975 $this->ctrl->getLinkTargetByClass('ilauthshibbolethsettingsgui', 'settings')
976 );
977
978 $this->tabs_gui->addTarget(
979 'auth_soap',
980 $this->ctrl->getLinkTarget($this, 'editSOAP'),
981 '',
982 '',
983 ''
984 );
985
986 $this->tabs_gui->addTarget(
987 'apache_auth_settings',
988 $this->ctrl->getLinkTarget($this, self::CMD_SHOW_APACHE_SETTINGS),
989 '',
990 '',
991 ''
992 );
993
994 $this->tabs_gui->addTarget(
995 'auth_saml',
996 $this->ctrl->getLinkTargetByClass('ilsamlsettingsgui', ilSamlSettingsGUI::DEFAULT_CMD),
997 '',
998 '',
999 ''
1000 );
1001
1002 $this->tabs_gui->addTab(
1003 'auth_oidconnect',
1004 $this->lng->txt('auth_oidconnect'),
1005 $this->ctrl->getLinkTargetByClass('ilopenidconnectsettingsgui')
1006 );
1007 }
1008
1009 if ($this->rbac_system->checkAccess('edit_permission', $this->object->getRefId())) {
1010 $this->tabs_gui->addTarget(
1011 'perm_settings',
1012 $this->ctrl->getLinkTargetByClass([get_class($this), 'ilpermissiongui'], 'perm'),
1013 ['perm', 'info', 'owner'],
1014 'ilpermissiongui'
1015 );
1016 }
1017 }
1018
1019 public function setSubTabs(string $a_tab): void
1020 {
1021 $this->lng->loadLanguageModule('auth');
1022
1023 if ($a_tab === 'authSettings' && $this->access->checkAccess('write', '', $this->object->getRefId())) {
1024 $this->tabs_gui->addSubTabTarget(
1025 'auth_settings',
1026 $this->ctrl->getLinkTarget($this, 'authSettings'),
1027 ''
1028 );
1029
1030 foreach (AuthPageEditorContext::cases() as $auth_ipe_context) {
1031 $this->ctrl->setParameterByClass(
1032 ilAuthPageEditorGUI::class,
1034 $auth_ipe_context->value
1035 );
1036 $this->tabs_gui->addSubTabTarget(
1037 $auth_ipe_context->tabIdentifier(),
1038 $this->ctrl->getLinkTargetByClass(
1039 ilAuthPageEditorGUI::class,
1041 )
1042 );
1043 $this->ctrl->setParameterByClass(
1044 ilAuthPageEditorGUI::class,
1046 null
1047 );
1048 }
1049
1050 $this->tabs_gui->addSubTabTarget(
1051 'logout_behaviour',
1052 $this->ctrl->getLinkTargetByClass(ilAuthLogoutBehaviourGUI::class, ''),
1053 ''
1054 );
1055
1056 $this->tabs_gui->addSubTab(
1057 'style',
1058 $this->lng->txt('cont_style'),
1059 $this->ctrl->getLinkTargetByClass(ilObjectContentStyleSettingsGUI::class)
1060 );
1061 }
1062 }
1063
1064 public function apacheAuthSettingsObject(?StandardForm $form = null): void
1065 {
1066 $this->tabs_gui->setTabActive('apache_auth_settings');
1067
1068 if (!$form) {
1069 $settings = new ilSetting('apache_auth');
1070 $settingsMap = $settings->getAll();
1071
1072 $path = ILIAS_DATA_DIR . '/' . CLIENT_ID . '/apache_auth_allowed_domains.txt';
1073 if (file_exists($path) && is_readable($path)) {
1074 $settingsMap['apache_auth_domains'] = file_get_contents($path);
1075 }
1076
1077 $form = (new ApacheAuthSettingsForm(
1078 $this->ref_id,
1079 $this,
1080 self::CMD_SHOW_APACHE_SETTINGS,
1081 self::CMD_SAVE_APACHE_SETTINGS,
1082 $settingsMap
1083 ))->buildForm();
1084
1085 }
1086
1087 $this->tpl->setContent($this->ui_renderer->render([
1088 $this->ui_factory->item()->standard($this->lng->txt('apache_settings')),
1089 $form
1090 ]));
1091 }
1092
1093 public function saveApacheSettingsObject(): void
1094 {
1095 $form = (new ApacheAuthSettingsForm(
1096 $this->ref_id,
1097 $this,
1098 self::CMD_SHOW_APACHE_SETTINGS,
1099 self::CMD_SAVE_APACHE_SETTINGS
1100 ))->buildForm()->withRequest($this->http->request());
1101 if (!$form->getError()) {
1102 $data = $form->getData();
1103
1104 $settings = new ilSetting('apache_auth');
1105
1106 $fields = [
1107 'apache_auth_indicator_name',
1108 'apache_auth_indicator_value',
1109 'apache_enable_auth',
1110 'apache_enable_local',
1111 'apache_local_autocreate',
1112 'apache_enable_ldap',
1113 'apache_auth_username_config_type',
1114 'apache_auth_username_direct_mapping_fieldname',
1115 'apache_default_role',
1116 'apache_auth_target_override_login_page',
1117 'apache_auth_enable_override_login_page',
1118 'apache_auth_authenticate_on_login_page',
1119 'apache_ldap_sid'
1120 ];
1121
1122 foreach ($fields as $field) {
1123 $value = match ($field) {
1124 'apache_enable_auth',
1125 'apache_auth_enable_override_login_page',
1126 'apache_auth_username_config',
1127 'apache_auth_security',
1128 'apache_enable_ldap' => (bool) ($data[$field] ?? false),
1129 'apache_auth_username_config_type' => $data['apache_auth_username_config'][$field][0] ?? 1,
1130 'apache_auth_target_override_login_page' => $data['apache_auth_enable_override_login_page'][$field] ?? '',
1131 'apache_auth_username_direct_mapping_fieldname' => $data['apache_auth_username_config']['apache_auth_username_config_type'][1][$field] ?? '',
1132 'apache_auth_domains' => $data['apache_auth_security'][$field] ?? '',
1133 'apache_local_autocreate' => (bool) ($data['apache_enable_auth'][$field] ?? false),
1134 'apache_default_role' => $data['apache_enable_auth']['apache_local_autocreate'][$field] ?? 4,
1135 'apache_ldap_sid' => $data['apache_enable_ldap'][$field] ?? '',
1136 default => $data[$field],
1137 };
1138
1139 $settings->set(
1140 $field,
1141 ilUtil::stripSlashes(trim((string) ($value === false ? '0' : $value)))
1142 );
1143 }
1144
1145 if ($data[$field] ?? false) {
1146 $this->ilias->setSetting('apache_active', '1');
1147 } else {
1148 $this->ilias->setSetting('apache_active', '0');
1149 if ($this->ilias->getSetting('auth_mode', '0') === ilAuthUtils::AUTH_APACHE) {
1150 $this->ilias->setSetting('auth_mode', (string) ilAuthUtils::AUTH_LOCAL);
1151 }
1152 }
1153
1154 $allowed_domains = $this->validateApacheAuthAllowedDomains($data['apache_auth_security']['apache_auth_domains'] ?? '');
1155 file_put_contents(ILIAS_DATA_DIR . '/' . CLIENT_ID . '/apache_auth_allowed_domains.txt', $allowed_domains);
1156
1157 $this->tpl->setOnScreenMessage(
1158 $this->tpl::MESSAGE_TYPE_SUCCESS,
1159 $this->lng->txt('apache_settings_changed_success'),
1160 true
1161 );
1162 $this->ctrl->redirect($this, self::CMD_SHOW_APACHE_SETTINGS);
1163 }
1164
1165 $this->ctrl->redirect($this, self::CMD_SHOW_APACHE_SETTINGS);
1166 }
1167
1168 private function validateApacheAuthAllowedDomains(string $text): string
1169 {
1170 return implode("\n", preg_split("/[\r\n]+/", $text));
1171 }
1172
1173 public function registrationSettingsObject(): void
1174 {
1175 $registration_gui = new ilRegistrationSettingsGUI();
1176 $this->ctrl->redirect($registration_gui);
1177 }
1178}
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
Facade for consumer gui interface.
error(string $a_errmsg)
@ilCtrl_isCalledBy ilAuthLogoutBehaviourGUI: ilObjAuthSettingsGUI @ilCtrl_Calls ilAuthLogoutBehaviour...
@ilCtrl_isCalledBy ilAuthPageEditorGUI: ilObjAuthSettingsGUI @ilCtrl_Calls ilAuthPageEditorGUI: ilLog...
final const string CONTEXT_HTTP_PARAM
final const string DEFAULT_COMMAND
Class ilAuthShibbolethSettingsGUI.
const int AUTH_SHIBBOLETH
static _getActiveAuthModes()
const int AUTH_LOCAL
const int AUTH_LDAP
const int AUTH_SAML
const int AUTH_APACHE
static getAuthPlugins()
const int AUTH_SOAP
const int AUTH_SCRIPT
const int AUTH_OPENID_CONNECT
static _getAllAuthModes()
static _getAuthModeName($a_auth_key)
static getInstanceByServerId(int $a_server_id)
Get instance by server id.
static getServerIdByAuthMode(string $a_auth_mode)
Get auth id by auth mode.
static isAuthModeLDAP(string $a_auth_mode)
Check if user auth mode is LDAP.
Component logger with individual log levels by component id.
@ilCtrl_Calls ilObjAuthSettingsGUI: ilPermissionGUI, ilRegistrationSettingsGUI, ilLDAPSettingsGUI @il...
getAdminTabs()
administration tabs show only permissions and trash folder
buildSOAPTestForm(string $submit_action)
apacheAuthSettingsObject(?StandardForm $form=null)
__construct($a_data, int $a_id, bool $a_call_by_reference, bool $a_prepare_output=true)
cancelObject()
cancel action and go back to previous page
viewObject()
viewObject container presentation for "administration -> repository, trash, permissions"
getTabs()
@abstract overwrite in derived GUI class of your object type
buildSOAPForm(string $submit_action)
authSettingsObject(?ILIAS\UI\Component\Input\Container\Form\Form $auth_mode_determination_form=null, ?ILIAS\UI\Component\Input\Container\Form\Form $registration_role_mapping_form=null)
static _updateAuthMode(array $a_roles)
static _lookupRegisterAllowed()
get all roles that are activated in user registration
static _getNumberOfUsersPerAuthMode()
get number of users per auth mode
Class ilObjectGUI Basic methods of all Output classes.
Class ilRegistrationSettingsGUI.
static getIdpIdByAuthMode(string $a_auth_mode)
static isAuthModeSaml(string $a_auth_mode)
static getInstanceByIdpId(int $a_idp_id)
ILIAS Setting Class.
special template class to simplify handling of ITX/PEAR
static getImagePath(string $image_name, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory)
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
static redirect(string $a_script)
const CLIENT_ID
Definition: constants.php:41
const ILIAS_DATA_DIR
Definition: constants.php:44
$soap_pw
$ext_uid
if($err=$client->getError()) $namespace
$new_user
This describes a standard form.
Definition: Standard.php:29
$_POST['cmd']
Definition: lti.php:27
$path
Definition: ltiservices.php:30
static http()
Fetches the global http state from ILIAS.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.
Class ilObjForumAdministration.
if(!file_exists('../ilias.ini.php'))
global $DIC
Definition: shib_login.php:26
$server
Definition: shib_login.php:28
$counter