Skip to content

Commit 9de7be8

Browse files
committed
Add the encrypt text Doctrine type
1 parent 4712037 commit 9de7be8

File tree

4 files changed

+102
-5
lines changed

4 files changed

+102
-5
lines changed

src/Doctrine/Type/EncryptType.php renamed to src/Doctrine/Type/EncryptStringType.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use Doctrine\DBAL\Types\StringType;
77
use Sidus\EncryptionBundle\Manager\EncryptionManagerInterface;
88

9-
class EncryptType extends StringType implements EncryptTypeInterface
9+
class EncryptStringType extends StringType implements EncryptTypeInterface
1010
{
1111
private EncryptionManagerInterface $encryptionManager;
1212

src/Doctrine/Type/EncryptTextType.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
namespace Sidus\EncryptionBundle\Doctrine\Type;
4+
5+
use Doctrine\DBAL\Platforms\AbstractPlatform;
6+
use Doctrine\DBAL\Types\TextType;
7+
use Sidus\EncryptionBundle\Manager\EncryptionManagerInterface;
8+
9+
class EncryptTextType extends TextType implements EncryptTypeInterface
10+
{
11+
private EncryptionManagerInterface $encryptionManager;
12+
13+
public function convertToPHPValue($value, AbstractPlatform $platform)
14+
{
15+
$value = base64_decode($value);
16+
17+
return $this->encryptionManager->decryptString($value);
18+
}
19+
20+
public function convertToDatabaseValue($value, AbstractPlatform $platform)
21+
{
22+
$value = $this->encryptionManager->encryptString($value);
23+
24+
return base64_encode($value);
25+
}
26+
27+
public function setEncryptionManager(EncryptionManagerInterface $encryptionManager): void
28+
{
29+
$this->encryptionManager = $encryptionManager;
30+
}
31+
32+
public function getName()
33+
{
34+
return 'encrypt_text';
35+
}
36+
}

tests/PHPUnit/Doctrine/Type/EncryptTypeTest.php renamed to tests/PHPUnit/Doctrine/Type/EncryptStringTypeTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
use Doctrine\DBAL\Platforms\MySqlPlatform;
66
use PHPUnit\Framework\MockObject\MockObject;
77
use PHPUnit\Framework\TestCase;
8-
use Sidus\EncryptionBundle\Doctrine\Type\EncryptType;
8+
use Sidus\EncryptionBundle\Doctrine\Type\EncryptStringType;
99
use Sidus\EncryptionBundle\Manager\EncryptionManagerInterface;
1010

11-
class EncryptTypeTest extends TestCase
11+
class EncryptStringTypeTest extends TestCase
1212
{
1313
public function testConvertToPHPValue(): void
1414
{
@@ -47,12 +47,12 @@ public function testConvertToDatabaseValue(): void
4747
}
4848

4949
/**
50-
* @return EncryptType[]|MockObject[]
50+
* @return EncryptStringType[]|MockObject[]
5151
*/
5252
private function createType(): array
5353
{
5454
$encryptionManager = $this->createMock(EncryptionManagerInterface::class);
55-
$type = new EncryptType();
55+
$type = new EncryptStringType();
5656
$type->setEncryptionManager($encryptionManager);
5757

5858
return [$type, $encryptionManager];
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
3+
namespace Sidus\EncryptionBundle\Tests\PHPUnit\Doctrine\Type;
4+
5+
use Doctrine\DBAL\Platforms\MySqlPlatform;
6+
use PHPUnit\Framework\MockObject\MockObject;
7+
use PHPUnit\Framework\TestCase;
8+
use Sidus\EncryptionBundle\Doctrine\Type\EncryptStringType;
9+
use Sidus\EncryptionBundle\Doctrine\Type\EncryptTextType;
10+
use Sidus\EncryptionBundle\Manager\EncryptionManagerInterface;
11+
12+
class EncryptTextTypeTest extends TestCase
13+
{
14+
public function testConvertToPHPValue(): void
15+
{
16+
[$type, $encryptionManager] = $this->createType();
17+
$encryptedString = '\X666';
18+
$platform = $this->createMock(MySqlPlatform::class);
19+
20+
// The type SHOULD decrypt the encrypted string
21+
$encryptionManager
22+
->expects($this->once())
23+
->method('decryptString')
24+
->with(base64_decode($encryptedString))
25+
->willReturn('my_decrypted_string')
26+
;
27+
28+
$value = $type->convertToPHPValue($encryptedString, $platform);
29+
$this->assertEquals('my_decrypted_string', $value);
30+
}
31+
32+
public function testConvertToDatabaseValue(): void
33+
{
34+
[$type, $encryptionManager] = $this->createType();
35+
$string = 'my_string';
36+
$platform = $this->createMock(MySqlPlatform::class);
37+
38+
// The type SHOULD decrypt the encrypted string
39+
$encryptionManager
40+
->expects($this->once())
41+
->method('encryptString')
42+
->with($string)
43+
->willReturn('my_encrypted_string')
44+
;
45+
46+
$value = $type->convertToDatabaseValue($string, $platform);
47+
$this->assertEquals(base64_encode('my_encrypted_string'), $value);
48+
}
49+
50+
/**
51+
* @return EncryptStringType[]|MockObject[]
52+
*/
53+
private function createType(): array
54+
{
55+
$encryptionManager = $this->createMock(EncryptionManagerInterface::class);
56+
$type = new EncryptTextType();
57+
$type->setEncryptionManager($encryptionManager);
58+
59+
return [$type, $encryptionManager];
60+
}
61+
}

0 commit comments

Comments
 (0)