mirror of
https://git.d3data.de/3rdParty/captcha-module.git
synced 2025-07-04 15:15:02 +02:00
Basic changes made for smarty and base code
This commit is contained in:
102
Application/Controller/ImageGeneratorController.php
Normal file
102
Application/Controller/ImageGeneratorController.php
Normal file
@ -0,0 +1,102 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace OxidProfessionalServices\Captcha\Application\Controller;
|
||||
|
||||
use OxidEsales\Eshop\Application\Controller\FrontendController;
|
||||
use OxidEsales\Eshop\Core\Exception\StandardException;
|
||||
use OxidEsales\Eshop\Core\Registry;
|
||||
use OxidProfessionalServices\Captcha\Application\Shared\Options;
|
||||
use Throwable;
|
||||
|
||||
class ImageGeneratorController extends FrontendController
|
||||
{
|
||||
use Options;
|
||||
|
||||
protected $emac;
|
||||
protected $imageHeight = 18;
|
||||
protected $imageWidth = 80;
|
||||
protected $fontSize = 14;
|
||||
|
||||
public function init()
|
||||
{
|
||||
parent::init();
|
||||
$this->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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user