77
88namespace Ecotone \DataProtection \Configuration ;
99
10- use Defuse \Crypto \Key ;
1110use Ecotone \AnnotationFinder \AnnotatedMethod ;
1211use Ecotone \AnnotationFinder \AnnotationFinder ;
1312use Ecotone \DataProtection \Attribute \Sensitive ;
1413use Ecotone \DataProtection \Attribute \WithEncryptionKey ;
1514use Ecotone \DataProtection \Attribute \WithSensitiveHeader ;
16- use Ecotone \DataProtection \Obfuscator \Obfuscator ;
15+ use Ecotone \DataProtection \Encryption \Key ;
16+ use Ecotone \DataProtection \MessageEncryption \MessageEncryptor ;
1717use Ecotone \DataProtection \OutboundDecryptionChannelBuilder ;
1818use Ecotone \DataProtection \OutboundEncryptionChannelBuilder ;
1919use Ecotone \JMSConverter \JMSConverterConfiguration ;
3939#[ModuleAnnotation]
4040final class DataProtectionModule extends NoExternalConfigurationModule
4141{
42+ final public const ENCRYPTOR_SERVICE_ID_FORMAT = 'ecotone.data-protection.encryptor.%s ' ;
43+ final public const KEY_SERVICE_ID_FORMAT = 'ecotone.encryption.key.%s ' ;
44+
4245 /**
43- * @param array<ObfuscatorConfig > $obfuscatorConfigs
46+ * @param array<MessageEncryptionConfig > $encryptionConfigs
4447 */
45- public function __construct (private array $ obfuscatorConfigs )
48+ public function __construct (private array $ encryptionConfigs )
4649 {
4750 }
4851
4952 public static function create (AnnotationFinder $ annotationRegistrationService , InterfaceToCallRegistry $ interfaceToCallRegistry ): static
5053 {
51- $ obfuscatorConfigs = self ::resolveObfuscatorConfigsFromAnnotatedClasses ($ annotationRegistrationService ->findAnnotatedClasses (Sensitive::class), [] , $ interfaceToCallRegistry );
52- $ obfuscatorConfigs = self ::resolveObfuscatorConfigsFromAnnotatedMethods ($ annotationRegistrationService ->findAnnotatedMethods (CommandHandler::class), $ obfuscatorConfigs , $ interfaceToCallRegistry );
53- $ obfuscatorConfigs = self ::resolveObfuscatorConfigsFromAnnotatedMethods ($ annotationRegistrationService ->findAnnotatedMethods (EventHandler::class), $ obfuscatorConfigs , $ interfaceToCallRegistry );
54+ $ encryptionConfigs = self ::resolveEncryptionConfigsFromAnnotatedClasses ($ annotationRegistrationService ->findAnnotatedClasses (Sensitive::class), $ interfaceToCallRegistry );
55+ $ encryptionConfigs = self ::resolveEncryptionConfigsFromAnnotatedMethods ($ annotationRegistrationService ->findAnnotatedMethods (CommandHandler::class), $ encryptionConfigs , $ interfaceToCallRegistry );
56+ $ encryptionConfigs = self ::resolveEncryptionConfigsFromAnnotatedMethods ($ annotationRegistrationService ->findAnnotatedMethods (EventHandler::class), $ encryptionConfigs , $ interfaceToCallRegistry );
5457
55- return new self ($ obfuscatorConfigs );
58+ return new self ($ encryptionConfigs );
5659 }
5760
5861 public function prepare (Configuration $ messagingConfiguration , array $ extensionObjects , ModuleReferenceSearchService $ moduleReferenceSearchService , InterfaceToCallRegistry $ interfaceToCallRegistry ): void
@@ -70,7 +73,7 @@ public function prepare(Configuration $messagingConfiguration, array $extensionO
7073
7174 foreach ($ dataProtectionConfiguration ->keys () as $ encryptionKeyName => $ key ) {
7275 $ messagingConfiguration ->registerServiceDefinition (
73- id: sprintf (' ecotone.encryption.key.%s ' , $ encryptionKeyName ),
76+ id: sprintf (self :: KEY_SERVICE_ID_FORMAT , $ encryptionKeyName ),
7477 definition: new Definition (
7578 Key::class,
7679 [$ key ->saveToAsciiSafeString ()],
@@ -79,39 +82,39 @@ public function prepare(Configuration $messagingConfiguration, array $extensionO
7982 );
8083 }
8184
82- $ channelObfuscatorReferences = $ messageObfuscatorReferences = [];
85+ $ channelEncryptorReferences = $ messageEncryptorReferences = [];
8386 foreach ($ channelProtectionConfigurations as $ channelProtectionConfiguration ) {
8487 Assert::isTrue ($ messagingConfiguration ->isPollableChannel ($ channelProtectionConfiguration ->channelName ()), sprintf ('`%s` channel must be pollable channel to use Data Protection. ' , $ channelProtectionConfiguration ->channelName ()));
8588
86- $ obfuscatorConfig = $ channelProtectionConfiguration ->obfuscatorConfig ();
89+ $ encryptionConfig = $ channelProtectionConfiguration ->messageEncryptionConfig ();
8790 $ messagingConfiguration ->registerServiceDefinition (
88- id: $ id = sprintf (' ecotone.encryption.obfuscator.%s ' , $ channelProtectionConfiguration ->channelName ()),
91+ id: $ id = sprintf (self :: ENCRYPTOR_SERVICE_ID_FORMAT , $ channelProtectionConfiguration ->channelName ()),
8992 definition: new Definition (
90- Obfuscator ::class,
93+ MessageEncryptor ::class,
9194 [
92- Reference::to (sprintf (' ecotone.encryption.key.%s ' , $ obfuscatorConfig ->encryptionKeyName ($ dataProtectionConfiguration ))),
93- $ obfuscatorConfig ->isPayloadSensitive ,
94- $ obfuscatorConfig ->sensitiveHeaders ,
95+ Reference::to (sprintf (self :: KEY_SERVICE_ID_FORMAT , $ encryptionConfig ->encryptionKeyName ($ dataProtectionConfiguration ))),
96+ $ encryptionConfig ->isPayloadSensitive ,
97+ $ encryptionConfig ->sensitiveHeaders ,
9598 ],
9699 )
97100 );
98101
99- $ channelObfuscatorReferences [$ channelProtectionConfiguration ->channelName ()] = Reference::to ($ id );
102+ $ channelEncryptorReferences [$ channelProtectionConfiguration ->channelName ()] = Reference::to ($ id );
100103 }
101104
102- foreach ($ this ->obfuscatorConfigs as $ messageClass => $ obfuscatorConfig ) {
105+ foreach ($ this ->encryptionConfigs as $ messageClass => $ encryptionConfig ) {
103106 $ messagingConfiguration ->registerServiceDefinition (
104- id: $ id = sprintf (' ecotone.encryption.obfuscator.%s ' , $ messageClass ),
107+ id: $ id = sprintf (self :: ENCRYPTOR_SERVICE_ID_FORMAT , $ messageClass ),
105108 definition: new Definition (
106- Obfuscator ::class,
109+ MessageEncryptor ::class,
107110 [
108- Reference::to (sprintf (' ecotone.encryption.key.%s ' , $ obfuscatorConfig ->encryptionKeyName ($ dataProtectionConfiguration ))),
109- $ obfuscatorConfig ->isPayloadSensitive ,
110- $ obfuscatorConfig ->sensitiveHeaders ,
111+ Reference::to (sprintf (self :: KEY_SERVICE_ID_FORMAT , $ encryptionConfig ->encryptionKeyName ($ dataProtectionConfiguration ))),
112+ $ encryptionConfig ->isPayloadSensitive ,
113+ $ encryptionConfig ->sensitiveHeaders ,
111114 ],
112115 )
113116 );
114- $ messageObfuscatorReferences [$ messageClass ] = Reference::to ($ id );
117+ $ messageEncryptorReferences [$ messageClass ] = Reference::to ($ id );
115118 }
116119
117120 foreach (ExtensionObjectResolver::resolve (MessageChannelWithSerializationBuilder::class, $ extensionObjects ) as $ pollableMessageChannel ) {
@@ -122,15 +125,15 @@ public function prepare(Configuration $messagingConfiguration, array $extensionO
122125 $ messagingConfiguration ->registerChannelInterceptor (
123126 new OutboundEncryptionChannelBuilder (
124127 relatedChannel: $ pollableMessageChannel ->getMessageChannelName (),
125- channelObfuscatorReference : $ channelObfuscatorReferences [$ pollableMessageChannel ->getMessageChannelName ()] ?? null ,
126- messageObfuscatorReferences : $ messageObfuscatorReferences ,
128+ channelEncryptorReference : $ channelEncryptorReferences [$ pollableMessageChannel ->getMessageChannelName ()] ?? null ,
129+ messageEncryptorReferences : $ messageEncryptorReferences ,
127130 )
128131 );
129132 $ messagingConfiguration ->registerChannelInterceptor (
130133 new OutboundDecryptionChannelBuilder (
131134 relatedChannel: $ pollableMessageChannel ->getMessageChannelName (),
132- channelObfuscatorReference : $ channelObfuscatorReferences [$ pollableMessageChannel ->getMessageChannelName ()] ?? null ,
133- messageObfuscatorReferences : $ messageObfuscatorReferences ,
135+ channelEncryptionReference : $ channelEncryptorReferences [$ pollableMessageChannel ->getMessageChannelName ()] ?? null ,
136+ messageEncryptionReferences : $ messageEncryptorReferences ,
134137 )
135138 );
136139 }
@@ -151,20 +154,21 @@ public function getModulePackageName(): string
151154 return ModulePackageList::DATA_PROTECTION_PACKAGE ;
152155 }
153156
154- private static function resolveObfuscatorConfigsFromAnnotatedClasses (array $ sensitiveMessages, array $ obfuscatorConfigs , InterfaceToCallRegistry $ interfaceToCallRegistry ): array
157+ private static function resolveEncryptionConfigsFromAnnotatedClasses (array $ sensitiveMessages , InterfaceToCallRegistry $ interfaceToCallRegistry ): array
155158 {
159+ $ encryptionConfigs = [];
156160 foreach ($ sensitiveMessages as $ message ) {
157161 $ classDefinition = $ interfaceToCallRegistry ->getClassDefinitionFor (Type::create ($ message ));
158162 $ encryptionKey = $ classDefinition ->findSingleClassAnnotation (Type::create (WithEncryptionKey::class))?->encryptionKey();
159163 $ sensitiveHeaders = array_map (static fn (WithSensitiveHeader $ annotation ) => $ annotation ->header , $ classDefinition ->getClassAnnotations (Type::create (WithSensitiveHeader::class)) ?? []);
160164
161- $ obfuscatorConfigs [$ message ] = new ObfuscatorConfig (encryptionKey: $ encryptionKey , isPayloadSensitive: true , sensitiveHeaders: $ sensitiveHeaders );
165+ $ encryptionConfigs [$ message ] = new MessageEncryptionConfig (encryptionKey: $ encryptionKey , isPayloadSensitive: true , sensitiveHeaders: $ sensitiveHeaders );
162166 }
163167
164- return $ obfuscatorConfigs ;
168+ return $ encryptionConfigs ;
165169 }
166170
167- private static function resolveObfuscatorConfigsFromAnnotatedMethods (array $ annotatedMethods , array $ obfuscatorConfigs , InterfaceToCallRegistry $ interfaceToCallRegistry ): array
171+ private static function resolveEncryptionConfigsFromAnnotatedMethods (array $ annotatedMethods , array $ encryptionConfigs , InterfaceToCallRegistry $ interfaceToCallRegistry ): array
168172 {
169173 /** @var AnnotatedMethod $method */
170174 foreach ($ annotatedMethods as $ method ) {
@@ -175,7 +179,7 @@ private static function resolveObfuscatorConfigsFromAnnotatedMethods(array $anno
175179 $ payload ->hasAnnotation (Header::class)
176180 || $ payload ->hasAnnotation (Headers::class)
177181 || $ payload ->hasAnnotation (Reference::class)
178- || array_key_exists ($ payload ->getTypeHint (), $ obfuscatorConfigs )
182+ || array_key_exists ($ payload ->getTypeHint (), $ encryptionConfigs )
179183 ) {
180184 continue ;
181185 }
@@ -193,10 +197,10 @@ private static function resolveObfuscatorConfigsFromAnnotatedMethods(array $anno
193197 }
194198 }
195199
196- $ obfuscatorConfigs [$ payload ->getTypeHint ()] = new ObfuscatorConfig (encryptionKey: $ encryptionKey , isPayloadSensitive: true , sensitiveHeaders: $ sensitiveHeaders );
200+ $ encryptionConfigs [$ payload ->getTypeHint ()] = new MessageEncryptionConfig (encryptionKey: $ encryptionKey , isPayloadSensitive: true , sensitiveHeaders: $ sensitiveHeaders );
197201 }
198202
199- return $ obfuscatorConfigs ;
203+ return $ encryptionConfigs ;
200204 }
201205
202206 private function verifyLicense (Configuration $ messagingConfiguration ): void
0 commit comments