blob: a599e2ca9adb010069f86095208ac8fbdfe05ed7 [file] [log] [blame]
<?php
namespace Adldap\Models\Attributes;
use Adldap\Utilities;
use InvalidArgumentException;
class Sid
{
/**
* The string SID value.
*
* @var string
*/
protected $value;
/**
* Determines if the specified SID is valid.
*
* @param string $sid
*
* @return bool
*/
public static function isValid($sid)
{
return Utilities::isValidSid($sid);
}
/**
* Constructor.
*
* @param mixed $value
*
* @throws InvalidArgumentException
*/
public function __construct($value)
{
if (static::isValid($value)) {
$this->value = $value;
} elseif ($value = $this->binarySidToString($value)) {
$this->value = $value;
} else {
throw new InvalidArgumentException('Invalid Binary / String SID.');
}
}
/**
* Returns the string value of the SID.
*
* @return string
*/
public function __toString()
{
return $this->getValue();
}
/**
* Returns the string value of the SID.
*
* @return string
*/
public function getValue()
{
return $this->value;
}
/**
* Returns the binary variant of the SID.
*
* @return string
*/
public function getBinary()
{
$sid = explode('-', ltrim($this->value, 'S-'));
$level = (int) array_shift($sid);
$authority = (int) array_shift($sid);
$subAuthorities = array_map('intval', $sid);
$params = array_merge(
['C2xxNV*', $level, count($subAuthorities), $authority],
$subAuthorities
);
return call_user_func_array('pack', $params);
}
/**
* Returns the string variant of a binary SID.
*
* @param string $binary
*
* @return string|null
*/
protected function binarySidToString($binary)
{
return Utilities::binarySidToString($binary);
}
}