function saml_sp_drupal_login_form_user_login_form_alter in SAML Service Provider 4.x
Same name and namespace in other branches
- 8.3 modules/saml_sp_drupal_login/saml_sp_drupal_login.module \saml_sp_drupal_login_form_user_login_form_alter()
- 8.2 modules/saml_sp_drupal_login/saml_sp_drupal_login.module \saml_sp_drupal_login_form_user_login_form_alter()
- 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();
}