You are here

function saml_sp_drupal_login_form_user_login_form_alter in SAML Service Provider 4.x

Same name and namespace in other branches
  1. 8.3 modules/saml_sp_drupal_login/saml_sp_drupal_login.module \saml_sp_drupal_login_form_user_login_form_alter()
  2. 8.2 modules/saml_sp_drupal_login/saml_sp_drupal_login.module \saml_sp_drupal_login_form_user_login_form_alter()
  3. 3.x modules/saml_sp_drupal_login/saml_sp_drupal_login.module \saml_sp_drupal_login_form_user_login_form_alter()

Implements hook_form_FORM_ID_alter().

File

modules/saml_sp_drupal_login/saml_sp_drupal_login.module, line 45
SAML Drupal Login.

Code

function saml_sp_drupal_login_form_user_login_form_alter(&$form, $form_state, $form_id) {
  $config = \Drupal::config('saml_sp_drupal_login.config');
  $idps = $config
    ->get('idp');
  $enabled_idps = [];
  $url_options = [];
  if (isset($_GET['returnTo'])) {
    $url_options['query']['returnTo'] = $_GET['returnTo'];
  }
  elseif (isset($_GET['destination'])) {
    $url_options['query']['returnTo'] = $_GET['destination'];
  }
  if (!empty($idps)) {
    foreach ($idps as $key => $value) {
      if ($value) {
        $enabled_idps[$key] = $key;
      }
    }
  }
  if (empty($enabled_idps)) {

    // There are no enabled IdPs, so we aren't doing anything to the form.
    return;
  }
  if ($config
    ->get('force_saml_only')) {

    // Disable caching of the login page.
    \Drupal::service('page_cache_kill_switch')
      ->trigger();

    // Only SAML logins are accepted, so don't show the form.
    foreach (Element::children($form) as $key) {
      $form[$key]['#access'] = FALSE;
    }
    if (count($enabled_idps) == 1) {

      // There is only one IdP so redirect to its login page to remove one step.
      $redirect_url = Url::fromRoute('saml_sp_drupal_login.login', [
        'idp' => array_shift($enabled_idps),
      ], $url_options);
      $response = new RedirectResponse($redirect_url
        ->toString());
      $response
        ->send();
    }
  }
  $idps = saml_sp__load_all_idps();
  $links = [];
  foreach ($enabled_idps as $value) {
    if (empty($idps[$value])) {
      continue;
    }
    $links[] = Link::createFromRoute(t('Login to @site_name using %idp.', [
      '@site_name' => \Drupal::config('system.site')
        ->get('name'),
      '%idp' => $idps[$value]
        ->label(),
    ]), 'saml_sp_drupal_login.login', [
      'idp' => $value,
    ], $url_options);
  }
  $form['saml_sp_drupal_login_links'] = [
    '#theme' => 'item_list',
    '#items' => $links,
  ];
  $form['#cache']['tags'] = isset($form['#cache']['tags']) ? array_merge($form['#cache']['tags'], $config
    ->getCacheTags()) : $config
    ->getCacheTags();
}