Skip to content

Commit 8e87fed

Browse files
committed
Refactor setup of Doctrine type for encrypted text columns
The setup was currently broken due to EasyAdmin's AdminRouterSubscriber::onKernelRequestPrettyUrls event listener having a higher priority than this listener. In addition, the existing EncryptionListener was only called when initialized through an HTTP request from the Symfony kernel. This change should enable the encryption everywhere.
1 parent 5a768b0 commit 8e87fed

File tree

4 files changed

+43
-39
lines changed

4 files changed

+43
-39
lines changed

phpstan.dist.neon

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,3 @@ parameters:
3434
identifier: booleanOr.rightAlwaysFalse
3535
count: 1
3636
path: src/Encryption/Encryption.php
37-
-
38-
message: '#^Property CodedMonkey\\Dirigent\\EventListener\\EncryptionListener\:\:\$connection is never read, only written\.$#'
39-
identifier: property.onlyWritten
40-
count: 1
41-
path: src/EventListener/EncryptionListener.php

src/DependencyInjection/Compiler/EncryptionPass.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public function process(ContainerBuilder $container): void
2222
$rotatedKeyPaths = $parameterBag->get('dirigent.encryption.rotated_key_paths');
2323

2424
$container->getDefinition(Encryption::class)
25+
->setLazy(true)
2526
->setFactory([Encryption::class, 'create'])
2627
->setArguments([
2728
$privateKey,
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
namespace CodedMonkey\Dirigent\Doctrine\Middleware;
4+
5+
use CodedMonkey\Dirigent\Doctrine\Type\EncryptedTextType;
6+
use CodedMonkey\Dirigent\Encryption\Encryption;
7+
use Doctrine\Bundle\DoctrineBundle\Attribute\AsMiddleware;
8+
use Doctrine\DBAL\Driver;
9+
use Doctrine\DBAL\Driver\Connection;
10+
use Doctrine\DBAL\Driver\Middleware;
11+
use Doctrine\DBAL\Driver\Middleware\AbstractDriverMiddleware;
12+
use Doctrine\DBAL\Types\Type;
13+
14+
/**
15+
* Configures EncryptedTextType by manually injecting the encryption utility after initializing Doctrine.
16+
*/
17+
#[AsMiddleware]
18+
readonly class EncryptionMiddleware implements Middleware
19+
{
20+
public function __construct(private Encryption $encryption)
21+
{
22+
}
23+
24+
public function wrap(Driver $driver): Driver
25+
{
26+
return new class($driver, $this->encryption) extends AbstractDriverMiddleware {
27+
public function __construct(Driver $driver, private readonly Encryption $encryption)
28+
{
29+
parent::__construct($driver);
30+
}
31+
32+
public function connect(array $params): Connection
33+
{
34+
/** @var EncryptedTextType $doctrineType */
35+
$doctrineType = Type::getType(EncryptedTextType::TYPE);
36+
$doctrineType->setEncryptionUtility($this->encryption);
37+
38+
return parent::connect($params);
39+
}
40+
};
41+
}
42+
}

src/EventListener/EncryptionListener.php

Lines changed: 0 additions & 34 deletions
This file was deleted.

0 commit comments

Comments
 (0)