Exemplo n.º 1
0
 /**
  * Create and return a user group backend with the given name and given configuration applied to it
  *
  * @param   string          $name
  * @param   ConfigObject    $backendConfig
  *
  * @return  UserGroupBackendInterface
  *
  * @throws  ConfigurationError
  */
 public static function create($name, ConfigObject $backendConfig)
 {
     if ($backendConfig->name !== null) {
         $name = $backendConfig->name;
     }
     if (!($backendType = strtolower($backendConfig->backend))) {
         throw new ConfigurationError('Configuration for user group backend "%s" is missing the \'backend\' directive', $name);
     }
     if (in_array($backendType, static::$defaultBackends)) {
         // The default backend check is the first one because of performance reasons:
         // Do not attempt to load a custom user group backend unless it's actually required
     } elseif (($customClass = static::getCustomUserGroupBackend($backendType)) !== null) {
         $backend = new $customClass($backendConfig);
         if (!is_a($backend, 'Icinga\\Authentication\\UserGroup\\UserGroupBackendInterface')) {
             throw new ConfigurationError('Cannot utilize user group backend of type "%s".' . ' Class "%s" does not implement UserGroupBackendInterface', $backendType, $customClass);
         }
         $backend->setName($name);
         return $backend;
     } else {
         throw new ConfigurationError('Configuration for user group backend "%s" defines an invalid backend type.' . ' Backend type "%s" is not supported', $name, $backendType);
     }
     if ($backendConfig->resource === null) {
         throw new ConfigurationError('Configuration for user group backend "%s" is missing the \'resource\' directive', $name);
     }
     $resource = ResourceFactory::create($backendConfig->resource);
     switch ($backendType) {
         case 'db':
             $backend = new DbUserGroupBackend($resource);
             break;
         case 'ini':
             $backend = new IniUserGroupBackend($resource);
             break;
         case 'ldap':
         case 'msldap':
             $backend = new LdapUserGroupBackend($resource);
             $backend->setConfig($backendConfig);
             break;
     }
     $backend->setName($name);
     return $backend;
 }