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 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)

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