From e148e601922c1550b76e548ad834f35b45efcb07 Mon Sep 17 00:00:00 2001 From: Scott Sutherland Date: Fri, 27 Oct 2023 16:07:23 +1300 Subject: [PATCH 1/2] Additional PHP8.1 hardening Uses the same logic as already included in EncryptedText --- src/FieldType/EncryptedDatetime.php | 2 ++ src/FieldType/EncryptedDecimal.php | 2 ++ src/FieldType/EncryptedEnum.php | 2 ++ src/FieldType/EncryptedInt.php | 2 ++ src/FieldType/EncryptedVarchar.php | 2 ++ 5 files changed, 10 insertions(+) diff --git a/src/FieldType/EncryptedDatetime.php b/src/FieldType/EncryptedDatetime.php index 644cf17..57852c9 100644 --- a/src/FieldType/EncryptedDatetime.php +++ b/src/FieldType/EncryptedDatetime.php @@ -42,6 +42,8 @@ public function setValue($value, $record = null, $markChanged = true) public function getDecryptedValue($value) { + // Type hardening for PHP 8.1+ + $value = (string)$value; // Test if we're actually an encrypted value; if (ctype_xdigit($value) && strlen($value) > 130) { try { diff --git a/src/FieldType/EncryptedDecimal.php b/src/FieldType/EncryptedDecimal.php index b7e3e77..fce5ba2 100644 --- a/src/FieldType/EncryptedDecimal.php +++ b/src/FieldType/EncryptedDecimal.php @@ -42,6 +42,8 @@ public function setValue($value, $record = null, $markChanged = true) public function getDecryptedValue($value) { + // Type hardening for PHP 8.1+ + $value = (string)$value; // Test if we're actually an encrypted value; if (ctype_xdigit($value) && strlen($value) > 130) { try { diff --git a/src/FieldType/EncryptedEnum.php b/src/FieldType/EncryptedEnum.php index 094270c..a5aa5c9 100644 --- a/src/FieldType/EncryptedEnum.php +++ b/src/FieldType/EncryptedEnum.php @@ -43,6 +43,8 @@ public function setValue($value, $record = null, $markChanged = true) public function getDecryptedValue($value) { + // Type hardening for PHP 8.1+ + $value = (string)$value; // Test if we're actually an encrypted value; if (ctype_xdigit($value) && strlen($value) > 130) { try { diff --git a/src/FieldType/EncryptedInt.php b/src/FieldType/EncryptedInt.php index 00f000c..aadfc22 100644 --- a/src/FieldType/EncryptedInt.php +++ b/src/FieldType/EncryptedInt.php @@ -42,6 +42,8 @@ public function setValue($value, $record = null, $markChanged = true) public function getDecryptedValue($value) { + // Type hardening for PHP 8.1+ + $value = (string)$value; // Test if we're actually an encrypted value; if (ctype_xdigit($value) && strlen($value) > 130) { try { diff --git a/src/FieldType/EncryptedVarchar.php b/src/FieldType/EncryptedVarchar.php index e169103..6f26556 100644 --- a/src/FieldType/EncryptedVarchar.php +++ b/src/FieldType/EncryptedVarchar.php @@ -42,6 +42,8 @@ public function setValue($value, $record = null, $markChanged = true) public function getDecryptedValue($value) { + // Type hardening for PHP 8.1+ + $value = (string)$value; // Test if we're actually an encrypted value; if (ctype_xdigit($value) && strlen($value) > 130) { try { From f49250f1eb6ab98122c487030f29a278fecce9d9 Mon Sep 17 00:00:00 2001 From: Scott Sutherland Date: Mon, 30 Oct 2023 12:47:12 +1300 Subject: [PATCH 2/2] Implement `GetValue` function via a trait Reduces duplication --- src/FieldType/EncryptedDatetime.php | 13 +++++-------- src/FieldType/EncryptedDecimal.php | 12 ++++-------- src/FieldType/EncryptedEnum.php | 12 ++++-------- src/FieldType/EncryptedInt.php | 12 ++++-------- src/FieldType/EncryptedText.php | 12 ++++-------- src/FieldType/EncryptedVarchar.php | 21 +++++++++------------ src/Traits/EncryptedFieldGetValueTrait.php | 16 ++++++++++++++++ 7 files changed, 46 insertions(+), 52 deletions(-) create mode 100644 src/Traits/EncryptedFieldGetValueTrait.php diff --git a/src/FieldType/EncryptedDatetime.php b/src/FieldType/EncryptedDatetime.php index 57852c9..681d08f 100644 --- a/src/FieldType/EncryptedDatetime.php +++ b/src/FieldType/EncryptedDatetime.php @@ -3,6 +3,7 @@ namespace Madmatt\EncryptAtRest\FieldType; use Exception; +use Madmatt\EncryptAtRest\Traits\EncryptedFieldGetValueTrait; use SilverStripe\Core\Injector\Injector; use SilverStripe\ORM\DB; use SilverStripe\ORM\FieldType\DBDatetime; @@ -17,6 +18,9 @@ */ class EncryptedDatetime extends DBDatetime { + + use EncryptedFieldGetValueTrait; + /** * @var AtRestCryptoService */ @@ -40,10 +44,8 @@ public function setValue($value, $record = null, $markChanged = true) } } - public function getDecryptedValue($value) + public function getDecryptedValue(string $value = '') { - // Type hardening for PHP 8.1+ - $value = (string)$value; // Test if we're actually an encrypted value; if (ctype_xdigit($value) && strlen($value) > 130) { try { @@ -56,11 +58,6 @@ public function getDecryptedValue($value) return $value; } - public function getValue() - { - return $this->getDecryptedValue($this->value); // TODO: Change the autogenerated stub - } - public function requireField() { $values = array( diff --git a/src/FieldType/EncryptedDecimal.php b/src/FieldType/EncryptedDecimal.php index fce5ba2..26ff244 100644 --- a/src/FieldType/EncryptedDecimal.php +++ b/src/FieldType/EncryptedDecimal.php @@ -3,6 +3,7 @@ namespace Madmatt\EncryptAtRest\FieldType; use Exception; +use Madmatt\EncryptAtRest\Traits\EncryptedFieldGetValueTrait; use SilverStripe\Core\Injector\Injector; use SilverStripe\ORM\DB; use SilverStripe\ORM\FieldType\DBDecimal; @@ -17,6 +18,8 @@ */ class EncryptedDecimal extends DBDecimal { + use EncryptedFieldGetValueTrait; + /** * @var AtRestCryptoService */ @@ -40,10 +43,8 @@ public function setValue($value, $record = null, $markChanged = true) } } - public function getDecryptedValue($value) + public function getDecryptedValue(string $value = '') { - // Type hardening for PHP 8.1+ - $value = (string)$value; // Test if we're actually an encrypted value; if (ctype_xdigit($value) && strlen($value) > 130) { try { @@ -56,11 +57,6 @@ public function getDecryptedValue($value) return (float)$value; } - public function getValue() - { - return $this->getDecryptedValue($this->value); // TODO: Change the autogenerated stub - } - public function requireField() { $values = array( diff --git a/src/FieldType/EncryptedEnum.php b/src/FieldType/EncryptedEnum.php index a5aa5c9..9960b03 100644 --- a/src/FieldType/EncryptedEnum.php +++ b/src/FieldType/EncryptedEnum.php @@ -3,6 +3,7 @@ namespace Madmatt\EncryptAtRest\FieldType; use Exception; +use Madmatt\EncryptAtRest\Traits\EncryptedFieldGetValueTrait; use SilverStripe\Core\Injector\Injector; use SilverStripe\ORM\DB; use SilverStripe\ORM\FieldType\DBEnum; @@ -18,6 +19,8 @@ */ class EncryptedEnum extends DBEnum { + use EncryptedFieldGetValueTrait; + /** * @var AtRestCryptoService */ @@ -41,10 +44,8 @@ public function setValue($value, $record = null, $markChanged = true) } } - public function getDecryptedValue($value) + public function getDecryptedValue(string $value = '') { - // Type hardening for PHP 8.1+ - $value = (string)$value; // Test if we're actually an encrypted value; if (ctype_xdigit($value) && strlen($value) > 130) { try { @@ -57,11 +58,6 @@ public function getDecryptedValue($value) return $value; } - public function getValue() - { - return $this->getDecryptedValue($this->value); - } - public function requireField() { $values = array( diff --git a/src/FieldType/EncryptedInt.php b/src/FieldType/EncryptedInt.php index aadfc22..300e41d 100644 --- a/src/FieldType/EncryptedInt.php +++ b/src/FieldType/EncryptedInt.php @@ -3,6 +3,7 @@ namespace Madmatt\EncryptAtRest\FieldType; use Exception; +use Madmatt\EncryptAtRest\Traits\EncryptedFieldGetValueTrait; use SilverStripe\Core\Injector\Injector; use SilverStripe\ORM\DB; use SilverStripe\ORM\FieldType\DBInt; @@ -17,6 +18,8 @@ */ class EncryptedInt extends DBInt { + use EncryptedFieldGetValueTrait; + /** * @var AtRestCryptoService */ @@ -40,10 +43,8 @@ public function setValue($value, $record = null, $markChanged = true) } } - public function getDecryptedValue($value) + public function getDecryptedValue(string $value = '') { - // Type hardening for PHP 8.1+ - $value = (string)$value; // Test if we're actually an encrypted value; if (ctype_xdigit($value) && strlen($value) > 130) { try { @@ -56,11 +57,6 @@ public function getDecryptedValue($value) return $value; } - public function getValue() - { - return $this->getDecryptedValue($this->value); - } - public function requireField() { $values = array( diff --git a/src/FieldType/EncryptedText.php b/src/FieldType/EncryptedText.php index abe80a7..f2d0df8 100644 --- a/src/FieldType/EncryptedText.php +++ b/src/FieldType/EncryptedText.php @@ -3,6 +3,7 @@ namespace Madmatt\EncryptAtRest\FieldType; use Exception; +use Madmatt\EncryptAtRest\Traits\EncryptedFieldGetValueTrait; use SilverStripe\Core\Injector\Injector; use SilverStripe\ORM\DB; use SilverStripe\ORM\FieldType\DBText; @@ -10,6 +11,8 @@ class EncryptedText extends DBText { + use EncryptedFieldGetValueTrait; + /** * @var AtRestCryptoService */ @@ -33,10 +36,8 @@ public function setValue($value, $record = null, $markChanged = true) } } - public function getDecryptedValue($value) + public function getDecryptedValue(string $value = '') { - // Type hardening for PHP 8.1+ - $value = (string)$value; // Test if we're actually an encrypted value; if (ctype_xdigit($value) && strlen($value) > 130) { try { @@ -49,11 +50,6 @@ public function getDecryptedValue($value) return $value; } - public function getValue() - { - return $this->getDecryptedValue($this->value); // TODO: Change the autogenerated stub - } - public function requireField() { $values = array( diff --git a/src/FieldType/EncryptedVarchar.php b/src/FieldType/EncryptedVarchar.php index 6f26556..43aff7d 100644 --- a/src/FieldType/EncryptedVarchar.php +++ b/src/FieldType/EncryptedVarchar.php @@ -3,10 +3,11 @@ namespace Madmatt\EncryptAtRest\FieldType; use Exception; +use Madmatt\EncryptAtRest\AtRestCryptoService; +use Madmatt\EncryptAtRest\Traits\EncryptedFieldGetValueTrait; use SilverStripe\Core\Injector\Injector; use SilverStripe\ORM\DB; use SilverStripe\ORM\FieldType\DBVarchar; -use Madmatt\EncryptAtRest\AtRestCryptoService; /** * Class EncryptedVarchar @@ -17,6 +18,9 @@ */ class EncryptedVarchar extends DBVarchar { + + use EncryptedFieldGetValueTrait; + /** * @var AtRestCryptoService */ @@ -40,10 +44,8 @@ public function setValue($value, $record = null, $markChanged = true) } } - public function getDecryptedValue($value) + public function getDecryptedValue(string $value = '') { - // Type hardening for PHP 8.1+ - $value = (string)$value; // Test if we're actually an encrypted value; if (ctype_xdigit($value) && strlen($value) > 130) { try { @@ -56,18 +58,13 @@ public function getDecryptedValue($value) return $value; } - public function getValue() - { - return $this->getDecryptedValue($this->value); // TODO: Change the autogenerated stub - } - public function requireField() { $values = array( - 'type' => 'text', + 'type' => 'text', 'parts' => array( - 'datatype' => 'text', - 'null' => 'not null', + 'datatype' => 'text', + 'null' => 'not null', 'arrayValue' => $this->arrayValue ) ); diff --git a/src/Traits/EncryptedFieldGetValueTrait.php b/src/Traits/EncryptedFieldGetValueTrait.php new file mode 100644 index 0000000..43dd591 --- /dev/null +++ b/src/Traits/EncryptedFieldGetValueTrait.php @@ -0,0 +1,16 @@ +value; + + return $this->getDecryptedValue($value); + } + +}