/** * Get validation result * * @param Opifer\QueueIt\Queue\Queue $queue * * @return Opifer\QueueIt\Validation\AcceptedConfirmResult */ public function getValidationResult($queue) { $key = $this->generateKey($queue->getCustomerId(), $queue->getEventId()); if (!isset($_COOKIE[$key])) { return null; } try { $values = $_COOKIE[$key]; $queueId = $values["QueueId"]; $originalUrl = $values["OriginalUrl"]; $placeInQueue = KnownUserFactory::decryptPlaceInQueue($values["PlaceInQueue"]); $redirectType = $values["RedirectType"]; $timeStamp = $values["TimeStamp"]; $actualHash = $values["Hash"]; $expectedHash = $this->generateHash($queueId, $originalUrl, $placeInQueue, $redirectType, $timeStamp); if ($actualHash != $expectedHash) { return null; } $this->writeCookie($queue, $queueId, $originalUrl, $placeInQueue, $redirectType, $timeStamp, $actualHash); $parsedTimeStamp = new \DateTime("now", new \DateTimeZone("UTC")); $parsedTimeStamp->setTimestamp(intval($timeStamp)); return new AcceptedConfirmedResult($queue, new Md5KnownUser($queueId, $placeInQueue, $parsedTimeStamp, $queue->getCustomerId(), $queue->getEventId(), $redirectType, $originalUrl), false); } catch (InvalidKnownUserUrlException $e) { return null; } }
/** * Verify MD5 Hash * * @param string $secretKey * @param KnownUserUrlProviderInterface $urlProvider * @param string $queryStringPrefix * * @throws InvalidArgumentException if $secretKey is null * @throws Opifer\QueueIt\Exception\InvalidKnownUserUrlException * @throws Opifer\QueueIt\Exception\KnownUserException * * @return Opifer\QueueIt\Queue\Md5KnownUser */ public static function verifyMd5Hash($secretKey = null, $urlProvider = null, $queryStringPrefix = null) { global $defaultQueryStringPrefix, $defaultSecretKey, $defaultUrlProviderFactory; if ($urlProvider == null) { $urlProvider = $defaultUrlProviderFactory(); } if ($secretKey == null) { $secretKey = $defaultSecretKey; } if ($queryStringPrefix == null) { $queryStringPrefix = $defaultQueryStringPrefix; } if ($secretKey == null) { throw new \InvalidArgumentException("Secret key is null"); } try { if ($urlProvider->getQueueId($queryStringPrefix) == null && $urlProvider->getPlaceInQueue($queryStringPrefix) == null && $urlProvider->getTimeStamp($queryStringPrefix) == null) { return null; } if ($urlProvider->getQueueId($queryStringPrefix) == null || $urlProvider->getPlaceInQueue($queryStringPrefix) == null || $urlProvider->getTimeStamp($queryStringPrefix) == null) { throw new InvalidKnownUserUrlException(); } KnownUserFactory::verifyUrl($urlProvider->getUrl(), $secretKey); return new Md5KnownUser($urlProvider->getQueueId($queryStringPrefix), KnownUserFactory::decryptPlaceInQueue($urlProvider->getPlaceInQueue($queryStringPrefix)), KnownUserFactory::decodeTimestamp($urlProvider->getTimeStamp($queryStringPrefix)), $urlProvider->getCustomerId($queryStringPrefix), $urlProvider->getEventId($queryStringPrefix), KnownUserFactory::decodeRedirectType($urlProvider->getRedirectType($queryStringPrefix)), $urlProvider->getOriginalUrl($queryStringPrefix)); } catch (KnownUserException $e) { $e->setValidationUrl($urlProvider->getUrl()); $e->setOriginalUrl($urlProvider->getOriginalUrl($queryStringPrefix)); throw $e; } }