You are here

private function ServerTestForm::testGroupDn in Lightweight Directory Access Protocol (LDAP) 8.4

Same name and namespace in other branches
  1. 8.3 ldap_servers/src/Form/ServerTestForm.php \Drupal\ldap_servers\Form\ServerTestForm::testGroupDn()

Test the Group DN.

Parameters

string $group_dn: Group DN.

string|null $username: Username.

Return value

array Response.

1 call to ServerTestForm::testGroupDn()
ServerTestForm::submitForm in ldap_servers/src/Form/ServerTestForm.php
This is the default entity object builder function. It is called before any other submit handler to build the new entity object to be used by the following submit handlers. At this point of the form workflow the entity is validated and the form state…

File

ldap_servers/src/Form/ServerTestForm.php, line 392

Class

ServerTestForm
Use Drupal\Core\Form\FormBase;.

Namespace

Drupal\ldap_servers\Form

Code

private function testGroupDn(string $group_dn, ?string $username) : array {
  $ldap = $this->ldapBridge
    ->get();
  try {
    $group_entry = $ldap
      ->query($group_dn, 'objectClass=*')
      ->execute()
      ->toArray();
  } catch (LdapException $e) {
    $group_entry = [];
  }
  if (!empty($group_entry)) {
    foreach ([
      TRUE,
      FALSE,
    ] as $nested) {
      $this->ldapServer
        ->set('grp_nested', $nested);

      // @todo Need to pass server by reference to inject nesting state.
      $this->ldapGroupManager
        ->setServerById($this->ldapServer
        ->id());

      // FALSE.
      $nested_display = $nested ? 'Yes' : 'No';
      if ($username) {

        // This is the parent function that will call FromUserAttr or
        // FromEntry.
        $memberships = $this->ldapGroupManager
          ->groupMembershipsFromUser($username);
        $settings = [
          '#theme' => 'item_list',
          '#items' => $memberships,
          '#list_type' => 'ul',
        ];
        $result = $this->renderer
          ->render($settings);
        $this->resultsTables['group2'][] = [
          'Group memberships from user ("group_dns", nested=' . $nested_display . ') (' . count($memberships) . ' found)',
          $result,
        ];
        $result = $this->ldapGroupManager
          ->groupIsMember($group_dn, $username) ? 'Yes' : 'No';
        $this->resultsTables['group2'][] = [
          sprintf('groupIsMember from group DN "%s" for %s nested=%s', $group_dn, $username, $nested_display),
          $result,
        ];
        $groupUserMembershipsFromUserAttributes = [];
        if ($this->ldapServer
          ->isGroupUserMembershipAttributeInUse()) {
          $entry = $this->ldapGroupManager
            ->matchUsernameToExistingLdapEntry($username);
          $groupUserMembershipsFromUserAttributes = $this->ldapGroupManager
            ->groupUserMembershipsFromUserAttr($entry);
          $settings = [
            '#theme' => 'item_list',
            '#items' => $groupUserMembershipsFromUserAttributes,
            '#list_type' => 'ul',
          ];
          $result = $this->renderer
            ->render($settings);
        }
        else {
          $result = "'A user LDAP attribute such as memberOf exists that contains a list of their group' is not configured.";
        }
        $this->resultsTables['group2'][] = [
          'Group memberships from user attribute for ' . $username . ' (nested=' . $nested_display . ') (' . count($groupUserMembershipsFromUserAttributes) . ' found)',
          $result,
        ];
        $groupUserMembershipsFromEntry = [];
        if ($this->ldapGroupManager
          ->groupGroupEntryMembershipsConfigured()) {
          $ldap_entry = $this->ldapGroupManager
            ->matchUsernameToExistingLdapEntry($username);
          $groupUserMembershipsFromEntry = $this->ldapGroupManager
            ->groupUserMembershipsFromEntry($ldap_entry);
          $settings = [
            '#theme' => 'item_list',
            '#items' => $groupUserMembershipsFromEntry,
            '#list_type' => 'ul',
          ];
          $result = $this->renderer
            ->render($settings);
        }
        else {
          $result = 'Groups by entry not configured.';
        }
        $this->resultsTables['group2'][] = [
          sprintf('Group memberships from entry for %s (nested=%s) (%s found)', $username, $nested_display, count($groupUserMembershipsFromEntry)),
          $result,
        ];
        if (count($groupUserMembershipsFromEntry) && count($groupUserMembershipsFromUserAttributes)) {
          $diff1 = array_diff($groupUserMembershipsFromUserAttributes, $groupUserMembershipsFromEntry);
          $diff2 = array_diff($groupUserMembershipsFromEntry, $groupUserMembershipsFromUserAttributes);
          $settings = [
            '#theme' => 'item_list',
            '#items' => $diff1,
            '#list_type' => 'ul',
          ];
          $result1 = $this->renderer
            ->render($settings);
          $settings = [
            '#theme' => 'item_list',
            '#items' => $diff2,
            '#list_type' => 'ul',
          ];
          $result2 = $this->renderer
            ->render($settings);
          $this->resultsTables['group2'][] = [
            'groupUserMembershipsFromEntry and FromUserAttr Diff)',
            $result1,
          ];
          $this->resultsTables['group2'][] = [
            'FromUserAttr and groupUserMembershipsFromEntry Diff)',
            $result2,
          ];
        }
      }
    }
  }
  if ($groups_from_dn = $this->ldapGroupManager
    ->groupUserMembershipsFromDn($username)) {
    $settings = [
      '#theme' => 'item_list',
      '#items' => $groups_from_dn,
      '#list_type' => 'ul',
    ];
    $this->resultsTables['groupfromDN'][] = [
      $this
        ->t('Groups from DN'),
      $this->renderer
        ->render($settings),
    ];
  }
  $result = $this->ldapGroupManager
    ->groupAllMembers($group_dn);
  if ($result) {
    $settings = [
      '#theme' => 'item_list',
      '#items' => $result,
      '#list_type' => 'ul',
    ];
    $this->resultsTables['group_direct'][] = [
      $this
        ->t('Entries found on group DN directly'),
      $this->renderer
        ->render($settings),
    ];
  }
  return $group_entry;
}