Skip to content

Commit 771b3da

Browse files
Merge v2.1 into v2.x (#1769)
2 parents b48618f + 88e8347 commit 771b3da

File tree

5 files changed

+41
-17
lines changed

5 files changed

+41
-17
lines changed

psalm-baseline.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,12 @@
222222
<code><![CDATA[$driverOptions['driver'] ?? []]]></code>
223223
<code><![CDATA[$pipeline]]></code>
224224
</MixedArgument>
225+
<MixedArrayAssignment>
226+
<code><![CDATA[$options['kmsProviders'][$name]]]></code>
227+
</MixedArrayAssignment>
225228
<MixedAssignment>
226229
<code><![CDATA[$mergedDriver['platform']]]></code>
230+
<code><![CDATA[$provider]]></code>
227231
</MixedAssignment>
228232
<MixedPropertyTypeCoercion>
229233
<code><![CDATA[$driverOptions['builderEncoder'] ?? new BuilderEncoder()]]></code>

src/Client.php

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -119,12 +119,8 @@ public function __construct(?string $uri = null, array $uriOptions = [], array $
119119
throw InvalidArgumentException::invalidType('"typeMap" driver option', $driverOptions['typeMap'], 'array');
120120
}
121121

122-
if (isset($driverOptions['autoEncryption']['keyVaultClient'])) {
123-
if ($driverOptions['autoEncryption']['keyVaultClient'] instanceof self) {
124-
$driverOptions['autoEncryption']['keyVaultClient'] = $driverOptions['autoEncryption']['keyVaultClient']->manager;
125-
} elseif (! $driverOptions['autoEncryption']['keyVaultClient'] instanceof Manager) {
126-
throw InvalidArgumentException::invalidType('"keyVaultClient" autoEncryption option', $driverOptions['autoEncryption']['keyVaultClient'], [self::class, Manager::class]);
127-
}
122+
if (isset($driverOptions['autoEncryption']) && is_array($driverOptions['autoEncryption'])) {
123+
$driverOptions['autoEncryption'] = $this->prepareEncryptionOptions($driverOptions['autoEncryption']);
128124
}
129125

130126
if (isset($driverOptions['builderEncoder']) && ! $driverOptions['builderEncoder'] instanceof Encoder) {
@@ -233,13 +229,7 @@ public function bulkWrite(BulkWriteCommand|ClientBulkWrite $bulk, array $options
233229
*/
234230
public function createClientEncryption(array $options): ClientEncryption
235231
{
236-
if (isset($options['keyVaultClient'])) {
237-
if ($options['keyVaultClient'] instanceof self) {
238-
$options['keyVaultClient'] = $options['keyVaultClient']->manager;
239-
} elseif (! $options['keyVaultClient'] instanceof Manager) {
240-
throw InvalidArgumentException::invalidType('"keyVaultClient" option', $options['keyVaultClient'], [self::class, Manager::class]);
241-
}
242-
}
232+
$options = $this->prepareEncryptionOptions($options);
243233

244234
return $this->manager->createClientEncryption($options);
245235
}
@@ -501,4 +491,26 @@ private function mergeDriverInfo(array $driver): array
501491

502492
return $mergedDriver;
503493
}
494+
495+
private function prepareEncryptionOptions(array $options): array
496+
{
497+
if (isset($options['keyVaultClient'])) {
498+
if ($options['keyVaultClient'] instanceof self) {
499+
$options['keyVaultClient'] = $options['keyVaultClient']->manager;
500+
} elseif (! $options['keyVaultClient'] instanceof Manager) {
501+
throw InvalidArgumentException::invalidType('"keyVaultClient" option', $options['keyVaultClient'], [self::class, Manager::class]);
502+
}
503+
}
504+
505+
// The server requires an empty document for automatic credentials.
506+
if (isset($options['kmsProviders']) && is_array($options['kmsProviders'])) {
507+
foreach ($options['kmsProviders'] as $name => $provider) {
508+
if ($provider === []) {
509+
$options['kmsProviders'][$name] = new stdClass();
510+
}
511+
}
512+
}
513+
514+
return $options;
515+
}
504516
}

tests/ClientTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,18 @@ public function testConstructorAutoEncryptionOpts(): void
3737
new Client(static::getUri(), [], ['autoEncryption' => $autoEncryptionOpts]);
3838
}
3939

40+
#[DoesNotPerformAssertions]
41+
public function testConstructorEmptyKmsProvider(): void
42+
{
43+
$autoEncryptionOpts = [
44+
'keyVaultClient' => new Client(static::getUri()),
45+
'keyVaultNamespace' => 'default.keys',
46+
'kmsProviders' => ['gcp' => []],
47+
];
48+
49+
new Client(static::getUri(), [], ['autoEncryption' => $autoEncryptionOpts]);
50+
}
51+
4052
#[DataProvider('provideInvalidConstructorDriverOptions')]
4153
public function testConstructorDriverOptionTypeChecks(array $driverOptions, string $exception = InvalidArgumentException::class): void
4254
{

tests/Collection/CollectionFunctionalTest.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,6 @@ public function testWithOptionsInheritsOptions(): void
413413

414414
$rc = new ReflectionClass($clone);
415415
$rp = $rc->getProperty('autoEncryptionEnabled');
416-
$rp->setAccessible(true);
417416

418417
$this->assertSame(true, $rp->getValue($clone));
419418
}
@@ -441,7 +440,6 @@ public function testWithOptionsPassesOptions(): void
441440

442441
$rc = new ReflectionClass($clone);
443442
$rp = $rc->getProperty('autoEncryptionEnabled');
444-
$rp->setAccessible(true);
445443

446444
$this->assertSame(true, $rp->getValue($clone));
447445
}

tests/Database/DatabaseFunctionalTest.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,6 @@ public function testWithOptionsInheritsOptions(): void
393393

394394
$rc = new ReflectionClass($clone);
395395
$rp = $rc->getProperty('autoEncryptionEnabled');
396-
$rp->setAccessible(true);
397396

398397
$this->assertSame(true, $rp->getValue($clone));
399398
}
@@ -420,7 +419,6 @@ public function testWithOptionsPassesOptions(): void
420419

421420
$rc = new ReflectionClass($clone);
422421
$rp = $rc->getProperty('autoEncryptionEnabled');
423-
$rp->setAccessible(true);
424422

425423
$this->assertSame(true, $rp->getValue($clone));
426424
}

0 commit comments

Comments
 (0)