Compare commits

..

No commits in common. "main" and "v1.2" have entirely different histories.
main ... v1.2

6 changed files with 45 additions and 80 deletions

View File

@ -17,8 +17,7 @@
], ],
"require": { "require": {
"php": "^8.4", "php": "^8.4",
"ext-mbstring": "*", "ext-mbstring": "*"
"ext-openssl": "*"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^12.2.7" "phpunit/phpunit": "^12.2.7"

View File

@ -6,7 +6,6 @@ use DateTimeImmutable;
use DateTimeInterface; use DateTimeInterface;
use Exception; use Exception;
use goodboyalex\php_components_pack\attributes\GetOnly; use goodboyalex\php_components_pack\attributes\GetOnly;
use goodboyalex\php_components_pack\types\GUID;
use ReflectionClass; use ReflectionClass;
use ReflectionException; use ReflectionException;
use ReflectionProperty; use ReflectionProperty;
@ -342,11 +341,6 @@ final class ClassMapper
*/ */
$property->setAccessible(true); $property->setAccessible(true);
// Если значение string, а требуется GUID
if (is_string($value) && $property->getType()->getName() === GUID::class)
// - то присваиваю значение GUID
$value = GUID::Parse($value, true);
// Если значение null // Если значение null
if (!is_bool($value) && ($value == null || $value == "null")) if (!is_bool($value) && ($value == null || $value == "null"))
// - то присваиваю значение по умолчанию // - то присваиваю значение по умолчанию

View File

@ -1,60 +0,0 @@
<?php
namespace goodboyalex\php_components_pack\classes;
/**
* Класс криптографической защиты.
*
* @author Александр Бабаев
* @package php_components_pack
* @version 1.0
* @since 1.2.2
*/
final class Encryptor
{
/**
* Шифрует данные.
*
* @param string $string Данные для шифрования.
* @param string $key Ключ шифрования.
*
* @return string|false Шифрованные данные или false в случае ошибки.
*/
public static function Encrypt (string $string, string $key): string|false
{
// Метод шифрования
$cipher = 'aes-256-cbc';
// Длинна ненулевого вектора инициализации
$ivLen = openssl_cipher_iv_length($cipher);
// Ненулевой вектор инициализации
$iv = openssl_random_pseudo_bytes($ivLen);
// Шифрую и вывожу
return openssl_encrypt($string, $cipher, $key, iv: $iv) . ":" . base64_encode($iv);
}
/**
* Дешифрует данные.
*
* @param string $string Данные для дешифрования.
* @param string $key Ключ шифрования.
*
* @return string|false Дешифрованные данные или false в случае ошибки.
*/
public static function Decrypt (string $string, string $key): false|string
{
// Метод шифрования
$cipher = 'aes-256-cbc';
// Разделённый массив с шифрованными данными и вектором инициализации
$cryptArray = explode(':', $string);
// Ненулевой вектор инициализации
$iv = base64_decode($cryptArray[1]);
// Дешифрую и вывожу
return openssl_decrypt($cryptArray[0], $cipher, $key, iv: $iv);
}
}

View File

@ -0,0 +1,32 @@
<?php
namespace goodboyalex\php_components_pack\interfaces;
/**
* Интерфейс поддержки моделей и классов, реализующих хранение свойств в SQL базе данных.
*
* @author Александр Бабаев
* @package freecms
* @version 0.1
* @since 0.1
*/
interface IStoredAtSQL
{
/**
* Вывод параметров добавления/обновления данных в базу данных.
*
* @param bool $withId Нужно ли добавлять Id в массив
*
* @return array Массив параметров
*/
public function ToSQL (bool $withId = true): array;
/**
* Преобразование данных из базы данных в модель, класс.
*
* @param array $sqlData Данные из базы данных
*
* @return self Класс модели с заполненными данными из базы данных
*/
public function FromSQL (array $sqlData): self;
}

View File

@ -23,15 +23,15 @@ use Throwable;
/** /**
* Определение константы для пустого GUID как строки. * Определение константы для пустого GUID как строки.
*/ */
if (!defined('GUID_EMPTY')) if (!defined('GUID_EMPTY_STRING'))
define('GUID_EMPTY', '00000000-0000-0000-0000-000000000000'); define('GUID_EMPTY_STRING', '00000000-0000-0000-0000-000000000000');
/** /**
* Класс GUID предназначен для работы с уникальными идентификаторами формата UUID/GUID. * Класс GUID предназначен для работы с уникальными идентификаторами формата UUID/GUID.
* *
* @author Александр Бабаев * @author Александр Бабаев
* @package php_components_pack * @package php_components_pack
* @version 1.0.1 * @version 1.0
* @since 1.2 * @since 1.2
*/ */
final class GUID implements IArrayable, IDuplicated, ISerializable, IComparable, IHashable, JsonSerializable final class GUID implements IArrayable, IDuplicated, ISerializable, IComparable, IHashable, JsonSerializable
@ -40,7 +40,7 @@ final class GUID implements IArrayable, IDuplicated, ISerializable, IComparable,
* @var string $Value Внутреннее свойство для хранения значения GUID. * @var string $Value Внутреннее свойство для хранения значения GUID.
*/ */
private string $Value { private string $Value {
get => StringExtension::IsNullOrWhitespace($this->Value) ? GUID_EMPTY : $this->Value; get => StringExtension::IsNullOrWhitespace($this->Value) ? GUID_EMPTY_STRING : $this->Value;
set { set {
if (!self::Validate($value)) if (!self::Validate($value))
throw new InvalidArgumentException('Неверный идентификатор (GUID) / Wrong GUID identifier.'); throw new InvalidArgumentException('Неверный идентификатор (GUID) / Wrong GUID identifier.');
@ -54,9 +54,9 @@ final class GUID implements IArrayable, IDuplicated, ISerializable, IComparable,
* *
* @param string $value Значение GUID. По умолчанию, пустой GUID. * @param string $value Значение GUID. По умолчанию, пустой GUID.
* *
* @see GUID_EMPTY * @see GUID_EMPTY_STRING
*/ */
public function __construct (string $value = GUID_EMPTY) public function __construct (string $value = GUID_EMPTY_STRING)
{ {
$this->Value = $value; $this->Value = $value;
} }
@ -94,7 +94,7 @@ final class GUID implements IArrayable, IDuplicated, ISerializable, IComparable,
} }
catch (Throwable) { catch (Throwable) {
// Если возникла ошибка при генерации GUID, возвращаем пустой GUID // Если возникла ошибка при генерации GUID, возвращаем пустой GUID
$guid = GUID_EMPTY; $guid = GUID_EMPTY_STRING;
} }
// Создание экземпляра GUID со сгенерированным значением и возврат его // Создание экземпляра GUID со сгенерированным значением и возврат его
@ -126,7 +126,7 @@ final class GUID implements IArrayable, IDuplicated, ISerializable, IComparable,
* *
* @return bool True, если GUID недействителен или равен пустому значению. * @return bool True, если GUID недействителен или равен пустому значению.
*/ */
public static function IsInvalidOrEmpty (?GUID $guid): bool public static function isInvalidOrEmpty (?GUID $guid): bool
{ {
return !self::Validate($guid) || $guid->IsEqualsTo(self::Empty()); return !self::Validate($guid) || $guid->IsEqualsTo(self::Empty());
} }

View File

@ -53,9 +53,9 @@ class GUIDTest extends TestCase
{ {
$this->PrepareForTest(); $this->PrepareForTest();
$this->assertFalse(GUID::IsInvalidOrEmpty(new GUID ('5c0e5f0e-d033-44b1-a0b6-d0e2e369bdd1'))); $this->assertFalse(GUID::isInvalidOrEmpty(new GUID ('5c0e5f0e-d033-44b1-a0b6-d0e2e369bdd1')));
$this->assertTrue(GUID::IsInvalidOrEmpty(new GUID ('00000000-0000-0000-0000-000000000000'))); $this->assertTrue(GUID::isInvalidOrEmpty(new GUID ('00000000-0000-0000-0000-000000000000')));
$this->assertTrue(GUID::IsInvalidOrEmpty(null)); $this->assertTrue(GUID::isInvalidOrEmpty(null));
} }
public function testParse () public function testParse ()
@ -117,7 +117,7 @@ class GUIDTest extends TestCase
$guid = GUID::Generate(); $guid = GUID::Generate();
self::assertFalse(GUID::IsInvalidOrEmpty($guid)); self::assertFalse(GUID::isInvalidOrEmpty($guid));
} }
public function testFromBytes () public function testFromBytes ()