ldap.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. __package__ = "archivebox.config"
  2. from typing import Optional
  3. from pydantic import Field
  4. from archivebox.config.configset import BaseConfigSet
  5. class LDAPConfig(BaseConfigSet):
  6. """
  7. LDAP authentication configuration.
  8. Only loads and validates if django-auth-ldap is installed.
  9. These settings integrate with Django's LDAP authentication backend.
  10. """
  11. toml_section_header: str = "LDAP_CONFIG"
  12. LDAP_ENABLED: bool = Field(default=False)
  13. LDAP_SERVER_URI: Optional[str] = Field(default=None)
  14. LDAP_BIND_DN: Optional[str] = Field(default=None)
  15. LDAP_BIND_PASSWORD: Optional[str] = Field(default=None)
  16. LDAP_USER_BASE: Optional[str] = Field(default=None)
  17. LDAP_USER_FILTER: str = Field(default="(uid=%(user)s)")
  18. LDAP_USERNAME_ATTR: str = Field(default="username")
  19. LDAP_FIRSTNAME_ATTR: str = Field(default="givenName")
  20. LDAP_LASTNAME_ATTR: str = Field(default="sn")
  21. LDAP_EMAIL_ATTR: str = Field(default="mail")
  22. LDAP_CREATE_SUPERUSER: bool = Field(default=False)
  23. def validate_ldap_config(self) -> tuple[bool, str]:
  24. """
  25. Validate that all required LDAP settings are configured.
  26. Returns:
  27. Tuple of (is_valid, error_message)
  28. """
  29. if not self.LDAP_ENABLED:
  30. return True, ""
  31. required_fields = [
  32. "LDAP_SERVER_URI",
  33. "LDAP_BIND_DN",
  34. "LDAP_BIND_PASSWORD",
  35. "LDAP_USER_BASE",
  36. ]
  37. missing = [field for field in required_fields if not getattr(self, field)]
  38. if missing:
  39. return False, f"LDAP_* config options must all be set if LDAP_ENABLED=True\nMissing: {', '.join(missing)}"
  40. return True, ""
  41. # Singleton instance
  42. LDAP_CONFIG = LDAPConfig()