Accountcallback.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. namespace Dotdigitalgroup\Email\Controller\Email;
  3. class Accountcallback extends \Magento\Framework\App\Action\Action
  4. {
  5. /**
  6. * @var \Dotdigitalgroup\Email\Helper\Data
  7. */
  8. private $helper;
  9. /**
  10. * @var \Magento\Framework\Json\Helper\Data
  11. */
  12. private $jsonHelper;
  13. /**
  14. * @var \Magento\Store\Model\StoreManagerInterface
  15. */
  16. private $storeManager;
  17. /**
  18. * @var \Dotdigitalgroup\Email\Model\Trial\TrialSetup
  19. */
  20. private $trialSetup;
  21. /**
  22. * @var \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress
  23. */
  24. private $remoteAddress;
  25. /**
  26. * @var \Magento\Framework\Stdlib\DateTime\Timezone
  27. */
  28. private $timezone;
  29. /**
  30. * Accountcallback constructor.
  31. *
  32. * @param \Magento\Framework\App\Action\Context $context
  33. * @param \Dotdigitalgroup\Email\Helper\Data $helper
  34. * @param \Magento\Framework\Json\Helper\Data $jsonHelper
  35. * @param \Magento\Store\Model\StoreManagerInterface $storeManager
  36. * @param \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress
  37. * @param \Dotdigitalgroup\Email\Model\Trial\TrialSetup $trialSetup
  38. * @param \Magento\Framework\Stdlib\DateTime\Timezone $timezone
  39. */
  40. public function __construct(
  41. \Magento\Framework\App\Action\Context $context,
  42. \Dotdigitalgroup\Email\Helper\Data $helper,
  43. \Magento\Framework\Json\Helper\Data $jsonHelper,
  44. \Magento\Store\Model\StoreManagerInterface $storeManager,
  45. \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress,
  46. \Dotdigitalgroup\Email\Model\Trial\TrialSetup $trialSetup,
  47. \Magento\Framework\Stdlib\DateTime\Timezone $timezone
  48. ) {
  49. $this->timezone = $timezone;
  50. $this->helper = $helper;
  51. $this->jsonHelper = $jsonHelper;
  52. $this->storeManager = $storeManager;
  53. $this->remoteAddress = $remoteAddress;
  54. $this->trialSetup = $trialSetup;
  55. parent::__construct($context);
  56. }
  57. /**
  58. * Execute method.
  59. *
  60. * @return void
  61. */
  62. public function execute()
  63. {
  64. $params = $this->getRequest()->getParams();
  65. //if no value to any of the required params send error response
  66. if (empty($params['apiUser']) ||
  67. empty($params['pass']) ||
  68. empty($params['code']) ||
  69. ! $this->isCodeValid($params['code'])
  70. ) {
  71. $this->sendAjaxResponse(true);
  72. } else {
  73. $this->processAccountCallback($params);
  74. }
  75. }
  76. /**
  77. * @param array $params
  78. */
  79. private function processAccountCallback($params)
  80. {
  81. //Remove temporary passcode
  82. $this->helper->resourceConfig->deleteConfig(
  83. \Dotdigitalgroup\Email\Helper\Config::XML_PATH_CONNECTOR_API_TRIAL_TEMPORARY_PASSCODE,
  84. 'default',
  85. 0
  86. );
  87. //Save api end point
  88. if (isset($params['apiEndpoint'])) {
  89. $this->trialSetup->saveApiEndPoint($params['apiEndpoint']);
  90. } else { //Save empty value to endpoint. New endpoint will be fetched when first api call made.
  91. $this->trialSetup->saveApiEndPoint('');
  92. }
  93. $apiConfigStatus = $this->trialSetup->saveApiCreds($params['apiUser'], $params['pass']);
  94. $dataFieldsStatus = $this->trialSetup->setupDataFields($params['apiUser'], $params['pass']);
  95. $addressBookStatus = $this->trialSetup->createAddressBooks($params['apiUser'], $params['pass']);
  96. $syncStatus = $this->trialSetup->enableSyncForTrial();
  97. if ($apiConfigStatus && $dataFieldsStatus && $addressBookStatus && $syncStatus) {
  98. $this->sendAjaxResponse(false);
  99. } else {
  100. $this->sendAjaxResponse(true);
  101. }
  102. }
  103. /**
  104. * Send ajax response.
  105. *
  106. * @param string $error
  107. * @param string $msg
  108. * @return void
  109. */
  110. private function sendAjaxResponse($error)
  111. {
  112. $message = [
  113. 'err' => $error
  114. ];
  115. $this->getResponse()
  116. ->setHeader('Content-type', 'application/javascript', true)
  117. ->setBody(
  118. 'signupCallback(' . $this->jsonHelper->jsonEncode($message) . ')'
  119. )
  120. ->sendResponse();
  121. }
  122. /**
  123. * Validate code
  124. *
  125. * @param string $code
  126. * @return bool
  127. */
  128. public function isCodeValid($code)
  129. {
  130. $now = $this->timezone->date()->format(\DateTime::ATOM);
  131. $expiryDateString = $this->helper->getWebsiteConfig(
  132. \Dotdigitalgroup\Email\Helper\Config::XML_PATH_CONNECTOR_API_TRIAL_TEMPORARY_PASSCODE_EXPIRY
  133. );
  134. if ($now >= $expiryDateString) {
  135. return false;
  136. }
  137. $codeFromConfig = $this->helper->getWebsiteConfig(
  138. \Dotdigitalgroup\Email\Helper\Config::XML_PATH_CONNECTOR_API_TRIAL_TEMPORARY_PASSCODE
  139. );
  140. return $codeFromConfig === $code;
  141. }
  142. }