1
0
Files
breadcrumb-the-shire/lib/Service/Auth/AuthRepositoryFactory.php
fs d1eeac6692 feat: add LDAP authentication as per-tenant login method
Add LDAP as a third authentication option alongside local password and
Microsoft Entra ID SSO. Per-tenant configuration supports Active Directory,
OpenLDAP, and FreeIPA with configurable attribute mapping, search-then-bind
and direct-bind methods, encrypted bind credentials (AES-256-GCM),
profile sync on login, and user auto-provisioning via external identity
linking.

Includes admin UI for connection settings with test-connection button,
login page LDAP form, 25 new PHPUnit tests, and de/en translations.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 07:26:04 +01:00

73 lines
3.0 KiB
PHP

<?php
namespace MintyPHP\Service\Auth;
use MintyPHP\Repository\Auth\ApiTokenRepository;
use MintyPHP\Repository\Auth\ApiTokenRepositoryInterface;
use MintyPHP\Repository\Auth\EmailVerificationRepository;
use MintyPHP\Repository\Auth\EmailVerificationRepositoryInterface;
use MintyPHP\Repository\Auth\PasswordResetRepository;
use MintyPHP\Repository\Auth\PasswordResetRepositoryInterface;
use MintyPHP\Repository\Auth\RememberTokenRepository;
use MintyPHP\Repository\Auth\RememberTokenRepositoryInterface;
use MintyPHP\Repository\Tenant\TenantLdapAuthRepository;
use MintyPHP\Repository\Tenant\TenantLdapAuthRepositoryInterface;
use MintyPHP\Repository\Tenant\TenantMicrosoftAuthRepository;
use MintyPHP\Repository\Tenant\TenantMicrosoftAuthRepositoryInterface;
use MintyPHP\Repository\Tenant\TenantRepository;
use MintyPHP\Repository\Tenant\TenantRepositoryInterface;
use MintyPHP\Repository\User\UserExternalIdentityRepository;
use MintyPHP\Repository\User\UserExternalIdentityRepositoryInterface;
class AuthRepositoryFactory
{
private ?ApiTokenRepository $apiTokenRepository = null;
private ?RememberTokenRepository $rememberTokenRepository = null;
private ?PasswordResetRepository $passwordResetRepository = null;
private ?EmailVerificationRepository $emailVerificationRepository = null;
private ?TenantRepository $tenantRepository = null;
private ?TenantMicrosoftAuthRepository $tenantMicrosoftAuthRepository = null;
private ?TenantLdapAuthRepository $tenantLdapAuthRepository = null;
private ?UserExternalIdentityRepository $userExternalIdentityRepository = null;
public function createApiTokenRepository(): ApiTokenRepositoryInterface
{
return $this->apiTokenRepository ??= new ApiTokenRepository();
}
public function createRememberTokenRepository(): RememberTokenRepositoryInterface
{
return $this->rememberTokenRepository ??= new RememberTokenRepository();
}
public function createPasswordResetRepository(): PasswordResetRepositoryInterface
{
return $this->passwordResetRepository ??= new PasswordResetRepository();
}
public function createEmailVerificationRepository(): EmailVerificationRepositoryInterface
{
return $this->emailVerificationRepository ??= new EmailVerificationRepository();
}
public function createTenantRepository(): TenantRepositoryInterface
{
return $this->tenantRepository ??= new TenantRepository();
}
public function createTenantMicrosoftAuthRepository(): TenantMicrosoftAuthRepositoryInterface
{
return $this->tenantMicrosoftAuthRepository ??= new TenantMicrosoftAuthRepository();
}
public function createTenantLdapAuthRepository(): TenantLdapAuthRepositoryInterface
{
return $this->tenantLdapAuthRepository ??= new TenantLdapAuthRepository();
}
public function createUserExternalIdentityRepository(): UserExternalIdentityRepositoryInterface
{
return $this->userExternalIdentityRepository ??= new UserExternalIdentityRepository();
}
}