Compare commits

...

25 Commits

Author SHA1 Message Date
Markus Gärtner 2ac4507ace mod CHANGELOG.md, add some comments 2023-11-16 09:29:03 +01:00
Markus Gärtner 69618b8db5 Ausnahmebedingung für Amazon Pay 2023-11-15 14:38:08 +01:00
Markus Gärtner e1be2b618a add Version 2.0.7 2023-09-05 14:43:06 +02:00
Markus Gärtner e7b5947a3d Remove complication with PayPal Checkout 2023-09-05 14:38:17 +02:00
Daniel Seifert ce5fcbd664
adjust version informations 2023-07-18 12:16:37 +02:00
Daniel Seifert 91d21f7f07
don't show and request captcha if user is logged in 2023-07-18 12:13:25 +02:00
Daniel Seifert 0dbb8fb6e3
initial preparation for ticket https://support.shopmodule.com/scp/tickets.php?id=11765 2023-06-30 10:29:30 +02:00
Markus Gärtner 477aef9b4a update Version to 2.0.5 2022-05-16 15:15:35 +02:00
Markus Gärtner e9ebf89c6a add templates for wave theme 2022-05-16 15:14:57 +02:00
Markus Gärtner 9e5c91bed7 add check for user 2022-03-14 11:14:24 +01:00
Markus Gärtner 81b9602b10 add check for register 2022-02-23 09:20:32 +01:00
[OXID-PS] Keywan Ghadami 2b8493d37a
fix version number 2021-10-22 18:05:41 +02:00
[OXID-PS] Keywan Ghadami d1aceb0e64
Update CHANGELOG.md 2021-10-22 18:05:21 +02:00
[OXID-PS] Keywan Ghadami 905739672c
Update CHANGELOG.md 2021-10-22 18:04:08 +02:00
[OXID-PS] Keywan Ghadami 40e6416096
fix metadata version number 2021-10-22 18:03:39 +02:00
[OXID-PS] Keywan Ghadami e974a30707
Update CHANGELOG.md 2021-10-22 17:56:42 +02:00
[OXID-PS] Keywan Ghadami 35e5d631d0
Merge pull request #8 from bissie/array_access_curly_braces
Fix: Curly brace access syntax is deprecated since PHP 7.4
2021-10-22 17:48:33 +02:00
AndreasBissinger f564baf9bf Fix: Curly brace access syntax is deprecated since PHP 7.4 2021-10-22 14:11:29 +02:00
Marco Steinhaeuser f8bdc5285c
Merge pull request #6 from SeifertDaniel/feature/newslettercaptcha
Captcha for newsletter subscription added
2020-12-10 09:22:50 +01:00
Daniel Seifert 087f912897
insert Captcha also in the forgotten password form, as this is also often used for spam 2020-11-16 13:18:30 +01:00
Daniel Seifert 89d543156f
Captcha for newsletter subscription added
This form is often used for spam attacks.
Requires new template blocks in the frontend theme.
2020-11-14 12:44:46 +01:00
Marco Steinhaeuser 88c9ffa235
Merge pull request #2 from proud-commerce/master
Changed template
2020-01-10 18:14:47 +01:00
Florian Palme 8cfe123289 removed false markup 2019-07-02 16:07:37 +02:00
Florian Palme d8810b495f moved code to its own template file and changed markup to match flow template 2019-07-02 16:00:08 +02:00
Anton Fedurtsya 3821698f12 OXDEV-473 Module added to packagist
* Installation documentation updated
* Vendor changed to oxid-projects
2017-12-07 09:19:46 +02:00
20 changed files with 444 additions and 28 deletions

View File

@ -19,6 +19,34 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
### Security
## 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,8 +25,7 @@ In order to install the module via composer, run the following commands in comma
(where the shop's composer.json file resides).
```
composer config repositories.oxid-esales/captcha-module vcs https://github.com/OXIDprojects/captcha-module
composer require oxid-esales/captcha-module:dev-master
composer require oxid-projects/captcha-module
```
### Module installation via repository cloning

View File

@ -0,0 +1,58 @@
<?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,18 +1,3 @@
[{$smarty.block.parent}]
[{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>
[{include file="oecaptcha.tpl" labelCssClass="col-lg-2" inputCssClass="col-lg-10"}]

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,19 @@
[{assign var="oCaptcha" value=$oView->getCaptcha()}]
<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>

View File

@ -0,0 +1,19 @@
[{assign var="oCaptcha" value=$oView->getCaptcha()}]
<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>

View File

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

View File

@ -0,0 +1,29 @@
<?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

@ -0,0 +1,44 @@
<?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

@ -0,0 +1,44 @@
<?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

@ -0,0 +1,52 @@
<?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

@ -0,0 +1,52 @@
<?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,6 +17,10 @@
/**
* Metadata version
*/
use OxidEsales\Eshop\Application\Component\UserComponent;
use OxidEsales\Eshop\Application\Controller\AccountUserController;
$sMetadataVersion = '1.1';
/**
@ -33,26 +37,89 @@ $aModule = array(
'en' => 'OXID eSales Simple Captcha Module',
),
'thumbnail' => 'out/pictures/picture.png',
'version' => '2.0.0',
'version' => '2.0.8',
'author' => 'OXID eSales AG',
'url' => 'http://www.oxid-esales.com/',
'url' => 'https://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'),
'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'
),
'files' => array(
'oecaptcha' => 'oe/captcha/core/oecaptcha.php',
'oecaptchaEvents' => 'oe/captcha/core/oecaptchaevents.php',
),
'templates' => array(),
'templates' => array(
'oecaptcha.tpl' => 'oe/captcha/application/views/tpl/oecaptcha.tpl',
'oecaptcha_wave.tpl' => 'oe/captcha/application/views/tpl/oecaptcha_wave.tpl',
),
'blocks' => array(
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'),
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'),
),
'settings' => array(
array('group' => 'main', 'name' => 'oecaptchakey', 'type' => 'str', 'value' => ''),