use Config;
use ConfigFactory;
+use CryptHKDF;
use CryptRand;
use EventRelayerGroup;
use GenderCache;
use MWException;
use MimeAnalyzer;
use ObjectCache;
+ use Parser;
use ProxyLookup;
use SearchEngine;
use SearchEngineConfig;
$oldInstance = self::$instance;
- self::$instance = self::newInstance( $bootstrapConfig );
+ self::$instance = self::newInstance( $bootstrapConfig, 'load' );
self::$instance->importWiring( $oldInstance, [ 'BootstrapConfig' ] );
if ( $quick === 'quick' ) {
return $this->getService( 'CryptRand' );
}
+ /**
+ * @since 1.28
+ * @return CryptHKDF
+ */
+ public function getCryptHKDF() {
+ return $this->getService( 'CryptHKDF' );
+ }
+
/**
* @since 1.28
* @return MediaHandlerFactory
return $this->getService( 'ProxyLookup' );
}
+ /**
+ * @since 1.28
+ * @return Parser
+ */
+ public function getParser() {
+ return $this->getService( 'Parser' );
+ }
+
/**
* @since 1.28
* @return GenderCache
);
},
+ 'CryptHKDF' => function( MediaWikiServices $services ) {
+ $config = $services->getMainConfig();
+
+ $secret = $config->get( 'HKDFSecret' ) ?: $config->get( 'SecretKey' );
+ if ( !$secret ) {
+ throw new RuntimeException( "Cannot use MWCryptHKDF without a secret." );
+ }
+
+ // In HKDF, the context can be known to the attacker, but this will
+ // keep simultaneous runs from producing the same output.
+ $context = [ microtime(), getmypid(), gethostname() ];
+
+ // Setup salt cache. Use APC, or fallback to the main cache if it isn't setup
+ $cache = $services->getLocalServerObjectCache();
+ if ( $cache instanceof EmptyBagOStuff ) {
+ $cache = ObjectCache::getLocalClusterInstance();
+ }
+
+ return new CryptHKDF( $secret, $config->get( 'HKDFAlgorithm' ),
+ $cache, $context, $services->getCryptRand()
+ );
+ },
+
'MediaHandlerFactory' => function( MediaWikiServices $services ) {
return new MediaHandlerFactory(
$services->getMainConfig()->get( 'MediaHandlers' )
);
},
+ 'Parser' => function( MediaWikiServices $services ) {
+ $conf = $services->getMainConfig()->get( 'ParserConf' );
+ return ObjectFactory::constructClassInstance( $conf['class'], [ $conf ] );
+ },
+
'LinkCache' => function( MediaWikiServices $services ) {
return new LinkCache(
$services->getTitleFormatter(),
'WatchedItemStore' => [ 'WatchedItemStore', WatchedItemStore::class ],
'WatchedItemQueryService' => [ 'WatchedItemQueryService', WatchedItemQueryService::class ],
'CryptRand' => [ 'CryptRand', CryptRand::class ],
+ 'CryptHKDF' => [ 'CryptHKDF', CryptHKDF::class ],
'MediaHandlerFactory' => [ 'MediaHandlerFactory', MediaHandlerFactory::class ],
+ 'Parser' => [ 'Parser', Parser::class ],
'GenderCache' => [ 'GenderCache', GenderCache::class ],
'LinkCache' => [ 'LinkCache', LinkCache::class ],
'LinkRenderer' => [ 'LinkRenderer', LinkRenderer::class ],