blob: 1dcdd1a135cc6f190a68e92f42947fc5ca2d6eb3 [file] [log] [blame]
<?php
namespace LdapRecord\Configuration;
use LdapRecord\LdapInterface;
class DomainConfiguration
{
/**
* The extended configuration options.
*
* @var array
*/
protected static $extended = [];
/**
* The configuration options array.
*
* The default values for each key indicate the type of value it requires.
*
* @var array
*/
protected $options = [
// An array of LDAP hosts.
'hosts' => [],
// The global LDAP operation timeout limit in seconds.
'timeout' => 5,
// The LDAP version to utilize.
'version' => 3,
// The port to use for connecting to your hosts.
'port' => LdapInterface::PORT,
// The base distinguished name of your domain.
'base_dn' => '',
// The username to use for binding.
'username' => '',
// The password to use for binding.
'password' => '',
// Whether or not to use SSL when connecting.
'use_ssl' => false,
// Whether or not to use TLS when connecting.
'use_tls' => false,
// Whether or not follow referrals is enabled when performing LDAP operations.
'follow_referrals' => false,
// Custom LDAP options.
'options' => [],
];
/**
* Constructor.
*
* @param array $options
*
* @throws ConfigurationException When an option value given is an invalid type.
*/
public function __construct(array $options = [])
{
$this->options = array_merge($this->options, static::$extended);
foreach ($options as $key => $value) {
$this->set($key, $value);
}
}
/**
* Extend the configuration with a custom option, or override an existing.
*
* @param string $option
* @param mixed $default
*
* @return void
*/
public static function extend($option, $default = null)
{
static::$extended[$option] = $default;
}
/**
* Flush the extended configuration options.
*
* @return void
*/
public static function flushExtended()
{
static::$extended = [];
}
/**
* Get all configuration options.
*
* @return array
*/
public function all()
{
return $this->options;
}
/**
* Set a configuration option.
*
* @param string $key
* @param mixed $value
*
* @throws ConfigurationException When an option value given is an invalid type.
*/
public function set($key, $value)
{
if ($this->validate($key, $value)) {
$this->options[$key] = $value;
}
}
/**
* Returns the value for the specified configuration options.
*
* @param string $key
*
* @throws ConfigurationException When the option specified does not exist.
*
* @return mixed
*/
public function get($key)
{
if (! $this->has($key)) {
throw new ConfigurationException("Option {$key} does not exist.");
}
return $this->options[$key];
}
/**
* Checks if a configuration option exists.
*
* @param string $key
*
* @return bool
*/
public function has($key)
{
return array_key_exists($key, $this->options);
}
/**
* Validate the configuration option.
*
* @param string $key
* @param mixed $value
*
* @throws ConfigurationException When an option value given is an invalid type.
*
* @return bool
*/
protected function validate($key, $value)
{
$default = $this->get($key);
if (is_array($default)) {
$validator = new Validators\ArrayValidator($key, $value);
} elseif (is_int($default)) {
$validator = new Validators\IntegerValidator($key, $value);
} elseif (is_bool($default)) {
$validator = new Validators\BooleanValidator($key, $value);
} else {
$validator = new Validators\StringOrNullValidator($key, $value);
}
return $validator->validate();
}
}