* * For the full copyright and license information, please view the LICENSE file */ namespace Filegator\Services\Session\Adapters; use Filegator\Kernel\Request; use Filegator\Services\Service; use Filegator\Services\Session\Session; use Filegator\Services\Session\SessionStorageInterface; class SessionStorage implements Service, SessionStorageInterface { protected $request; protected $config; public function __construct(Request $request) { $this->request = $request; } public function init(array $config = []) { // we don't have a previous session attached if (!$this->getSession()) { $handler = $config["handler"]; $session = new Session($handler()); //$session->setName("filegator"); $this->setSession($session); } } public function save() { $this->getSession()->save(); } public function set(string $key, $data) { return $this->getSession()->set($key, $data); } public function get(string $key, $default = null) { return $this->getSession() ? $this->getSession()->get($key, $default) : $default; } public function invalidate() { if (!$this->getSession()->isStarted()) { $this->getSession()->start(); } $this->getSession()->invalidate(); } private function setSession(Session $session) { return $this->request->setSession($session); } private function getSession(): ?Session { try { return $this->request->getSession(); } catch (\Symfony\Component\HttpFoundation\Exception\SessionNotFoundException $e) { return null; } } public function migrate($destroy = false, $lifetime = null): bool { return $this->request->getSession()->migrate($destroy, $lifetime); } }