Skip to content

Commit 88e8347

Browse files
Merge v1.21 into v2.1 (#1768)
2 parents 94527f2 + 21afd09 commit 88e8347

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
@@ -118,12 +118,8 @@ public function __construct(?string $uri = null, array $uriOptions = [], array $
118118
throw InvalidArgumentException::invalidType('"typeMap" driver option', $driverOptions['typeMap'], 'array');
119119
}
120120

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

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

243233
return $this->manager->createClientEncryption($options);
244234
}
@@ -500,4 +490,26 @@ private function mergeDriverInfo(array $driver): array
500490

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

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)