#                                                                         #
# Object Configuration for the Flow Framework                             #
#                                                                         #
# This file contains the default object configuration for the Flow        #
# Framework. Because it is loaded at a very early stage during ini-       #
# tialization, this configuration cannot be overridden by other con-      #
# figuration files.                                                       #
#                                                                         #

DateTime:
  scope: prototype
  autowiring: off

Composer\Autoload\ClassLoader:
  scope: singleton
  autowiring: off

#                                                                          #
# Cache                                                                    #
#                                                                          #

Neos\Cache\CacheFactoryInterface:
  className: Neos\Flow\Cache\CacheFactory
  arguments:
    1:
      setting: Neos.Flow.context
    3:
      setting: Neos.Flow.cache.applicationIdentifier

Neos\Flow\Cache\CacheFactory:
  arguments:
    1:
      setting: Neos.Flow.context
    3:
      setting: Neos.Flow.cache.applicationIdentifier

Neos\Flow\Cache\CacheManager:
  properties:
    logger:
      object:
        factoryObjectName: Neos\Flow\Log\PsrLoggerFactoryInterface
        factoryMethodName: get
        arguments:
          1:
            value: systemLogger

#                                                                          #
# I18n                                                                     #
#                                                                          #

Neos\Flow\I18n\Service:
  properties:
    cache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_I18n_AvailableLocalesCache
Neos\Flow\I18n\Cldr\CldrModel:
  properties:
    cache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_I18n_Cldr_CldrModelCache
Neos\Flow\I18n\Xliff\Service\XliffFileProvider:
  properties:
    cache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_I18n_XmlModelCache
Neos\Flow\I18n\Cldr\Reader\DatesReader:
  properties:
    cache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_I18n_Cldr_Reader_DatesReaderCache
Neos\Flow\I18n\Cldr\Reader\NumbersReader:
  properties:
    cache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_I18n_Cldr_Reader_NumbersReaderCache
Neos\Flow\I18n\Cldr\Reader\PluralsReader:
  properties:
    cache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_I18n_Cldr_Reader_PluralsReaderCache
Neos\Flow\I18n\Cldr\Reader\CurrencyReader:
  properties:
    cache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_I18n_Cldr_Reader_CurrencyReaderCache

#                                                                          #
# Log                                                                      #
#                                                                          #

Neos\Flow\Log\Backend\FileBackend:
  autowiring: off
Neos\Flow\Log\Backend\NullBackend:
  autowiring: off

Neos\Flow\Log\ThrowableStorageInterface:
  scope: singleton
  # Note that this is a "fake" entry and doesn't get used. Please change the setting Neos.Flow.log.throwables.storageClass
  className: Neos\Flow\Log\ThrowableStorage\FileStorage

Neos\Flow\Log\PsrLoggerFactory:
  scope: singleton
  autowiring: off

Neos\Flow\Log\PsrLoggerFactoryInterface:
  className: Neos\Flow\Log\PsrLoggerFactory

'Neos.Flow:SystemLogger':
  className: Psr\Log\LoggerInterface
  scope: singleton
  factoryObjectName: Neos\Flow\Log\PsrLoggerFactoryInterface
  factoryMethodName: get
  arguments:
    1:
      value: systemLogger

'Neos.Flow:SecurityLogger':
  className: Psr\Log\LoggerInterface
  scope: singleton
  factoryObjectName: Neos\Flow\Log\PsrLoggerFactoryInterface
  factoryMethodName: get
  arguments:
    1:
      value: securityLogger

'Neos.Flow:SqlLogger':
  className: Psr\Log\LoggerInterface
  scope: singleton
  factoryObjectName: Neos\Flow\Log\PsrLoggerFactoryInterface
  factoryMethodName: get
  arguments:
    1:
      value: sqlLogger

'Neos.Flow:I18nLogger':
  className: Psr\Log\LoggerInterface
  scope: singleton
  factoryObjectName: Neos\Flow\Log\PsrLoggerFactoryInterface
  factoryMethodName: get
  arguments:
    1:
      value: i18nLogger

