Skip to content

Commit 823dd72

Browse files
authored
[Encryption] Fix XML configuration (#910)
* Add keyVaultClient to XML configuration * Require 1 kms provider in the XML config * Remove tls attributes from kms-provider node * Add cryptSharedLibRequired to XSD and test * Clean tlsOptions and wrap into an array with the kms provider name as key * Add comment for duplicate options
1 parent 61a8118 commit 823dd72

File tree

6 files changed

+17
-12
lines changed

6 files changed

+17
-12
lines changed

config/schema/mongodb-1.0.xsd

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,9 @@
125125

126126
<xsd:complexType name="auto-encryption">
127127
<xsd:sequence>
128-
<xsd:element name="kmsProvider" type="kms-provider" minOccurs="0" maxOccurs="1" />
128+
<xsd:element name="kmsProvider" type="kms-provider" minOccurs="1" maxOccurs="1" />
129129
<xsd:element name="masterKey" type="master-key" minOccurs="0" maxOccurs="1" />
130+
<xsd:element name="keyVaultClient" type="xsd:string" minOccurs="0" maxOccurs="1" />
130131
<xsd:element name="keyVaultNamespace" type="xsd:string" minOccurs="0" maxOccurs="1" />
131132
<xsd:element name="tlsOptions" type="tls-options" minOccurs="0" maxOccurs="1" />
132133
<xsd:element name="encryptedFieldsMap" type="encrypted-fields-map" minOccurs="0" maxOccurs="1" />
@@ -157,13 +158,11 @@
157158
<xsd:attribute name="projectId" type="xsd:string" use="optional" />
158159
<xsd:attribute name="location" type="xsd:string" use="optional" />
159160
<xsd:attribute name="keyRing" type="xsd:string" use="optional" />
161+
<!-- Attribute already present for another KMS type -->
160162
<!-- <xsd:attribute name="keyName" type="xsd:string" use="optional" /> -->
161163
<!-- <xsd:attribute name="keyVersion" type="xsd:string" use="optional" /> -->
162164
<!-- KMIP -->
163165
<!-- <xsd:attribute name="endpoint" type="xsd:string" use="optional" /> -->
164-
<xsd:attribute name="tlsCAFile" type="xsd:string" use="optional" />
165-
<xsd:attribute name="tlsClientCertificateKeyFile" type="xsd:string" use="optional" />
166-
<xsd:attribute name="tlsClientCertificateKeyFilePassword" type="xsd:string" use="optional" />
167166
<!-- Local -->
168167
<xsd:attribute name="key" type="xsd:string" use="optional" />
169168
</xsd:complexType>
@@ -197,6 +196,7 @@
197196
<xsd:attribute name="mongocryptdSpawnPath" type="xsd:string" use="optional" />
198197
<xsd:attribute name="mongocryptdSpawnArgs" type="xsd:string" use="optional" />
199198
<xsd:attribute name="cryptSharedLibPath" type="xsd:string" use="optional" />
199+
<xsd:attribute name="cryptSharedLibRequired" type="xsd:boolean" use="optional" />
200200
</xsd:complexType>
201201

202202
<xsd:complexType name="document-manager">

src/DependencyInjection/Configuration.php

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -384,13 +384,11 @@ private function addConnectionsSection(ArrayNodeDefinition $rootNode): void
384384
->scalarNode('projectId')->end()
385385
->scalarNode('location')->end()
386386
->scalarNode('keyRing')->end()
387+
// Attribute already present for another KMS type
387388
//->scalarNode('keyName')->end()
388389
//->scalarNode('keyVersion')->end()
389390
// KMIP
390391
//->scalarNode('endpoint')->end()
391-
->scalarNode('tlsCAFile')->end()
392-
->scalarNode('tlsClientCertificateKeyFile')->end()
393-
->scalarNode('tlsClientCertificateKeyFilePassword')->end()
394392
// Local
395393
->scalarNode('key')->end()
396394
->end()
@@ -438,11 +436,7 @@ private function addConnectionsSection(ArrayNodeDefinition $rootNode): void
438436
->scalarNode('tlsCAFile')->end()
439437
->scalarNode('tlsCertificateKeyFile')->end()
440438
->scalarNode('tlsCertificateKeyFilePassword')->end()
441-
->booleanNode('tlsAllowInvalidCertificates')->end()
442-
->booleanNode('tlsAllowInvalidHostnames')->end()
443-
->booleanNode('tlsDisableCertificateRevocationCheck')->end()
444439
->booleanNode('tlsDisableOCSPEndpointCheck')->end()
445-
->booleanNode('tlsInsecure')->end()
446440
->end()
447441
->end()
448442
->end()

src/DependencyInjection/DoctrineMongoDBExtension.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,9 +528,14 @@ private function normalizeAutoEncryption(array $autoEncryption, string $defaultD
528528
throw new InvalidArgumentException('The "kmsProvider" option must contain a "type" key.');
529529
}
530530

531+
$provider = $autoEncryption['kmsProvider']['type'];
531532
$autoEncryption['kmsProviders'] = [
532-
$autoEncryption['kmsProvider']['type'] => array_diff_key($autoEncryption['kmsProvider'], ['type' => true]),
533+
$provider => array_diff_key($autoEncryption['kmsProvider'], ['type' => true]),
533534
];
535+
if (isset($autoEncryption['tlsOptions'])) {
536+
$autoEncryption['tlsOptions'] = [$provider => $autoEncryption['tlsOptions']];
537+
}
538+
534539
unset($autoEncryption['kmsProvider']);
535540
unset($autoEncryption['masterKey']);
536541

tests/DependencyInjection/ConfigurationTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ public function testFullConfiguration(array $config): void
137137
'sessionToken' => 'MONGODB_AWS_SESSION_TOKEN',
138138
],
139139
'masterKey' => ['key' => 'MONGODB_AWS_MASTER_KEY'],
140+
'keyVaultClient' => 'my_key_vault_client_service',
140141
'keyVaultNamespace' => 'encryption.__keyVault',
141142
'tlsOptions' => [
142143
'tlsCAFile' => '%kernel.project_dir%/config/certificates/mongodb-ca.pem',
@@ -258,6 +259,7 @@ public function testFullConfiguration(array $config): void
258259
'mongocryptdSpawnPath' => '%kernel.project_dir%/bin/mongocryptd',
259260
'mongocryptdSpawnArgs' => '--pidfilepath=%kernel.project_dir%/var/mongocryptd.pid --idleShutdownTimeoutSecs=60',
260261
'cryptSharedLibPath' => '%kernel.project_dir%/bin/mongo_crypt_v1.dylib',
262+
'cryptSharedLibRequired' => true,
261263
],
262264
],
263265
],

