2015-06-23 14:37:23 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Icinga\Module\Director;
|
|
|
|
|
2015-07-31 14:38:22 +02:00
|
|
|
use Icinga\Authentication\Auth;
|
2015-07-30 09:11:53 +02:00
|
|
|
use Icinga\Data\ResourceFactory;
|
|
|
|
use Icinga\Module\Director\Web\Form\QuickForm;
|
2015-07-30 09:12:19 +02:00
|
|
|
use Icinga\Web\Url;
|
2015-06-23 14:37:23 +02:00
|
|
|
use Zend_Db_Expr;
|
|
|
|
|
|
|
|
class Util
|
|
|
|
{
|
2015-07-30 09:04:42 +02:00
|
|
|
protected static $auth;
|
|
|
|
|
2015-08-28 16:57:40 +02:00
|
|
|
protected static $allowedResources;
|
2015-07-30 09:11:53 +02:00
|
|
|
|
2015-06-23 14:37:23 +02:00
|
|
|
public static function pgBinEscape($binary)
|
|
|
|
{
|
2015-07-30 09:12:19 +02:00
|
|
|
return new Zend_Db_Expr("'\\x" . bin2hex($binary) . "'");
|
2015-06-23 14:37:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public static function hex2binary($bin)
|
|
|
|
{
|
|
|
|
return pack('H*', $bin);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function binary2hex($hex)
|
|
|
|
{
|
2015-06-23 14:38:37 +02:00
|
|
|
return current(unpack('H*', $hex));
|
2015-06-23 14:37:23 +02:00
|
|
|
}
|
2015-07-30 09:04:42 +02:00
|
|
|
|
|
|
|
public static function auth()
|
|
|
|
{
|
|
|
|
if (self::$auth === null) {
|
2015-07-31 14:38:22 +02:00
|
|
|
self::$auth = Auth::getInstance();
|
2015-07-30 09:04:42 +02:00
|
|
|
}
|
|
|
|
return self::$auth;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function hasPermission($name)
|
|
|
|
{
|
|
|
|
return self::auth()->hasPermission($name);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function getRestrictions($name)
|
|
|
|
{
|
|
|
|
return self::auth()->getRestrictions($name);
|
|
|
|
}
|
2015-07-30 09:11:53 +02:00
|
|
|
|
2015-08-28 16:57:40 +02:00
|
|
|
public static function resourceIsAllowed($name)
|
2015-07-30 09:11:53 +02:00
|
|
|
{
|
2015-08-28 16:57:40 +02:00
|
|
|
if (self::$allowedResources === null) {
|
|
|
|
$restrictions = self::getRestrictions('director/resources/use');
|
2015-07-30 09:11:53 +02:00
|
|
|
$list = array();
|
|
|
|
foreach ($restrictions as $restriction) {
|
|
|
|
foreach (preg_split('/\s*,\s*/', $restriction, -1, PREG_SPLIT_NO_EMPTY) as $key) {
|
|
|
|
$list[$key] = $key;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-08-28 16:57:40 +02:00
|
|
|
self::$allowedResources = $list;
|
2015-07-30 09:11:53 +02:00
|
|
|
} else {
|
2015-08-28 16:57:40 +02:00
|
|
|
$list = self::$allowedResources;
|
2015-07-30 09:11:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (empty($list) || array_key_exists($name, $list)) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function enumDbResources()
|
2015-08-28 16:57:40 +02:00
|
|
|
{
|
|
|
|
return self::enumResources('db');
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function enumLdapResources()
|
|
|
|
{
|
|
|
|
return self::enumResources('ldap');
|
|
|
|
}
|
|
|
|
|
|
|
|
protected static function enumResources($type)
|
2015-07-30 09:11:53 +02:00
|
|
|
{
|
|
|
|
$resources = array();
|
|
|
|
foreach (ResourceFactory::getResourceConfigs() as $name => $resource) {
|
2015-08-28 16:57:40 +02:00
|
|
|
if ($resource->type === $type && self::resourceIsAllowed($name)) {
|
2015-07-30 09:11:53 +02:00
|
|
|
$resources[$name] = $name;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $resources;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function addDbResourceFormElement(QuickForm $form, $name)
|
|
|
|
{
|
2015-08-28 16:57:40 +02:00
|
|
|
return self::addResourceFormElement($form, $name, 'db');
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function addLdapResourceFormElement(QuickForm $form, $name)
|
|
|
|
{
|
|
|
|
return self::addResourceFormElement($form, $name, 'ldap');
|
|
|
|
}
|
|
|
|
|
|
|
|
protected static function addResourceFormElement(QuickForm $form, $name, $type)
|
|
|
|
{
|
|
|
|
$list = self::enumResources($type);
|
2015-07-30 09:11:53 +02:00
|
|
|
|
|
|
|
$form->addElement('select', $name, array(
|
|
|
|
'label' => 'Resource name',
|
|
|
|
'multiOptions' => $form->optionalEnum($list),
|
|
|
|
'required' => true,
|
|
|
|
));
|
|
|
|
|
|
|
|
if (true && empty($list)) {
|
|
|
|
if (self::hasPermission('config/application/resources')) {
|
2015-08-28 16:57:40 +02:00
|
|
|
$hint = $form->translate('Please click %s to create new resources');
|
2015-07-30 09:11:53 +02:00
|
|
|
$link = sprintf(
|
|
|
|
'<a href="' . Url::fromPath('config/resource') . '" data-base-target="_main">%s</a>',
|
|
|
|
$form->translate('here')
|
|
|
|
);
|
|
|
|
$form->addHtmlHint(sprintf($hint, $link));
|
|
|
|
$msg = $form->translate('No db resource available');
|
|
|
|
} else {
|
2015-08-28 16:57:40 +02:00
|
|
|
$msg = $form->translate('Please ask an administrator to grant you access to resources');
|
2015-07-30 09:11:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
$form->getElement($name)->addError($msg);
|
|
|
|
}
|
|
|
|
}
|
2015-06-23 14:37:23 +02:00
|
|
|
}
|