nur-sery/nur_src/ldap/ldap_server.php

67 lines
1.8 KiB
PHP

<?php
namespace nur\ldap;
use nur\A;
use nur\b\ValueException;
use nur\config;
use nur\path;
use nur\sery\output\msg;
use nur\SL;
abstract class ldap_server {
const NAME = null;
protected static function name(?string $suffix=null): string {
$name = static::NAME;
if ($suffix !== null) {
$name .= "_";
$name .= $suffix;
}
return $name;
}
private static function map_profile(string $profile): string {
$profile_map = config::k(self::name("profile_map"));
return A::get($profile_map, $profile, $profile);
}
static $profile;
/** obtenir le profil LDAP courant */
static function get_profile(): string {
$profile = self::$profile;
if ($profile === null) {
if ($profile === null) $profile = config::k(self::name("profile"));
if ($profile === null) $profile = self::map_profile(config::get_profile());
self::$profile = $profile;
}
return $profile;
}
/** spécifier le profil LDAP courant */
static function set_profile(?string $profile): void {
if ($profile === null) $profile = config::get_profile();
self::$profile = self::map_profile($profile);
}
/** adapter le chemin vers le fichier de configuration */
protected static function fix_path(string $config): string {
return $config;
}
static function conn(?array $config=null, ?string $profile=null): LdapConn {
if ($profile === null) $profile = self::get_profile();
$name = self::name();
msg::debug("Profil $name: $profile");
$configFile = static::fix_path(ldap_config::get_file($name, $profile));
if (!file_exists($configFile)) {
$configname = path::filename($configFile);
throw new ValueException("$name: profil LDAP invalide (fichier '$configname' non trouvé)");
}
return new LdapConn(array_merge(...SL::filter_n([
require $configFile,
$config,
])));
}
}