Convert SessionManager to a factory class

This commit is contained in:
Pierre Rudloff 2020-10-21 22:47:15 +02:00
parent 5b0ee7651b
commit de8c5e5dc7
10 changed files with 64 additions and 52 deletions

View file

@ -10,7 +10,7 @@ use Alltube\Config;
use Alltube\Library\Downloader; use Alltube\Library\Downloader;
use Alltube\Library\Video; use Alltube\Library\Video;
use Alltube\LocaleManager; use Alltube\LocaleManager;
use Alltube\SessionManager; use Alltube\SessionFactory;
use Aura\Session\Segment; use Aura\Session\Segment;
use Consolidation\Log\Logger; use Consolidation\Log\Logger;
use Psr\Container\ContainerInterface; use Psr\Container\ContainerInterface;
@ -85,7 +85,7 @@ abstract class BaseController
{ {
$this->config = $container->get('config'); $this->config = $container->get('config');
$this->container = $container; $this->container = $container;
$session = SessionManager::getSession(); $session = $container->get('session');
$this->sessionSegment = $session->getSegment(self::class); $this->sessionSegment = $session->getSegment(self::class);
$this->localeManager = $this->container->get('locale'); $this->localeManager = $this->container->get('locale');
$this->downloader = $this->config->getDownloader(); $this->downloader = $this->config->getDownloader();

View file

@ -4,6 +4,7 @@ namespace Alltube\Factory;
use Alltube\Exception\DependencyException; use Alltube\Exception\DependencyException;
use Alltube\LocaleManager; use Alltube\LocaleManager;
use Slim\Container;
/** /**
* Class LocaleManagerFactory * Class LocaleManagerFactory
@ -13,15 +14,16 @@ class LocaleManagerFactory
{ {
/** /**
* @param Container $container
* @return LocaleManager|null * @return LocaleManager|null
* @throws DependencyException * @throws DependencyException
*/ */
public static function create() public static function create(Container $container)
{ {
if (!class_exists('Locale')) { if (!class_exists('Locale')) {
throw new DependencyException('You need to install the intl extension for PHP.'); throw new DependencyException('You need to install the intl extension for PHP.');
} }
return new LocaleManager(); return new LocaleManager($container->get('session'));
} }
} }

View file

@ -0,0 +1,27 @@
<?php
/**
* SessionFactory class.
*/
namespace Alltube\Factory;
use Aura\Session\Session;
/**
* Manage sessions.
*/
class SessionFactory
{
/**
* Get the current session.
*
* @return Session
*/
public static function create()
{
$session_factory = new \Aura\Session\SessionFactory();
return $session_factory->newInstance($_COOKIE);
}
}

View file

