/**
  * @param SessionMiddleware $middleware
  * @param \DateTime $issuedAt
  * @param \DateTime $expiration
  *
  * @return string
  */
 private function createToken(SessionMiddleware $middleware, \DateTime $issuedAt, \DateTime $expiration) : string
 {
     return (string) (new Builder())->setIssuedAt($issuedAt->getTimestamp())->setExpiration($expiration->getTimestamp())->set(SessionMiddleware::SESSION_CLAIM, DefaultSessionData::fromTokenData(['foo' => 'bar']))->sign($this->getSigner($middleware), $this->getSignatureKey($middleware))->getToken();
 }
 /**
  * @dataProvider storageNonScalarDataProvider
  */
 public function testGetWillReturnScalarCastDefaultValueOnNonExistingKey($nonScalar, $expectedScalar)
 {
     self::assertSame($expectedScalar, DefaultSessionData::newEmptySession()->get('key', $nonScalar));
 }
 /**
  * @param string     $method
  * @param string     $uri
  * @param array|null $parameters
  * @param array|null $sessionData
  *
  * @return ResponseInterface
  *
  * @throws \BadMethodCallException
  * @throws \Interop\Container\Exception\NotFoundException
  * @throws \Interop\Container\Exception\ContainerException
  * @throws \InvalidArgumentException
  */
 protected function handleRequest(string $method, string $uri, array $parameters = null, array $sessionData = null) : ResponseInterface
 {
     // Create request
     $request = (new ServerRequest())->withMethod($method)->withUri(new Uri($uri));
     // Set post parameters
     if ($parameters !== null) {
         $request = $request->withParsedBody($parameters);
     }
     // Set PSR-7 session data
     if ($sessionData !== null) {
         // Get session middleware
         $sessionMiddleWare = self::$container->get(SessionMiddleware::class);
         // Get signer
         $signerReflection = new \ReflectionProperty($sessionMiddleWare, 'signer');
         $signerReflection->setAccessible(true);
         $signer = $signerReflection->getValue($sessionMiddleWare);
         // Get signature key
         $signatureKeyReflection = new \ReflectionProperty($sessionMiddleWare, 'signatureKey');
         $signatureKeyReflection->setAccessible(true);
         $signatureKey = $signatureKeyReflection->getValue($sessionMiddleWare);
         // Set session data as a cookie
         $request = $request->withCookieParams([SessionMiddleware::DEFAULT_COOKIE => (string) (new Builder())->setIssuedAt((new \DateTime('-30 second'))->getTimestamp())->setExpiration((new \DateTime('+30 second'))->getTimestamp())->set(SessionMiddleware::SESSION_CLAIM, DefaultSessionData::fromTokenData($sessionData))->sign($signer, $signatureKey)->getToken()]);
     }
     // Invoke the request
     return self::$app->__invoke($request, new Response());
 }
 /**
  * @param Token|null $token
  *
  * @return SessionInterface
  */
 public function extractSessionContainer(Token $token = null) : SessionInterface
 {
     try {
         if (null === $token || !$token->verify($this->signer, $this->verificationKey)) {
             return DefaultSessionData::newEmptySession();
         }
         return DefaultSessionData::fromDecodedTokenData((object) $token->getClaim(self::SESSION_CLAIM, new \stdClass()));
     } catch (\BadMethodCallException $invalidToken) {
         return DefaultSessionData::newEmptySession();
     }
 }