Index.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. /**
  3. *
  4. * Copyright © Magento, Inc. All rights reserved.
  5. * See COPYING.txt for license details.
  6. */
  7. declare(strict_types=1);
  8. namespace Magento\Checkout\Controller\Index;
  9. use Magento\Framework\App\Action\HttpGetActionInterface as HttpGetActionInterface;
  10. class Index extends \Magento\Checkout\Controller\Onepage implements HttpGetActionInterface
  11. {
  12. /**
  13. * Checkout page
  14. *
  15. * @return \Magento\Framework\Controller\ResultInterface
  16. */
  17. public function execute()
  18. {
  19. /** @var \Magento\Checkout\Helper\Data $checkoutHelper */
  20. $checkoutHelper = $this->_objectManager->get(\Magento\Checkout\Helper\Data::class);
  21. if (!$checkoutHelper->canOnepageCheckout()) {
  22. $this->messageManager->addErrorMessage(__('One-page checkout is turned off.'));
  23. return $this->resultRedirectFactory->create()->setPath('checkout/cart');
  24. }
  25. $quote = $this->getOnepage()->getQuote();
  26. if (!$quote->hasItems() || $quote->getHasError() || !$quote->validateMinimumAmount()) {
  27. return $this->resultRedirectFactory->create()->setPath('checkout/cart');
  28. }
  29. if (!$this->_customerSession->isLoggedIn() && !$checkoutHelper->isAllowedGuestCheckout($quote)) {
  30. $this->messageManager->addErrorMessage(__('Guest checkout is disabled.'));
  31. return $this->resultRedirectFactory->create()->setPath('checkout/cart');
  32. }
  33. // generate session ID only if connection is unsecure according to issues in session_regenerate_id function.
  34. // @see http://php.net/manual/en/function.session-regenerate-id.php
  35. if (!$this->isSecureRequest()) {
  36. $this->_customerSession->regenerateId();
  37. }
  38. $this->_objectManager->get(\Magento\Checkout\Model\Session::class)->setCartWasUpdated(false);
  39. $this->getOnepage()->initCheckout();
  40. $resultPage = $this->resultPageFactory->create();
  41. $resultPage->getConfig()->getTitle()->set(__('Checkout'));
  42. return $resultPage;
  43. }
  44. /**
  45. * Checks if current request uses SSL and referer also is secure.
  46. *
  47. * @return bool
  48. */
  49. private function isSecureRequest(): bool
  50. {
  51. $request = $this->getRequest();
  52. $referrer = $request->getHeader('referer');
  53. $secure = false;
  54. if ($referrer) {
  55. $scheme = parse_url($referrer, PHP_URL_SCHEME);
  56. $secure = $scheme === 'https';
  57. }
  58. return $secure && $request->isSecure();
  59. }
  60. }