forked from fa/breadcrumb-the-shire
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>
73 lines
3.0 KiB
PHP
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();
|
|
}
|
|
}
|