Skip to content

Commit

Permalink
Add Google reCaptcha to site
Browse files Browse the repository at this point in the history
  • Loading branch information
portchris committed Feb 3, 2020
1 parent a554510 commit 86601ad
Show file tree
Hide file tree
Showing 19 changed files with 1,674 additions and 34 deletions.
108 changes: 108 additions & 0 deletions src/app/code/local/Magecomp/Recaptcha/Helper/Data.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
<?php

class Magecomp_Recaptcha_Helper_Data extends Mage_Core_Helper_Abstract
{
const RECAPTCHA_ENABLE = 'grecaptcha/general/magecomp_select';
const SITEKEY = 'grecaptcha/general/sitekey';
const SECRETKEY = 'grecaptcha/general/secretkey';
const RECAPTCHA_THEME = 'grecaptcha/general/recaptcha_theme';
const RECAPTCHA_CATEGORY = 'grecaptcha/general/recaptcha_category';

public function isEnabled()
{
return (bool)Mage::getStoreConfig(self::RECAPTCHA_ENABLE);
}

public function getKey()
{
return Mage::getStoreConfig(self::SITEKEY);
}

public function getSecretkey()
{
return Mage::getStoreConfig(self::SECRETKEY);
}

public function showOnContact()
{
if ($this->isEnabled()) {
return self::getEnabledPage(0);
}
}

public function showOnReview()
{
if ($this->isEnabled()) {
return self::getEnabledPage(1);
}
}

public function showOnRegister()
{
if ($this->isEnabled()) {
return self::getEnabledPage(2);
}
}

public function showOnOnepage()
{
if ($this->isEnabled()) {
return self::getEnabledPage(3);
}
}
public function showOnLogin()
{
if ($this->isEnabled())
{
return self::getEnabledPage(4);
}
}
public function showOnNewsletter()
{
if ($this->isEnabled())
{
return self::getEnabledPage(5);
}
}

public function showadminlogin()
{
if ($this->isEnabled())
{
return self::getEnabledPage(6);
}
}

public function getTheme()
{
if ($this->isEnabled()) {
if ((Mage::getStoreConfig(self::RECAPTCHA_THEME)) == 0) {
return "light";
} else {
return "dark";
}
}
}

public function getEnabledPage($value)
{
$enablepage = Mage::getStoreConfig(self::RECAPTCHA_CATEGORY);
$enablepage = explode(",", $enablepage);
if (in_array($value, $enablepage))
return true;
else
return false;
}

public function Validate_captcha($response)
{
$verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=' . $this->getSecretkey() . '&response=' . $response);
$responseData = json_decode($verifyResponse);
if ($responseData->success):
return true;
else:
return false;
endif;
}

}
195 changes: 195 additions & 0 deletions src/app/code/local/Magecomp/Recaptcha/Model/Observer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
<?php

