Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /