67 lines
1.8 KiB
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,
|
|
])));
|
|
}
|
|
}
|