OTPRequest.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Analytics\Model\Connector;
  7. use Magento\Analytics\Model\AnalyticsToken;
  8. use Magento\Analytics\Model\Connector\Http\ResponseResolver;
  9. use Magento\Framework\App\Config\ScopeConfigInterface;
  10. use Magento\Framework\HTTP\ZendClient;
  11. use Magento\Store\Model\Store;
  12. use Psr\Log\LoggerInterface;
  13. /**
  14. * Representation of an 'OTP' request.
  15. *
  16. * The request is responsible for obtaining of an OTP from the MBI service.
  17. *
  18. * OTP (One-Time Password) is a password that is valid for short period of time
  19. * and may be used only for one login session.
  20. */
  21. class OTPRequest
  22. {
  23. /**
  24. * Resource for handling MBI token value.
  25. *
  26. * @var AnalyticsToken
  27. */
  28. private $analyticsToken;
  29. /**
  30. * @var Http\ClientInterface
  31. */
  32. private $httpClient;
  33. /**
  34. * @var LoggerInterface
  35. */
  36. private $logger;
  37. /**
  38. * @var ScopeConfigInterface
  39. */
  40. private $config;
  41. /**
  42. * @var ResponseResolver
  43. */
  44. private $responseResolver;
  45. /**
  46. * Path to the configuration value which contains
  47. * an URL that provides an OTP.
  48. *
  49. * @var string
  50. */
  51. private $otpUrlConfigPath = 'analytics/url/otp';
  52. /**
  53. * @param AnalyticsToken $analyticsToken
  54. * @param Http\ClientInterface $httpClient
  55. * @param ScopeConfigInterface $config
  56. * @param ResponseResolver $responseResolver
  57. * @param LoggerInterface $logger
  58. */
  59. public function __construct(
  60. AnalyticsToken $analyticsToken,
  61. Http\ClientInterface $httpClient,
  62. ScopeConfigInterface $config,
  63. ResponseResolver $responseResolver,
  64. LoggerInterface $logger
  65. ) {
  66. $this->analyticsToken = $analyticsToken;
  67. $this->httpClient = $httpClient;
  68. $this->config = $config;
  69. $this->responseResolver = $responseResolver;
  70. $this->logger = $logger;
  71. }
  72. /**
  73. * Performs obtaining of an OTP from the MBI service.
  74. *
  75. * Returns received OTP or FALSE in case of failure.
  76. *
  77. * @return string|false
  78. */
  79. public function call()
  80. {
  81. $result = false;
  82. if ($this->analyticsToken->isTokenExist()) {
  83. $response = $this->httpClient->request(
  84. ZendClient::POST,
  85. $this->config->getValue($this->otpUrlConfigPath),
  86. [
  87. "access-token" => $this->analyticsToken->getToken(),
  88. "url" => $this->config->getValue(Store::XML_PATH_SECURE_BASE_URL),
  89. ]
  90. );
  91. $result = $this->responseResolver->getResult($response);
  92. if (!$result) {
  93. $this->logger->warning(
  94. sprintf(
  95. 'Obtaining of an OTP from the MBI service has been failed: %s. Content-Type: %s',
  96. !empty($response->getBody()) ? $response->getBody() : 'Response body is empty',
  97. $response->getHeader('Content-Type')
  98. )
  99. );
  100. }
  101. }
  102. return $result;
  103. }
  104. }