Skip to content

Commit

Permalink
1062: Added helper function to toggle default webform encrypt
Browse files Browse the repository at this point in the history
  • Loading branch information
cableman committed Apr 4, 2024
1 parent fbdf4c6 commit fcc7049
Show file tree
Hide file tree
Showing 10 changed files with 153 additions and 1 deletion.
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,14 +55,15 @@
"drupal/simple_ldap": "^1.0@alpha",
"drupal/simplesamlphp_auth": "^3.2",
"drupal/smtp": "^1.0@beta",
"drupal/sodium": "^2.4",
"drupal/switch_page_theme": "^4.0",
"drupal/telephone_validation": "^2.2",
"drupal/token": "^1.5",
"drupal/ultimate_cron": "^2.0.0",
"drupal/user_default_page": "^2.1",
"drupal/webform": "^6.1",
"drupal/webform_composite": "^1.0@RC",
"drupal/webform_encrypt": "^1.0@beta",
"drupal/webform_encrypt": "^2.0@alpha",
"drupal/webform_migrate": "^1.1",
"drupal/webform_node_element": "^1.2",
"drupal/webform_remote_handlers": "^1.6.0",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
uuid: 98e9a380-a5d6-4d2a-9176-7c50a9ec7c47
langcode: en
status: true
dependencies:
config:
- key.key.webform
module:
- sodium
id: webform
label: Webform
encryption_method: sodium
encryption_method_configuration: { }
encryption_key: webform
17 changes: 17 additions & 0 deletions modules/os2forms_encrypt/config/install/key.key.webform.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
uuid: be3383e8-1b0e-4b50-989f-e132900d02a0
langcode: en
status: true
dependencies: { }
id: webform
label: Webform
description: 'Encrypt webform submissions'
key_type: encryption
key_type_settings:
key_size: 256
key_provider: config
key_provider_settings:
key_value: LWD5+0klWZn48ZVs13UVHaHJYawX62PAMd3sklkKj/w=
base64_encoded: true
key_input: text_field
key_input_settings:
base64_encoded: true
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
enabled: 1
11 changes: 11 additions & 0 deletions modules/os2forms_encrypt/os2forms_encrypt.info.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
name: OS2Forms Encrypt
description: Encryption functionality for OS2Forms web-forms
package: OS2Forms
type: module
version: 1.0.0
core_version_requirement: ^8 || ^9 || ^10
dependencies:
- 'drupal:webform_encrypt'
- 'drupal:sodium'

configure: os2forms_encrypt.admin_settings
5 changes: 5 additions & 0 deletions modules/os2forms_encrypt/os2forms_encrypt.links.menu.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
os2forms_encrypt.admin_settings:
title: 'OS2Forms Encrypt settings'
parent: system.admin_config_system
description: 'Settings for the OS2Forms Encrypt module'
route_name: os2forms_encrypt.admin_settings
18 changes: 18 additions & 0 deletions modules/os2forms_encrypt/os2forms_encrypt.module
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

/**
* Implements hook_webform_element_info_alter().
*
* Add extra processing function to "force" enabled encryption on webform
* elements when they are being saved in the UI.
*/
function os2forms_encrypt_element_info_alter(array &$definitions): void {
foreach ($definitions as $element_id => &$definition) {
if ($element_id === 'webform_element_encrypt') {
$definition['#process'][] = [
'Drupal\os2forms_encrypt\Element\WebformElementEncrypt',
'processWebformElementEncrypt',
];
}
}
}
7 changes: 7 additions & 0 deletions modules/os2forms_encrypt/os2forms_encrypt.routing.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
os2forms_encrypt.admin_settings:
path: '/admin/config/os2forms_encrypt/settings'
defaults:
_form: '\Drupal\os2forms_encrypt\Form\SettingsForm'
_title: 'OS2Forms Encrypt settings'
requirements:
_permission: 'administer encrypt'
23 changes: 23 additions & 0 deletions modules/os2forms_encrypt/src/Element/WebformElementEncrypt.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

namespace Drupal\os2forms_encrypt\Element;

use Drupal\Core\Form\FormStateInterface;
use Drupal\os2forms_encrypt\Form\SettingsForm;

class WebformElementEncrypt {

/**
* Processes element attributes.
*
* Enabled encryption as default.
*/
public static function processWebformElementEncrypt(&$element, FormStateInterface $form_state, &$complete_form): array {
$config = \Drupal::config(SettingsForm::$configName);
if ($config->get('enabled')) {
$element['element_encrypt']['encrypt']['#default_value'] = TRUE;
}

return $element;
}
}
56 changes: 56 additions & 0 deletions modules/os2forms_encrypt/src/Form/SettingsForm.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?php

namespace Drupal\os2forms_encrypt\Form;

use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;

/**
* Class Os2FormsEncryptAdminForm.
*/
class SettingsForm extends ConfigFormBase {

public static string $configName = 'os2forms_encrypt.settings';

/**
* {@inheritdoc}
*/
protected function getEditableConfigNames(): array {
return [self::$configName];
}

/**
* {@inheritdoc}
*/
public function getFormId(): string {
return 'os2forms_encrypt_admin_form';
}

/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state): array {
$config = $this->config('os2forms_encrypt.settings');

$form['enabled'] = [
'#type' => 'checkbox',
'#title' => $this->t('Enabled encryption'),
'#description' => $this->t('Enable encryption for all webform fields. Please note that encryption will be applied only to those fields that are modified after enabling this option.'),
'#default_value' => $config->get('enabled'),
];

return parent::buildForm($form, $form_state);
}

/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state): void {
parent::submitForm($form, $form_state);

$this->config(self::$configName)
->set('enabled', $form_state->getValue('enabled'))
->save();
}

}

0 comments on commit fcc7049

Please sign in to comment.