@ -7,6 +7,7 @@
namespace Alltube; namespace Alltube;
use Aura\Session\Segment; use Aura\Session\Segment;
use Aura\Session\Session;
use Symfony\Component\Finder\Finder; use Symfony\Component\Finder\Finder;
use Symfony\Component\Translation\Translator; use Symfony\Component\Translation\Translator;
use Symfony\Component\Translation\Loader\PoFileLoader; use Symfony\Component\Translation\Loader\PoFileLoader;
@ -52,10 +53,10 @@ class LocaleManager
/** /**
* LocaleManager constructor. * LocaleManager constructor.
* @param Session $session
*/ */
public function __construct() public function __construct(Session $session)
{ {
$session = SessionManager::getSession();
$this->sessionSegment = $session->getSegment(self::class); $this->sessionSegment = $session->getSegment(self::class);
$cookieLocale = $this->sessionSegment->get('locale'); $cookieLocale = $this->sessionSegment->get('locale');

View file

@ -1,38 +0,0 @@
<?php
/**
* SessionManager class.
*/
namespace Alltube;
use Aura\Session\Session;
use Aura\Session\SessionFactory;
/**
* Manage sessions.
*/
class SessionManager
{
/**
* Current session.
*
* @var Session
*/
private static $session;
/**
* Get the current session.
*
* @return Session
*/
public static function getSession()
{
if (!isset(self::$session)) {
$session_factory = new SessionFactory();
self::$session = $session_factory->newInstance($_COOKIE);
}
return self::$session;
}
}

View file

@ -9,6 +9,7 @@ use Alltube\ErrorHandler;
use Alltube\Factory\ConfigFactory; use Alltube\Factory\ConfigFactory;
use Alltube\Factory\LocaleManagerFactory; use Alltube\Factory\LocaleManagerFactory;
use Alltube\Factory\LoggerFactory; use Alltube\Factory\LoggerFactory;
use Alltube\Factory\SessionFactory;
use Alltube\Factory\ViewFactory; use Alltube\Factory\ViewFactory;
use Alltube\Middleware\CspMiddleware; use Alltube\Middleware\CspMiddleware;
use Alltube\Middleware\LinkHeaderMiddleware; use Alltube\Middleware\LinkHeaderMiddleware;
@ -32,8 +33,11 @@ try {
// Config. // Config.
$container['config'] = ConfigFactory::create($container); $container['config'] = ConfigFactory::create($container);
// Session.
$container['session'] = SessionFactory::create();
// Locales. // Locales.
$container['locale'] = LocaleManagerFactory::create(); $container['locale'] = LocaleManagerFactory::create($container);
// Smarty. // Smarty.
$container['view'] = ViewFactory::create($container); $container['view'] = ViewFactory::create($container);

View file

@ -11,6 +11,9 @@ use Alltube\Controller\BaseController;
use Alltube\Controller\DownloadController; use Alltube\Controller\DownloadController;
use Alltube\Controller\FrontController; use Alltube\Controller\FrontController;
use Alltube\Exception\ConfigException; use Alltube\Exception\ConfigException;
use Alltube\Exception\DependencyException;
use Alltube\Factory\LocaleManagerFactory;
use Alltube\Factory\SessionFactory;
use Alltube\Factory\ViewFactory; use Alltube\Factory\ViewFactory;
use Alltube\LocaleManager; use Alltube\LocaleManager;
use Psr\Log\NullLogger; use Psr\Log\NullLogger;
@ -55,6 +58,7 @@ abstract class ControllerTest extends BaseTest
/** /**
* Prepare tests. * Prepare tests.
* @throws ConfigException|SmartyException * @throws ConfigException|SmartyException
* @throws DependencyException
*/ */
protected function setUp(): void protected function setUp(): void
{ {
@ -64,7 +68,8 @@ abstract class ControllerTest extends BaseTest
$this->request = Request::createFromEnvironment(Environment::mock()); $this->request = Request::createFromEnvironment(Environment::mock());
$this->response = new Response(); $this->response = new Response();
$this->container['config'] = Config::fromFile($this->getConfigFile()); $this->container['config'] = Config::fromFile($this->getConfigFile());
$this->container['locale'] = new LocaleManager(); $this->container['session'] = SessionFactory::create();
$this->container['locale'] = LocaleManagerFactory::create($this->container);
$this->container['view'] = ViewFactory::create($this->container, $this->request); $this->container['view'] = ViewFactory::create($this->container, $this->request);
$this->container['logger'] = new NullLogger(); $this->container['logger'] = new NullLogger();

View file

@ -6,6 +6,7 @@
namespace Alltube\Test; namespace Alltube\Test;
use Alltube\Factory\SessionFactory;
use Alltube\Locale; use Alltube\Locale;
use Alltube\LocaleManager; use Alltube\LocaleManager;
@ -27,7 +28,7 @@ class LocaleManagerTest extends BaseTest
protected function setUp(): void protected function setUp(): void
{ {
$_SESSION[LocaleManager::class]['locale'] = 'foo_BAR'; $_SESSION[LocaleManager::class]['locale'] = 'foo_BAR';
$this->localeManager = new LocaleManager(); $this->localeManager = new LocaleManager(SessionFactory::create());
} }
/** /**

View file

@ -6,7 +6,9 @@
namespace Alltube\Test; namespace Alltube\Test;
use Alltube\LocaleManager; use Alltube\Exception\DependencyException;
use Alltube\Factory\LocaleManagerFactory;
use Alltube\Factory\SessionFactory;
use Alltube\Middleware\LocaleMiddleware; use Alltube\Middleware\LocaleMiddleware;
use Slim\Container; use Slim\Container;
use Slim\Http\Environment; use Slim\Http\Environment;
@ -34,11 +36,13 @@ class LocaleMiddlewareTest extends BaseTest
/** /**
* Prepare tests. * Prepare tests.
* @throws DependencyException
*/ */
protected function setUp(): void protected function setUp(): void
{ {
$this->container = new Container(); $this->container = new Container();
$this->container['locale'] = new LocaleManager(); $this->container['session'] = SessionFactory::create();
$this->container['locale'] = LocaleManagerFactory::create($this->container);
$this->middleware = new LocaleMiddleware($this->container); $this->middleware = new LocaleMiddleware($this->container);
} }

View file

@ -6,8 +6,10 @@
namespace Alltube\Test; namespace Alltube\Test;
use Alltube\Exception\DependencyException;
use Alltube\Factory\LocaleManagerFactory;
use Alltube\Factory\SessionFactory;
use Alltube\Factory\ViewFactory; use Alltube\Factory\ViewFactory;
use Alltube\LocaleManager;
use Slim\Container; use Slim\Container;
use Slim\Http\Environment; use Slim\Http\Environment;
use Slim\Http\Request; use Slim\Http\Request;
@ -24,11 +26,13 @@ class ViewFactoryTest extends BaseTest
* *
* @return void * @return void
* @throws SmartyException * @throws SmartyException
* @throws DependencyException
*/ */
public function testCreate() public function testCreate()
{ {
$container = new Container(); $container = new Container();
$container['locale'] = new LocaleManager(); $container['session'] = SessionFactory::create();
$container['locale'] = LocaleManagerFactory::create($container);
$view = ViewFactory::create($container); $view = ViewFactory::create($container);
$this->assertInstanceOf(Smarty::class, $view); $this->assertInstanceOf(Smarty::class, $view);
} }
@ -38,11 +42,13 @@ class ViewFactoryTest extends BaseTest
* *
* @return void * @return void
* @throws SmartyException * @throws SmartyException
* @throws DependencyException
*/ */
public function testCreateWithXForwardedProto() public function testCreateWithXForwardedProto()
{ {
$container = new Container(); $container = new Container();
$container['locale'] = new LocaleManager(); $container['session'] = SessionFactory::create();
$container['locale'] = LocaleManagerFactory::create($container);
$request = Request::createFromEnvironment(Environment::mock()); $request = Request::createFromEnvironment(Environment::mock());
$view = ViewFactory::create($container, $request->withHeader('X-Forwarded-Proto', 'https')); $view = ViewFactory::create($container, $request->withHeader('X-Forwarded-Proto', 'https'));
$this->assertInstanceOf(Smarty::class, $view); $this->assertInstanceOf(Smarty::class, $view);