# The default PSR-3 logger
Psr\Log\LoggerInterface:
  scope: singleton
  factoryObjectName: Neos\Flow\Log\PsrLoggerFactoryInterface
  factoryMethodName: get
  arguments:
    1:
      value: systemLogger

#                                                                          #
# Monitor                                                                  #
#                                                                          #

Neos\Flow\Monitor\ChangeDetectionStrategy\ModificationTimeStrategy:
  properties:
    cache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_Monitor

Neos\Flow\Monitor\FileMonitor:
  properties:
    cache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_Monitor
    logger:
      object:
        factoryObjectName: Neos\Flow\Log\PsrLoggerFactoryInterface
        factoryMethodName: get
        arguments:
          1:
            value: systemLogger

#                                                                          #
# HTTP                                                                     #
#                                                                          #
Psr\Http\Client\ClientInterface:
  className: Neos\Flow\Http\Client\Browser

Neos\Flow\Http\Client\RequestEngineInterface:
  className: Neos\Flow\Http\Client\CurlEngine

Psr\Http\Message\ServerRequestFactoryInterface:
  className: Neos\Http\Factories\ServerRequestFactory

Neos\Http\Factories\ServerRequestFactory:
  arguments:
    2:
      setting: Neos.Flow.http.serverRequestDefaults.userAgent
    3:
      setting: Neos.Flow.http.serverRequestDefaults.scriptPath
    4:
      setting: Neos.Flow.http.serverRequestDefaults.protocolVersion

Psr\Http\Message\RequestFactoryInterface:
  className: Neos\Http\Factories\RequestFactory

Psr\Http\Message\ResponseFactoryInterface:
  className: Neos\Http\Factories\ResponseFactory

Psr\Http\Message\StreamFactoryInterface:
  className: Neos\Http\Factories\StreamFactory

Psr\Http\Message\UploadedFileFactoryInterface:
  className: Neos\Http\Factories\UploadedFileFactory

Psr\Http\Message\UriFactoryInterface:
  className: Neos\Http\Factories\UriFactory

Neos\Flow\Http\Middleware\MiddlewaresChain:
  factoryObjectName: Neos\Flow\Http\Middleware\MiddlewaresChainFactory
  arguments:
    1:
      setting: Neos.Flow.http.middlewares

#                                                                          #
# MVC                                                                      #
#                                                                          #
Neos\Flow\Mvc\Routing\RouterInterface:
  className: Neos\Flow\Mvc\Routing\Router

Neos\Flow\Mvc\Routing\RouterCachingService:
  properties:
    routeCache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_Mvc_Routing_Route
    resolveCache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_Mvc_Routing_Resolve

Neos\Flow\Mvc\ViewConfigurationManager:
  properties:
    cache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_Mvc_ViewConfigurations
#                                                                          #
# ObjectManagement                                                         #
#                                                                          #

Neos\Flow\ObjectManagement\ObjectManagerInterface:
  className: Neos\Flow\ObjectManagement\ObjectManager
  scope: singleton
  autowiring: off

Neos\Flow\ObjectManagement\ObjectManager:
  autowiring: off

Neos\Flow\ObjectManagement\CompileTimeObjectManager:
  autowiring: off

#                                                                          #
# Persistence                                                              #
#                                                                          #

Doctrine\ORM\EntityManagerInterface:
  scope: singleton
  factoryObjectName: Neos\Flow\Persistence\Doctrine\EntityManagerFactory

Doctrine\DBAL\Connection:
  scope: singleton
  factoryObjectName: Neos\Flow\Persistence\Doctrine\ConnectionFactory

Neos\Flow\Persistence\PersistenceManagerInterface:
  className: Neos\Flow\Persistence\Doctrine\PersistenceManager

Neos\Flow\Persistence\Doctrine\Logging\SqlLogger:
  properties:
    logger:
      object:
        factoryObjectName: Neos\Flow\Log\PsrLoggerFactoryInterface
        factoryMethodName: get
        arguments:
          1:
            value: sqlLogger

#
# Property
#

Neos\Flow\Property\PropertyMapper:
  properties:
    cache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_PropertyMapper

