Source code for simdb.remote.core.auth.active_directory

from typing import Optional

from easyad import EasyAD  # type: ignore[import]
from flask import Request

from simdb.config import Config

from ._authenticator import Authenticator
from ._user import User


[docs] class ActiveDirectoryAuthenticator(Authenticator): """ Authenticator for authenticating using an LDAP server. This requires the following extra parameters in the server configuration: ad_server - the server URI ad_domain - the AD domain ad_cert - path to the root ca certificate """ Name = "ActiveDirectory"
[docs] def authenticate(self, config: Config, request: Request) -> Optional[User]: try: ad_config = { "AD_SERVER": config.get_option("authentication.ad_server"), "AD_DOMAIN": config.get_option("authentication.ad_domain"), "AD_CA_CERT_FILE": config.get_option( "authentication.ad_cert", default="" ), } ad = EasyAD(ad_config) except (KeyError, ImportError): return None auth = request.authorization if not auth: return None username = auth.username password = auth.password user = ad.authenticate_user(username, password, json_safe=True) if user: return User(user["sAMAccountName"], user["mail"]) else: return None