Compare commits

..

No commits in common. "master" and "v2.0.0" have entirely different histories.

20 changed files with 28 additions and 451 deletions

View File

@ -19,37 +19,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
### Security
## 2.0.9 - 25 Juni 2024
- add check $oCaptcha in templates
## 2.0.8 - 08 September 2023
- add check for Amazon Pay - no Captcha
## 2.0.7 - 08 September 2023
- add check for PayPal Checkout - no Captcha
## 2.0.6 - 18 Juli 2023
- don't request captcha if user is logged in
## [2.0.4] - 22 Oct 2021
changed:
- PHP 7.4/8.0 compatibility https://github.com/OXIDprojects/captcha-module/issues/7
- fix metadata version number
## [2.0.3] - 10 Dec 2020
changed: insert Captcha also in the forgotten password form and newsletter subscription
## [2.0.2] - 10 Jan 2020
changed: moved code to its own template file and changed markup to match flow …
## [2.0.1] - 2017-12-07
### Added
- Module available on packagist
## [2.0.0] - 2017-12-05
### Changed

View File

@ -25,7 +25,8 @@ In order to install the module via composer, run the following commands in comma
(where the shop's composer.json file resides).
```
composer require oxid-projects/captcha-module
composer config repositories.oxid-esales/captcha-module vcs https://github.com/OXIDprojects/captcha-module
composer require oxid-esales/captcha-module:dev-master
```
### Module installation via repository cloning

View File

@ -1,58 +0,0 @@
<?php
/**
* #PHPHEADER_OECAPTCHA_LICENSE_INFORMATION#
*/
/**
* Article detailed information widget.
*/
class oeUserComponent extends oeUserComponent_parent
{
/**
* Class handling CAPTCHA image.
*
* @var object
*/
protected $captcha = null;
/**
* Template variable getter. Returns object of handling CAPTCHA image
*
* @return object
*/
public function getCaptcha()
{
if ($this->captcha === null) {
$this->captcha = oxNew('oeCaptcha');
}
return $this->captcha;
}
public function createUser()
{
/* START check for Amazon Pay - no Captcha */
ob_start();
debug_print_backtrace();
$trace = ob_get_contents();
ob_end_clean();
if(str_contains($trace, 'initAmazonPayExpress'))
{
return parent::createUser();
}
/* END check for Amazon Pay - no Captcha /
/* START check for PayPal Checkout - no Captcha */
if(\OxidEsales\Eshop\Core\Registry::getConfig()->getRequestParameter('fnc') == 'approveOrder')
{
return parent::createUser();
}
/* START check for PayPal Checkout - no Captcha */
if (!$this->getCaptcha()->passCaptcha()) {
return false;
}
return parent::createUser();
}
}

View File

@ -1,3 +1,18 @@
[{$smarty.block.parent}]
[{include file="oecaptcha.tpl" labelCssClass="col-lg-2" inputCssClass="col-lg-10"}]
[{assign var="oCaptcha" value=$oView->getCaptcha()}]
<input type="hidden" name="c_mach" value="[{$oCaptcha->getHash()}]"/>
<li class="verify">
<label class="req">[{oxmultilang ident="VERIFICATION_CODE" suffix="COLON"}]</label>
[{assign var="oCaptcha" value=$oView->getCaptcha()}]
[{if $oCaptcha->isImageVisible()}]
<img src="[{$oCaptcha->getImageUrl()}]" alt="">
[{else}]
<span class="verificationCode" id="verifyTextCode">[{$oCaptcha->getText()}]</span>
[{/if}]
<input type="text" data-fieldsize="verify" name="c_mac" value="" class="js-oxValidate js-oxValidate_notEmpty">
<p class="oxValidateError">
<span class="js-oxError_notEmpty">[{oxmultilang ident="ERROR_MESSAGE_INPUT_NOTALLFIELDS"}]</span>
</p>
</li>

View File

@ -1,3 +0,0 @@
[{$smarty.block.parent}]
[{include file="oecaptcha_wave.tpl" labelCssClass="control-label col-lg-2" inputCssClass="col-lg-5"}]

View File

@ -1,3 +0,0 @@
[{$smarty.block.parent}]
[{include file="oecaptcha.tpl" labelCssClass="col-md-3" inputCssClass="col-md-9"}]

View File

@ -1,3 +0,0 @@
[{$smarty.block.parent}]
[{include file="oecaptcha_wave.tpl" labelCssClass="col-lg-2" inputCssClass="col-lg-5"}]

View File

@ -1,3 +0,0 @@
[{$smarty.block.parent}]
[{include file="oecaptcha_wave.tpl" labelCssClass="control-label col-lg-2" inputCssClass="col-lg-5"}]

View File

@ -1,5 +0,0 @@
[{$smarty.block.parent}]
[{if !$oxcmp_user}]
[{include file="oecaptcha_wave.tpl" labelCssClass="col-lg-3" inputCssClass="col-lg-5"}]
[{/if}]

View File

@ -1,3 +0,0 @@
[{$smarty.block.parent}]
[{include file="oecaptcha_wave.tpl" labelCssClass="col-lg-3" inputCssClass="col-lg-8"}]

View File

@ -1,21 +0,0 @@
[{assign var="oCaptcha" value=$oView->getCaptcha()}]
[{if $oCaptcha}]
<input type="hidden" name="c_mach" value="[{$oCaptcha->getHash()}]"/>
<div class="form-group verify">
<label class="req control-label [{$labelCssClass}]" for="c_mac">[{oxmultilang ident="VERIFICATION_CODE"}]</label>
<div class="[{$inputCssClass}] controls">
<div class="input-group">
<span class="input-group-addon">
[{if $oCaptcha->isImageVisible()}]
<img src="[{$oCaptcha->getImageUrl()}]" alt="">
[{else}]
<span class="verificationCode" id="verifyTextCode">[{$oCaptcha->getText()}]</span>
[{/if}]
</span>
<input type="text" data-fieldsize="verify" name="c_mac" value="" class="form-control js-oxValidate js-oxValidate_notEmpty" required>
</div>
</div>
</div>
[{/if}]

View File

@ -1,21 +0,0 @@
[{assign var="oCaptcha" value=$oView->getCaptcha()}]
[{if $oCaptcha}]
<input type="hidden" name="c_mach" value="[{$oCaptcha->getHash()}]"/>
<div class="form-group row verify">
<label class="req [{$labelCssClass}]" for="c_mac">[{oxmultilang ident="VERIFICATION_CODE"}]</label>
<div class="[{$inputCssClass}]">
<div class="input-group">
<span class="input-group-addon" style="padding-right:15px">
[{if $oCaptcha->isImageVisible()}]
<img src="[{$oCaptcha->getImageUrl()}]" alt="">
[{else}]
<span class="verificationCode" id="verifyTextCode">[{$oCaptcha->getText()}]</span>
[{/if}]
</span>
<input type="text" data-fieldsize="verify" name="c_mac" value="" class="form-control js-oxValidate js-oxValidate_notEmpty" required>
</div>
</div>
</div>
[{/if}]

View File

@ -1,5 +1,5 @@
{
"name": "oxid-projects/captcha-module",
"name": "oxid-esales/captcha-module",
"description": "This is Captcha module for OXID eShop.",
"type": "oxideshop-module",
"keywords": ["oxid", "modules", "eShop", "captcha"],

View File

@ -1,29 +0,0 @@
<?php
/**
* #PHPHEADER_OECAPTCHA_LICENSE_INFORMATION#
*/
class oecaptchaaccountuser extends oecaptchaaccountuser_parent
{
/**
* Class handling CAPTCHA image.
*
* @var object
*/
protected $captcha = null;
/**
* Template variable getter. Returns object of handling CAPTCHA image
*
* @return object
*/
public function getCaptcha()
{
if ( $this->captcha === null ) {
$this->captcha = oxNew( 'oeCaptcha' );
}
return $this->captcha;
}
}

View File

@ -1,44 +0,0 @@
<?php
/**
* #PHPHEADER_OECAPTCHA_LICENSE_INFORMATION#
*/
class oeCaptchaForgotPwd extends oeCaptchaForgotPwd_parent
{
/**
* Class handling CAPTCHA image.
*
* @var object
*/
protected $captcha = null;
/**
* Composes and sends user written message, returns false if some parameters
* are missing.
*
* @return bool
*/
public function forgotpassword()
{
if (!$this->getCaptcha()->passCaptcha()) {
return false;
}
return parent::forgotpassword();
}
/**
* Template variable getter. Returns object of handling CAPTCHA image
*
* @return object
*/
public function getCaptcha()
{
if ($this->captcha === null) {
$this->captcha = oxNew('oeCaptcha');
}
return $this->captcha;
}
}

View File

@ -1,44 +0,0 @@
<?php
/**
* #PHPHEADER_OECAPTCHA_LICENSE_INFORMATION#
*/
class oeCaptchaNewsletter extends oeCaptchaNewsletter_parent
{
/**
* Class handling CAPTCHA image.
*
* @var object
*/
protected $captcha = null;
/**
* Composes and sends user written message, returns false if some parameters
* are missing.
*
* @return bool
*/
public function send()
{
if (!$this->getCaptcha()->passCaptcha()) {
return false;
}
return parent::send();
}
/**
* Template variable getter. Returns object of handling CAPTCHA image
*
* @return object
*/
public function getCaptcha()
{
if ($this->captcha === null) {
$this->captcha = oxNew('oeCaptcha');
}
return $this->captcha;
}
}

View File

@ -1,52 +0,0 @@
<?php
/**
* #PHPHEADER_OECAPTCHA_LICENSE_INFORMATION#
*/
/**
* Article suggestion page.
* Collects some article base information, sets default recomendation text,
* sends suggestion mail to user.
*/
class oeCaptchaRegister extends oeCaptchaRegister_parent
{
/**
* Class handling CAPTCHA image.
*
* @var object
*/
protected $captcha = null;
/**
* Sends product suggestion mail and returns a URL according to
* URL formatting rules.
*
* Template variables:
* <b>editval</b>, <b>error</b>
*
* @return null
*/
public function send()
{
// spam spider prevension
if (!$this->getCaptcha()->passCaptcha()) {
return false;
}
return parent::send();
}
/**
* Template variable getter. Returns object of handling CAPTCHA image
*
* @return object
*/
public function getCaptcha()
{
if ($this->captcha === null) {
$this->captcha = oxNew('oeCaptcha');
}
return $this->captcha;
}
}

View File

@ -1,52 +0,0 @@
<?php
/**
* #PHPHEADER_OECAPTCHA_LICENSE_INFORMATION#
*/
/**
* Article suggestion page.
* Collects some article base information, sets default recomendation text,
* sends suggestion mail to user.
*/
class oeCaptchaUser extends oeCaptchaUser_parent
{
/**
* Class handling CAPTCHA image.
*
* @var object
*/
protected $captcha = null;
/**
* Sends product suggestion mail and returns a URL according to
* URL formatting rules.
*
* Template variables:
* <b>editval</b>, <b>error</b>
*
* @return null
*/
public function send()
{
// spam spider prevension
if (!$this->getCaptcha()->passCaptcha()) {
return false;
}
return parent::send();
}
/**
* Template variable getter. Returns object of handling CAPTCHA image
*
* @return object
*/
public function getCaptcha()
{
if ($this->captcha === null) {
$this->captcha = oxNew('oeCaptcha');
}
return $this->captcha;
}
}

View File

@ -50,7 +50,7 @@ class oeCaptcha extends oxSuperCfg
if (!$this->text) {
$this->text = '';
for ($i = 0; $i < $this->macLength; $i++) {
$this->text .= strtolower($this->macChars[rand(0, strlen($this->macChars) - 1)]);
$this->text .= strtolower($this->macChars{rand(0, strlen($this->macChars) - 1)});
}
}

View File

@ -17,10 +17,6 @@
/**
* Metadata version
*/
use OxidEsales\Eshop\Application\Component\UserComponent;
use OxidEsales\Eshop\Application\Controller\AccountUserController;
$sMetadataVersion = '1.1';
/**
@ -37,89 +33,26 @@ $aModule = array(
'en' => 'OXID eSales Simple Captcha Module',
),
'thumbnail' => 'out/pictures/picture.png',
'version' => '2.0.9',
'version' => '2.0.0',
'author' => 'OXID eSales AG',
'url' => 'https://www.oxid-esales.com/',
'url' => 'http://www.oxid-esales.com/',
'email' => '',
'extend' => array('details' => 'oe/captcha/controllers/oecaptchadetails',
'contact' => 'oe/captcha/controllers/oecaptchacontact',
'forgotpwd' => 'oe/captcha/controllers/oecaptchaforgotpwd',
'invite' => 'oe/captcha/controllers/oecaptchainvite',
'newsletter' => 'oe/captcha/controllers/oecaptchanewsletter',
'pricealarm' => 'oe/captcha/controllers/oecaptchapricealarm',
'suggest' => 'oe/captcha/controllers/oecaptchasuggest',
'oxwarticledetails' => 'oe/captcha/application/component/widget/oecaptchawarticledetails',
UserComponent::class => 'oe/captcha/application/component/oeusercomponent',
'register' => 'oe/captcha/controllers/oecaptcharegister',
'user' => 'oe/captcha/controllers/oecaptchauser',
AccountUserController::class => 'oe/captcha/controllers/oecaptchaaccountuser'
),
'oxwarticledetails' => 'oe/captcha/application/component/widget/oecaptchawarticledetails'),
'files' => array(
'oecaptcha' => 'oe/captcha/core/oecaptcha.php',
'oecaptchaEvents' => 'oe/captcha/core/oecaptchaevents.php',
),
'templates' => array(
'oecaptcha.tpl' => 'oe/captcha/application/views/tpl/oecaptcha.tpl',
'oecaptcha_wave.tpl' => 'oe/captcha/application/views/tpl/oecaptcha_wave.tpl',
),
'templates' => array(),
'blocks' => array(
array('template' => 'form/contact.tpl',
'block'=>'captcha_form',
'theme' => 'flow',
'file'=>'/application/views/blocks/captcha_form.tpl'),
array('template' => 'form/newsletter.tpl',
'block'=>'captcha_form',
'theme' => 'flow',
'file'=>'/application/views/blocks/captcha_form.tpl'),
array('template' => 'form/privatesales/invite.tpl',
'theme' => 'flow',
'block'=>'captcha_form',
'file'=>'/application/views/blocks/captcha_form.tpl'),
array('template' => 'form/pricealarm.tpl',
'block'=>'captcha_form',
'theme' => 'flow',
'file'=>'/application/views/blocks/captcha_form.tpl'),
array('template' => 'form/suggest.tpl',
'block'=>'captcha_form',
'theme' => 'flow',
'file'=>'/application/views/blocks/captcha_form.tpl'),
array('template' => 'form/forgotpwd_email.tpl',
'block'=>'captcha_form',
'theme' => 'flow',
'file'=>'/application/views/blocks/captcha_form_forgotpwd.tpl'),
array('template' => 'form/fieldset/user_billing.tpl',
'block'=>'captcha_form',
'theme' => 'flow',
'file'=>'/application/views/blocks/captcha_form.tpl'),
array('template' => 'form/contact.tpl',
'block'=>'captcha_form',
'theme' => 'wave',
'file'=>'/application/views/blocks/captcha_form_contact_wave.tpl'),
array('template' => 'form/newsletter.tpl',
'block'=>'captcha_form',
'theme' => 'wave',
'file'=>'/application/views/blocks/captcha_form_newsletter_wave.tpl'),
array('template' => 'form/privatesales/invite.tpl',
'theme' => 'wave',
'block'=>'captcha_form',
'file'=>'/application/views/blocks/captcha_form_wave.tpl'),
array('template' => 'form/pricealarm.tpl',
'block'=>'captcha_form',
'theme' => 'wave',
'file'=>'/application/views/blocks/captcha_form_wave.tpl'),
array('template' => 'form/suggest.tpl',
'block'=>'captcha_form',
'theme' => 'wave',
'file'=>'/application/views/blocks/captcha_form_wave.tpl'),
array('template' => 'form/forgotpwd_email.tpl',
'block'=>'captcha_form',
'theme' => 'wave',
'file'=>'/application/views/blocks/captcha_form_forgotpwd_wave.tpl'),
array('template' => 'form/fieldset/user_billing.tpl',
'block'=>'captcha_form',
'theme' => 'wave',
'file'=>'/application/views/blocks/captcha_form_user_billing_wave.tpl'),
array('template' => 'form/contact.tpl', 'block'=>'captcha_form', 'file'=>'/application/views/blocks/captcha_form.tpl'),
array('template' => 'form/privatesales/invite.tpl', 'block'=>'captcha_form', 'file'=>'/application/views/blocks/captcha_form.tpl'),
array('template' => 'form/pricealarm.tpl', 'block'=>'captcha_form', 'file'=>'/application/views/blocks/captcha_form.tpl'),
array('template' => 'form/suggest.tpl', 'block'=>'captcha_form', 'file'=>'/application/views/blocks/captcha_form.tpl'),
),
'settings' => array(
array('group' => 'main', 'name' => 'oecaptchakey', 'type' => 'str', 'value' => ''),