Compare commits
6 Commits
v9.33.0
...
4bebec2b47
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4bebec2b47 | ||
|
|
991750aa5f | ||
| 426afdc1ff | |||
| ffff65a76d | |||
|
|
c22e68f19a | ||
|
|
074d5bed4c |
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phive xmlns="https://phar.io/phive">
|
||||
<phar name="phpunit" version="^10.3.5" installed="10.3.5" location="./tools/phpunit" copy="false"/>
|
||||
<phar name="phpcbf" version="^3.7.2" installed="3.10.3" location="./tools/phpcbf" copy="false"/>
|
||||
<phar name="phpcs" version="^3.10.3" installed="3.10.3" location="./tools/phpcs" copy="false"/>
|
||||
<phar name="phpstan" version="^2.0" installed="2.0.4" location="./tools/phpstan" copy="false"/>
|
||||
<phar name="phpunit" version="^10.3.5" installed="10.5.46" location="./tools/phpunit" copy="false"/>
|
||||
<phar name="phpcbf" version="^3.7.2" installed="3.13.0" location="./tools/phpcbf" copy="false"/>
|
||||
<phar name="phpcs" version="^3.10.3" installed="3.13.0" location="./tools/phpcs" copy="false"/>
|
||||
<phar name="phpstan" version="^2.0" installed="2.1.16" location="./tools/phpstan" copy="false"/>
|
||||
<phar name="phan" version="^5.4.3" installed="5.4.3" location="./tools/phan" copy="false"/>
|
||||
<phar name="psalm" version="^5.15.0" installed="5.24.0" location="./tools/psalm" copy="false"/>
|
||||
<phar name="phpdox" version="^0.12.0" installed="0.12.0" location="./tools/phpdox" copy="false"/>
|
||||
|
||||
@@ -13,32 +13,6 @@ use PHPUnit\Framework\TestCase;
|
||||
*/
|
||||
final class CoreLibsCreateRandomKeyTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function keyLenghtProvider(): array
|
||||
{
|
||||
return [
|
||||
'valid key length' => [
|
||||
0 => 6,
|
||||
1 => true,
|
||||
2 => 6,
|
||||
],
|
||||
'negative key length' => [
|
||||
0 => -1,
|
||||
1 => false,
|
||||
2 => 4,
|
||||
],
|
||||
'tpp big key length' => [
|
||||
0 => 300,
|
||||
1 => false,
|
||||
2 => 4,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
@@ -47,109 +21,67 @@ final class CoreLibsCreateRandomKeyTest extends TestCase
|
||||
public function randomKeyGenProvider(): array
|
||||
{
|
||||
return [
|
||||
'default key length' => [
|
||||
// just key length
|
||||
'default key length, default char set' => [
|
||||
0 => null,
|
||||
1 => 4
|
||||
1 => \CoreLibs\Create\RandomKey::KEY_LENGTH_DEFAULT
|
||||
],
|
||||
'set -1 key length default' => [
|
||||
'set -1 key length, default char set' => [
|
||||
0 => -1,
|
||||
1 => 4,
|
||||
1 => \CoreLibs\Create\RandomKey::KEY_LENGTH_DEFAULT,
|
||||
],
|
||||
'set too large key length' => [
|
||||
'set 0 key length, default char set' => [
|
||||
0 => -1,
|
||||
1 => \CoreLibs\Create\RandomKey::KEY_LENGTH_DEFAULT,
|
||||
],
|
||||
'set too large key length, default char set' => [
|
||||
0 => 300,
|
||||
1 => 4,
|
||||
1 => \CoreLibs\Create\RandomKey::KEY_LENGTH_DEFAULT,
|
||||
],
|
||||
'set override key lenght' => [
|
||||
'set override key lenght, default char set' => [
|
||||
0 => 6,
|
||||
1 => 6,
|
||||
],
|
||||
// just character set
|
||||
'default key length, different char set A' => [
|
||||
0 => \CoreLibs\Create\RandomKey::KEY_LENGTH_DEFAULT,
|
||||
1 => \CoreLibs\Create\RandomKey::KEY_LENGTH_DEFAULT,
|
||||
2 => [
|
||||
'A', 'B', 'C'
|
||||
],
|
||||
],
|
||||
'different key length, different char set B' => [
|
||||
0 => 16,
|
||||
1 => 16,
|
||||
2 => [
|
||||
'A', 'B', 'C'
|
||||
],
|
||||
3 => [
|
||||
'1', '2', '3'
|
||||
]
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
// Alternative more efficient version using strpos
|
||||
/**
|
||||
* 1
|
||||
* check if all characters are in set
|
||||
*
|
||||
* @return array
|
||||
* @param string $input
|
||||
* @param string $allowed_chars
|
||||
* @return bool
|
||||
*/
|
||||
public function keepKeyLengthProvider(): array
|
||||
private function allCharsInSet(string $input, string $allowed_chars): bool
|
||||
{
|
||||
return [
|
||||
'set too large' => [
|
||||
0 => 6,
|
||||
1 => 300,
|
||||
2 => 6,
|
||||
],
|
||||
'set too small' => [
|
||||
0 => 8,
|
||||
1 => -2,
|
||||
2 => 8,
|
||||
],
|
||||
'change valid' => [
|
||||
0 => 10,
|
||||
1 => 6,
|
||||
2 => 6,
|
||||
]
|
||||
];
|
||||
}
|
||||
$inputLength = strlen($input);
|
||||
|
||||
/**
|
||||
* run before each test and reset to default 4
|
||||
*
|
||||
* @before
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function resetKeyLength(): void
|
||||
{
|
||||
\CoreLibs\Create\RandomKey::setRandomKeyLength(4);
|
||||
}
|
||||
|
||||
/**
|
||||
* check that first length is 4
|
||||
*
|
||||
* @covers ::getRandomKeyLength
|
||||
* @testWith [4]
|
||||
* @testdox getRandomKeyLength on init will be $expected [$_dataName]
|
||||
*
|
||||
* @param integer $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testGetRandomKeyLengthInit(int $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Create\RandomKey::getRandomKeyLength()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::setRandomKeyLength
|
||||
* @covers ::getRandomKeyLength
|
||||
* @dataProvider keyLenghtProvider
|
||||
* @testdox setRandomKeyLength $input will be $expected, compare to $compare [$_dataName]
|
||||
*
|
||||
* @param integer $input
|
||||
* @param boolean $expected
|
||||
* @param integer $compare
|
||||
* @return void
|
||||
*/
|
||||
public function testSetRandomKeyLength(int $input, bool $expected, int $compare): void
|
||||
{
|
||||
// set
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Create\RandomKey::setRandomKeyLength($input)
|
||||
);
|
||||
// read test, if false, use compare check
|
||||
if ($expected === false) {
|
||||
$input = $compare;
|
||||
for ($i = 0; $i < $inputLength; $i++) {
|
||||
if (strpos($allowed_chars, $input[$i]) === false) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
$this->assertEquals(
|
||||
$input,
|
||||
\CoreLibs\Create\RandomKey::getRandomKeyLength()
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -163,43 +95,41 @@ final class CoreLibsCreateRandomKeyTest extends TestCase
|
||||
* @param integer $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testRandomKeyGen(?int $input, int $expected): void
|
||||
public function testRandomKeyGen(?int $input, int $expected, array ...$key_range): void
|
||||
{
|
||||
$__key_data = \CoreLibs\Create\RandomKey::KEY_CHARACTER_RANGE_DEFAULT;
|
||||
if (count($key_range)) {
|
||||
$__key_data = join('', array_unique(array_merge(...$key_range)));
|
||||
}
|
||||
if ($input === null) {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
strlen(\CoreLibs\Create\RandomKey::randomKeyGen())
|
||||
);
|
||||
} else {
|
||||
} elseif ($input !== null && !count($key_range)) {
|
||||
$random_key = \CoreLibs\Create\RandomKey::randomKeyGen($input);
|
||||
$this->assertTrue(
|
||||
$this->allCharsInSet($random_key, $__key_data),
|
||||
'Characters not valid'
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
strlen(\CoreLibs\Create\RandomKey::randomKeyGen($input))
|
||||
strlen($random_key),
|
||||
'String length not matching'
|
||||
);
|
||||
} elseif (count($key_range)) {
|
||||
$random_key = \CoreLibs\Create\RandomKey::randomKeyGen($input, ...$key_range);
|
||||
$this->assertTrue(
|
||||
$this->allCharsInSet($random_key, $__key_data),
|
||||
'Characters not valid'
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
strlen($random_key),
|
||||
'String length not matching'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check that if set to n and then invalid, it keeps the previous one
|
||||
* or if second change valid, second will be shown
|
||||
*
|
||||
* @covers ::setRandomKeyLength
|
||||
* @dataProvider keepKeyLengthProvider
|
||||
* @testdox keep setRandomKeyLength set with $input_valid and then $input_invalid will be $expected [$_dataName]
|
||||
*
|
||||
* @param integer $input_valid
|
||||
* @param integer $input_invalid
|
||||
* @param integer $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testKeepKeyLength(int $input_valid, int $input_invalid, int $expected): void
|
||||
{
|
||||
\CoreLibs\Create\RandomKey::setRandomKeyLength($input_valid);
|
||||
\CoreLibs\Create\RandomKey::setRandomKeyLength($input_invalid);
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Create\RandomKey::getRandomKeyLength()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -60,6 +60,8 @@ echo "ARRAYSEARCHRECURSIVE(email, [array], type): "
|
||||
. DgS::printAr(ArrayHandler::arraySearchRecursive('email', $test_array, 'type')) . "<br>";
|
||||
echo "ARRAYSEARCHRECURSIVE(email, [array]['input'], type): "
|
||||
. DgS::printAr(ArrayHandler::arraySearchRecursive('email', $test_array['input'], 'type')) . "<br>";
|
||||
echo "ARRAYSEARCHRECURSIVE(email, [array]['input'], wrong): "
|
||||
. DgS::printAr(ArrayHandler::arraySearchRecursive('email', $test_array['input'], 'wrong')) . "<br>";
|
||||
// all return
|
||||
echo "ARRAYSEARCHRECURSIVEALL(email, [array], type): "
|
||||
. Dgs::printAr((array)ArrayHandler::arraySearchRecursiveAll('email', $test_array, 'type')) . "<br>";
|
||||
@@ -168,6 +170,31 @@ $data = [
|
||||
$search = ['image', 'result_image', 'nothing', 'EMPTY'];
|
||||
$result = ArrayHandler::arraySearchKey($data, $search);
|
||||
print "ARRAYSEARCHKEY: Search: " . DgS::printAr($search) . ", Found: " . DgS::printAr($result) . "<br>";
|
||||
$result = ArrayHandler::arraySearchKey($data, $search, true);
|
||||
print "ARRAYSEARCHKEY: FLAT: Search: " . DgS::printAr($search) . ", Found: " . DgS::printAr($result) . "<br>";
|
||||
$result = ArrayHandler::arraySearchKey($data, $search, true, true);
|
||||
print "ARRAYSEARCHKEY: FLAT:PREFIX: Search: " . DgS::printAr($search) . ", Found: " . DgS::printAr($result) . "<br>";
|
||||
$result = ArrayHandler::arraySearchKey($data, ["EMPTY"], true);
|
||||
print "ARRAYSEARCHKEY: FLAT:PREFIX: Search: " . DgS::printAr(["EMPTY"]) . ", Found: " . DgS::printAr($result) . "<br>";
|
||||
|
||||
// $data = [
|
||||
// [
|
||||
// [name] => qrc_apcd,
|
||||
// [value] => 5834367225,
|
||||
// ],
|
||||
// [
|
||||
// [name] => qrc_other,
|
||||
// [value] => test,
|
||||
// ],
|
||||
// [
|
||||
// [name] => qrc_car_type,
|
||||
// [value] => T33P17,
|
||||
// ],
|
||||
// [
|
||||
// [name] => qrc_deaer_store,
|
||||
// [value] => 9990:001,
|
||||
// ]
|
||||
// ]
|
||||
|
||||
// $test = [
|
||||
// 'A' => [
|
||||
|
||||
@@ -31,6 +31,7 @@ $log = new CoreLibs\Logging\Logging([
|
||||
'log_per_date' => true,
|
||||
]);
|
||||
$db = new CoreLibs\DB\IO(DB_CONFIG, $log);
|
||||
$log->setLogFileId('classTest-login-override');
|
||||
$login = new CoreLibs\ACL\Login(
|
||||
$db,
|
||||
$log,
|
||||
@@ -45,6 +46,7 @@ $login = new CoreLibs\ACL\Login(
|
||||
'locale_path' => BASE . INCLUDES . LOCALE,
|
||||
]
|
||||
);
|
||||
$log->setLogFileId($LOG_FILE_ID);
|
||||
ob_end_flush();
|
||||
$login->loginMainCall();
|
||||
|
||||
@@ -158,5 +160,6 @@ if (is_string($edit_access_cuid)) {
|
||||
print "EA ID: " . $edit_access_id . "<br>";
|
||||
print "EA CUID: " . $log->prAr($edit_access_cuid) . "<br>";
|
||||
print "REV EA CUID: " . $log->prAr($edit_access_id_rev) . "<br>";
|
||||
$log->info('This is a test');
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
@@ -38,13 +38,21 @@ $key_length = 10;
|
||||
$key_length_b = 5;
|
||||
$key_lenght_long = 64;
|
||||
print "S::RANDOMKEYGEN(auto): " . RandomKey::randomKeyGen() . "<br>";
|
||||
print "S::SETRANDOMKEYLENGTH($key_length): " . RandomKey::setRandomKeyLength($key_length) . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_length): " . RandomKey::randomKeyGen() . "<br>";
|
||||
// print "S::SETRANDOMKEYLENGTH($key_length): " . RandomKey::setRandomKeyLength($key_length) . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_length): " . RandomKey::randomKeyGen($key_length) . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_length_b): " . RandomKey::randomKeyGen($key_length_b) . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_length): " . RandomKey::randomKeyGen() . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_length): " . RandomKey::randomKeyGen($key_length) . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_lenght_long): " . RandomKey::randomKeyGen($key_lenght_long) . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_lenght_long, list data): "
|
||||
. RandomKey::randomKeyGen($key_lenght_long, ['A', 'B', 'C'], ['7', '8', '9']) . "<br>";
|
||||
print "S::RANDOMKEYGEN(auto): " . RandomKey::randomKeyGen() . "<br>";
|
||||
print "===<Br>";
|
||||
$_array = new CoreLibs\Create\RandomKey();
|
||||
print "C->RANDOMKEYGEN(auto): " . $_array->randomKeyGen() . "<br>";
|
||||
print "C->RANDOMKEYGEN(default): " . $_array->randomKeyGen() . "<br>";
|
||||
print "===<Br>";
|
||||
// CHANGE key characters
|
||||
$_array = new CoreLibs\Create\RandomKey(['A', 'F', 'B'], ['1', '5', '9']);
|
||||
print "C->RANDOMKEYGEN(pre set): " . $_array->randomKeyGen() . "<br>";
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
|
||||
@@ -34,6 +34,17 @@ function executeFunctionByName(functionName, context) {
|
||||
}
|
||||
return context[func].apply(context, args);
|
||||
}
|
||||
function runFunction(name) {
|
||||
var args = Array.prototype.slice.call(arguments, 1);
|
||||
runFunctionArgsArray(name, args);
|
||||
}
|
||||
function runFunctionArgsArray(name, args) {
|
||||
var fn = window[name];
|
||||
if (typeof fn !== "function") {
|
||||
return;
|
||||
}
|
||||
fn.apply(window, args);
|
||||
}
|
||||
function isObject(val) {
|
||||
if (val === null) {
|
||||
return false;
|
||||
@@ -659,6 +670,31 @@ function getQueryStringParam(search = "", query = "", single = false) {
|
||||
}
|
||||
return param;
|
||||
}
|
||||
function hasUrlParameter(key) {
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
return urlParams.has(key);
|
||||
}
|
||||
function getUrlParameter(key) {
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
return urlParams.get(key);
|
||||
}
|
||||
function updateUrlParameter(key, value, reload = false) {
|
||||
const url = new URL(window.location.href);
|
||||
url.searchParams.set(key, value);
|
||||
const newUrl = url.toString();
|
||||
window.history.pushState({ path: newUrl }, "", newUrl);
|
||||
if (reload) {
|
||||
window.location.reload();
|
||||
}
|
||||
}
|
||||
function removeUrlParameter(key, reload = false) {
|
||||
const url = new URL(window.location.href);
|
||||
url.searchParams.delete(key);
|
||||
window.history.pushState({}, "", url.toString());
|
||||
if (reload) {
|
||||
window.location.reload();
|
||||
}
|
||||
}
|
||||
|
||||
// src/utils/LoginLogout.mjs
|
||||
function loginLogout() {
|
||||
@@ -979,7 +1015,7 @@ var ActionBox = class {
|
||||
$("#overlayBox").css("zIndex", this.zIndex.base);
|
||||
}
|
||||
$("#overlayBox").show();
|
||||
if (!keyInObject(target_id, this.zIndex.boxes)) {
|
||||
if (!objectKeyExists(this.zIndex.boxes, target_id)) {
|
||||
this.zIndex.boxes[target_id] = this.zIndex.max;
|
||||
this.zIndex.max += 10;
|
||||
} else if (this.zIndex.boxes[target_id] + 10 < this.zIndex.max) {
|
||||
@@ -1005,7 +1041,7 @@ var ActionBox = class {
|
||||
if (!exists(target_id)) {
|
||||
return;
|
||||
}
|
||||
if (keyInObject(target_id, this.action_box_storage) && clean === true) {
|
||||
if (objectKeyExists(this.action_box_storage, target_id) && clean === true) {
|
||||
this.action_box_storage[target_id] = {};
|
||||
}
|
||||
if (clean === true) {
|
||||
@@ -1043,15 +1079,15 @@ var ActionBox = class {
|
||||
* @param {Object} [settings={}] Optional settings, eg style sheets
|
||||
*/
|
||||
createActionBox(target_id = "actionBox", title = "", contents = {}, headers = {}, settings = {}, show_close = true) {
|
||||
if (!keyInObject(target_id, this.action_box_storage)) {
|
||||
if (!objectKeyExists(this.action_box_storage, target_id)) {
|
||||
this.action_box_storage[target_id] = {};
|
||||
}
|
||||
let header_css = [];
|
||||
if (keyInObject("header_css", settings)) {
|
||||
if (objectKeyExists(settings, "header_css")) {
|
||||
header_css = settings.header_css;
|
||||
}
|
||||
let action_box_css = [];
|
||||
if (keyInObject("action_box_css", settings)) {
|
||||
if (objectKeyExists(settings, "action_box_css")) {
|
||||
action_box_css = settings.action_box_css;
|
||||
}
|
||||
let elements = [];
|
||||
@@ -1082,14 +1118,14 @@ var ActionBox = class {
|
||||
)
|
||||
));
|
||||
if (getObjectCount(headers) > 0) {
|
||||
if (keyInObject("raw_string", headers)) {
|
||||
if (objectKeyExists(headers, "raw_string")) {
|
||||
elements.push(headers.raw_string);
|
||||
} else {
|
||||
elements.push(this.hec.phfo(headers));
|
||||
}
|
||||
}
|
||||
if (getObjectCount(contents) > 0) {
|
||||
if (keyInObject("raw_string", contents)) {
|
||||
if (objectKeyExists(contents, "raw_string")) {
|
||||
elements.push(contents.raw_string);
|
||||
} else {
|
||||
elements.push(this.hec.phfo(contents));
|
||||
@@ -1517,12 +1553,24 @@ function html_options_block2(name, data, selected = "", multiple = 0, options_on
|
||||
function html_options_refill2(name, data, sort = "") {
|
||||
html_options_refill(name, data, sort);
|
||||
}
|
||||
function parseQueryString2(query = "", return_key = "") {
|
||||
return parseQueryString(query, return_key);
|
||||
function parseQueryString2(query = "", return_key = "", single = false) {
|
||||
return parseQueryString(query, return_key, single);
|
||||
}
|
||||
function getQueryStringParam2(search = "", query = "", single = false) {
|
||||
return getQueryStringParam(search, query, single);
|
||||
}
|
||||
function updateUrlParameter2(key, value, reload = false) {
|
||||
return updateUrlParameter(key, value, reload);
|
||||
}
|
||||
function removeUrlParameter2(key, reload = false) {
|
||||
return removeUrlParameter(key, reload);
|
||||
}
|
||||
function hasUrlParameter2(key) {
|
||||
return hasUrlParameter(key);
|
||||
}
|
||||
function getUrlParameter2(key) {
|
||||
return getUrlParameter(key);
|
||||
}
|
||||
function loginLogout2() {
|
||||
loginLogout();
|
||||
}
|
||||
|
||||
4
www/admin/layout/javascript/utils.min.js
vendored
4
www/admin/layout/javascript/utils.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -10,37 +10,93 @@ namespace CoreLibs\Create;
|
||||
|
||||
class RandomKey
|
||||
{
|
||||
/** @var int set the default key length it nothing else is set */
|
||||
public const int KEY_LENGTH_DEFAULT = 4;
|
||||
/** @var int the maximum key length allowed */
|
||||
public const int KEY_LENGTH_MAX = 256;
|
||||
/** @var string the default characters in the key range */
|
||||
public const string KEY_CHARACTER_RANGE_DEFAULT =
|
||||
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
. 'abcdefghijklmnopqrstuvwxyz'
|
||||
. '0123456789';
|
||||
// key generation
|
||||
/** @var string */
|
||||
private static string $key_range = '';
|
||||
/** @var int */
|
||||
private static int $one_key_length;
|
||||
/** @var int */
|
||||
private static int $key_length = 4; // default key length
|
||||
/** @var int */
|
||||
private static int $max_key_length = 256; // max allowed length
|
||||
/** @var string all the characters that are int he current radnom key range */
|
||||
private static string $key_character_range = '';
|
||||
/** @var int character count in they key character range */
|
||||
private static int $key_character_range_length = 0;
|
||||
/** @var int default key lenghth */
|
||||
/** @deprecated Will be removed */
|
||||
private static int $key_length = 4;
|
||||
|
||||
/**
|
||||
* if launched as class, init random key data first
|
||||
*
|
||||
* @param array<string> ...$key_range
|
||||
*/
|
||||
public function __construct()
|
||||
public function __construct(array ...$key_range)
|
||||
{
|
||||
$this->initRandomKeyData();
|
||||
$this->setRandomKeyData(...$key_range);
|
||||
}
|
||||
|
||||
/**
|
||||
* internal key range validation
|
||||
*
|
||||
* @param array<string> ...$key_range
|
||||
* @return string
|
||||
*/
|
||||
private static function validateRandomKeyData(array ...$key_range): string
|
||||
{
|
||||
$key_character_range = join('', array_unique(array_merge(...$key_range)));
|
||||
if (strlen(self::$key_character_range) <= 1) {
|
||||
return '';
|
||||
}
|
||||
return $key_character_range;
|
||||
}
|
||||
|
||||
/**
|
||||
* sets the random key range with the default values
|
||||
*
|
||||
* @param array<string> $key_range a list of key ranges as array
|
||||
* @return void has no return
|
||||
* @throws \LengthException If the string length is only 1 abort
|
||||
*/
|
||||
private static function initRandomKeyData(): void
|
||||
public static function setRandomKeyData(array ...$key_range): void
|
||||
{
|
||||
// random key generation base string
|
||||
self::$key_range = join('', array_merge(
|
||||
range('A', 'Z'),
|
||||
range('a', 'z'),
|
||||
range('0', '9')
|
||||
));
|
||||
self::$one_key_length = strlen(self::$key_range);
|
||||
// if key range is not set
|
||||
if (!count($key_range)) {
|
||||
self::$key_character_range = self::KEY_CHARACTER_RANGE_DEFAULT;
|
||||
} else {
|
||||
self::$key_character_range = self::validateRandomKeyData(...$key_range);
|
||||
// random key generation base string
|
||||
}
|
||||
self::$key_character_range_length = strlen(self::$key_character_range);
|
||||
if (self::$key_character_range_length <= 1) {
|
||||
throw new \LengthException(
|
||||
"The given key character range '" . self::$key_character_range . "' "
|
||||
. "is too small, must be at lest two characters: "
|
||||
. self::$key_character_range_length
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get the characters for the current key characters
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getRandomKeyData(): string
|
||||
{
|
||||
return self::$key_character_range;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the length of all random characters
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public static function getRandomKeyDataLength(): int
|
||||
{
|
||||
return self::$key_character_range_length;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -53,7 +109,7 @@ class RandomKey
|
||||
{
|
||||
if (
|
||||
$key_length > 0 &&
|
||||
$key_length <= self::$max_key_length
|
||||
$key_length <= self::KEY_LENGTH_MAX
|
||||
) {
|
||||
return true;
|
||||
} else {
|
||||
@@ -67,6 +123,7 @@ class RandomKey
|
||||
*
|
||||
* @param int $key_length key length
|
||||
* @return bool true/false for set status
|
||||
* @deprecated This function does no longer set the key length, the randomKeyGen parameter has to b used
|
||||
*/
|
||||
public static function setRandomKeyLength(int $key_length): bool
|
||||
{
|
||||
@@ -83,6 +140,7 @@ class RandomKey
|
||||
* get the current set random key length
|
||||
*
|
||||
* @return int Current set key length
|
||||
* @deprecated Key length is set during randomKeyGen call, this nethid is deprecated
|
||||
*/
|
||||
public static function getRandomKeyLength(): int
|
||||
{
|
||||
@@ -94,28 +152,37 @@ class RandomKey
|
||||
* if override key length is set, it will check on valid key and use this
|
||||
* this will not set the class key length variable
|
||||
*
|
||||
* @param int $key_length key length override, -1 for use default
|
||||
* @return string random key
|
||||
* @param int $key_length [default=-1] key length override,
|
||||
* if not set use default [LEGACY]
|
||||
* @param array<string> $key_range a list of key ranges as array,
|
||||
* if not set use previous set data
|
||||
* @return string random key
|
||||
*/
|
||||
public static function randomKeyGen(int $key_length = -1): string
|
||||
{
|
||||
// init random key strings if not set
|
||||
if (
|
||||
!isset(self::$one_key_length)
|
||||
) {
|
||||
self::initRandomKeyData();
|
||||
}
|
||||
$use_key_length = 0;
|
||||
// only if valid int key with valid length
|
||||
if (self::validateRandomKeyLenght($key_length) === true) {
|
||||
$use_key_length = $key_length;
|
||||
public static function randomKeyGen(
|
||||
int $key_length = self::KEY_LENGTH_DEFAULT,
|
||||
array ...$key_range
|
||||
): string {
|
||||
$key_character_range = '';
|
||||
if (count($key_range)) {
|
||||
$key_character_range = self::validateRandomKeyData(...$key_range);
|
||||
$key_character_range_length = strlen($key_character_range);
|
||||
} else {
|
||||
$use_key_length = self::$key_length;
|
||||
if (!self::$key_character_range_length) {
|
||||
self::setRandomKeyData();
|
||||
}
|
||||
$key_character_range = self::getRandomKeyData();
|
||||
$key_character_range_length = self::getRandomKeyDataLength();
|
||||
}
|
||||
// if not valid key length, fallback to default
|
||||
if (!self::validateRandomKeyLenght($key_length)) {
|
||||
$key_length = self::KEY_LENGTH_DEFAULT;
|
||||
}
|
||||
// create random string
|
||||
$random_string = '';
|
||||
for ($i = 1; $i <= $use_key_length; $i++) {
|
||||
$random_string .= self::$key_range[random_int(0, self::$one_key_length - 1)];
|
||||
for ($i = 1; $i <= $key_length; $i++) {
|
||||
$random_string .= $key_character_range[
|
||||
random_int(0, $key_character_range_length - 1)
|
||||
];
|
||||
}
|
||||
return $random_string;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user