AuthSession.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Security\Model\Plugin;
  7. use Magento\Backend\Model\Auth\Session;
  8. use Magento\Security\Model\AdminSessionsManager;
  9. /**
  10. * Magento\Backend\Model\Auth\Session decorator
  11. */
  12. class AuthSession
  13. {
  14. /**
  15. * @var \Magento\Framework\App\RequestInterface
  16. */
  17. private $request;
  18. /**
  19. * @var \Magento\Framework\Message\ManagerInterface
  20. */
  21. private $messageManager;
  22. /**
  23. * @var AdminSessionsManager
  24. */
  25. private $sessionsManager;
  26. /**
  27. * @var \Magento\Security\Model\SecurityCookie
  28. */
  29. protected $securityCookie;
  30. /**
  31. * @param \Magento\Framework\App\RequestInterface $request
  32. * @param \Magento\Framework\Message\ManagerInterface $messageManager
  33. * @param AdminSessionsManager $sessionsManager
  34. * @param \Magento\Security\Model\SecurityCookie $securityCookie
  35. */
  36. public function __construct(
  37. \Magento\Framework\App\RequestInterface $request,
  38. \Magento\Framework\Message\ManagerInterface $messageManager,
  39. AdminSessionsManager $sessionsManager,
  40. \Magento\Security\Model\SecurityCookie $securityCookie
  41. ) {
  42. $this->request = $request;
  43. $this->messageManager = $messageManager;
  44. $this->sessionsManager = $sessionsManager;
  45. $this->securityCookie = $securityCookie;
  46. }
  47. /**
  48. * Admin Session prolong functionality
  49. *
  50. * @param Session $session
  51. * @param \Closure $proceed
  52. * @return mixed
  53. */
  54. public function aroundProlong(Session $session, \Closure $proceed)
  55. {
  56. if (!$this->sessionsManager->getCurrentSession()->isLoggedInStatus()) {
  57. $session->destroy();
  58. $this->addUserLogoutNotification();
  59. return null;
  60. }
  61. $result = $proceed();
  62. $this->sessionsManager->processProlong();
  63. return $result;
  64. }
  65. /**
  66. * Add user logout notification
  67. *
  68. * @return $this
  69. */
  70. private function addUserLogoutNotification()
  71. {
  72. if ($this->isAjaxRequest()) {
  73. $this->securityCookie->setLogoutReasonCookie(
  74. $this->sessionsManager->getCurrentSession()->getStatus()
  75. );
  76. } elseif ($message = $this->sessionsManager->getLogoutReasonMessage()) {
  77. $this->messageManager->addErrorMessage($message);
  78. }
  79. return $this;
  80. }
  81. /**
  82. * Check if a request is AJAX request
  83. *
  84. * @return bool
  85. */
  86. private function isAjaxRequest()
  87. {
  88. return (bool) $this->request->getParam('isAjax');
  89. }
  90. }