apps.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. __package__ = 'archivebox.plugins_auth.ldap'
  2. import inspect
  3. from typing import List, Dict
  4. from pathlib import Path
  5. from pydantic import InstanceOf
  6. from pydantic_pkgr import BinProviderName, ProviderLookupDict, SemVer
  7. from abx.archivebox.base_plugin import BasePlugin
  8. from abx.archivebox.base_hook import BaseHook
  9. from abx.archivebox.base_binary import BaseBinary, BaseBinProvider
  10. from plugins_pkg.pip.apps import SYS_PIP_BINPROVIDER, VENV_PIP_BINPROVIDER
  11. from .settings import LDAP_CONFIG, get_ldap_lib
  12. ###################### Config ##########################
  13. LDAP_LIB = lambda: get_ldap_lib()[0] # lazy load to avoid slow ldap lib import on startup
  14. class LdapBinary(BaseBinary):
  15. name: str = 'ldap'
  16. description: str = 'LDAP Authentication'
  17. binproviders_supported: List[InstanceOf[BaseBinProvider]] = [VENV_PIP_BINPROVIDER, SYS_PIP_BINPROVIDER]
  18. provider_overrides: Dict[BinProviderName, ProviderLookupDict] = {
  19. VENV_PIP_BINPROVIDER.name: {
  20. "abspath": lambda: LDAP_LIB() and Path(inspect.getfile(LDAP_LIB())), # type: ignore
  21. "version": lambda: LDAP_LIB() and SemVer(LDAP_LIB().__version__), # type: ignore
  22. },
  23. SYS_PIP_BINPROVIDER.name: {
  24. "abspath": lambda: LDAP_LIB() and Path(inspect.getfile(LDAP_LIB())), # type: ignore
  25. "version": lambda: LDAP_LIB() and SemVer(LDAP_LIB().__version__), # type: ignore
  26. },
  27. }
  28. LDAP_BINARY = LdapBinary()
  29. class LdapAuthPlugin(BasePlugin):
  30. app_label: str = 'ldap'
  31. verbose_name: str = 'LDAP Authentication'
  32. hooks: List[InstanceOf[BaseHook]] = [
  33. LDAP_CONFIG,
  34. LDAP_BINARY,
  35. ]
  36. PLUGIN = LdapAuthPlugin()
  37. DJANGO_APP = PLUGIN.AppConfig