custom/static-plugins/GlobusSW6/src/Service/App/AppIdentifier.php line 61

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace GlobusSW6\Service\App;
  3. use Psr\Log\LoggerInterface;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Session\Session;
  6. use Symfony\Component\DependencyInjection\Container;
  7. class AppIdentifier
  8. {
  9.     const IS_APP_SESSION_KEY 'ianeo_hitseller_is_app';
  10.     const DEVICE_ID_SESSION_KEY 'ianeo_hitseller_app_device_id';
  11.     const AUTH_ID_SESSION_KEY 'ianeo_hitseller_app_auth_id';
  12.     /** @var AppFromRequestIdentifier */
  13.     private $appFromRequestIdentifier;
  14.     /** @var LoggerInterface */
  15.     private $logger;
  16.     /** @var Session */
  17.     private $session;
  18.     /**
  19.      * @param AppFromRequestIdentifier $appFromRequestIdentifier
  20.      * @param LoggerInterface $logger
  21.      * @param Session $session
  22.      * @param Container $container
  23.      */
  24.     public function __construct(AppFromRequestIdentifier $appFromRequestIdentifierLoggerInterface $loggerSession $sessionContainer $container)
  25.     {
  26.         $this->appFromRequestIdentifier $appFromRequestIdentifier;
  27.         $this->logger $logger;
  28.         $this->session $session;
  29.         $this->container $container;
  30.     }
  31.     public function isApp(Request $request)
  32.     {
  33.         $isApp $this->appFromRequestIdentifier->isApp($request);
  34.         if ($isApp) {
  35.             $deviceId $this->appFromRequestIdentifier->getDeviceId($request);
  36.             $authToken $this->appFromRequestIdentifier->getAuthToken($request);
  37.             $this->saveIsAppInSession();
  38.             $this->saveDeviceIdInSession($deviceId);
  39.             if (!empty($authToken)) {
  40.                 $this->saveAuthTokenInSession($authToken);
  41.             }
  42.         }
  43.         return $this->checkIsAppInSession();
  44.     }
  45.     private function checkIsAppInSession() : bool
  46.     {
  47.         if (!$this->loadSession()) {
  48.             return false;
  49.         }
  50.         if (!$this->session->get($this::IS_APP_SESSION_KEY)) {
  51.             $this->logger->debug('AppIdentifier: CheckIsAppInSession: IS_APP_SESSION_KEY not exists in session');
  52.             return false;
  53.         } else {
  54.             $this->logger->debug('AppIdentifier: CheckIsAppInSession: IS_APP_SESSION_KEY exists in session - SessionId: ' $this->session->getId());
  55.             return true;
  56.         }
  57.         return false;
  58.     }
  59.     private function saveIsAppInSession()
  60.     {
  61.         if (!$this->loadSession()) {
  62.             return;
  63.         }
  64.         $this->session->set($this::IS_APP_SESSION_KEYtrue);
  65.     }
  66.     private function saveDeviceIdInSession($deviceId)
  67.     {
  68.         if (!$this->loadSession()) {
  69.             return;
  70.         }
  71.         if ($deviceId) {
  72.             $this->logger->debug('AppIdentifier: saveDeviceIdInSession - ' $deviceId);
  73.             $this->session->set($this::DEVICE_ID_SESSION_KEY$deviceId);
  74.         }
  75.     }
  76.     private function loadSession(): bool
  77.     {
  78.         // TODO-NGS: case !$this->container->initialized('session')
  79.         // TODO-NGS: case !$this->container->initialized('shop')
  80.         if (empty($this->session)) {
  81.             $this->logger->debug('AppIdentifier: Load Session: load session');
  82.             // TODO-NGS: Would be better to load the session directly instead of loading the whole container.
  83.             // Change this accordingly as soon as we know how to get the session directly.
  84.             $this->session $this->container->get('session');
  85.         }
  86.         return true;
  87.     }
  88.     public function saveAuthTokenInSession($authToken)
  89.     {
  90.         if (!$this->loadSession()) {
  91.             return;
  92.         }
  93.         if ($authToken) {
  94.             $this->logger->debug('AppIdentifier: saveAuthTokenInSession - ' $authToken);
  95.             $this->session->set($this::AUTH_ID_SESSION_KEY$authToken);
  96.         }
  97.     }
  98. }