. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Controllers; use Espo\Core\Exceptions\Forbidden; use Espo\Core\Authentication\Ldap\Utils as LDAPUtils; use Espo\Core\Authentication\Ldap\Client as LDAPClient; use Espo\Core\Api\Request; use Espo\Core\Utils\Config; use Espo\Entities\User; use Laminas\Ldap\Exception\LdapException; class Ldap { private User $user; private Config $config; public function __construct( User $user, Config $config ) { $this->user = $user; $this->config = $config; } /** * @throws Forbidden * @throws LdapException */ public function postActionTestConnection(Request $request): bool { if (!$this->user->isAdmin()) { throw new Forbidden(); } $data = $request->getParsedBody(); if (!isset($data->password)) { $data->password = $this->config->get('ldapPassword'); } $ldapUtils = new LDAPUtils(); $options = $ldapUtils->normalizeOptions( get_object_vars($data) ); $ldapClient = new LDAPClient($options); // An exception thrown if no connection. $ldapClient->bind(); return true; } }