PageRenderTime 39ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/app/code/core/Mage/Captcha/Model/Observer.php

https://github.com/speedupmate/Magento-CE-Mirror
PHP | 345 lines | 203 code | 17 blank | 125 comment | 29 complexity | 0c3f2627ede9fc029caa2d3ec822ddb1 MD5 | raw file
  1. <?php
  2. /**
  3. * Magento
  4. *
  5. * NOTICE OF LICENSE
  6. *
  7. * This source file is subject to the Open Software License (OSL 3.0)
  8. * that is bundled with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://opensource.org/licenses/osl-3.0.php
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@magento.com so we can send you a copy immediately.
  14. *
  15. * DISCLAIMER
  16. *
  17. * Do not edit or add to this file if you wish to upgrade Magento to newer
  18. * versions in the future. If you wish to customize Magento for your
  19. * needs please refer to http://www.magento.com for more information.
  20. *
  21. * @category Mage
  22. * @package Mage_Captcha
  23. * @copyright Copyright (c) 2006-2020 Magento, Inc. (http://www.magento.com)
  24. * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  25. */
  26. /**
  27. * Captcha Observer
  28. *
  29. * @category Mage
  30. * @package Mage_Captcha
  31. * @author Magento Core Team <core@magentocommerce.com>
  32. */
  33. class Mage_Captcha_Model_Observer
  34. {
  35. /**
  36. * Check Captcha On Forgot Password Page
  37. *
  38. * @param Varien_Event_Observer $observer
  39. * @return Mage_Captcha_Model_Observer
  40. */
  41. public function checkForgotpassword($observer)
  42. {
  43. $formId = 'user_forgotpassword';
  44. $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
  45. if ($captchaModel->isRequired()) {
  46. $controller = $observer->getControllerAction();
  47. if (!$captchaModel->isCorrect($this->_getCaptchaString($controller->getRequest(), $formId))) {
  48. Mage::getSingleton('customer/session')->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
  49. $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
  50. $controller->getResponse()->setRedirect(Mage::getUrl('*/*/forgotpassword'));
  51. }
  52. }
  53. return $this;
  54. }
  55. /**
  56. * Check Captcha On User Login Page
  57. *
  58. * @param Varien_Event_Observer $observer
  59. * @return Mage_Captcha_Model_Observer
  60. */
  61. public function checkUserLogin($observer)
  62. {
  63. $formId = 'user_login';
  64. $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
  65. $controller = $observer->getControllerAction();
  66. $loginParams = $controller->getRequest()->getPost('login');
  67. $login = isset($loginParams['username']) ? $loginParams['username'] : null;
  68. if ($captchaModel->isRequired($login)) {
  69. $word = $this->_getCaptchaString($controller->getRequest(), $formId);
  70. if (!$captchaModel->isCorrect($word)) {
  71. Mage::getSingleton('customer/session')->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
  72. $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
  73. Mage::getSingleton('customer/session')->setUsername($login);
  74. $beforeUrl = Mage::getSingleton('customer/session')->getBeforeAuthUrl();
  75. $url = $beforeUrl ? $beforeUrl : Mage::helper('customer')->getLoginUrl();
  76. $controller->getResponse()->setRedirect($url);
  77. }
  78. }
  79. $captchaModel->logAttempt($login);
  80. return $this;
  81. }
  82. /**
  83. * Check Captcha On Register User Page
  84. *
  85. * @param Varien_Event_Observer $observer
  86. * @return Mage_Captcha_Model_Observer
  87. */
  88. public function checkUserCreate($observer)
  89. {
  90. $formId = 'user_create';
  91. $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
  92. if ($captchaModel->isRequired()) {
  93. $controller = $observer->getControllerAction();
  94. if (!$captchaModel->isCorrect($this->_getCaptchaString($controller->getRequest(), $formId))) {
  95. Mage::getSingleton('customer/session')->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
  96. $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
  97. Mage::getSingleton('customer/session')->setCustomerFormData($controller->getRequest()->getPost());
  98. $controller->getResponse()->setRedirect(Mage::getUrl('*/*/create'));
  99. }
  100. }
  101. return $this;
  102. }
  103. /**
  104. * Check Captcha On Checkout as Guest Page
  105. *
  106. * @param Varien_Event_Observer $observer
  107. * @return Mage_Captcha_Model_Observer
  108. */
  109. public function checkGuestCheckout($observer)
  110. {
  111. $formId = 'guest_checkout';
  112. $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
  113. $checkoutMethod = Mage::getSingleton('checkout/type_onepage')->getQuote()->getCheckoutMethod();
  114. if ($checkoutMethod == Mage_Checkout_Model_Type_Onepage::METHOD_GUEST) {
  115. if ($captchaModel->isRequired()) {
  116. $controller = $observer->getControllerAction();
  117. if (!$captchaModel->isCorrect($this->_getCaptchaString($controller->getRequest(), $formId))) {
  118. $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
  119. $result = array('error' => 1, 'message' => Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
  120. $controller->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
  121. }
  122. }
  123. }
  124. return $this;
  125. }
  126. /**
  127. * Check Captcha On Checkout Register Page
  128. *
  129. * @param Varien_Event_Observer $observer
  130. * @return Mage_Captcha_Model_Observer
  131. */
  132. public function checkRegisterCheckout($observer)
  133. {
  134. $formId = 'register_during_checkout';
  135. $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
  136. $checkoutMethod = Mage::getSingleton('checkout/type_onepage')->getQuote()->getCheckoutMethod();
  137. if ($checkoutMethod == Mage_Checkout_Model_Type_Onepage::METHOD_REGISTER) {
  138. if ($captchaModel->isRequired()) {
  139. $controller = $observer->getControllerAction();
  140. if (!$captchaModel->isCorrect($this->_getCaptchaString($controller->getRequest(), $formId))) {
  141. $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
  142. $result = array('error' => 1, 'message' => Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
  143. $controller->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
  144. }
  145. }
  146. }
  147. return $this;
  148. }
  149. /**
  150. * Check Captcha On User Login Backend Page
  151. *
  152. * @param Varien_Event_Observer $observer
  153. * @return Mage_Captcha_Model_Observer
  154. */
  155. public function checkUserLoginBackend($observer)
  156. {
  157. $formId = 'backend_login';
  158. $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
  159. $loginParams = Mage::app()->getRequest()->getPost('login', array());
  160. $login = array_key_exists('username', $loginParams) ? $loginParams['username'] : null;
  161. if ($captchaModel->isRequired($login)) {
  162. if (!$captchaModel->isCorrect($this->_getCaptchaString(Mage::app()->getRequest(), $formId))) {
  163. $captchaModel->logAttempt($login);
  164. Mage::throwException(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
  165. }
  166. }
  167. $captchaModel->logAttempt($login);
  168. return $this;
  169. }
  170. /**
  171. * Returns backend session
  172. *
  173. * @return Mage_Adminhtml_Model_Session
  174. */
  175. protected function _getBackendSession()
  176. {
  177. return Mage::getSingleton('adminhtml/session');
  178. }
  179. /**
  180. * Check Captcha On User Login Backend Page
  181. *
  182. * @param Varien_Event_Observer $observer
  183. * @return Mage_Captcha_Model_Observer
  184. */
  185. public function checkUserForgotPasswordBackend($observer)
  186. {
  187. $formId = 'backend_forgotpassword';
  188. $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
  189. $controller = $observer->getControllerAction();
  190. $email = (string) $observer->getControllerAction()->getRequest()->getParam('email');
  191. $params = $observer->getControllerAction()->getRequest()->getParams();
  192. if (!empty($email) && !empty($params)){
  193. if ($captchaModel->isRequired()){
  194. if (!$captchaModel->isCorrect($this->_getCaptchaString($controller->getRequest(), $formId))) {
  195. $this->_getBackendSession()->setEmail((string) $controller->getRequest()->getPost('email'));
  196. $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
  197. $this->_getBackendSession()->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
  198. $controller->getResponse()->setRedirect(Mage::getUrl('*/*/forgotpassword'));
  199. }
  200. }
  201. }
  202. return $this;
  203. }
  204. /**
  205. * Reset Attempts For Frontend
  206. *
  207. * @param Varien_Event_Observer $observer
  208. * @return Mage_Captcha_Model_Observer
  209. */
  210. public function resetAttemptForFrontend($observer)
  211. {
  212. return $this->_resetAttempt($observer->getModel()->getEmail());
  213. }
  214. /**
  215. * Reset Attempts For Backend
  216. *
  217. * @param Varien_Event_Observer $observer
  218. * @return Mage_Captcha_Model_Observer
  219. */
  220. public function resetAttemptForBackend($observer)
  221. {
  222. return $this->_resetAttempt($observer->getUser()->getUsername());
  223. }
  224. /**
  225. * Delete Unnecessary logged attempts
  226. *
  227. * @return Mage_Captcha_Model_Observer
  228. */
  229. public function deleteOldAttempts()
  230. {
  231. Mage::getResourceModel('captcha/log')->deleteOldAttempts();
  232. return $this;
  233. }
  234. /**
  235. * Delete Expired Captcha Images
  236. *
  237. * @return Mage_Captcha_Model_Observer
  238. */
  239. public function deleteExpiredImages()
  240. {
  241. foreach (Mage::app()->getWebsites(true) as $website){
  242. $expire = time() - Mage::helper('captcha')->getConfigNode('timeout', $website->getDefaultStore())*60;
  243. $imageDirectory = Mage::helper('captcha')->getImgDir($website);
  244. foreach (new DirectoryIterator($imageDirectory) as $file) {
  245. if ($file->isFile() && pathinfo($file->getFilename(), PATHINFO_EXTENSION) == 'png') {
  246. if ($file->getMTime() < $expire) {
  247. unlink($file->getPathname());
  248. }
  249. }
  250. }
  251. }
  252. return $this;
  253. }
  254. /**
  255. * Reset Attempts
  256. *
  257. * @param string $login
  258. * @return Mage_Captcha_Model_Observer
  259. */
  260. protected function _resetAttempt($login)
  261. {
  262. Mage::getResourceModel('captcha/log')->deleteUserAttempts($login);
  263. return $this;
  264. }
  265. /**
  266. * Get Captcha String
  267. *
  268. * @param Varien_Object $request
  269. * @param string $formId
  270. * @return string
  271. */
  272. protected function _getCaptchaString($request, $formId)
  273. {
  274. $captchaParams = $request->getPost(Mage_Captcha_Helper_Data::INPUT_NAME_FIELD_VALUE);
  275. return $captchaParams[$formId];
  276. }
  277. /**
  278. * Check Captcha On Share Wishlist Page
  279. *
  280. * @param Varien_Event_Observer $observer
  281. * @return Mage_Captcha_Model_Observer
  282. */
  283. public function checkWishlistSharing($observer)
  284. {
  285. $formId = 'wishlist_sharing';
  286. $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
  287. if ($captchaModel->isRequired()) {
  288. $controller = $observer->getControllerAction();
  289. $request = $controller->getRequest();
  290. if (!$captchaModel->isCorrect($this->_getCaptchaString($request, $formId))) {
  291. Mage::getSingleton('wishlist/session')->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
  292. $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
  293. Mage::getSingleton('wishlist/session')->setSharingForm($request->getPost());
  294. $wishlistId = (int)$request->getParam('wishlist_id');
  295. $controller->getResponse()
  296. ->setRedirect(Mage::getUrl('wishlist/index/share/wishlist_id/' . $wishlistId));
  297. }
  298. }
  299. return $this;
  300. }
  301. /**
  302. * Check Captcha On Email Product To A Friend Page
  303. *
  304. * @param Varien_Event_Observer $observer
  305. * @return Mage_Captcha_Model_Observer
  306. */
  307. public function checkSendfriendSend($observer)
  308. {
  309. $formId = 'sendfriend_send';
  310. $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
  311. if ($captchaModel->isRequired()) {
  312. $controller = $observer->getControllerAction();
  313. $request = $controller->getRequest();
  314. if (!$captchaModel->isCorrect($this->_getCaptchaString($request, $formId))) {
  315. Mage::getSingleton('catalog/session')->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
  316. $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
  317. Mage::getSingleton('catalog/session')->setFormData($request->getPost());
  318. $id = (int)$request->getParam('id');
  319. $catId = $request->getParam('cat_id');
  320. if (null !== $catId) {
  321. $id .= '/cat_id/' . (int)$catId;
  322. }
  323. $controller->getResponse()->setRedirect(Mage::getUrl('*/*/send/id/' . $id));
  324. }
  325. }
  326. return $this;
  327. }
  328. }