/usr/share/php/Icinga/Data/ResourceFactory.php is in php-icinga 2.1.0-1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | <?php
/* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
namespace Icinga\Data;
use Icinga\Application\Config;
use Icinga\Util\ConfigAwareFactory;
use Icinga\Exception\ConfigurationError;
use Icinga\Data\Db\DbConnection;
use Icinga\Protocol\Livestatus\Connection as LivestatusConnection;
use Icinga\Protocol\Ldap\LdapConnection;
use Icinga\Protocol\File\FileReader;
/**
* Create resources from names or resource configuration
*/
class ResourceFactory implements ConfigAwareFactory
{
/**
* Resource configuration
*
* @var Config
*/
private static $resources;
/**
* Set resource configurations
*
* @param Config $config
*/
public static function setConfig($config)
{
self::$resources = $config;
}
/**
* Get the configuration for a specific resource
*
* @param $resourceName String The resource's name
*
* @return ConfigObject The configuration of the resource
*
* @throws ConfigurationError
*/
public static function getResourceConfig($resourceName)
{
self::assertResourcesExist();
$resourceConfig = self::$resources->getSection($resourceName);
if ($resourceConfig->isEmpty()) {
throw new ConfigurationError(
'Cannot load resource config "%s". Resource does not exist',
$resourceName
);
}
return $resourceConfig;
}
/**
* Return the configuration of all existing resources, or get all resources of a given type.
*
* @return Config The configuration containing all resources
*/
public static function getResourceConfigs()
{
self::assertResourcesExist();
return self::$resources;
}
/**
* Check if the existing resources are set. If not, throw an error.
*
* @throws ConfigurationError
*/
private static function assertResourcesExist()
{
if (self::$resources === null) {
throw new ConfigurationError(
'Resources not set up. Please contact your Icinga Web administrator'
);
}
}
/**
* Create a single resource from the given configuration.
*
* NOTE: The factory does not test if the given configuration is valid and the resource is accessible, this
* depends entirely on the implementation of the returned resource.
*
* @param ConfigObject $config The configuration for the created resource.
*
* @return DbConnection|LdapConnection|LivestatusConnection An object that can be used to access
* the given resource. The returned class depends on the configuration property 'type'.
* @throws ConfigurationError When an unsupported type is given
*/
public static function createResource(ConfigObject $config)
{
switch (strtolower($config->type)) {
case 'db':
$resource = new DbConnection($config);
break;
case 'ldap':
$resource = new LdapConnection($config);
break;
case 'livestatus':
$resource = new LivestatusConnection($config->socket);
break;
case 'file':
$resource = new FileReader($config);
break;
case 'ini':
$resource = Config::fromIni($config->ini);
break;
default:
throw new ConfigurationError(
'Unsupported resource type "%s"',
$config->type
);
}
return $resource;
}
/**
* Create a resource from name
*
* @param string $resourceName
* @return DbConnection|LdapConnection|LivestatusConnection
*/
public static function create($resourceName)
{
return self::createResource(self::getResourceConfig($resourceName));
}
}
|