tests/DependencyInjection/Fixtures/config/xml/full.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
sessionToken="MONGODB_AWS_SESSION_TOKEN"
7979
/>
8080
<doctrine:masterKey key="MONGODB_AWS_MASTER_KEY" />
81+
<doctrine:keyVaultClient>my_key_vault_client_service</doctrine:keyVaultClient>
8182
<doctrine:keyVaultNamespace>encryption.__keyVault</doctrine:keyVaultNamespace>
8283
<doctrine:tlsOptions
8384
tlsCAFile="%kernel.project_dir%/config/certificates/mongodb-ca.pem"
@@ -183,6 +184,7 @@
183184
mongocryptdSpawnPath="%kernel.project_dir%/bin/mongocryptd"
184185
mongocryptdSpawnArgs="--pidfilepath=%kernel.project_dir%/var/mongocryptd.pid --idleShutdownTimeoutSecs=60"
185186
cryptSharedLibPath="%kernel.project_dir%/bin/mongo_crypt_v1.dylib"
187+
cryptSharedLibRequired="true"
186188
/>
187189
</doctrine:autoEncryption>
188190
</doctrine:connection>

tests/DependencyInjection/Fixtures/config/yml/full.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ doctrine_mongodb:
6464
masterKey:
6565
key: 'MONGODB_AWS_MASTER_KEY'
6666
keyVaultNamespace: 'encryption.__keyVault'
67+
keyVaultClient: 'my_key_vault_client_service'
6768
tlsOptions:
6869
tlsCAFile: '%kernel.project_dir%/config/certificates/mongodb-ca.pem'
6970
tlsCertificateKeyFile: '%kernel.project_dir%/config/certificates/mongodb-client.pem'
@@ -131,6 +132,7 @@ doctrine_mongodb:
131132
mongocryptdSpawnPath: '%kernel.project_dir%/bin/mongocryptd'
132133
mongocryptdSpawnArgs: '--pidfilepath=%kernel.project_dir%/var/mongocryptd.pid --idleShutdownTimeoutSecs=60'
133134
cryptSharedLibPath: '%kernel.project_dir%/bin/mongo_crypt_v1.dylib'
135+
cryptSharedLibRequired: true
134136

135137
conn2:
136138
server: mongodb://otherhost

0 commit comments

Comments
 (0)