From bd415ccb3e081e666721928c564856259100cd37 Mon Sep 17 00:00:00 2001 From: Gabriel Peleskei Date: Tue, 18 Jul 2023 14:59:11 +0000 Subject: [PATCH] Basic changes made for smarty and base code --- .gitignore | 5 +- .ide-helper.php | 23 ++ .../Component/Widget/ArticleDetails.php | 12 + Application/Controller/ContactController.php | 21 ++ Application/Controller/DetailsController.php | 23 ++ .../Controller/ForgotPasswordController.php | 21 ++ .../Controller/ImageGeneratorController.php | 102 ++++++ Application/Controller/InviteController.php | 21 ++ .../Controller/NewsletterController.php | 21 ++ .../Controller/PricealarmController.php | 23 ++ .../Core/Captcha.php | 299 ++++++++++-------- Application/Core/Module.php | 62 ++++ Application/Shared/Captcha.php | 21 ++ Application/Shared/Connection.php | 25 ++ Application/Shared/Options.php | 24 ++ .../translations}/de/oecaptcha_de_lang.php | 15 +- .../translations/en/oecaptcha_en_lang.php | 16 + CHANGELOG.md | 8 + .../widget/oecaptchawarticledetails.php | 30 -- application/views/admin/de/module_options.php | 13 - application/views/admin/en/module_options.php | 13 - application/views/blocks/captcha_form.tpl | 3 - .../views/blocks/captcha_form_forgotpwd.tpl | 3 - out/pictures/picture.png => assets/logo.png | Bin composer.json | 19 +- controllers/oecaptchacontact.php | 44 --- controllers/oecaptchadetails.php | 52 --- controllers/oecaptchaforgotpwd.php | 44 --- controllers/oecaptchainvite.php | 49 --- controllers/oecaptchanewsletter.php | 44 --- controllers/oecaptchapricealarm.php | 37 --- controllers/oecaptchasuggest.php | 52 --- core/oecaptchaevents.php | 62 ---- core/utils/verificationimg.php | 103 ------ metadata.php | 130 +++++--- translations/en/oecaptcha_en_lang.php | 17 - .../de/oe_catpcha_admin_de_lang.php | 9 + .../en/oe_captcha_admin_en_lang.php | 9 + .../de/oe_catpcha_admin_de_lang.php | 9 + .../en/oe_captcha_admin_en_lang.php | 9 + .../smarty/block/oe_captcha_form.tpl | 3 + .../admin_twig/smarty/tpl/oe_captcha.tpl | 9 +- views/smarty/block/oe_captcha_form.tpl | 3 + views/smarty/tpl/oe_captcha.tpl | 20 ++ 44 files changed, 760 insertions(+), 768 deletions(-) create mode 100644 .ide-helper.php create mode 100644 Application/Component/Widget/ArticleDetails.php create mode 100644 Application/Controller/ContactController.php create mode 100644 Application/Controller/DetailsController.php create mode 100644 Application/Controller/ForgotPasswordController.php create mode 100644 Application/Controller/ImageGeneratorController.php create mode 100644 Application/Controller/InviteController.php create mode 100644 Application/Controller/NewsletterController.php create mode 100644 Application/Controller/PricealarmController.php rename core/oecaptcha.php => Application/Core/Captcha.php (52%) create mode 100644 Application/Core/Module.php create mode 100644 Application/Shared/Captcha.php create mode 100644 Application/Shared/Connection.php create mode 100644 Application/Shared/Options.php rename {translations => Application/translations}/de/oecaptcha_de_lang.php (76%) create mode 100755 Application/translations/en/oecaptcha_en_lang.php delete mode 100644 application/component/widget/oecaptchawarticledetails.php delete mode 100644 application/views/admin/de/module_options.php delete mode 100644 application/views/admin/en/module_options.php delete mode 100644 application/views/blocks/captcha_form.tpl delete mode 100644 application/views/blocks/captcha_form_forgotpwd.tpl rename out/pictures/picture.png => assets/logo.png (100%) delete mode 100644 controllers/oecaptchacontact.php delete mode 100644 controllers/oecaptchadetails.php delete mode 100644 controllers/oecaptchaforgotpwd.php delete mode 100644 controllers/oecaptchainvite.php delete mode 100644 controllers/oecaptchanewsletter.php delete mode 100644 controllers/oecaptchapricealarm.php delete mode 100644 controllers/oecaptchasuggest.php delete mode 100644 core/oecaptchaevents.php delete mode 100644 core/utils/verificationimg.php delete mode 100755 translations/en/oecaptcha_en_lang.php create mode 100644 views/admin_smarty/de/oe_catpcha_admin_de_lang.php create mode 100644 views/admin_smarty/en/oe_captcha_admin_en_lang.php create mode 100644 views/admin_twig/de/oe_catpcha_admin_de_lang.php create mode 100644 views/admin_twig/en/oe_captcha_admin_en_lang.php create mode 100644 views/admin_twig/smarty/block/oe_captcha_form.tpl rename application/views/tpl/oecaptcha.tpl => views/admin_twig/smarty/tpl/oe_captcha.tpl (70%) create mode 100644 views/smarty/block/oe_captcha_form.tpl create mode 100644 views/smarty/tpl/oe_captcha.tpl diff --git a/.gitignore b/.gitignore index 485dee6..09122f6 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ -.idea +.idea/ +.vscode/ +vendor/ +.DS_Store \ No newline at end of file diff --git a/.ide-helper.php b/.ide-helper.php new file mode 100644 index 0000000..b1df0c6 --- /dev/null +++ b/.ide-helper.php @@ -0,0 +1,23 @@ +getCaptcha()->passCaptcha()) { + return false; + } + + return parent::send(); + } +} diff --git a/Application/Controller/DetailsController.php b/Application/Controller/DetailsController.php new file mode 100644 index 0000000..e1543b9 --- /dev/null +++ b/Application/Controller/DetailsController.php @@ -0,0 +1,23 @@ +getCaptcha()->passCaptcha(false)) { + $this->_iPriceAlarmStatus = 2; + + return; + } + + return parent::addme(); + } +} diff --git a/Application/Controller/ForgotPasswordController.php b/Application/Controller/ForgotPasswordController.php new file mode 100644 index 0000000..8dda74f --- /dev/null +++ b/Application/Controller/ForgotPasswordController.php @@ -0,0 +1,21 @@ +getCaptcha()->passCaptcha()) { + return false; + } + + return parent::forgotpassword(); + } +} diff --git a/Application/Controller/ImageGeneratorController.php b/Application/Controller/ImageGeneratorController.php new file mode 100644 index 0000000..15edbdb --- /dev/null +++ b/Application/Controller/ImageGeneratorController.php @@ -0,0 +1,102 @@ +emac = Registry::getRequest()->getRequestEscapedParameter('e_mac', null); + if ($this->emac) { + $this->emac = $this->decodeEmac($this->emac); + } + } + + public function render() + { + parent::render(); + + try { + if (!$this->emac) { + throw new StandardException('No e_mac parameter given'); + } + $image = $this->generateVerificationImage(); + if (!$image) { + throw new StandardException('Image generation failed by returning NULL'); + } + header('Content-type: image/png'); + imagepng($image); + imagedestroy($image); + + exit; + } catch (Throwable $e) { + Registry::getLogger()->error(sprintf('%s() | %s', __METHOD__, $e->getMessage()), [$e]); + http_response_code(400); + + exit(1); + } + } + + protected function decodeEmac(string $emac): string + { + $decryptor = new \OxidEsales\Eshop\Core\Decryptor(); + + $key = $this->getOeCaptchaKey(); + + return $decryptor->decrypt($emac, $key); + } + + protected function generateVerificationImage() + { + $image = null; + + switch (true) { + case function_exists('imagecreatetruecolor'): + $image = imagecreatetruecolor($this->imageWidth, $this->imageHeight); + + break; + + case function_exists('imagecreate'): + $image = imagecreate($this->imageWidth, $this->imageHeight); + + break; + + default: + return null; + } + $textX = ($this->imageWidth - strlen($this->emac) * imagefontwidth($this->fontSize)) / 2; + $textY = ($this->imageHeight - imagefontheight($this->fontSize)) / 2; + + $colors = [ + 'text' => imagecolorallocate($image, 0, 0, 0), + 'shadow1' => imagecolorallocate($image, 200, 200, 200), + 'shadow2' => imagecolorallocate($image, 100, 100, 100), + 'background' => imagecolorallocate($image, 255, 255, 255), + 'border' => imagecolorallocate($image, 0, 0, 0), + ]; + + imagefill($image, 0, 0, $colors['background']); + imagerectangle($image, 0, 0, $this->imageWidth - 1, $this->imageHeight - 1, $colors['border']); + imagestring($image, $this->fontSize, $textX + 1, $textY + 0, $this->emac, $colors['shadow2']); + imagestring($image, $this->fontSize, $textX + 0, $textY + 1, $this->emac, $colors['shadow1']); + imagestring($image, $this->fontSize, $textX, $textY, $this->emac, $colors['text']); + + return $image; + } +} diff --git a/Application/Controller/InviteController.php b/Application/Controller/InviteController.php new file mode 100644 index 0000000..42e3e4d --- /dev/null +++ b/Application/Controller/InviteController.php @@ -0,0 +1,21 @@ +getCaptcha()->passCaptcha()) { + return false; + } + + return parent::send(); + } +} diff --git a/Application/Controller/NewsletterController.php b/Application/Controller/NewsletterController.php new file mode 100644 index 0000000..ddd78bd --- /dev/null +++ b/Application/Controller/NewsletterController.php @@ -0,0 +1,21 @@ +getCaptcha()->passCaptcha()) { + return false; + } + + return parent::send(); + } +} diff --git a/Application/Controller/PricealarmController.php b/Application/Controller/PricealarmController.php new file mode 100644 index 0000000..cc8c455 --- /dev/null +++ b/Application/Controller/PricealarmController.php @@ -0,0 +1,23 @@ +getCaptcha()->passCaptcha(false)) { + $this->_iPriceAlarmStatus = 2; + + return; + } + + return parent::addme(); + } +} diff --git a/core/oecaptcha.php b/Application/Core/Captcha.php similarity index 52% rename from core/oecaptcha.php rename to Application/Core/Captcha.php index 2959fc6..e7b2f27 100644 --- a/core/oecaptcha.php +++ b/Application/Core/Captcha.php @@ -1,47 +1,55 @@ text) { $this->text = ''; - for ($i = 0; $i < $this->macLength; $i++) { + + for ($i = 0; $i < $this->macLength; ++$i) { $this->text .= strtolower($this->macChars[rand(0, strlen($this->macChars) - 1)]); } } @@ -58,38 +67,7 @@ class oeCaptcha extends oxSuperCfg } /** - * Returns text hash - * - * @param string $text User supplie text - * - * @return string - */ - public function getHash($text = null) - { - // inserting captcha record - $time = time() + $this->timeout; - $textHash = $this->getTextHash($text); - - // if session is started - storing captcha info here - $session = $this->getSession(); - if ($session->isSessionStarted()) { - $hash = oxUtilsObject::getInstance()->generateUID(); - $hashArray = $session->getVariable('captchaHashes'); - $hashArray[$hash] = array($textHash => $time); - $session->setVariable('captchaHashes', $hashArray); - } else { - $database = DatabaseProvider::getDb(); - $query = "insert into oecaptcha (oxhash, oxtime) values (" . - $database->quote($textHash) . ", " . $database->quote($time) . ")"; - $database->execute($query); - $hash = $database->getOne('select LAST_INSERT_ID()', false, false); - } - - return $hash; - } - - /** - * Returns given string captcha hash + * Returns given string captcha hash. * * @param string $text string to hash * @@ -105,38 +83,11 @@ class oeCaptcha extends oxSuperCfg return md5('ox' . $text); } - /** - * Returns url to CAPTCHA image generator. - * - * @return string - */ - public function getImageUrl() - { - $config = \OxidEsales\Eshop\Core\Registry::getConfig(); - $url = $config->getCurrentShopUrl() . 'modules/oe/captcha/core/utils/verificationimg.php?e_mac='; - $key = $config->getConfigParam('oecaptchakey'); - - $key = $key ? $key : $config->getConfigParam('sConfigKey'); - - $encryptor = new \OxidEsales\Eshop\Core\Encryptor(); - $url .= $encryptor->encrypt($this->getText(), $key); - - return $url; - } - - /** - * Checks if image could be generated - * - * @return bool - */ - public function isImageVisible() - { - return ((function_exists('imagecreatetruecolor') || function_exists('imagecreate')) && $this->getConfig()->getConfigParam('iUseGDVersion') > 1); - } - /** * Check if captcha is passed. * + * @param mixed $displayError + * * @return bool */ public function passCaptcha($displayError = true) @@ -144,8 +95,8 @@ class oeCaptcha extends oxSuperCfg $return = true; // spam spider prevention - $mac = $this->getConfig()->getRequestParameter('c_mac'); - $macHash = $this->getConfig()->getRequestParameter('c_mach'); + $mac = Registry::getConfig()->getRequestParameter('c_mac'); + $macHash = Registry::getConfig()->getRequestParameter('c_mach'); if (!$this->pass($mac, $macHash)) { $return = false; @@ -153,12 +104,139 @@ class oeCaptcha extends oxSuperCfg if (!$return && $displayError) { // even if there is no exception, use this as a default display method - oxRegistry::get('oxUtilsView')->addErrorToDisplay('MESSAGE_WRONG_VERIFICATION_CODE'); + Registry::getUtilsView()->addErrorToDisplay('MESSAGE_WRONG_VERIFICATION_CODE'); } return $return; } + /** + * Checks if image could be generated. + * + * @return bool + */ + public function isImageVisible() + { + return (function_exists('imagecreatetruecolor') || function_exists('imagecreate')) && Registry::getConfig()->getConfigParam('iUseGDVersion') > 1; + } + + /** + * Returns url to CAPTCHA image generator. + * + * @return string + */ + public function getImageUrl() + { + $config = Registry::getConfig(); + $key = $this->getOeCaptchaKey(); + $encryptor = new \OxidEsales\Eshop\Core\Encryptor(); + + return $config->getCurrentShopUrl() . sprintf('?cl=ith_basic_captcha_generator&e_mac=%s&shp=%d', $encryptor->encrypt($this->getText(), $key), $config->getShopId()); + } + + /** + * Returns text hash. + * + * @param string $text User supplie text + * + * @return string + */ + public function getHash($text = null) + { + // inserting captcha record + $time = time() + $this->timeout; + $textHash = $this->getTextHash($text); + + // if session is started - storing captcha info here + $session = Registry::getSession(); + if ($session->isSessionStarted()) { + $hash = UtilsObject::getInstance()->generateUID(); + $hashArray = $session->getVariable('captchaHashes'); + $hashArray[$hash] = [$textHash => $time]; + $session->setVariable('captchaHashes', $hashArray); + } else { + $q = $this->getQueryBuilder(); + $q->insert('oecaptcha') + ->values( + [ + 'oxhash' => '?', + 'oxtime' => '?', + ] + )->setParameter(0, $textHash)->setParameter(1, $time); + $q->execute(); + $hash = $q->getConnection()->lastInsertId(); + } + + return $hash; + } + + /** + * Checks for DB captcha hash validity. + * + * @param int $macHash hash key + * @param string $hash captcha hash + * @param int $time check time + * + * @return bool + */ + protected function passFromDb($macHash, $hash, $time) + { + $q = $this->getQueryBuilder(); + $q->select('1') + ->from('oecaptcha') + ->where('oxid = :macHash') + ->andWhere('oxhash = :hash') + ->setParameter('macHash', $macHash) + ->setParameter('hash', $hash); + $pass = (bool) $q->execute()->fetchOne(); + if ($pass) { + // cleanup + $q = $this->getQueryBuilder() + ->delete('oecaptcha') + ->where('oxid = :macHash') + ->andWhere('oxhash = :hash') + ->setParameter('macHash', $macHash) + ->setParameter('hash', $hash); + $q->execute(); + } + + // garbage cleanup + $q = $this->getQueryBuilder() + ->delete('oecaptcha') + ->where('oxtime < :time') + ->setParameter('time', $time); + $q->execute(); + + return $pass; + } + + /** + * Checks for session captcha hash validity. + * + * @param string $macHash hash key + * @param string $hash captcha hash + * @param int $time check time + * + * @return bool + */ + protected function passFromSession($macHash, $hash, $time) + { + $pass = null; + $session = Registry::getSession(); + + if ($hashArray = $session->getVariable('captchaHashes')) { + $pass = (isset($hashArray[$macHash][$hash]) && $hashArray[$macHash][$hash] >= $time) ? true : false; + unset($hashArray[$macHash]); + if (!empty($hashArray)) { + $session->setVariable('captchaHashes', $hashArray); + } else { + $session->deleteVariable('captchaHashes'); + } + } + + return $pass; + } + /** * Verifies captcha input vs supplied hash. Returns true on success. * @@ -174,67 +252,10 @@ class oeCaptcha extends oxSuperCfg $pass = $this->passFromSession($macHash, $hash, $time); // if captcha info was NOT stored in session - if ($pass === null) { + if (null === $pass) { $pass = $this->passFromDb((int) $macHash, $hash, $time); } return (bool) $pass; } - - /** - * Checks for session captcha hash validity - * - * @param string $macHash hash key - * @param string $hash captcha hash - * @param int $time check time - * - * @return bool - */ - protected function passFromSession($macHash, $hash, $time) - { - $pass = null; - $session = $this->getSession(); - - if (($hashArray = $session->getVariable('captchaHashes'))) { - $pass = (isset($hashArray[$macHash][$hash]) && $hashArray[$macHash][$hash] >= $time) ? true : false; - unset($hashArray[$macHash]); - if (!empty($hashArray)) { - $session->setVariable('captchaHashes', $hashArray); - } else { - $session->deleteVariable('captchaHashes'); - } - } - - return $pass; - } - - /** - * Checks for DB captcha hash validity - * - * @param int $macHash hash key - * @param string $hash captcha hash - * @param int $time check time - * - * @return bool - */ - protected function passFromDb($macHash, $hash, $time) - { - $database = DatabaseProvider::getDb(); - $where = "where oxid = " . $database->quote($macHash) . " and oxhash = " . $database->quote($hash); - $query = "select 1 from oecaptcha " . $where; - $pass = (bool) $database->getOne($query, false, false); - - if ($pass) { - // cleanup - $query = "delete from oecaptcha " . $where; - $database->execute($query); - } - - // garbage cleanup - $query = "delete from oecaptcha where oxtime < $time"; - $database->execute($query); - - return $pass; - } - } diff --git a/Application/Core/Module.php b/Application/Core/Module.php new file mode 100644 index 0000000..7e7edbd --- /dev/null +++ b/Application/Core/Module.php @@ -0,0 +1,62 @@ +activate(); + } + + public static function onDeactivate(): void + { + static::getInstance()->deactivate(); + } + + public function createTable(): void + { + $this->getDb()->executeStatement(' + CREATE TABLE IF NOT EXISTS `oecaptcha` (' . + "`OXID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Captcha id'," . + "`OXHASH` char(32) NOT NULL default '' COMMENT 'Hash'," . + "`OXTIME` int(11) NOT NULL COMMENT 'Validation time'," . + "`OXTIMESTAMP` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP COMMENT 'Timestamp'," . + 'PRIMARY KEY (`OXID`), ' . + 'KEY `OXID` (`OXID`,`OXHASH`), ' . + 'KEY `OXTIME` (`OXTIME`) ' . + ") ENGINE=MEMORY AUTO_INCREMENT=1 COMMENT 'If session is not available, this is where captcha information is stored'; + "); + } + + public function dropTable(): void + { + $this->getDb()->executeStatement('DROP TABLE IF EXISTS `oecaptcha`;'); + } + + public function activate(): void + { + $this->createTable(); + } + + public function deactivate(): void + { + $this->dropTable(); + } +} diff --git a/Application/Shared/Captcha.php b/Application/Shared/Captcha.php new file mode 100644 index 0000000..a41ebe2 --- /dev/null +++ b/Application/Shared/Captcha.php @@ -0,0 +1,21 @@ +captcha) { + $this->captcha = CaptchaCore::getInstance(); + } + + return $this->captcha; + } +} diff --git a/Application/Shared/Connection.php b/Application/Shared/Connection.php new file mode 100644 index 0000000..625f1b3 --- /dev/null +++ b/Application/Shared/Connection.php @@ -0,0 +1,25 @@ +getContainer(); + + return $container->get(QueryBuilderFactoryInterface::class)->create(); + } + + public function getDb(): \Doctrine\DBAL\Connection + { + return ContainerFactory::getInstance()->getContainer()->get(ConnectionProviderInterface::class)->get(); + } +} diff --git a/Application/Shared/Options.php b/Application/Shared/Options.php new file mode 100644 index 0000000..9359bab --- /dev/null +++ b/Application/Shared/Options.php @@ -0,0 +1,24 @@ +getContainer()->get(ModuleSettingServiceInterface::class); + $key = $bridge->getString('oeCaptchaKey', 'oecaptcha')->toString(); + if (!trim($key)) { + return static::ENCRYPT_KEY; + } + + return $key; + } +} diff --git a/translations/de/oecaptcha_de_lang.php b/Application/translations/de/oecaptcha_de_lang.php similarity index 76% rename from translations/de/oecaptcha_de_lang.php rename to Application/translations/de/oecaptcha_de_lang.php index 0effcb4..cce27b9 100755 --- a/translations/de/oecaptcha_de_lang.php +++ b/Application/translations/de/oecaptcha_de_lang.php @@ -1,17 +1,16 @@ 'UTF-8', - 'MESSAGE_WRONG_VERIFICATION_CODE' => 'Der Prüfcode, den Sie eingegeben haben, ist nicht korrekt. Bitte versuchen Sie es erneut!' -); + 'MESSAGE_WRONG_VERIFICATION_CODE' => 'Der Prüfcode, den Sie eingegeben haben, ist nicht korrekt. Bitte versuchen Sie es erneut!', +]; diff --git a/Application/translations/en/oecaptcha_en_lang.php b/Application/translations/en/oecaptcha_en_lang.php new file mode 100755 index 0000000..0af4aec --- /dev/null +++ b/Application/translations/en/oecaptcha_en_lang.php @@ -0,0 +1,16 @@ + 'UTF-8', + 'MESSAGE_WRONG_VERIFICATION_CODE' => 'The verification code you entered is not correct. Please try again.', +]; diff --git a/CHANGELOG.md b/CHANGELOG.md index ef2c2b6..f532d8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,15 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Security +## [7.0.0] - 18 Jul 2023 +### Changed +- PHP 8.0 compatibility +- OXID 7.0 compatibility +- Twig & Smarty Support +- Major version bump to 7.0.0 to match OXID 7.0 compatibility +### Removed +- Suggest dropped out ## [2.0.4] - 22 Oct 2021 diff --git a/application/component/widget/oecaptchawarticledetails.php b/application/component/widget/oecaptchawarticledetails.php deleted file mode 100644 index 773159e..0000000 --- a/application/component/widget/oecaptchawarticledetails.php +++ /dev/null @@ -1,30 +0,0 @@ -captcha === null) { - $this->captcha = oxNew('oeCaptcha'); - } - return $this->captcha; - } -} diff --git a/application/views/admin/de/module_options.php b/application/views/admin/de/module_options.php deleted file mode 100644 index 8440e95..0000000 --- a/application/views/admin/de/module_options.php +++ /dev/null @@ -1,13 +0,0 @@ - 'UTF-8', - 'SHOP_MODULE_GROUP_main' => 'Allgemein', - 'SHOP_MODULE_oecaptchakey' => 'Captcha Key', -); diff --git a/application/views/admin/en/module_options.php b/application/views/admin/en/module_options.php deleted file mode 100644 index b9b8e88..0000000 --- a/application/views/admin/en/module_options.php +++ /dev/null @@ -1,13 +0,0 @@ - 'UTF-8', - 'SHOP_MODULE_GROUP_main' => 'General', - 'SHOP_MODULE_oecaptchakey' => 'Captcha Key', -); diff --git a/application/views/blocks/captcha_form.tpl b/application/views/blocks/captcha_form.tpl deleted file mode 100644 index 531645c..0000000 --- a/application/views/blocks/captcha_form.tpl +++ /dev/null @@ -1,3 +0,0 @@ -[{$smarty.block.parent}] - -[{include file="oecaptcha.tpl" labelCssClass="col-lg-2" inputCssClass="col-lg-10"}] diff --git a/application/views/blocks/captcha_form_forgotpwd.tpl b/application/views/blocks/captcha_form_forgotpwd.tpl deleted file mode 100644 index 5171b71..0000000 --- a/application/views/blocks/captcha_form_forgotpwd.tpl +++ /dev/null @@ -1,3 +0,0 @@ -[{$smarty.block.parent}] - -[{include file="oecaptcha.tpl" labelCssClass="col-md-3" inputCssClass="col-md-9"}] diff --git a/out/pictures/picture.png b/assets/logo.png similarity index 100% rename from out/pictures/picture.png rename to assets/logo.png diff --git a/composer.json b/composer.json index b24f871..0c45897 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,13 @@ "name": "oxid-projects/captcha-module", "description": "This is Captcha module for OXID eShop.", "type": "oxideshop-module", - "keywords": ["oxid", "modules", "eShop", "captcha"], + "version": "7.0.0", + "keywords": [ + "oxid", + "modules", + "eShop", + "captcha" + ], "homepage": "https://www.oxid-esales.com/en/home.html", "license": [ "GPL-3.0", @@ -12,5 +18,14 @@ "oxideshop": { "target-directory": "oe/captcha" } + }, + "require": { + "oxid-esales/oxideshop-ce": "^7.0", + "ext-gd": "*" + }, + "autoload": { + "psr-4": { + "OxidProfessionalServices\\Captcha\\": "./" + } } -} +} \ No newline at end of file diff --git a/controllers/oecaptchacontact.php b/controllers/oecaptchacontact.php deleted file mode 100644 index b9af7d9..0000000 --- a/controllers/oecaptchacontact.php +++ /dev/null @@ -1,44 +0,0 @@ -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; - } - -} diff --git a/controllers/oecaptchadetails.php b/controllers/oecaptchadetails.php deleted file mode 100644 index a2056e3..0000000 --- a/controllers/oecaptchadetails.php +++ /dev/null @@ -1,52 +0,0 @@ -getCaptcha()->passCaptcha(false)) { - $this->_iPriceAlarmStatus = 2; - return; - } - - return parent::addme(); - } - - /** - * 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; - } -} diff --git a/controllers/oecaptchaforgotpwd.php b/controllers/oecaptchaforgotpwd.php deleted file mode 100644 index 7158f89..0000000 --- a/controllers/oecaptchaforgotpwd.php +++ /dev/null @@ -1,44 +0,0 @@ -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; - } - -} diff --git a/controllers/oecaptchainvite.php b/controllers/oecaptchainvite.php deleted file mode 100644 index f849ec9..0000000 --- a/controllers/oecaptchainvite.php +++ /dev/null @@ -1,49 +0,0 @@ -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; - } - -} diff --git a/controllers/oecaptchanewsletter.php b/controllers/oecaptchanewsletter.php deleted file mode 100644 index caf7000..0000000 --- a/controllers/oecaptchanewsletter.php +++ /dev/null @@ -1,44 +0,0 @@ -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; - } - -} diff --git a/controllers/oecaptchapricealarm.php b/controllers/oecaptchapricealarm.php deleted file mode 100644 index ddea7eb..0000000 --- a/controllers/oecaptchapricealarm.php +++ /dev/null @@ -1,37 +0,0 @@ - pricealarm. - */ -class oeCaptchaPricealarm extends oeCaptchaPricealarm_parent -{ - /** - * Validates email - * address. If email is wrong - returns false and exits. If email - * address is OK - creates prcealarm object and saves it - * (oxpricealarm::save()). Sends pricealarm notification mail - * to shop owner. - * - * @return bool false on error - */ - public function addme() - { - //control captcha - $captcha = oxNew('oeCaptcha'); - if (!$captcha->passCaptcha(false)) { - $this->_iPriceAlarmStatus = 2; - - return; - } - - return parent::addme(); - } -} diff --git a/controllers/oecaptchasuggest.php b/controllers/oecaptchasuggest.php deleted file mode 100644 index 73d1db8..0000000 --- a/controllers/oecaptchasuggest.php +++ /dev/null @@ -1,52 +0,0 @@ -editval, error - * - * @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; - } -} diff --git a/core/oecaptchaevents.php b/core/oecaptchaevents.php deleted file mode 100644 index f647ee6..0000000 --- a/core/oecaptchaevents.php +++ /dev/null @@ -1,62 +0,0 @@ -execute($query); - } - - /** - * Remove table oecaptcha. - * NOTE: table oecaptcha contains temporary data if any and can be - * removed without side effects on module deactivation - */ - public static function removeCaptchaTable() - { - $query = "DROP TABLE IF EXISTS `oecaptcha`"; - - DatabaseProvider::getDb()->execute($query); - } - - /** - * Execute action on activate event - * - * @return null - */ - public static function onActivate() - { - self::addCaptchaTable(); - } - - /** - * Execute action on deactivate event - * - * @return null - */ - public static function onDeactivate() - { - self::removeCaptchaTable(); - } -} diff --git a/core/utils/verificationimg.php b/core/utils/verificationimg.php deleted file mode 100644 index 769931e..0000000 --- a/core/utils/verificationimg.php +++ /dev/null @@ -1,103 +0,0 @@ -getConfigParam('oecaptchakey'); - if (empty($key)) { - $key = getOxConfKey(); - } - - return $decryptor->decrypt($value, $key); - } -} - -if (!function_exists('getOxConfKey')) { - - /** - * Get default config key. - * - * @return string - */ - function getOxConfKey() - { - $config = oxRegistry::getConfig(); - $configKey = $config->getConfigParam('sConfigKey') ?: \OxidEsales\Eshop\Core\Config::DEFAULT_CONFIG_KEY; - return $configKey; - } - -} - -$mac = strRem($emac); -generateVerificationImg($mac); diff --git a/metadata.php b/metadata.php index b8e7bd9..6b21e8c 100755 --- a/metadata.php +++ b/metadata.php @@ -1,6 +1,9 @@ 'oecaptcha', - 'title' => array( +$aModule = [ + 'id' => Module::ID, + 'title' => [ 'de' => 'Simple Captcha', 'en' => 'Simple Captcha', - ), - 'description' => array( + ], + 'description' => [ 'de' => 'OXID eSales Simple Captcha Module', 'en' => 'OXID eSales Simple Captcha Module', - ), - 'thumbnail' => 'out/pictures/picture.png', - 'version' => '2.0.4', - 'author' => 'OXID eSales AG', - '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'), - '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', - ), - 'blocks' => array( - array('template' => 'form/contact.tpl', 'block'=>'captcha_form', 'file'=>'/application/views/blocks/captcha_form.tpl'), - array('template' => 'form/newsletter.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/forgotpwd_email.tpl', 'block'=>'captcha_form', 'file'=>'/application/views/blocks/captcha_form_forgotpwd.tpl'), - ), - 'settings' => array( - array('group' => 'main', 'name' => 'oecaptchakey', 'type' => 'str', 'value' => ''), - ), - 'events' => array( - 'onActivate' => 'oecaptchaevents::onActivate', - 'onDeactivate' => 'oecaptchaevents::onDeactivate' - ), -); + ], + 'thumbnail' => 'logo.png', + 'version' => Module::VERSION, + 'author' => 'OXID eSales AG', + 'url' => 'https://www.oxid-esales.com/', + 'email' => '', + 'controllers' => [ + 'ith_basic_captcha_generator' => OxidProfessionalServices\Captcha\Application\Controller\ImageGeneratorController::class, + ], + 'extend' => [ + OxidEsales\Eshop\Application\Controller\ArticleDetailsController::class => OxidProfessionalServices\Captcha\Application\Controller\DetailsController::class, + OxidEsales\Eshop\Application\Controller\ContactController::class => OxidProfessionalServices\Captcha\Application\Controller\ContactController::class, + OxidEsales\Eshop\Application\Controller\ForgotPasswordController::class => OxidProfessionalServices\Captcha\Application\Controller\ForgotPasswordController::class, + OxidEsales\Eshop\Application\Controller\InviteController::class => OxidProfessionalServices\Captcha\Application\Controller\InviteController::class, + OxidEsales\Eshop\Application\Controller\NewsletterController::class => OxidProfessionalServices\Captcha\Application\Controller\NewsletterController::class, + OxidEsales\Eshop\Application\Controller\PriceAlarmController::class => OxidProfessionalServices\Captcha\Application\Controller\PricealarmController::class, + OxidEsales\Eshop\Application\Component\Widget\ArticleDetails::class => OxidProfessionalServices\Captcha\Application\Component\Widget\ArticleDetails::class, + ], + 'templates' => [ + 'oe_captcha.tpl' => 'views/smarty/tpl/oe_captcha.tpl', + ], + 'blocks' => [ + [ + 'template' => 'form/contact.tpl', + 'block' => 'captcha_form', + 'file' => 'views/smarty/blocks/oe_captcha_form.tpl', + ], + [ + 'template' => 'form/newsletter.tpl', + 'block' => 'captcha_form', + 'file' => 'views/smarty/blocks/oe_captcha_form.tpl', + ], + [ + 'template' => 'form/privatesales/invite.tpl', + 'block' => 'captcha_form', + 'file' => 'views/smarty/blocks/oe_captcha_form.tpl', + ], + [ + 'template' => 'form/pricealarm.tpl', + 'block' => 'captcha_form', + 'file' => 'views/smarty/blocks/oe_captcha_form.tpl', + ], + [ + 'template' => 'form/suggest.tpl', + 'block' => 'captcha_form', + 'file' => 'views/smarty/blocks/oe_captcha_form.tpl', + ], + [ + 'template' => 'form/forgotpwd_email.tpl', + 'block' => 'captcha_form', + 'file' => 'views/smarty/blocks/oe_captcha_form.tpl', + ], + ], + 'settings' => [ + [ + 'group' => 'main', + 'name' => 'oecaptchakey', + 'type' => 'str', + 'value' => '', + ], + ], + 'events' => [ + 'onActivate' => Module::class . '::onActivate', + 'onDeactivate' => Module::class . '::onDeactivate', + ], +]; diff --git a/translations/en/oecaptcha_en_lang.php b/translations/en/oecaptcha_en_lang.php deleted file mode 100755 index 45abef1..0000000 --- a/translations/en/oecaptcha_en_lang.php +++ /dev/null @@ -1,17 +0,0 @@ - 'UTF-8', - 'MESSAGE_WRONG_VERIFICATION_CODE' => "The verification code you entered is not correct. Please try again." -); diff --git a/views/admin_smarty/de/oe_catpcha_admin_de_lang.php b/views/admin_smarty/de/oe_catpcha_admin_de_lang.php new file mode 100644 index 0000000..5b16ac8 --- /dev/null +++ b/views/admin_smarty/de/oe_catpcha_admin_de_lang.php @@ -0,0 +1,9 @@ + 'UTF-8', + 'SHOP_MODULE_GROUP_main' => 'Allgemein', + 'SHOP_MODULE_oecaptchakey' => 'Captcha Key', +]; diff --git a/views/admin_smarty/en/oe_captcha_admin_en_lang.php b/views/admin_smarty/en/oe_captcha_admin_en_lang.php new file mode 100644 index 0000000..2ecd391 --- /dev/null +++ b/views/admin_smarty/en/oe_captcha_admin_en_lang.php @@ -0,0 +1,9 @@ + 'UTF-8', + 'SHOP_MODULE_GROUP_main' => 'General', + 'SHOP_MODULE_oecaptchakey' => 'Captcha Key', +]; diff --git a/views/admin_twig/de/oe_catpcha_admin_de_lang.php b/views/admin_twig/de/oe_catpcha_admin_de_lang.php new file mode 100644 index 0000000..5b16ac8 --- /dev/null +++ b/views/admin_twig/de/oe_catpcha_admin_de_lang.php @@ -0,0 +1,9 @@ + 'UTF-8', + 'SHOP_MODULE_GROUP_main' => 'Allgemein', + 'SHOP_MODULE_oecaptchakey' => 'Captcha Key', +]; diff --git a/views/admin_twig/en/oe_captcha_admin_en_lang.php b/views/admin_twig/en/oe_captcha_admin_en_lang.php new file mode 100644 index 0000000..2ecd391 --- /dev/null +++ b/views/admin_twig/en/oe_captcha_admin_en_lang.php @@ -0,0 +1,9 @@ + 'UTF-8', + 'SHOP_MODULE_GROUP_main' => 'General', + 'SHOP_MODULE_oecaptchakey' => 'Captcha Key', +]; diff --git a/views/admin_twig/smarty/block/oe_captcha_form.tpl b/views/admin_twig/smarty/block/oe_captcha_form.tpl new file mode 100644 index 0000000..4c9afc7 --- /dev/null +++ b/views/admin_twig/smarty/block/oe_captcha_form.tpl @@ -0,0 +1,3 @@ +[{$smarty.block.parent}] + +[{include file="oe_captcha.tpl"}] \ No newline at end of file diff --git a/application/views/tpl/oecaptcha.tpl b/views/admin_twig/smarty/tpl/oe_captcha.tpl similarity index 70% rename from application/views/tpl/oecaptcha.tpl rename to views/admin_twig/smarty/tpl/oe_captcha.tpl index be78fb2..4c8b439 100644 --- a/application/views/tpl/oecaptcha.tpl +++ b/views/admin_twig/smarty/tpl/oe_captcha.tpl @@ -1,10 +1,10 @@ [{assign var="oCaptcha" value=$oView->getCaptcha()}] - +
- + -
+
[{if $oCaptcha->isImageVisible()}] @@ -13,7 +13,8 @@ [{$oCaptcha->getText()}] [{/if}] - +
\ No newline at end of file diff --git a/views/smarty/block/oe_captcha_form.tpl b/views/smarty/block/oe_captcha_form.tpl new file mode 100644 index 0000000..4c9afc7 --- /dev/null +++ b/views/smarty/block/oe_captcha_form.tpl @@ -0,0 +1,3 @@ +[{$smarty.block.parent}] + +[{include file="oe_captcha.tpl"}] \ No newline at end of file diff --git a/views/smarty/tpl/oe_captcha.tpl b/views/smarty/tpl/oe_captcha.tpl new file mode 100644 index 0000000..4c8b439 --- /dev/null +++ b/views/smarty/tpl/oe_captcha.tpl @@ -0,0 +1,20 @@ +[{assign var="oCaptcha" value=$oView->getCaptcha()}] + + +
+ + +
+
+ + [{if $oCaptcha->isImageVisible()}] + + [{else}] + [{$oCaptcha->getText()}] + [{/if}] + + +
+
+
\ No newline at end of file