Skip to content

Commit 52f014b

Browse files
committed
PHPC-2085: autoEncryption options for queryable encryption
1 parent 2e561ad commit 52f014b

File tree

3 files changed

+33
-7
lines changed

3 files changed

+33
-7
lines changed

src/phongo_client.c

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1278,6 +1278,33 @@ static bool phongo_manager_set_auto_encryption_opts(php_phongo_manager_t* manage
12781278

12791279
auto_encryption_opts = mongoc_auto_encryption_opts_new();
12801280

1281+
if (php_array_existsc(zAutoEncryptionOpts, "bypassAutoEncryption")) {
1282+
mongoc_auto_encryption_opts_set_bypass_auto_encryption(auto_encryption_opts, php_array_fetch_bool(zAutoEncryptionOpts, "bypassAutoEncryption"));
1283+
}
1284+
1285+
if (php_array_existsc(zAutoEncryptionOpts, "bypassQueryAnalysis")) {
1286+
mongoc_auto_encryption_opts_set_bypass_query_analysis(auto_encryption_opts, php_array_fetch_bool(zAutoEncryptionOpts, "bypassQueryAnalysis"));
1287+
}
1288+
1289+
if (php_array_existsc(zAutoEncryptionOpts, "encryptedFieldsMap")) {
1290+
zval* enc_fields_map = php_array_fetch(zAutoEncryptionOpts, "encryptedFieldsMap");
1291+
bson_t bson_map = BSON_INITIALIZER;
1292+
1293+
if (Z_TYPE_P(enc_fields_map) != IS_OBJECT && Z_TYPE_P(enc_fields_map) != IS_ARRAY) {
1294+
phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT, "Expected \"encryptedFieldsMap\" encryption option to be an array or object");
1295+
goto cleanup;
1296+
}
1297+
1298+
php_phongo_zval_to_bson(enc_fields_map, PHONGO_BSON_NONE, &bson_map, NULL);
1299+
if (EG(exception)) {
1300+
goto cleanup;
1301+
}
1302+
1303+
mongoc_auto_encryption_opts_set_encrypted_fields_map(auto_encryption_opts, &bson_map);
1304+
1305+
bson_destroy(&bson_map);
1306+
}
1307+
12811308
if (php_array_existsc(zAutoEncryptionOpts, "keyVaultClient")) {
12821309
zval* key_vault_client = php_array_fetch(zAutoEncryptionOpts, "keyVaultClient");
12831310

@@ -1388,12 +1415,6 @@ static bool phongo_manager_set_auto_encryption_opts(php_phongo_manager_t* manage
13881415
bson_destroy(&bson_options);
13891416
}
13901417

1391-
if (php_array_existsc(zAutoEncryptionOpts, "bypassAutoEncryption")) {
1392-
zend_bool bypass_auto_encryption = php_array_fetch_bool(zAutoEncryptionOpts, "bypassAutoEncryption");
1393-
1394-
mongoc_auto_encryption_opts_set_bypass_auto_encryption(auto_encryption_opts, bypass_auto_encryption);
1395-
}
1396-
13971418
if (php_array_existsc(zAutoEncryptionOpts, "extraOptions")) {
13981419
zval* extra_options = php_array_fetch(zAutoEncryptionOpts, "extraOptions");
13991420
bson_t bson_options = BSON_INITIALIZER;

tests/manager/manager-ctor-auto_encryption-001.phpt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ $baseOptions = [
1414

1515
$tests = [
1616
[],
17+
['bypassAutoEncryption' => true],
18+
['bypassQueryAnalysis' => true],
1719
['keyVaultClient' => new MongoDB\Driver\Manager()],
1820
['schemaMap' => [
1921
'default.default' => [
@@ -36,7 +38,6 @@ $tests = [
3638
'bsonType' => 'object',
3739
],
3840
]],
39-
['bypassAutoEncryption' => true],
4041
['extraOptions' => ['mongocryptdBypassSpawn' => true]],
4142
];
4243

tests/manager/manager-ctor-auto_encryption-error-003.phpt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ require_once __DIR__ . '/../utils/basic.inc';
1010

1111
$tests = [
1212
'not_an_array',
13+
['encryptedFieldsMap' => 'not_an_array_or_object'],
1314
['keyVaultClient' => 'not_an_array_or_object'],
1415
[
1516
'keyVaultNamespace' => 'not_a_namespace',
@@ -35,6 +36,9 @@ foreach ($tests as $test) {
3536
OK: Got MongoDB\Driver\Exception\InvalidArgumentException
3637
Expected "autoEncryption" driver option to be array, string given
3738

39+
OK: Got MongoDB\Driver\Exception\InvalidArgumentException
40+
Expected "encryptedFieldsMap" encryption option to be an array or object
41+
3842
OK: Got MongoDB\Driver\Exception\InvalidArgumentException
3943
Expected "keyVaultClient" encryption option to be MongoDB\Driver\Manager, string given
4044

0 commit comments

Comments
 (0)