mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-17 23:13:15 +00:00
Extract HTTP meta service provider
This commit is contained in:
107
lib/Alchemy/Phrasea/Core/MetaProvider/HttpStackMetaProvider.php
Normal file
107
lib/Alchemy/Phrasea/Core/MetaProvider/HttpStackMetaProvider.php
Normal file
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
|
||||
namespace Alchemy\Phrasea\Core\MetaProvider;
|
||||
|
||||
use Alchemy\Cors\Options\DefaultProvider;
|
||||
use Alchemy\CorsProvider\CorsServiceProvider;
|
||||
use Alchemy\Phrasea\Application as PhraseaApplication;
|
||||
use Alchemy\Phrasea\ControllerProvider\ControllerProviderServiceProvider;
|
||||
use Alchemy\Phrasea\Core\Provider\ContentNegotiationServiceProvider;
|
||||
use Alchemy\Phrasea\Core\Provider\SessionHandlerServiceProvider;
|
||||
use Silex\Application;
|
||||
use Silex\Provider\HttpFragmentServiceProvider;
|
||||
use Silex\Provider\SessionServiceProvider;
|
||||
use Silex\Provider\UrlGeneratorServiceProvider;
|
||||
use Silex\ServiceProviderInterface;
|
||||
use Symfony\Component\HttpFoundation\Session\Storage\Handler\NullSessionHandler;
|
||||
use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage;
|
||||
use Symfony\Component\Routing\RequestContext;
|
||||
|
||||
class HttpStackMetaProvider implements ServiceProviderInterface
|
||||
{
|
||||
|
||||
public function register(Application $app)
|
||||
{
|
||||
if (! $app instanceof PhraseaApplication) {
|
||||
throw new \LogicException('Expected an instance Alchemy\Phrasea\Application');
|
||||
}
|
||||
|
||||
$app->register(new HttpFragmentServiceProvider());
|
||||
$app->register(new UrlGeneratorServiceProvider());
|
||||
|
||||
$this->setupRequestContext($app);
|
||||
|
||||
$app->register(new SessionHandlerServiceProvider());
|
||||
$app->register(new SessionServiceProvider(), [
|
||||
'session.test' => $app->getEnvironment() === PhraseaApplication::ENV_TEST,
|
||||
'session.storage.options' => ['cookie_lifetime' => 0]
|
||||
]);
|
||||
|
||||
$app['session.storage.test'] = $app->share(function (Application $app) {
|
||||
return new MockArraySessionStorage();
|
||||
});
|
||||
|
||||
$app['session.storage.handler'] = $app->share(function (Application $app) {
|
||||
if (!$app['phraseanet.configuration-tester']->isInstalled()) {
|
||||
return new NullSessionHandler();
|
||||
}
|
||||
return $app['session.storage.handler.factory']->create($app['conf']);
|
||||
});
|
||||
|
||||
$app->register(new ControllerProviderServiceProvider());
|
||||
|
||||
$this->registerCors($app);
|
||||
}
|
||||
|
||||
public function setupRequestContext(Application $app)
|
||||
{
|
||||
$app['request_context'] = $app->share($app->extend('request_context', function (RequestContext $context, Application $app) {
|
||||
if ($app['configuration.store']->isSetup()) {
|
||||
$data = parse_url($app['conf']->get('servername'));
|
||||
|
||||
if (isset($data['scheme'])) {
|
||||
$context->setScheme($data['scheme']);
|
||||
}
|
||||
if (isset($data['host'])) {
|
||||
$context->setHost($data['host']);
|
||||
}
|
||||
}
|
||||
|
||||
return $context;
|
||||
}));
|
||||
}
|
||||
|
||||
public function registerCors(Application $app)
|
||||
{
|
||||
$app->register(new ContentNegotiationServiceProvider());
|
||||
$app->register(new CorsServiceProvider(), [
|
||||
'alchemy_cors.debug' => $app['debug'],
|
||||
'alchemy_cors.cache_path' => function (Application $app) {
|
||||
return rtrim($app['cache.path'], '/\\') . '/alchemy_cors.cache.php';
|
||||
},
|
||||
]);
|
||||
|
||||
$app['phraseanet.api_cors.options_provider'] = function (Application $app) {
|
||||
$paths = [];
|
||||
|
||||
if (isset($app['phraseanet.configuration']['api_cors'])) {
|
||||
$config = $app['phraseanet.configuration']['api_cors'];
|
||||
|
||||
if (isset($config['enabled']) && $config['enabled']) {
|
||||
unset($config['enabled']);
|
||||
|
||||
$paths['/api/v\d+/'] = $config;
|
||||
}
|
||||
}
|
||||
|
||||
return new DefaultProvider($paths, []);
|
||||
};
|
||||
|
||||
$app['alchemy_cors.options_providers'][] = 'phraseanet.api_cors.options_provider';
|
||||
}
|
||||
|
||||
public function boot(Application $app)
|
||||
{
|
||||
// no-op
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user