diff --git a/web/profiles/custom/os2loop/modules/os2loop_user_login/README.md b/web/profiles/custom/os2loop/modules/os2loop_user_login/README.md index 91d1b03e9..686b331a4 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_user_login/README.md +++ b/web/profiles/custom/os2loop/modules/os2loop_user_login/README.md @@ -72,8 +72,8 @@ $config['openid_connect.settings']['userinfo_mappings']['os2loop_user_place'] = ### IdP configuration -Your identity provider must allow `https://«OS2Loop -url»/openid-connect/generic` as a valid return url. +Your identity provider must allow `https://«OS2Loop url»/openid-connect/generic` +as a valid return url. ```php // web/sites/*/settings.local.php diff --git a/web/profiles/custom/os2loop/modules/os2loop_user_login/os2loop_user_login.module b/web/profiles/custom/os2loop/modules/os2loop_user_login/os2loop_user_login.module index bec8fb620..a78e5de12 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_user_login/os2loop_user_login.module +++ b/web/profiles/custom/os2loop/modules/os2loop_user_login/os2loop_user_login.module @@ -29,10 +29,19 @@ function os2loop_user_login_menu_local_tasks_alter(&$data, $route_name) { /** * Implements hook_user_login(). */ -function os2loop_user_user_login(UserInterface $account) { +function os2loop_user_login_user_login(UserInterface $account) { Drupal::service('os2loop_user_login.helper')->userLogin($account); } +/** + * Implements hook_preprocess_block(). + * + * @see \Drupal\os2loop_user_login\Helper\Helper::preprocessBlock() + */ +function os2loop_user_login_preprocess_block(array &$variables) { + Drupal::service('os2loop_user_login.helper')->preprocessBlock($variables); +} + /** * Implements hook_openid_connect_userinfo_alter(). */ diff --git a/web/profiles/custom/os2loop/modules/os2loop_user_login/src/Form/SettingsForm.php b/web/profiles/custom/os2loop/modules/os2loop_user_login/src/Form/SettingsForm.php index feae4cc6b..b77d03340 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_user_login/src/Form/SettingsForm.php +++ b/web/profiles/custom/os2loop/modules/os2loop_user_login/src/Form/SettingsForm.php @@ -108,6 +108,21 @@ public function buildForm(array $form, FormStateInterface $form_state) { ), ]; + $options = []; + $options['oidc'] = $this->t('OpenID Connect'); + // @todo handle SAML + // $options['saml'] = $this->t('SAML'); + if (!empty($options)) { + $form['default_login_method'] = [ + '#type' => 'select', + '#title' => $this->t('Default login method'), + '#options' => $options, + '#empty_value' => '', + '#default_value' => $config->get('default_login_method'), + '#description' => $this->t('The default login method to use. If specified, anonymous users will automatically be logged id with this method.'), + ]; + } + return parent::buildForm($form, $form_state); } @@ -119,6 +134,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) { ->set('show_drupal_login', $form_state->getValue('show_drupal_login')) ->set('show_oidc_login', $form_state->getValue('show_oidc_login')) ->set('show_saml_login', $form_state->getValue('show_saml_login')) + ->set('default_login_method', $form_state->getValue('default_login_method')) ->save(); drupal_flush_all_caches(); diff --git a/web/profiles/custom/os2loop/modules/os2loop_user_login/src/Helper/Helper.php b/web/profiles/custom/os2loop/modules/os2loop_user_login/src/Helper/Helper.php index 0862c5f3c..39e07b7d1 100644 --- a/web/profiles/custom/os2loop/modules/os2loop_user_login/src/Helper/Helper.php +++ b/web/profiles/custom/os2loop/modules/os2loop_user_login/src/Helper/Helper.php @@ -120,6 +120,24 @@ public function alterForm(&$form, FormStateInterface $form_state, $form_id) { } } + /** + * Implements hook_preprocess_block(). + */ + public function preprocessBlock(array &$variables) { + if ('userlogin' === ($variables['elements']['#id'] ?? NULL)) { + $defaultLoginMethod = $this->config->get('default_login_method'); + switch ($defaultLoginMethod) { + case 'oidc': + $variables['default_login_form_id'] = 'openid-connect-login-form'; + break; + + case 'saml': + // @todo Handle SAML redirect + break; + } + } + } + /** * Remove "Connected accounts" tab on user profile and edit form. * diff --git a/web/profiles/custom/os2loop/themes/os2loop_theme/templates/block/block--user-login-block.html.twig b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/block/block--user-login-block.html.twig index 84d55a13a..479b23ba1 100644 --- a/web/profiles/custom/os2loop/themes/os2loop_theme/templates/block/block--user-login-block.html.twig +++ b/web/profiles/custom/os2loop/themes/os2loop_theme/templates/block/block--user-login-block.html.twig @@ -38,3 +38,15 @@ {{ content|without('user_links') }} {% endblock %} + +{# Check for default login form and submit if found. #} +{% if default_login_form_id|default(null) %} + +{% endif %}