#
# Reflection
#
Neos\Flow\Reflection\ReflectionService:
  factoryObjectName: Neos\Flow\Reflection\ReflectionServiceFactory

#Neos\Flow\Reflection\ReflectionServiceFactory:
#  scope: singleton

#                                                                          #
# ResourceManagement                                                       #
#                                                                          #

Neos\Flow\ResourceManagement\ResourceManager:
  properties:
    statusCache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_Resource_Status

#                                                                          #
# Security                                                                 #
#                                                                          #

Neos\Flow\Security\Authentication\AuthenticationManagerInterface:
  className: Neos\Flow\Security\Authentication\AuthenticationProviderManager


Neos\Flow\Security\Cryptography\RsaWalletServiceInterface:
  className: Neos\Flow\Security\Cryptography\RsaWalletServicePhp
  scope: singleton
  properties:
    keystoreCache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_Security_Cryptography_RSAWallet

Neos\Flow\Security\Authorization\PrivilegeManagerInterface:
  className: Neos\Flow\Security\Authorization\PrivilegeManager

Neos\Flow\Security\Authorization\FirewallInterface:
  className: Neos\Flow\Security\Authorization\FilterFirewall

Neos\Flow\Security\Cryptography\HashService:
  properties:
    cache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_Security_Cryptography_HashService

Neos\Flow\Security\Cryptography\Pbkdf2HashingStrategy:
  scope: singleton
  arguments:
    1:
      setting: Neos.Flow.security.cryptography.Pbkdf2HashingStrategy.dynamicSaltLength
    2:
      setting: Neos.Flow.security.cryptography.Pbkdf2HashingStrategy.iterationCount
    3:
      setting: Neos.Flow.security.cryptography.Pbkdf2HashingStrategy.derivedKeyLength
    4:
      setting: Neos.Flow.security.cryptography.Pbkdf2HashingStrategy.algorithm

Neos\Flow\Security\Cryptography\BCryptHashingStrategy:
  scope: singleton
  arguments:
    1:
      setting: Neos.Flow.security.cryptography.BCryptHashingStrategy.cost

Neos\Flow\Security\Cryptography\PrecomposedHashProvider:
  scope: singleton
  properties:
    cache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_Security_Cryptography_PrecomposedHashProvider

Neos\Flow\Security\Authorization\Privilege\Method\MethodTargetExpressionParser:
  scope: singleton

Neos\Flow\Security\Authorization\Privilege\Method\MethodPrivilegePointcutFilter:
  scope: singleton
  properties:
    objectManager:
      object: Neos\Flow\ObjectManagement\ObjectManagerInterface

Neos\Flow\Security\Authorization\Privilege\Entity\Doctrine\EntityPrivilegeExpressionEvaluator:
  properties:
    expressionCache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Eel_Expression_Code

Neos\Flow\Security\Authentication\Provider\TestingProvider:
  arguments:
    1:
      value: 'TestingProvider'

Neos\Flow\Security\Authentication\Token\UsernamePasswordTokenInterface:
  className: 'Neos\Flow\Security\Authentication\Token\UsernamePassword'

Neos\Flow\Security\Authentication\Token\PasswordTokenInterface:
  className: 'Neos\Flow\Security\Authentication\Token\PasswordToken'

#                                                                          #
# Session                                                                  #
#                                                                          #

Neos\Flow\Session\SessionInterface:
  factoryObjectName: Neos\Flow\Session\SessionManagerInterface
  factoryMethodName: getCurrentSession

Neos\Flow\Session\Session:
  properties:
    metaDataCache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_Session_MetaData
    storageCache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_Session_Storage

Neos\Flow\Session\SessionManagerInterface:
  className: Neos\Flow\Session\SessionManager

Neos\Flow\Session\SessionManager:
  properties:
    metaDataCache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_Session_MetaData
    storageCache:
      object:
        factoryObjectName: Neos\Flow\Cache\CacheManager
        factoryMethodName: getCache
        arguments:
          1:
            value: Flow_Session_Storage
#
# Utility
#

Neos\Utility\SchemaGenerator:
  scope: singleton

Neos\Utility\SchemaValidator:
  scope: singleton
