123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Integration\Model\Oauth\Nonce;
- use Magento\Framework\Oauth\ConsumerInterface;
- use Magento\Framework\Oauth\NonceGeneratorInterface;
- class Generator implements NonceGeneratorInterface
- {
- /**
- * @var \Magento\Framework\Oauth\Helper\Oauth
- */
- protected $_oauthHelper;
- /**
- * @var \Magento\Integration\Model\Oauth\NonceFactory
- */
- protected $_nonceFactory;
- /**
- * @var int
- */
- protected $_nonceLength;
- /**
- * @var \Magento\Framework\Stdlib\DateTime\DateTime
- */
- protected $_date;
- /**
- * Possible time deviation for timestamp validation in seconds.
- */
- const TIME_DEVIATION = 600;
- /**
- * @param \Magento\Framework\Oauth\Helper\Oauth $oauthHelper
- * @param \Magento\Integration\Model\Oauth\NonceFactory $nonceFactory
- * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
- * @param int $nonceLength - Length of the generated nonce
- */
- public function __construct(
- \Magento\Framework\Oauth\Helper\Oauth $oauthHelper,
- \Magento\Integration\Model\Oauth\NonceFactory $nonceFactory,
- \Magento\Framework\Stdlib\DateTime\DateTime $date,
- $nonceLength = \Magento\Framework\Oauth\Helper\Oauth::LENGTH_NONCE
- ) {
- $this->_oauthHelper = $oauthHelper;
- $this->_nonceFactory = $nonceFactory;
- $this->_date = $date;
- $this->_nonceLength = $nonceLength;
- }
- /**
- * {@inheritdoc}
- */
- public function generateNonce(ConsumerInterface $consumer = null)
- {
- return $this->_oauthHelper->generateRandomString($this->_nonceLength);
- }
- /**
- * {@inheritdoc}
- */
- public function generateTimestamp()
- {
- return $this->_date->timestamp();
- }
- /**
- * {@inheritdoc}
- */
- public function validateNonce(ConsumerInterface $consumer, $nonce, $timestamp)
- {
- try {
- $timestamp = (int)$timestamp;
- if ($timestamp <= 0 || $timestamp > time() + self::TIME_DEVIATION) {
- throw new \Magento\Framework\Oauth\OauthInputException(
- __('Incorrect timestamp value in the oauth_timestamp parameter')
- );
- }
- /** @var \Magento\Integration\Model\Oauth\Nonce $nonceObj */
- $nonceObj = $this->_nonceFactory->create()->loadByCompositeKey($nonce, $consumer->getId());
- if ($nonceObj->getNonce()) {
- throw new \Magento\Framework\Oauth\Exception(
- __(
- 'The nonce is already being used by the consumer with ID %1',
- [$consumer->getId()]
- )
- );
- }
- $nonceObj->setNonce($nonce)->setConsumerId($consumer->getId())->setTimestamp($timestamp)->save();
- } catch (\Magento\Framework\Oauth\Exception $exception) {
- throw $exception;
- } catch (\Exception $exception) {
- throw new \Magento\Framework\Oauth\Exception(__('An error occurred validating the nonce'));
- }
- }
- }
|