You are here

ldap_servers.install in Lightweight Directory Access Protocol (LDAP) 8.4

File

ldap_servers/ldap_servers.install
View source
<?php

/**
 * @file
 * Install, update and uninstall functions for the LDAP API module.
 */
declare (strict_types=1);

/**
 * Implements hook_requirements().
 */
function ldap_servers_requirements($phase) : array {
  $requirements = [];
  if (version_compare(phpversion(), '7.2.0') < 0) {
    $requirements['php_ldap_version'] = [
      'title' => t('PHP Version for LDAP'),
      'description' => t('Your PHP installation is too old for the LDAP module. Please upgrade to at least 7.2.'),
      'severity' => REQUIREMENT_ERROR,
      'value' => phpversion(),
    ];
  }
  if (extension_loaded('ldap')) {
    $requirements['ldap_extension_loaded'] = [
      'title' => t('PHP LDAP extension'),
      'severity' => REQUIREMENT_OK,
      'value' => t('Available'),
    ];
  }
  else {
    $requirements['ldap_extension_loaded'] = [
      'title' => t('PHP LDAP extension'),
      'severity' => REQUIREMENT_ERROR,
      'value' => t('Missing'),
      'description' => t('The LDAP extension of PHP is not available. Please consult your distribution to discover how to install it.'),
    ];
  }
  if (!class_exists('Symfony\\Component\\Ldap\\Ldap')) {
    $requirements['ldap_library_present'] = [
      'title' => t('LDAP library'),
      'severity' => REQUIREMENT_ERROR,
      'value' => t('Missing \\Symfony\\Component\\Ldap\\Ldap'),
      'description' => t('You are missing a critical dependency, you should install via Composer which provides it.'),
    ];
  }
  return $requirements;
}

/**
 * Updates bind method to new value.
 */
function ldap_servers_update_8301() {

  /** @var \Drupal\Core\Entity\EntityStorageInterface $storage */
  $storage = \Drupal::service('entity_type.manager')
    ->getStorage('ldap_server');
  $servers = $storage
    ->getQuery()
    ->execute();

  /** @var \Drupal\ldap_servers\Entity\Server $server */
  foreach ($storage
    ->loadMultiple($servers) as $server) {
    $currentMethod = $server
      ->get('bind_method');
    if ($currentMethod == 1) {
      $server
        ->set('bind_method', 'service_account');
    }
    elseif ($currentMethod == 2) {
      $server
        ->set('bind_method', 'user');
    }
    elseif ($currentMethod == 3) {
      $server
        ->set('bind_method', 'anon');
    }
    elseif ($currentMethod == 4) {
      $server
        ->set('bind_method', 'anon_user');
    }
    $server
      ->save();
  }
}

/**
 * Removes HTTPS checking.
 */
function ldap_servers_update_8302() : \Drupal\Core\StringTranslation\TranslatableMarkup {
  $config_factory = \Drupal::configFactory();
  $config = $config_factory
    ->getEditable('ldap_servers.settings');
  $config
    ->delete();
  return t('HTTPS validation was removed, if you need mixed mode consider another module such as securelogin for this. Mixed mode is strongly discouraged.');
}

/**
 * Adds default timeout to all servers.
 */
function ldap_servers_update_8303() : \Drupal\Core\StringTranslation\TranslatableMarkup {

  /** @var \Drupal\Core\Entity\EntityStorageInterface $storage */
  $storage = \Drupal::service('entity_type.manager')
    ->getStorage('ldap_server');
  $servers = $storage
    ->getQuery()
    ->execute();

  /** @var \Drupal\ldap_servers\Entity\Server $server */
  foreach ($storage
    ->loadMultiple($servers) as $server) {
    $server
      ->set('timeout', 10);
    $server
      ->save();
  }
  return t('Server network timeouts are now configurable. Your servers have been set to 10 seconds.');
}

/**
 * Force server attributes to be lowercase.
 */
function ldap_servers_update_8304() {

  // Update removed due to upstream support in symfony/ldap.
}

/**
 * Removal of double-escaping.
 */
function ldap_servers_update_8305() : \Drupal\Core\StringTranslation\TranslatableMarkup {
  return t('Escaping of field data now relies solely on Twig auto-escaping. If you have created custom code make sure it takes this into account. See https://www.drupal.org/project/ldap/issues/2969097 for details.');
}

/**
 * Paged search removal.
 */
function ldap_servers_update_8401() : \Drupal\Core\StringTranslation\TranslatableMarkup {
  return t('Paged search has been removed in favor of more robust data retrieval. Please retest your configuration if you have used paged search.');
}

/**
 * Corrects a configuration field type.
 */
function ldap_servers_update_8402() {
  $config_factory = \Drupal::configFactory();
  $config_old = $config_factory
    ->getEditable('ldap_help.settings');
  if ($config_old) {
    $config_new = $config_factory
      ->getEditable('ldap_servers.settings');
    $config_new
      ->set('watchdog_detail', $config_old
      ->get('watchdog_detail'));
    $config_new
      ->save();
    $config_old
      ->delete();
  }
}

/**
 * Convert basedn to array.
 */
function ldap_servers_update_8403() {
  $storage = \Drupal::service('entity_type.manager')
    ->getStorage('ldap_server');
  $servers = $storage
    ->getQuery()
    ->execute();

  /** @var \Drupal\ldap_servers\Entity\Server $server */
  foreach ($storage
    ->loadMultiple($servers) as $server) {
    $split = preg_split('/\\r\\n|\\r|\\n/', $server
      ->get('basedn'));
    $server
      ->set('basedn', $split);
    $server
      ->save();
  }
}

/**
 * Fix encryption settings.
 */
function ldap_servers_update_8404() {
  $storage = \Drupal::service('entity_type.manager')
    ->getStorage('ldap_server');

  /** @var \Drupal\ldap_servers\Entity\Server $server */
  foreach ($storage
    ->loadMultiple() as $server) {
    $server
      ->set('encryption', 'none');
    if ($server
      ->get('tls')) {
      $server
        ->set('encryption', 'tls');
    }
    if ($server
      ->get('port') == 636) {
      $server
        ->set('encryption', 'ssl');
    }
    $server
      ->save();
  }
}

Functions

Namesort descending Description
ldap_servers_requirements Implements hook_requirements().
ldap_servers_update_8301 Updates bind method to new value.
ldap_servers_update_8302 Removes HTTPS checking.
ldap_servers_update_8303 Adds default timeout to all servers.
ldap_servers_update_8304 Force server attributes to be lowercase.
ldap_servers_update_8305 Removal of double-escaping.
ldap_servers_update_8401 Paged search removal.
ldap_servers_update_8402 Corrects a configuration field type.
ldap_servers_update_8403 Convert basedn to array.
ldap_servers_update_8404 Fix encryption settings.