Compare commits
15 Commits
d1c4611431
...
v9.24.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4971f62490 | ||
|
|
1cf4fdf31a | ||
|
|
d16b920966 | ||
|
|
ab52bf59b5 | ||
|
|
a8dd076aac | ||
|
|
c17ca1f847 | ||
|
|
e349613d60 | ||
|
|
e9cfdb4bf0 | ||
|
|
f966209e0a | ||
|
|
c13934de99 | ||
|
|
1e90bb677e | ||
|
|
540269e61f | ||
|
|
e793c3975b | ||
|
|
7d4c9724fe | ||
|
|
fdefaca301 |
@@ -5,9 +5,9 @@ RETURNS TRIGGER AS
|
|||||||
$$
|
$$
|
||||||
BEGIN
|
BEGIN
|
||||||
IF TG_OP = 'INSERT' THEN
|
IF TG_OP = 'INSERT' THEN
|
||||||
NEW.date_created := 'now';
|
NEW.date_created := clock_timestamp();
|
||||||
ELSIF TG_OP = 'UPDATE' THEN
|
ELSIF TG_OP = 'UPDATE' THEN
|
||||||
NEW.date_updated := 'now';
|
NEW.date_updated := clock_timestamp();
|
||||||
END IF;
|
END IF;
|
||||||
RETURN NEW;
|
RETURN NEW;
|
||||||
END;
|
END;
|
||||||
|
|||||||
@@ -7,11 +7,11 @@ DECLARE
|
|||||||
random_length INT = 25; -- that should be long enough
|
random_length INT = 25; -- that should be long enough
|
||||||
BEGIN
|
BEGIN
|
||||||
IF TG_OP = 'INSERT' THEN
|
IF TG_OP = 'INSERT' THEN
|
||||||
NEW.date_created := 'now';
|
NEW.date_created := clock_timestamp();
|
||||||
NEW.cuid := random_string(random_length);
|
NEW.cuid := random_string(random_length);
|
||||||
NEW.cuuid := gen_random_uuid();
|
NEW.cuuid := gen_random_uuid();
|
||||||
ELSIF TG_OP = 'UPDATE' THEN
|
ELSIF TG_OP = 'UPDATE' THEN
|
||||||
NEW.date_updated := 'now';
|
NEW.date_updated := clock_timestamp();
|
||||||
END IF;
|
END IF;
|
||||||
RETURN NEW;
|
RETURN NEW;
|
||||||
END;
|
END;
|
||||||
|
|||||||
@@ -8,12 +8,12 @@ DECLARE
|
|||||||
random_length INT = 32; -- long for massive data
|
random_length INT = 32; -- long for massive data
|
||||||
BEGIN
|
BEGIN
|
||||||
IF TG_OP = 'INSERT' THEN
|
IF TG_OP = 'INSERT' THEN
|
||||||
NEW.date_created := 'now';
|
NEW.date_created := clock_timestamp();
|
||||||
IF NEW.uid IS NULL THEN
|
IF NEW.uid IS NULL THEN
|
||||||
NEW.uid := random_string(random_length);
|
NEW.uid := random_string(random_length);
|
||||||
END IF;
|
END IF;
|
||||||
ELSIF TG_OP = 'UPDATE' THEN
|
ELSIF TG_OP = 'UPDATE' THEN
|
||||||
NEW.date_updated := 'now';
|
NEW.date_updated := clock_timestamp();
|
||||||
END IF;
|
END IF;
|
||||||
RETURN NEW;
|
RETURN NEW;
|
||||||
END;
|
END;
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
-- adds the created or updated date tags
|
|
||||||
|
|
||||||
-- OLD, DEPRECATED, use set_generic.sql
|
|
||||||
|
|
||||||
-- CREATE OR REPLACE FUNCTION set_generic()
|
|
||||||
-- RETURNS TRIGGER AS
|
|
||||||
-- $$
|
|
||||||
-- BEGIN
|
|
||||||
-- IF TG_OP = 'INSERT' THEN
|
|
||||||
-- NEW.date_created := clock_timestamp();
|
|
||||||
-- NEW.user_created := current_user;
|
|
||||||
-- ELSIF TG_OP = 'UPDATE' THEN
|
|
||||||
-- NEW.date_updated := clock_timestamp();
|
|
||||||
-- NEW.user_updated := current_user;
|
|
||||||
-- END IF;
|
|
||||||
-- RETURN NEW;
|
|
||||||
-- END;
|
|
||||||
-- $$
|
|
||||||
-- LANGUAGE 'plpgsql';
|
|
||||||
@@ -10,8 +10,8 @@ CREATE TABLE edit_log (
|
|||||||
edit_log_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
edit_log_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||||
euid INT, -- this is a foreign key, but I don't nedd to reference to it
|
euid INT, -- this is a foreign key, but I don't nedd to reference to it
|
||||||
FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL,
|
FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL,
|
||||||
ecuid VARCHAR,
|
eucuid VARCHAR,
|
||||||
ecuuid UUID, -- this is the one we want to use, full UUIDv4 from the edit user table
|
eucuuid UUID, -- this is the one we want to use, full UUIDv4 from the edit user table
|
||||||
-- date_created equal, but can be overridden
|
-- date_created equal, but can be overridden
|
||||||
event_date TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
event_date TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||||
-- session ID if set
|
-- session ID if set
|
||||||
|
|||||||
@@ -30,11 +30,11 @@ DECLARE
|
|||||||
random_length INT = 12; -- that should be long enough
|
random_length INT = 12; -- that should be long enough
|
||||||
BEGIN
|
BEGIN
|
||||||
IF TG_OP = 'INSERT' THEN
|
IF TG_OP = 'INSERT' THEN
|
||||||
NEW.date_created := 'now';
|
NEW.date_created := clock_timestamp();
|
||||||
NEW.cuid := random_string(random_length);
|
NEW.cuid := random_string(random_length);
|
||||||
NEW.cuuid := gen_random_uuid();
|
NEW.cuuid := gen_random_uuid();
|
||||||
ELSIF TG_OP = 'UPDATE' THEN
|
ELSIF TG_OP = 'UPDATE' THEN
|
||||||
NEW.date_updated := 'now';
|
NEW.date_updated := clock_timestamp();
|
||||||
END IF;
|
END IF;
|
||||||
RETURN NEW;
|
RETURN NEW;
|
||||||
END;
|
END;
|
||||||
@@ -652,8 +652,8 @@ CREATE TABLE edit_log (
|
|||||||
edit_log_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
edit_log_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||||
euid INT, -- this is a foreign key, but I don't nedd to reference to it
|
euid INT, -- this is a foreign key, but I don't nedd to reference to it
|
||||||
FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL,
|
FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL,
|
||||||
ecuid VARCHAR,
|
eucuid VARCHAR,
|
||||||
ecuuid UUID, -- this is the one we want to use, full UUIDv4 from the edit user table
|
eucuuid UUID, -- this is the one we want to use, full UUIDv4 from the edit user table
|
||||||
-- date_created equal, but can be overridden
|
-- date_created equal, but can be overridden
|
||||||
event_date TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
event_date TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||||
-- session ID if set
|
-- session ID if set
|
||||||
|
|||||||
@@ -568,6 +568,9 @@ final class CoreLibsDebugSupportTest extends TestCase
|
|||||||
'assert expected 12'
|
'assert expected 12'
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
$this->assertTrue(true, 'Default fallback as true');
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ use CoreLibs\Logging\Logger\Level;
|
|||||||
/**
|
/**
|
||||||
* Test class for Logging
|
* Test class for Logging
|
||||||
* @coversDefaultClass \CoreLibs\Logging\ErrorMessages
|
* @coversDefaultClass \CoreLibs\Logging\ErrorMessages
|
||||||
* @testdox \CoreLibs\Logging\ErrorMEssages method tests
|
* @testdox \CoreLibs\Logging\ErrorMessages method tests
|
||||||
*/
|
*/
|
||||||
final class CoreLibsLoggingErrorMessagesTest extends TestCase
|
final class CoreLibsLoggingErrorMessagesTest extends TestCase
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -56,7 +56,24 @@ final class CoreLibsSecuritySymmetricEncryptionTest extends TestCase
|
|||||||
$decrypted,
|
$decrypted,
|
||||||
'Class call',
|
'Class call',
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* test encrypt/decrypt produce correct output
|
||||||
|
*
|
||||||
|
* @covers ::generateRandomKey
|
||||||
|
* @covers ::encrypt
|
||||||
|
* @covers ::decrypt
|
||||||
|
* @dataProvider providerEncryptDecryptSuccess
|
||||||
|
* @testdox encrypt/decrypt indirect $input must be $expected [$_dataName]
|
||||||
|
*
|
||||||
|
* @param string $input
|
||||||
|
* @param string $expected
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testEncryptDecryptSuccessIndirect(string $input, string $expected): void
|
||||||
|
{
|
||||||
|
$key = CreateKey::generateRandomKey();
|
||||||
// test indirect
|
// test indirect
|
||||||
$encrypted = SymmetricEncryption::getInstance($key)->encrypt($input);
|
$encrypted = SymmetricEncryption::getInstance($key)->encrypt($input);
|
||||||
$decrypted = SymmetricEncryption::getInstance($key)->decrypt($encrypted);
|
$decrypted = SymmetricEncryption::getInstance($key)->decrypt($encrypted);
|
||||||
@@ -65,7 +82,24 @@ final class CoreLibsSecuritySymmetricEncryptionTest extends TestCase
|
|||||||
$decrypted,
|
$decrypted,
|
||||||
'Class Instance call',
|
'Class Instance call',
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* test encrypt/decrypt produce correct output
|
||||||
|
*
|
||||||
|
* @covers ::generateRandomKey
|
||||||
|
* @covers ::encrypt
|
||||||
|
* @covers ::decrypt
|
||||||
|
* @dataProvider providerEncryptDecryptSuccess
|
||||||
|
* @testdox encrypt/decrypt static $input must be $expected [$_dataName]
|
||||||
|
*
|
||||||
|
* @param string $input
|
||||||
|
* @param string $expected
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testEncryptDecryptSuccessStatic(string $input, string $expected): void
|
||||||
|
{
|
||||||
|
$key = CreateKey::generateRandomKey();
|
||||||
// test static
|
// test static
|
||||||
$encrypted = SymmetricEncryption::encryptKey($input, $key);
|
$encrypted = SymmetricEncryption::encryptKey($input, $key);
|
||||||
$decrypted = SymmetricEncryption::decryptKey($encrypted, $key);
|
$decrypted = SymmetricEncryption::decryptKey($encrypted, $key);
|
||||||
@@ -114,13 +148,51 @@ final class CoreLibsSecuritySymmetricEncryptionTest extends TestCase
|
|||||||
$crypt = new SymmetricEncryption($key);
|
$crypt = new SymmetricEncryption($key);
|
||||||
$encrypted = $crypt->encrypt($input);
|
$encrypted = $crypt->encrypt($input);
|
||||||
$this->expectExceptionMessage($exception_message);
|
$this->expectExceptionMessage($exception_message);
|
||||||
$crypt->setKey($key);
|
$crypt->setKey($wrong_key);
|
||||||
$crypt->decrypt($encrypted);
|
$crypt->decrypt($encrypted);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test decryption with wrong key
|
||||||
|
*
|
||||||
|
* @covers ::generateRandomKey
|
||||||
|
* @covers ::encrypt
|
||||||
|
* @covers ::decrypt
|
||||||
|
* @dataProvider providerEncryptFailed
|
||||||
|
* @testdox decrypt indirect with wrong key $input throws $exception_message [$_dataName]
|
||||||
|
*
|
||||||
|
* @param string $input
|
||||||
|
* @param string $exception_message
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testEncryptFailedIndirect(string $input, string $exception_message): void
|
||||||
|
{
|
||||||
|
$key = CreateKey::generateRandomKey();
|
||||||
|
$wrong_key = CreateKey::generateRandomKey();
|
||||||
|
|
||||||
// class instance
|
// class instance
|
||||||
$encrypted = SymmetricEncryption::getInstance($key)->encrypt($input);
|
$encrypted = SymmetricEncryption::getInstance($key)->encrypt($input);
|
||||||
$this->expectExceptionMessage($exception_message);
|
$this->expectExceptionMessage($exception_message);
|
||||||
SymmetricEncryption::getInstance($wrong_key)->decrypt($encrypted);
|
SymmetricEncryption::getInstance($wrong_key)->decrypt($encrypted);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test decryption with wrong key
|
||||||
|
*
|
||||||
|
* @covers ::generateRandomKey
|
||||||
|
* @covers ::encrypt
|
||||||
|
* @covers ::decrypt
|
||||||
|
* @dataProvider providerEncryptFailed
|
||||||
|
* @testdox decrypt static with wrong key $input throws $exception_message [$_dataName]
|
||||||
|
*
|
||||||
|
* @param string $input
|
||||||
|
* @param string $exception_message
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testEncryptFailedStatic(string $input, string $exception_message): void
|
||||||
|
{
|
||||||
|
$key = CreateKey::generateRandomKey();
|
||||||
|
$wrong_key = CreateKey::generateRandomKey();
|
||||||
|
|
||||||
// class static
|
// class static
|
||||||
$encrypted = SymmetricEncryption::encryptKey($input, $key);
|
$encrypted = SymmetricEncryption::encryptKey($input, $key);
|
||||||
@@ -190,6 +262,56 @@ final class CoreLibsSecuritySymmetricEncryptionTest extends TestCase
|
|||||||
SymmetricEncryption::decryptKey($encrypted, $key);
|
SymmetricEncryption::decryptKey($encrypted, $key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* test invalid key provided to decrypt or encrypt
|
||||||
|
*
|
||||||
|
* @covers ::encrypt
|
||||||
|
* @covers ::decrypt
|
||||||
|
* @dataProvider providerWrongKey
|
||||||
|
* @testdox wrong key indirect $key throws $exception_message [$_dataName]
|
||||||
|
*
|
||||||
|
* @param string $key
|
||||||
|
* @param string $exception_message
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testWrongKeyIndirect(string $key, string $exception_message): void
|
||||||
|
{
|
||||||
|
$enc_key = CreateKey::generateRandomKey();
|
||||||
|
|
||||||
|
// class instance
|
||||||
|
$this->expectExceptionMessage($exception_message);
|
||||||
|
SymmetricEncryption::getInstance($key)->encrypt('test');
|
||||||
|
// we must encrypt valid thing first so we can fail with the wrong key
|
||||||
|
$encrypted = SymmetricEncryption::getInstance($enc_key)->encrypt('test');
|
||||||
|
$this->expectExceptionMessage($exception_message);
|
||||||
|
SymmetricEncryption::getInstance($key)->decrypt($encrypted);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* test invalid key provided to decrypt or encrypt
|
||||||
|
*
|
||||||
|
* @covers ::encrypt
|
||||||
|
* @covers ::decrypt
|
||||||
|
* @dataProvider providerWrongKey
|
||||||
|
* @testdox wrong key static $key throws $exception_message [$_dataName]
|
||||||
|
*
|
||||||
|
* @param string $key
|
||||||
|
* @param string $exception_message
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testWrongKeyStatic(string $key, string $exception_message): void
|
||||||
|
{
|
||||||
|
$enc_key = CreateKey::generateRandomKey();
|
||||||
|
|
||||||
|
// class static
|
||||||
|
$this->expectExceptionMessage($exception_message);
|
||||||
|
SymmetricEncryption::encryptKey('test', $key);
|
||||||
|
// we must encrypt valid thing first so we can fail with the wrong key
|
||||||
|
$encrypted = SymmetricEncryption::encryptKey('test', $enc_key);
|
||||||
|
$this->expectExceptionMessage($exception_message);
|
||||||
|
SymmetricEncryption::decryptKey($encrypted, $key);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Undocumented function
|
* Undocumented function
|
||||||
*
|
*
|
||||||
@@ -232,6 +354,49 @@ final class CoreLibsSecuritySymmetricEncryptionTest extends TestCase
|
|||||||
$this->expectExceptionMessage($exception_message);
|
$this->expectExceptionMessage($exception_message);
|
||||||
SymmetricEncryption::decryptKey($input, $key);
|
SymmetricEncryption::decryptKey($input, $key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Undocumented function
|
||||||
|
*
|
||||||
|
* @covers ::decrypt
|
||||||
|
* @dataProvider providerWrongCiphertext
|
||||||
|
* @testdox too short ciphertext indirect $input throws $exception_message [$_dataName]
|
||||||
|
*
|
||||||
|
* @param string $input
|
||||||
|
* @param string $exception_message
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testWrongCiphertextIndirect(string $input, string $exception_message): void
|
||||||
|
{
|
||||||
|
$key = CreateKey::generateRandomKey();
|
||||||
|
|
||||||
|
// class instance
|
||||||
|
$this->expectExceptionMessage($exception_message);
|
||||||
|
SymmetricEncryption::getInstance($key)->decrypt($input);
|
||||||
|
|
||||||
|
// class static
|
||||||
|
$this->expectExceptionMessage($exception_message);
|
||||||
|
SymmetricEncryption::decryptKey($input, $key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Undocumented function
|
||||||
|
*
|
||||||
|
* @covers ::decrypt
|
||||||
|
* @dataProvider providerWrongCiphertext
|
||||||
|
* @testdox too short ciphertext static $input throws $exception_message [$_dataName]
|
||||||
|
*
|
||||||
|
* @param string $input
|
||||||
|
* @param string $exception_message
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testWrongCiphertextStatic(string $input, string $exception_message): void
|
||||||
|
{
|
||||||
|
$key = CreateKey::generateRandomKey();
|
||||||
|
// class static
|
||||||
|
$this->expectExceptionMessage($exception_message);
|
||||||
|
SymmetricEncryption::decryptKey($input, $key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// __END__
|
// __END__
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
-- 20241203: update edit tables
|
-- 20241203: update edit tables
|
||||||
ALTER TABLE edit_generic ADD cuuid UUID DEFAULT gen_random_uuid();
|
ALTER TABLE edit_generic ADD cuuid UUID DEFAULT gen_random_uuid();
|
||||||
ALTER TABLE edit_log ADD ecuid VARCHAR;
|
ALTER TABLE edit_log ADD eucuid VARCHAR;
|
||||||
ALTER TABLE edit_log ADD ecuuid VARCHAR;
|
ALTER TABLE edit_log ADD eucuuid VARCHAR;
|
||||||
ALTER TABLE edit_log ADD action_sub_id VARCHAR;
|
ALTER TABLE edit_log ADD action_sub_id VARCHAR;
|
||||||
ALTER TABLE edit_log ADD http_data JSONB;
|
ALTER TABLE edit_log ADD http_data JSONB;
|
||||||
ALTER TABLE edit_log ADD ip_address JSONB;
|
ALTER TABLE edit_log ADD ip_address JSONB;
|
||||||
@@ -22,13 +22,17 @@ DECLARE
|
|||||||
random_length INT = 25; -- that should be long enough
|
random_length INT = 25; -- that should be long enough
|
||||||
BEGIN
|
BEGIN
|
||||||
IF TG_OP = 'INSERT' THEN
|
IF TG_OP = 'INSERT' THEN
|
||||||
NEW.date_created := 'now';
|
NEW.date_created := clock_timestamp();
|
||||||
NEW.cuid := random_string(random_length);
|
NEW.cuid := random_string(random_length);
|
||||||
NEW.cuuid := gen_random_uuid();
|
NEW.cuuid := gen_random_uuid();
|
||||||
ELSIF TG_OP = 'UPDATE' THEN
|
ELSIF TG_OP = 'UPDATE' THEN
|
||||||
NEW.date_updated := 'now';
|
NEW.date_updated := clock_timestamp();
|
||||||
END IF;
|
END IF;
|
||||||
RETURN NEW;
|
RETURN NEW;
|
||||||
END;
|
END;
|
||||||
$$
|
$$
|
||||||
LANGUAGE 'plpgsql';
|
LANGUAGE 'plpgsql';
|
||||||
|
|
||||||
|
--
|
||||||
|
ALTER TABLE edit_log RENAME ecuid TO eucuid;
|
||||||
|
ALTER TABLE edit_log RENAME ecuuid TO eucuuid;
|
||||||
|
|||||||
@@ -5,4 +5,9 @@
|
|||||||
convertDeprecationsToExceptions="true"
|
convertDeprecationsToExceptions="true"
|
||||||
bootstrap="4dev/tests/bootstrap.php"
|
bootstrap="4dev/tests/bootstrap.php"
|
||||||
>
|
>
|
||||||
|
<testsuites>
|
||||||
|
<testsuite name="deploy">
|
||||||
|
<directory>4dev/tests</directory>
|
||||||
|
</testsuite>
|
||||||
|
</testsuites>
|
||||||
</phpunit>
|
</phpunit>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ require 'config.php';
|
|||||||
$LOG_FILE_ID = 'classTest-convert-colors';
|
$LOG_FILE_ID = 'classTest-convert-colors';
|
||||||
ob_end_flush();
|
ob_end_flush();
|
||||||
|
|
||||||
use CoreLibs\Convert\Colors;
|
// use CoreLibs\Convert\Colors;
|
||||||
use CoreLibs\Convert\Color\Color;
|
use CoreLibs\Convert\Color\Color;
|
||||||
use CoreLibs\Convert\Color\Coordinates;
|
use CoreLibs\Convert\Color\Coordinates;
|
||||||
use CoreLibs\Debug\Support as DgS;
|
use CoreLibs\Debug\Support as DgS;
|
||||||
@@ -29,7 +29,6 @@ $log = new CoreLibs\Logging\Logging([
|
|||||||
'log_file_id' => $LOG_FILE_ID,
|
'log_file_id' => $LOG_FILE_ID,
|
||||||
'log_per_date' => true,
|
'log_per_date' => true,
|
||||||
]);
|
]);
|
||||||
$color_class = 'CoreLibs\Convert\Colors';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* print out a color block with info
|
* print out a color block with info
|
||||||
@@ -131,7 +130,8 @@ try {
|
|||||||
} catch (\LengthException $e) {
|
} catch (\LengthException $e) {
|
||||||
print "*Exception: " . $e->getMessage() . "<br><pre>" . print_r($e, true) . "</pre><br>";
|
print "*Exception: " . $e->getMessage() . "<br><pre>" . print_r($e, true) . "</pre><br>";
|
||||||
}
|
}
|
||||||
print "<hr>";
|
|
||||||
|
/* print "<hr>";
|
||||||
print "<h2>LEGACY</h2>";
|
print "<h2>LEGACY</h2>";
|
||||||
// B(valid)
|
// B(valid)
|
||||||
$rgb = [50, 20, 30];
|
$rgb = [50, 20, 30];
|
||||||
@@ -173,7 +173,7 @@ $hsb = [0, 0, 5];
|
|||||||
print "S::COLOR hsb->rgb: $hsb[0], $hsb[1], $hsb[2]: "
|
print "S::COLOR hsb->rgb: $hsb[0], $hsb[1], $hsb[2]: "
|
||||||
. DgS::printAr(SetVarType::setArray(
|
. DgS::printAr(SetVarType::setArray(
|
||||||
Colors::hsb2rgb($hsb[0], $hsb[1], $hsb[2])
|
Colors::hsb2rgb($hsb[0], $hsb[1], $hsb[2])
|
||||||
)) . "<br>";
|
)) . "<br>"; */
|
||||||
|
|
||||||
print "<hr>";
|
print "<hr>";
|
||||||
|
|
||||||
|
|||||||
@@ -74,8 +74,8 @@ print "EL_O: <pre>" . print_r($el_o, true) . "</pre>";
|
|||||||
|
|
||||||
echo "<hr>";
|
echo "<hr>";
|
||||||
print "buildHtml(): <pre>" . htmlentities($el_o->buildHtml()) . "</pre>";
|
print "buildHtml(): <pre>" . htmlentities($el_o->buildHtml()) . "</pre>";
|
||||||
echo "<hr>";
|
/* echo "<hr>";
|
||||||
print "phfo(\$el_o): <pre>" . htmlentities($el_o::printHtmlFromObject($el_o, true)) . "</pre>";
|
print "phfo(\$el_o): <pre>" . htmlentities($el_o::printHtmlFromObject($el_o, true)) . "</pre>"; */
|
||||||
echo "<hr>";
|
echo "<hr>";
|
||||||
print "phfa(\$el_list): <pre>" . htmlentities($el_o::buildHtmlFromList($el_o_list, true)) . "</pre>";
|
print "phfa(\$el_list): <pre>" . htmlentities($el_o::buildHtmlFromList($el_o_list, true)) . "</pre>";
|
||||||
|
|
||||||
|
|||||||
@@ -34,22 +34,21 @@ use CoreLibs\Debug\Support;
|
|||||||
echo "<br><b>LIST LOCALES</b><br>";
|
echo "<br><b>LIST LOCALES</b><br>";
|
||||||
|
|
||||||
$locale = 'en_US.UTF-8';
|
$locale = 'en_US.UTF-8';
|
||||||
$locales = L10n::listLocales($locale);
|
$locales = Language\L10n::listLocales($locale);
|
||||||
print "[" . $locale . "] LOCALES: " . Support::printAr($locales) . "<br>";
|
print "[" . $locale . "] LOCALES: " . Support::printAr($locales) . "<br>";
|
||||||
$locale = 'en.UTF-8';
|
$locale = 'en.UTF-8';
|
||||||
$locales = L10n::listLocales($locale);
|
$locales = Language\L10n::listLocales($locale);
|
||||||
print "[" . $locale . "] LOCALES: " . Support::printAr($locales) . "<br>";
|
print "[" . $locale . "] LOCALES: " . Support::printAr($locales) . "<br>";
|
||||||
|
|
||||||
echo "<br><b>PARSE LOCAL</b><br>";
|
echo "<br><b>PARSE LOCAL</b><br>";
|
||||||
$locale = 'en_US.UTF-8';
|
$locale = 'en_US.UTF-8';
|
||||||
$locale_info = L10n::parseLocale($locale);
|
$locale_info = Language\L10n::parseLocale($locale);
|
||||||
print "[" . $locale . "] INFO: " . Support::printAr($locale_info) . "<br>";
|
print "[" . $locale . "] INFO: " . Support::printAr($locale_info) . "<br>";
|
||||||
$locale = 'en.UTF-8';
|
$locale = 'en.UTF-8';
|
||||||
$locale_info = L10n::parseLocale($locale);
|
$locale_info = Language\L10n::parseLocale($locale);
|
||||||
print "[" . $locale . "] INFO: " . Support::printAr($locale_info) . "<br>";
|
print "[" . $locale . "] INFO: " . Support::printAr($locale_info) . "<br>";
|
||||||
|
|
||||||
echo "<br><b>AUTO DETECT</b><br>";
|
/* echo "<br><b>AUTO DETECT</b><br>";
|
||||||
|
|
||||||
// DEPRECATED
|
// DEPRECATED
|
||||||
// $get_locale = Language\GetLocale::setLocale();
|
// $get_locale = Language\GetLocale::setLocale();
|
||||||
// print "[AUTO, DEPRECATED]: " . Support::printAr($get_locale) . "<br>";
|
// print "[AUTO, DEPRECATED]: " . Support::printAr($get_locale) . "<br>";
|
||||||
@@ -103,6 +102,7 @@ $get_locale = Language\GetLocale::setLocaleFromSession(
|
|||||||
BASE . INCLUDES . LOCALE
|
BASE . INCLUDES . LOCALE
|
||||||
);
|
);
|
||||||
print "[SESSION SET INVALID]: " . Support::printAr($get_locale) . "<br>";
|
print "[SESSION SET INVALID]: " . Support::printAr($get_locale) . "<br>";
|
||||||
|
*/
|
||||||
|
|
||||||
// try to load non existing
|
// try to load non existing
|
||||||
echo "<br><b>NEW TYPE</b><br>";
|
echo "<br><b>NEW TYPE</b><br>";
|
||||||
|
|||||||
@@ -34,10 +34,12 @@ print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
|||||||
|
|
||||||
print "ALREADY from config.php: " . \CoreLibs\Debug\Support::printAr($_ENV) . "<br>";
|
print "ALREADY from config.php: " . \CoreLibs\Debug\Support::printAr($_ENV) . "<br>";
|
||||||
|
|
||||||
|
// This is now in \gullevek\dotenv\DotEnv::readEnvFile(...)
|
||||||
|
|
||||||
// test .env in local
|
// test .env in local
|
||||||
$status = \CoreLibs\Get\DotEnv::readEnvFile('.', 'test.env');
|
/* $status = \CoreLibs\Get\DotEnv::readEnvFile('.', 'test.env');
|
||||||
print "test.env: STATUS: " . $status . "<br>";
|
print "test.env: STATUS: " . $status . "<br>";
|
||||||
print "AFTER reading test.env file: " . \CoreLibs\Debug\Support::printAr($_ENV) . "<br>";
|
print "AFTER reading test.env file: " . \CoreLibs\Debug\Support::printAr($_ENV) . "<br>"; */
|
||||||
|
|
||||||
print "</body></html>";
|
print "</body></html>";
|
||||||
// ;;
|
// ;;
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ class Login
|
|||||||
private ?int $edit_user_id;
|
private ?int $edit_user_id;
|
||||||
/** @var ?string the user cuid (note will be super seeded with uuid v4 later) */
|
/** @var ?string the user cuid (note will be super seeded with uuid v4 later) */
|
||||||
private ?string $edit_user_cuid;
|
private ?string $edit_user_cuid;
|
||||||
/** @var ?string UUIDv4, will superseed the ecuid and replace euid as login id */
|
/** @var ?string UUIDv4, will superseed the eucuid and replace euid as login id */
|
||||||
private ?string $edit_user_cuuid;
|
private ?string $edit_user_cuuid;
|
||||||
/** @var string _GET/_POST loginUserId parameter for non password login */
|
/** @var string _GET/_POST loginUserId parameter for non password login */
|
||||||
private string $login_user_id = '';
|
private string $login_user_id = '';
|
||||||
@@ -217,26 +217,6 @@ class Login
|
|||||||
'path' => '',
|
'path' => '',
|
||||||
];
|
];
|
||||||
|
|
||||||
// lock status bitmap (smallint, 256)
|
|
||||||
/** @var int enabled flag */
|
|
||||||
public const ENABLED = 1;
|
|
||||||
/** @var int deleted flag */
|
|
||||||
public const DELETED = 2;
|
|
||||||
/** @var int locked flag */
|
|
||||||
public const LOCKED = 4;
|
|
||||||
/** @var int banned/suspened flag [not implemented] */
|
|
||||||
public const BANNED = 8;
|
|
||||||
/** @var int password reset in progress [not implemented] */
|
|
||||||
public const RESET = 16;
|
|
||||||
/** @var int confirm/paending, eg waiting for confirm of email [not implemented] */
|
|
||||||
public const CONFIRM = 32;
|
|
||||||
/** @var int strict, on error lock */
|
|
||||||
public const STRICT = 64;
|
|
||||||
/** @var int proected, cannot delete */
|
|
||||||
public const PROTECTED = 128;
|
|
||||||
/** @var int master admin flag */
|
|
||||||
public const ADMIN = 256;
|
|
||||||
|
|
||||||
/** @var int resync interval time in minutes */
|
/** @var int resync interval time in minutes */
|
||||||
private const DEFAULT_AUTH_RESYNC_INTERVAL = 5 * 60;
|
private const DEFAULT_AUTH_RESYNC_INTERVAL = 5 * 60;
|
||||||
/** @var int the session max garbage collection life time */
|
/** @var int the session max garbage collection life time */
|
||||||
@@ -2391,7 +2371,7 @@ HTML;
|
|||||||
}
|
}
|
||||||
$q = <<<SQL
|
$q = <<<SQL
|
||||||
INSERT INTO {DB_SCHEMA}.edit_log (
|
INSERT INTO {DB_SCHEMA}.edit_log (
|
||||||
username, euid, ecuid, ecuuid, event_date, event, error, data, data_binary, page,
|
username, euid, eucuid, eucuuid, event_date, event, error, data, data_binary, page,
|
||||||
ip, ip_address, user_agent, referer, script_name, query_string, request_scheme, server_name,
|
ip, ip_address, user_agent, referer, script_name, query_string, request_scheme, server_name,
|
||||||
http_host, http_data, session_id,
|
http_host, http_data, session_id,
|
||||||
action_data
|
action_data
|
||||||
@@ -2747,7 +2727,7 @@ HTML;
|
|||||||
return $this->session->get('LOGIN_PAGES');
|
return $this->session->get('LOGIN_PAGES');
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: logged in uid(pk)/cuid/ecuuid
|
// MARK: logged in uid(pk)/eucuid/eucuuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the current set EUID (edit user id)
|
* Get the current set EUID (edit user id)
|
||||||
@@ -2958,7 +2938,7 @@ HTML;
|
|||||||
if (empty($this->edit_user_cuuid)) {
|
if (empty($this->edit_user_cuuid)) {
|
||||||
return $this->permission_okay;
|
return $this->permission_okay;
|
||||||
}
|
}
|
||||||
// euid must match ecuid and ecuuid
|
// euid must match eucuid and eucuuid
|
||||||
// bail for previous wrong page match, eg if method is called twice
|
// bail for previous wrong page match, eg if method is called twice
|
||||||
if ($this->login_error == 103) {
|
if ($this->login_error == 103) {
|
||||||
return $this->permission_okay;
|
return $this->permission_okay;
|
||||||
|
|||||||
68
www/lib/CoreLibs/ACL/LoginUserStatus.php
Normal file
68
www/lib/CoreLibs/ACL/LoginUserStatus.php
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTHOR: Clemens Schwaighofer
|
||||||
|
* CREATED: 2024/12/12
|
||||||
|
* DESCRIPTION:
|
||||||
|
* ACL Login user status bitmap list
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace CoreLibs\ACL;
|
||||||
|
|
||||||
|
final class LoginUserStatus
|
||||||
|
{
|
||||||
|
// lock status bitmap (smallint, 256)
|
||||||
|
/** @var int enabled flag */
|
||||||
|
public const ENABLED = 1;
|
||||||
|
/** @var int deleted flag */
|
||||||
|
public const DELETED = 2;
|
||||||
|
/** @var int locked flag */
|
||||||
|
public const LOCKED = 4;
|
||||||
|
/** @var int banned/suspened flag [not implemented] */
|
||||||
|
public const BANNED = 8;
|
||||||
|
/** @var int password reset in progress [not implemented] */
|
||||||
|
public const RESET = 16;
|
||||||
|
/** @var int confirm/paending, eg waiting for confirm of email [not implemented] */
|
||||||
|
public const CONFIRM = 32;
|
||||||
|
/** @var int strict, on error lock */
|
||||||
|
public const STRICT = 64;
|
||||||
|
/** @var int proected, cannot delete */
|
||||||
|
public const PROTECTED = 128;
|
||||||
|
/** @var int master admin flag */
|
||||||
|
public const ADMIN = 256;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an array mapping the numerical role values to their descriptive names
|
||||||
|
*
|
||||||
|
* @return array<int|string,string>
|
||||||
|
*/
|
||||||
|
public static function getMap()
|
||||||
|
{
|
||||||
|
return array_flip((new \ReflectionClass(static::class))->getConstants());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the descriptive role names
|
||||||
|
*
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
public static function getNames()
|
||||||
|
{
|
||||||
|
|
||||||
|
return array_keys((new \ReflectionClass(static::class))->getConstants());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the numerical role values
|
||||||
|
*
|
||||||
|
* @return int[]
|
||||||
|
*/
|
||||||
|
public static function getValues()
|
||||||
|
{
|
||||||
|
return array_values((new \ReflectionClass(static::class))->getConstants());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// __END__
|
||||||
@@ -358,7 +358,7 @@ class Backend
|
|||||||
}
|
}
|
||||||
$q = <<<SQL
|
$q = <<<SQL
|
||||||
INSERT INTO {DB_SCHEMA}.edit_log (
|
INSERT INTO {DB_SCHEMA}.edit_log (
|
||||||
username, euid, ecuid, ecuuid, event_date, event, error, data, data_binary, page,
|
username, euid, eucuid, eucuuid, event_date, event, error, data, data_binary, page,
|
||||||
ip, user_agent, referer, script_name, query_string, server_name, http_host,
|
ip, user_agent, referer, script_name, query_string, server_name, http_host,
|
||||||
http_accept, http_accept_charset, http_accept_encoding, session_id,
|
http_accept, http_accept_charset, http_accept_encoding, session_id,
|
||||||
action, action_id, action_sub_id, action_yes, action_flag, action_menu, action_loaded,
|
action, action_id, action_sub_id, action_yes, action_flag, action_menu, action_loaded,
|
||||||
|
|||||||
@@ -527,7 +527,9 @@ class ArrayHandler
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* From the array with key -> anything values return only the matching entries from key list
|
* From the array with key -> mixed values,
|
||||||
|
* return only the entries where the key matches the key given in the key list parameter
|
||||||
|
*
|
||||||
* key list is a list[string]
|
* key list is a list[string]
|
||||||
* if key list is empty, return array as is
|
* if key list is empty, return array as is
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ class Session
|
|||||||
* then no auto init is run
|
* then no auto init is run
|
||||||
*
|
*
|
||||||
* @param string $session_name if set and not empty, will start session
|
* @param string $session_name if set and not empty, will start session
|
||||||
* @param array<string,bool> $options
|
* @param array{auto_write_close?:bool,session_strict?:bool,regenerate?:string,regenerate_interval?:int} $options
|
||||||
*/
|
*/
|
||||||
public function __construct(
|
public function __construct(
|
||||||
string $session_name,
|
string $session_name,
|
||||||
@@ -55,7 +55,7 @@ class Session
|
|||||||
/**
|
/**
|
||||||
* set session class options
|
* set session class options
|
||||||
*
|
*
|
||||||
* @param array<string,bool> $options
|
* @param array{auto_write_close?:bool,session_strict?:bool,regenerate?:string,regenerate_interval?:int} $options
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
private function setOptions(array $options): void
|
private function setOptions(array $options): void
|
||||||
|
|||||||
@@ -49,7 +49,11 @@ class SymmetricEncryption
|
|||||||
*/
|
*/
|
||||||
public static function getInstance(string|null $key = null): self
|
public static function getInstance(string|null $key = null): self
|
||||||
{
|
{
|
||||||
if (empty(self::$instance)) {
|
// new if no instsance or key is different
|
||||||
|
if (
|
||||||
|
empty(self::$instance) ||
|
||||||
|
self::$instance->key != $key
|
||||||
|
) {
|
||||||
self::$instance = new self($key);
|
self::$instance = new self($key);
|
||||||
}
|
}
|
||||||
return self::$instance;
|
return self::$instance;
|
||||||
@@ -130,7 +134,7 @@ class SymmetricEncryption
|
|||||||
*/
|
*/
|
||||||
private function encryptData(string $message, ?string $key): string
|
private function encryptData(string $message, ?string $key): string
|
||||||
{
|
{
|
||||||
if (empty($this->key) || $key === null) {
|
if ($key === null) {
|
||||||
throw new \UnexpectedValueException('Key not set');
|
throw new \UnexpectedValueException('Key not set');
|
||||||
}
|
}
|
||||||
$key = $this->createKey($key);
|
$key = $this->createKey($key);
|
||||||
|
|||||||
Reference in New Issue
Block a user