name = $name; return $this; } /** * Getter for the backend's name * * @return string */ public function getName() { return $this->name; } public static function create($name, Zend_Config $backendConfig) { if ($backendConfig->name !== null) { $name = $backendConfig->name; } if (isset($backendConfig->class)) { // Use a custom backend class, this is only useful for testing if (!class_exists($backendConfig->class)) { throw new ConfigurationError( 'Authentication configuration for backend "%s" defines an invalid backend class.' . ' Backend class "%s" not found', $name, $backendConfig->class ); } return new $backendConfig->class($backendConfig); } if (($backendType = $backendConfig->backend) === null) { throw new ConfigurationError( 'Authentication configuration for backend "%s" is missing the backend directive', $name ); } $backendType = strtolower($backendType); if ($backendType === 'autologin') { $backend = new AutoLoginBackend($backendConfig); $backend->setName($name); return $backend; } if ($backendConfig->resource === null) { throw new ConfigurationError( 'Authentication configuration for backend "%s" is missing the resource directive', $name ); } try { $resourceConfig = ResourceFactory::getResourceConfig($backendConfig->resource); } catch (ProgrammingError $e) { throw new ConfigurationError( 'Resources not set up. Please contact your Icinga Web administrator' ); } $resource = ResourceFactory::createResource($resourceConfig); switch ($backendType) { case 'db': $backend = new DbUserBackend($resource); break; case 'msldap': $backend = new LdapUserBackend( $resource, $backendConfig->get('user_class', 'user'), $backendConfig->get('user_name_attribute', 'sAMAccountName') ); break; case 'ldap': if (($userClass = $backendConfig->user_class) === null) { throw new ConfigurationError( 'Authentication configuration for backend "%s" is missing the user_class directive', $name ); } if (($userNameAttribute = $backendConfig->user_name_attribute) === null) { throw new ConfigurationError( 'Authentication configuration for backend "%s" is missing the user_name_attribute directive', $name ); } $backend = new LdapUserBackend($resource, $userClass, $userNameAttribute); break; default: throw new ConfigurationError( 'Authentication configuration for backend "%s" defines an invalid backend type.' . ' Backend type "%s" is not supported', $name, $backendType ); } $backend->setName($name); return $backend; } /** * Test whether the given user exists * * @param User $user * * @return bool */ abstract public function hasUser(User $user); /** * Authenticate * * @param User $user * @param string $password * * @return bool */ abstract public function authenticate(User $user, $password); }