Compare commits
No commits in common. "main" and "v1.2" have entirely different histories.
@ -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"
|
||||||
|
@ -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"))
|
||||||
// - то присваиваю значение по умолчанию
|
// - то присваиваю значение по умолчанию
|
||||||
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
32
sources/interfaces/IStoredAtSQL.php
Normal file
32
sources/interfaces/IStoredAtSQL.php
Normal 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;
|
||||||
|
}
|
@ -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());
|
||||||
}
|
}
|
||||||
|
@ -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 ()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user