class Magecomp_Recaptcha_Model_Observer
{
public function Customercreate($observer)
{
try {
if(Mage::app()->getRequest()->getRouteName()!="adminhtml")
{
if (Mage::helper('recaptcha/data')->showOnRegister()) {
$g_response = Mage::app()->getRequest()->getParam('g-recaptcha-response');
if (isset($g_response) && !empty($g_response)):
if (!(Mage::helper('recaptcha')->Validate_captcha($g_response))):
Mage::getSingleton('core/session')->addError('Please click on the reCAPTCHA box');
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
Mage::app()->getResponse()->sendResponse();
exit;
endif;
else:
$observer->getEvent()->setData(null);
Mage::getSingleton('core/session')->addError('Please click on the reCAPTCHA box');
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
Mage::app()->getResponse()->sendResponse();
exit;
endif;
}
}
} catch (Exception $e) {
Mage::log("Captcha Error :" . $e->getMessage(), null, "recaptcha.log");
}
}
public function Login($observer)
{
try {
if (Mage::helper('recaptcha/data')->showOnLogin())
{
$g_response = Mage::app()->getRequest()->getParam('g-recaptcha-response');
if (isset($g_response) && !empty($g_response)):
if (!(Mage::helper('recaptcha')->Validate_captcha($g_response))):
Mage::getSingleton('core/session')->addError('Please click on the reCAPTCHA box ');
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
Mage::app()->getResponse()->sendResponse();
exit;
endif;
else:
$observer->getEvent()->setData(null);
Mage::getSingleton('core/session')->addError('Please click on the reCAPTCHA box ');
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
Mage::app()->getResponse()->sendResponse();
exit;
endif;
}
}catch (Exception $e) {
Mage::log("Captcha Error :" . $e->getMessage(), null, "recaptcha.log");
}

}
public function Newslettersubmit($observer)
{
try {
$postdata = Mage::app()->getRequest()->getParams();
if(!array_key_exists('is_subscribed',$postdata)) :
if (Mage::helper('recaptcha/data')->showOnNewsletter())
{
$g_response = Mage::app()->getRequest()->getParam('g-recaptcha-response');
if (isset($g_response) && !empty($g_response)):
if (!(Mage::helper('recaptcha')->Validate_captcha($g_response))):
Mage::getSingleton('core/session')->addError('Please click on the reCAPTCHA box');
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
Mage::app()->getResponse()->sendResponse();
exit;
endif;
else:
$observer->getEvent()->setData(null);
Mage::getSingleton('core/session')->addError('Please click on the reCAPTCHA box');
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
Mage::app()->getResponse()->sendResponse();
exit;
endif;
}
endif;
}catch (Exception $e) {
Mage::log("Captcha Error :" . $e->getMessage(), null, "recaptcha.log");
}
}
public function adminloginsubmit($observer)
{
try {
if (Mage::helper('recaptcha/data')->showadminlogin())
{
$g_response = Mage::app()->getRequest()->getParam('g-recaptcha-response');
if (isset($g_response) && !empty($g_response)):
if (!(Mage::helper('recaptcha')->Validate_captcha($g_response))):
Mage::getSingleton('core/session')->addError('Please click on the reCAPTCHA box');
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
Mage::app()->getResponse()->sendResponse();
exit;
endif;
else:
$observer->getEvent()->setData(null);
Mage::getSingleton('core/session')->addError('Please click on the reCAPTCHA box');
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
Mage::app()->getResponse()->sendResponse();
exit;
endif;
}
}catch (Exception $e) {
Mage::log("Captcha Error :" . $e->getMessage(), null, "recaptcha.log");
}
}
public function Reviewsubmit()
{
try {
if (Mage::helper('recaptcha/data')->showOnReview()) {
$g_response = Mage::app()->getRequest()->getParam('g-recaptcha-response');
if (isset($g_response) && !empty($g_response)):
if (!(Mage::helper('recaptcha')->Validate_captcha($g_response))):
Mage::getSingleton('core/session')->addError('Please click on the reCAPTCHA box');
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
Mage::app()->getResponse()->sendResponse();
exit;
endif;
else:
Mage::getSingleton('core/session')->addError('Please click on the reCAPTCHA box.');
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
Mage::app()->getResponse()->sendResponse();
exit;
endif;
}
} catch (Exception $e) {
Mage::log("Captcha Error :" . $e->getMessage(), null, "recaptcha.log");
}
}
public function Contactsubmit()
{
try {
if (Mage::helper('recaptcha/data')->showOnContact()) {
$g_response = Mage::app()->getRequest()->getParam('g-recaptcha-response');
if (isset($g_response) && !empty($g_response)):
if (!(Mage::helper('recaptcha')->Validate_captcha($g_response))):
Mage::getSingleton('core/session')->addError('Please click on the reCAPTCHA box');
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
Mage::app()->getResponse()->sendResponse();
exit;
endif;
else:
Mage::getSingleton('core/session')->addError('Please click on the reCAPTCHA box.');
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
Mage::app()->getResponse()->sendResponse();
exit;
endif;
}
} catch (Exception $e) {
Mage::log("Captcha Error :" . $e->getMessage(), null, "recaptcha.log");
}
}
public function Savebilling()
{
try {
if (Mage::helper('recaptcha/data')->showOnOnepage()) {
$g_response = Mage::app()->getRequest()->getParam('g-recaptcha-response');
if (isset($g_response) && !empty($g_response)):
if (!(Mage::helper('recaptcha')->Validate_captcha($g_response))):
Mage::getSingleton('core/session')->addError('Please click on the reCAPTCHA box');
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
Mage::app()->getResponse()->sendResponse();
exit;
endif;
else:
Mage::getSingleton('core/session')->addError('Please click on the reCAPTCHA box.');
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
Mage::app()->getResponse()->sendResponse();
exit;
endif;
}
} catch (Exception $e) {
Mage::log("Captcha Error :" . $e->getMessage(), null, "recaptcha.log");
}
}
}
?>
15 changes: 15 additions & 0 deletions src/app/code/local/Magecomp/Recaptcha/Model/Source/Pagessource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php
class Magecomp_Recaptcha_Model_Source_Pagessource{
public function toOptionArray(){
return array(
array('value'=>'0','label'=>'Contact Form'),
array('value'=>'1','label'=>'Review Form'),
array('value'=>'2','label'=>'Register Form'),
array('value'=>'3','label'=>'Onepage Checkout'),
array('value'=>'4','label'=>'Customer Login'),
array('value'=>'5','label'=>'Newsletter'),
array('value'=>'6','label'=>'Admin Login')
);
}
}
?>
10 changes: 10 additions & 0 deletions src/app/code/local/Magecomp/Recaptcha/Model/Source/Themesource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php
class Magecomp_Recaptcha_Model_Source_Themesource{
public function toOptionArray(){
return array(
array('value'=>'0','label'=>'Light'),
array('value'=>'1','label'=>'Dark'),
);
}
}
?>
Loading

0 comments on commit 86601ad

Please sign in to comment.