View source
<?php
if (PHP_SAPI !== 'cli') {
return;
}
use Drupal\encrypt\Entity\EncryptionProfile;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\key\Entity\Key;
use Drupal\node\Entity\Node;
if (!Key::load('testing_key_256')) {
$key_256 = Key::create([
'id' => 'testing_key_256',
'label' => 'Testing Key 256 bit',
'key_type' => "encryption",
'key_type_settings' => [
'key_size' => '256',
],
'key_provider' => 'config',
'key_provider_settings' => [
'key_value' => 'F)J@NcRfUjXn2r5u8x/A?D(G-KaPdSgV',
],
]);
$key_256
->save();
}
if (!EncryptionProfile::load('encryption_profile_1')) {
$encryption_profile_1 = EncryptionProfile::create([
'id' => 'encryption_profile_1',
'label' => 'Encryption profile 1',
'encryption_method' => 'sodium',
'encryption_key' => $key_256
->id(),
]);
$encryption_profile_1
->save();
}
$field_created = FALSE;
if (!FieldStorageConfig::loadByName('node', 'field_test_single')) {
$field_created = TRUE;
$single_field_storage = FieldStorageConfig::create([
'field_name' => 'field_test_single',
'entity_type' => 'node',
'type' => 'text_with_summary',
'cardinality' => 1,
]);
$single_field_storage
->setThirdPartySetting('field_encrypt', 'encrypt', TRUE);
$single_field_storage
->setThirdPartySetting('field_encrypt', 'properties', [
'value' => 'value',
'summary' => 'summary',
]);
$single_field_storage
->setThirdPartySetting('field_encrypt', 'encryption_profile', 'encryption_profile_1');
$single_field_storage
->setThirdPartySetting('field_encrypt', 'uncacheable', TRUE);
$single_field_storage
->save();
$single_field = FieldConfig::create([
'field_storage' => $single_field_storage,
'bundle' => 'page',
'label' => 'Single field',
]);
$single_field
->save();
$display_repository = \Drupal::service('entity_display.repository');
$display_repository
->getFormDisplay('node', 'page', 'default')
->setComponent('field_test_single')
->save();
$display_repository
->getViewDisplay('node', 'page', 'default')
->setComponent('field_test_single', [
'type' => 'text_default',
])
->save();
$multi_field_storage = FieldStorageConfig::create([
'field_name' => 'field_test_multi',
'entity_type' => 'node',
'type' => 'string',
'cardinality' => 3,
]);
$multi_field_storage
->setThirdPartySetting('field_encrypt', 'encrypt', TRUE);
$multi_field_storage
->setThirdPartySetting('field_encrypt', 'properties', [
'value' => 'value',
]);
$multi_field_storage
->setThirdPartySetting('field_encrypt', 'encryption_profile', 'encryption_profile_1');
$multi_field_storage
->setThirdPartySetting('field_encrypt', 'uncacheable', TRUE);
$multi_field_storage
->save();
$multi_field = FieldConfig::create([
'field_storage' => $multi_field_storage,
'bundle' => 'page',
'label' => 'Multi field',
]);
$multi_field
->save();
$display_repository
->getFormDisplay('node', 'page', 'default')
->setComponent('field_test_multi')
->save();
$display_repository
->getViewDisplay('node', 'page', 'default')
->setComponent('field_test_multi', [
'type' => 'string',
])
->save();
}
\Drupal::configFactory()
->getEditable('field_encrypt.settings')
->set('encryption_profile', 'encryption_profile_1')
->save();
if ($field_created) {
drupal_flush_all_caches();
}
$default_filter_format = filter_default_format();
$values = [
'field_test_single' => [
[
'value' => "Lorem ipsum dolor sit amet.",
'summary' => "Lorem ipsum",
'format' => $default_filter_format,
],
],
'field_test_multi' => [
[
'value' => "one lorem",
],
[
'value' => "two lorem",
],
[
'value' => "three lorem",
],
],
'type' => 'page',
'uid' => 0,
];
$node_ids = [];
$quantity = (int) (getenv('FIELD_ENCRYPT_QUANTITY') ?? 1000);
$start = microtime(TRUE);
for ($i = 0; $i < $quantity; $i++) {
$values['title'] = 'Test node ' . ($i + 1);
$node = Node::create($values);
$node
->save();
$node_ids[] = $node
->id();
}
print 'Created ' . count($node_ids) . ' encrypted nodes in : ' . round(microtime(TRUE) - $start, 2) . " seconds\n";
if ($field_created) {
drupal_flush_all_caches();
}
\Drupal::entityTypeManager()
->getStorage('node')
->resetCache();
$start = microtime(TRUE);
foreach ($node_ids as $nid) {
$node = Node::load($nid);
}
print 'Decrypted ' . count($node_ids) . ' encrypted nodes in : ' . round(microtime(TRUE) - $start, 2) . " seconds\n";