Composer update
This commit is contained in:
@@ -263,6 +263,8 @@ $out = array_intersect_key(
|
||||
);
|
||||
print "array intersect key: " . DgS::printAr($keys) . ": " . DgS::printAr($out) . "<br>";
|
||||
|
||||
print "array + suffix: " . DgS::printAr(ArrayHandler::arrayModifyKey($array, key_mod_suffix:'_attached')) . "<br>";
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -268,7 +268,9 @@ foreach ($compare_datetimes as $compare_datetime) {
|
||||
print "COMPAREDATE: $compare_datetime[0] = $compare_datetime[1]: "
|
||||
. (string)DateTime::compareDateTime($compare_datetime[0], $compare_datetime[1]) . "<br>";
|
||||
}
|
||||
|
||||
print "<hr>";
|
||||
print "<h2>calcDaysInterval</h2>";
|
||||
$compare_dates = [
|
||||
[ '2021-05-01', '2021-05-10', ],
|
||||
[ '2021-05-10', '2021-05-01', ],
|
||||
@@ -279,9 +281,21 @@ foreach ($compare_dates as $compare_date) {
|
||||
print "CALCDAYSINTERVAL: $compare_date[0] = $compare_date[1]: "
|
||||
. DgS::printAr(DateTime::calcDaysInterval($compare_date[0], $compare_date[1])) . "<br>";
|
||||
print "CALCDAYSINTERVAL(named): $compare_date[0] = $compare_date[1]: "
|
||||
. DgS::printAr(DateTime::calcDaysInterval($compare_date[0], $compare_date[1], true)) . "<br>";
|
||||
. DgS::printAr(DateTime::calcDaysInterval($compare_date[0], $compare_date[1], return_named:true)) . "<br>";
|
||||
print "CALCDAYSINTERVAL(EXCLUDE END): $compare_date[0] = $compare_date[1]: "
|
||||
. Dgs::printAr(DateTime::calcDaysInterval($compare_date[0], $compare_date[1], include_end_date:false));
|
||||
print "CALCDAYSINTERVAL(EXCLUDE START): $compare_date[0] = $compare_date[1]: "
|
||||
. Dgs::printAr(DateTime::calcDaysInterval($compare_date[0], $compare_date[1], exclude_start_date:true));
|
||||
print "CALCDAYSINTERVAL(EXCLUDE END, EXCLUDE START): $compare_date[0] = $compare_date[1]: "
|
||||
. Dgs::printAr(DateTime::calcDaysInterval(
|
||||
$compare_date[0],
|
||||
$compare_date[1],
|
||||
include_end_date:false,
|
||||
exclude_start_date:true
|
||||
));
|
||||
}
|
||||
print "<hr>";
|
||||
print "<h2>setWeekdayNameFromIsoDow</h2>";
|
||||
// test date conversion
|
||||
$dow = 2;
|
||||
print "DOW[$dow]: " . DateTime::setWeekdayNameFromIsoDow($dow) . "<br>";
|
||||
@@ -297,26 +311,25 @@ $date = '2022-70-242';
|
||||
print "DATE-dow[$date];invalid: " . DateTime::setWeekdayNameFromDate($date) . "<br>";
|
||||
print "DATE-dow[$date],long;invalid: " . DateTime::setWeekdayNameFromDate($date, true) . "<br>";
|
||||
print "DOW-date[$date];invalid: " . DateTime::setWeekdayNumberFromDate($date) . "<br>";
|
||||
print "<hr>";
|
||||
// check date range includes a weekend
|
||||
// does not:
|
||||
$start_date = '2023-07-03';
|
||||
$end_date = '2023-07-05';
|
||||
print "Has Weekend: " . $start_date . " ~ " . $end_date . ": "
|
||||
. Dgs::prBl(DateTime::dateRangeHasWeekend($start_date, $end_date)) . "<br>";
|
||||
$start_date = '2023-07-03';
|
||||
$end_date = '2023-07-10';
|
||||
print "Has Weekend: " . $start_date . " ~ " . $end_date . ": "
|
||||
. Dgs::prBl(DateTime::dateRangeHasWeekend($start_date, $end_date)) . "<br>";
|
||||
$start_date = '2023-07-03';
|
||||
$end_date = '2023-07-31';
|
||||
print "Has Weekend: " . $start_date . " ~ " . $end_date . ": "
|
||||
. Dgs::prBl(DateTime::dateRangeHasWeekend($start_date, $end_date)) . "<br>";
|
||||
$start_date = '2023-07-01';
|
||||
$end_date = '2023-07-03';
|
||||
print "Has Weekend: " . $start_date . " ~ " . $end_date . ": "
|
||||
. Dgs::prBl(DateTime::dateRangeHasWeekend($start_date, $end_date)) . "<br>";
|
||||
|
||||
print "<hr>";
|
||||
print "<h2>dateRangeHasWeekend</h2>";
|
||||
// check date range includes a weekend
|
||||
$has_weekend_list = [
|
||||
['2023-07-03', '2023-07-05'],
|
||||
['2023-07-03', '2023-07-10'],
|
||||
['2023-07-03', '2023-07-31'],
|
||||
['2023-07-01', '2023-07-03'],
|
||||
['2023-07-01', '2023-07-01'],
|
||||
['2023-07-01', '2023-07-02'],
|
||||
['2023-06-30', '2023-07-01'],
|
||||
['2023-06-30', '2023-06-30'],
|
||||
['2023-07-01', '2023-06-30'],
|
||||
];
|
||||
foreach ($has_weekend_list as $days) {
|
||||
print "Has Weekend: " . $days[0] . " ~ " . $days[1] . ": "
|
||||
. Dgs::prBl(DateTime::dateRangeHasWeekend($days[0], $days[1])) . "<br>";
|
||||
}
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
@@ -460,7 +473,10 @@ function intervalStringFormatDeprecated(
|
||||
// print "-> V: $value | $part, $time_name | I: " . is_int($value) . " | F: " . is_float($value)
|
||||
// . " | " . ($value != 0 ? 'Not zero' : 'ZERO') . "<br>";
|
||||
// var_dump($skip_last_zero);
|
||||
if ($value != 0 || $skip_zero === false || $skip_last_zero === false) {
|
||||
if (
|
||||
is_numeric($value) &&
|
||||
($value != 0 || $skip_zero === false || $skip_last_zero === false)
|
||||
) {
|
||||
if ($part == 'f') {
|
||||
if ($truncate_nanoseconds === true) {
|
||||
$value = round($value, 3);
|
||||
|
||||
@@ -21,6 +21,7 @@ ob_end_flush();
|
||||
|
||||
use CoreLibs\Debug\Support;
|
||||
use CoreLibs\DB\Support\ConvertPlaceholder;
|
||||
use CoreLibs\Convert\Html;
|
||||
|
||||
$log = new CoreLibs\Logging\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
@@ -38,10 +39,12 @@ print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
print "LOGFILE NAME: " . $log->getLogFile() . "<br>";
|
||||
print "LOGFILE ID: " . $log->getLogFileId() . "<br>";
|
||||
|
||||
print "Lookup Regex: <pre>" . ConvertPlaceholder::REGEX_LOOKUP_PLACEHOLDERS . "</pre>";
|
||||
print "Replace Named Regex: <pre>" . ConvertPlaceholder::REGEX_REPLACE_NAMED . "</pre>";
|
||||
print "Replace Named Regex: <pre>" . ConvertPlaceholder::REGEX_REPLACE_QUESTION_MARK . "</pre>";
|
||||
print "Replace Named Regex: <pre>" . ConvertPlaceholder::REGEX_REPLACE_NUMBERED . "</pre>";
|
||||
print "Lookup Regex: <pre>" . Html::htmlent(ConvertPlaceholder::REGEX_LOOKUP_PLACEHOLDERS) . "</pre>";
|
||||
print "Lookup Numbered Regex: <pre>" . Html::htmlent(ConvertPlaceholder::REGEX_LOOKUP_NUMBERED) . "</pre>";
|
||||
print "Replace Named Regex: <pre>" . Html::htmlent(ConvertPlaceholder::REGEX_REPLACE_NAMED) . "</pre>";
|
||||
print "Replace Question Mark Regex: <pre>"
|
||||
. Html::htmlent(ConvertPlaceholder::REGEX_REPLACE_QUESTION_MARK) . "</pre>";
|
||||
print "Replace Numbered Regex: <pre>" . Html::htmlent(ConvertPlaceholder::REGEX_REPLACE_NUMBERED) . "</pre>";
|
||||
|
||||
$uniqid = \CoreLibs\Create\Uids::uniqIdShort();
|
||||
// $binary_data = $db->dbEscapeBytea(file_get_contents('class_test.db.php') ?: '');
|
||||
@@ -91,40 +94,63 @@ RETURNING
|
||||
some_binary
|
||||
SQL;
|
||||
|
||||
print "[ALL] Convert: "
|
||||
print "<b>[ALL] Convert</b>: "
|
||||
. Support::printAr(ConvertPlaceholder::convertPlaceholderInQuery($query, $params))
|
||||
. "<br>";
|
||||
echo "<hr>";
|
||||
|
||||
$query = "SELECT foo FROM bar WHERE baz = :baz AND buz = :baz AND biz = :biz AND boz = :bez";
|
||||
$params = [':baz' => 'SETBAZ', ':bez' => 'SETBEZ', ':biz' => 'SETBIZ'];
|
||||
print "[NO PARAMS] Convert: "
|
||||
print "<b>[NO PARAMS] Convert</b>: "
|
||||
. Support::printAr(ConvertPlaceholder::convertPlaceholderInQuery($query, $params))
|
||||
. "<br>";
|
||||
echo "<hr>";
|
||||
|
||||
$query = "SELECT foo FROM bar WHERE baz = :baz AND buz = :baz AND biz = :biz AND boz = :bez";
|
||||
$params = null;
|
||||
print "[NO PARAMS] Convert: "
|
||||
print "<b>[NO PARAMS] Convert</b>: "
|
||||
. Support::printAr(ConvertPlaceholder::convertPlaceholderInQuery($query, $params))
|
||||
. "<br>";
|
||||
echo "<hr>";
|
||||
|
||||
$query = "SELECT row_varchar FROM table_with_primary_key WHERE row_varchar <> :row_varchar";
|
||||
$params = null;
|
||||
print "[NO PARAMS] Convert: "
|
||||
print "<b>[NO PARAMS] Convert</b>: "
|
||||
. Support::printAr(ConvertPlaceholder::convertPlaceholderInQuery($query, $params))
|
||||
. "<br>";
|
||||
echo "<hr>";
|
||||
|
||||
$query = "SELECT row_varchar, row_varchar_literal, row_int, row_date FROM table_with_primary_key";
|
||||
$params = null;
|
||||
print "[NO PARAMS] TEST: "
|
||||
print "<b>[NO PARAMS] TEST</b>: "
|
||||
. Support::printAr(ConvertPlaceholder::convertPlaceholderInQuery($query, $params))
|
||||
. "<br>";
|
||||
echo "<hr>";
|
||||
|
||||
print "[P-CONV]: "
|
||||
$query = <<<SQL
|
||||
UPDATE table_with_primary_key SET
|
||||
row_int = $1::INT, row_numeric = $1::NUMERIC, row_varchar = $1
|
||||
WHERE
|
||||
row_varchar = $1
|
||||
SQL;
|
||||
$params = [1];
|
||||
print "<b>[All the same params] TEST</b>: "
|
||||
. Support::printAr(ConvertPlaceholder::convertPlaceholderInQuery($query, $params))
|
||||
. "<br>";
|
||||
echo "<hr>";
|
||||
|
||||
$query = <<<SQL
|
||||
SELECT row_varchar, row_varchar_literal, row_int, row_date
|
||||
FROM table_with_primary_key
|
||||
WHERE row_varchar = :row_varchar
|
||||
SQL;
|
||||
$params = [':row_varchar' => 1];
|
||||
print "<b>[: param] TEST</b>: "
|
||||
. Support::printAr(ConvertPlaceholder::convertPlaceholderInQuery($query, $params))
|
||||
. "<br>";
|
||||
echo "<hr>";
|
||||
|
||||
print "<b>[P-CONV]</b>: "
|
||||
. Support::printAr(
|
||||
ConvertPlaceholder::updateParamList([
|
||||
'original' => [
|
||||
@@ -186,6 +212,13 @@ SQL,
|
||||
'params' => [\CoreLibs\Create\Uids::uniqIdShort(), 'string A-1', 1234],
|
||||
'direction' => 'pg',
|
||||
],
|
||||
'b?' => [
|
||||
'query' => <<<SQL
|
||||
SELECT test FROM test_foo = ?
|
||||
SQL,
|
||||
'params' => [1234],
|
||||
'direction' => 'pg',
|
||||
],
|
||||
'b:' => [
|
||||
'query' => <<<SQL
|
||||
INSERT INTO test_foo (
|
||||
@@ -220,7 +253,7 @@ foreach ($test_queries as $info => $data) {
|
||||
$query = $data['query'];
|
||||
$params = $data['params'];
|
||||
$direction = $data['direction'];
|
||||
print "[$info] Convert: "
|
||||
print "<b>[$info] Convert</b>: "
|
||||
. Support::printAr(ConvertPlaceholder::convertPlaceholderInQuery($query, $params, $direction))
|
||||
. "<br>";
|
||||
echo "<hr>";
|
||||
|
||||
166
www/admin/class_test.db.encryption.php
Normal file
166
www/admin/class_test.db.encryption.php
Normal file
@@ -0,0 +1,166 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
// turn on all error reporting
|
||||
error_reporting(E_ALL | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', true);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// for testing encryption compare
|
||||
use OpenPGP\OpenPGP;
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-db-query-encryption';
|
||||
ob_end_flush();
|
||||
|
||||
// use CoreLibs\Debug\Support;
|
||||
use CoreLibs\Security\SymmetricEncryption;
|
||||
use CoreLibs\Security\CreateKey;
|
||||
use CoreLibs\Create\Hash;
|
||||
use CoreLibs\Debug\Support;
|
||||
|
||||
$log = new CoreLibs\Logging\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'log_file_id' => $LOG_FILE_ID,
|
||||
'log_per_date' => true,
|
||||
]);
|
||||
// db connection and attach logger
|
||||
$db = new CoreLibs\DB\IO(DB_CONFIG, $log);
|
||||
$db->log->debug('START', '=============================>');
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: DB QUERY ENCRYPTION';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title></head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
// encryption key
|
||||
$key_new = CreateKey::generateRandomKey();
|
||||
print "Secret Key NEW: " . $key_new . "<br>";
|
||||
// for reproducable test results
|
||||
$key = 'e475c19b9a3c8363feb06b51f5b73f1dc9b6f20757d4ab89509bf5cc70ed30ec';
|
||||
print "Secret Key: " . $key . "<br>";
|
||||
|
||||
// test text
|
||||
$text_string = "I a some deep secret";
|
||||
$text_string = "I a some deep secret ABC";
|
||||
//
|
||||
$crypt = new SymmetricEncryption($key);
|
||||
$encrypted = $crypt->encrypt($text_string);
|
||||
$string_hashed = Hash::hashStd($text_string);
|
||||
$string_hmac = Hash::hashHmac($text_string, $key);
|
||||
$decrypted = $crypt->decrypt($encrypted);
|
||||
|
||||
print "String: " . $text_string . "<br>";
|
||||
print "Encrypted: " . $encrypted . "<br>";
|
||||
print "Hashed: " . $string_hashed . "<br>";
|
||||
print "Hmac: " . $string_hmac . "<br>";
|
||||
|
||||
$db->dbExecParams(
|
||||
<<<SQL
|
||||
INSERT INTO test_encryption (
|
||||
-- for compare
|
||||
plain_text,
|
||||
-- via php encryption
|
||||
hash_text, hmac_text, crypt_text,
|
||||
-- -- in DB encryption
|
||||
pg_digest_bytea, pg_digest_text,
|
||||
pg_hmac_bytea, pg_hmac_text,
|
||||
pg_crypt_bytea, pg_crypt_text
|
||||
) VALUES (
|
||||
$1,
|
||||
$2, $3, $4,
|
||||
digest($1::VARCHAR, $5),
|
||||
encode(digest($1, $5), 'hex'),
|
||||
hmac($1, $6, $5),
|
||||
encode(hmac($1, $6, $5), 'hex'),
|
||||
pgp_sym_encrypt($1, $7),
|
||||
encode(pgp_sym_encrypt($1, $7), 'hex')
|
||||
) RETURNING cuuid
|
||||
SQL,
|
||||
[
|
||||
// 1: original string
|
||||
$text_string,
|
||||
// 2: hashed, 3: hmac, 4: encrypted
|
||||
$string_hashed, $string_hmac, $encrypted,
|
||||
// 5: hash type, 6: hmac secret, 7: pgp secret
|
||||
'sha256', $key, $key
|
||||
]
|
||||
);
|
||||
$cuuid = $db->dbGetReturningExt('cuuid');
|
||||
print "INSERTED: " . print_r($cuuid, true) . "<br>";
|
||||
print "LAST ERROR: " . $db->dbGetLastError(true) . "<br>";
|
||||
|
||||
// read back
|
||||
$res = $db->dbReturnRowParams(
|
||||
<<<SQL
|
||||
SELECT
|
||||
-- for compare
|
||||
plain_text,
|
||||
-- via php encryption
|
||||
hash_text, hmac_text, crypt_text,
|
||||
-- in DB encryption
|
||||
pg_digest_bytea, pg_digest_text,
|
||||
pg_hmac_bytea, pg_hmac_text,
|
||||
pg_crypt_bytea, pg_crypt_text,
|
||||
encode(pg_crypt_bytea, 'hex') AS pg_crypt_bytea_hex,
|
||||
pgp_sym_decrypt(pg_crypt_bytea, $2) AS from_pg_crypt_bytea,
|
||||
pgp_sym_decrypt(decode(pg_crypt_text, 'hex'), $2) AS from_pg_crypt_text
|
||||
FROM
|
||||
test_encryption
|
||||
WHERE
|
||||
cuuid = $1
|
||||
SQL,
|
||||
[
|
||||
$cuuid, $key
|
||||
]
|
||||
);
|
||||
|
||||
print "RES: <pre>" . Support::prAr($res) . "</pre><br>";
|
||||
|
||||
if ($res === false) {
|
||||
echo "Failed to run query<br>";
|
||||
} else {
|
||||
if (hash_equals($string_hashed, $res['pg_digest_text'])) {
|
||||
print "libsodium and pgcrypto hash match<br>";
|
||||
}
|
||||
if (hash_equals($string_hmac, $res['pg_hmac_text'])) {
|
||||
print "libsodium and pgcrypto hash hmac match<br>";
|
||||
}
|
||||
// do compare for PHP and pgcrypto settings
|
||||
$encryptedMessage_template = <<<TEXT
|
||||
-----BEGIN PGP MESSAGE-----
|
||||
|
||||
{BASE64}
|
||||
-----END PGP MESSAGE-----
|
||||
TEXT;
|
||||
$base64_string = base64_encode(hex2bin($res['pg_crypt_text']) ?: '');
|
||||
$encryptedMessage = str_replace(
|
||||
'{BASE64}',
|
||||
$base64_string,
|
||||
$encryptedMessage_template
|
||||
);
|
||||
try {
|
||||
$literalMessage = OpenPGP::decryptMessage($encryptedMessage, passwords: [$key]);
|
||||
$decrypted = $literalMessage->getLiteralData()->getData();
|
||||
print "Pg decrypted PHP: " . $decrypted . "<br>";
|
||||
if ($decrypted == $text_string) {
|
||||
print "Decryption worked<br>";
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
print "Error decrypting message: " . $e->getMessage() . "<br>";
|
||||
}
|
||||
}
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
@@ -76,41 +76,41 @@ $db->dbResetEncoding();
|
||||
|
||||
// empty calls, none of the below should fail
|
||||
//
|
||||
$db->dbGetCursor();
|
||||
$foo = $db->dbGetCursor();
|
||||
//
|
||||
$db->dbGetCursorExt();
|
||||
$foo = $db->dbGetCursorExt();
|
||||
//
|
||||
$db->dbGetCursorPos('SELECT foo', ['bar']);
|
||||
$foo = $db->dbGetCursorPos('SELECT foo', ['bar']);
|
||||
//
|
||||
$db->dbGetCursorNumRows('SELECT foo', ['bar']);
|
||||
$foo = $db->dbGetCursorNumRows('SELECT foo', ['bar']);
|
||||
//
|
||||
$db->dbGetInsertPKName();
|
||||
$foo = $db->dbGetInsertPKName();
|
||||
//
|
||||
$db->dbGetInsertPK();
|
||||
$foo = $db->dbGetInsertPK();
|
||||
//
|
||||
$db->dbGetReturningExt();
|
||||
$db->dbGetReturningExt('foo');
|
||||
$db->dbGetReturningExt('foo', 0);
|
||||
$db->dbGetReturningExt(pos:0);
|
||||
$foo = $db->dbGetReturningExt();
|
||||
$foo = $db->dbGetReturningExt('foo');
|
||||
$foo = $db->dbGetReturningExt('foo', 0);
|
||||
$foo = $db->dbGetReturningExt(pos:0);
|
||||
//
|
||||
$db->dbGetReturningArray();
|
||||
$foo = $db->dbGetReturningArray();
|
||||
//
|
||||
$db->dbGetNumRows();
|
||||
$foo = $db->dbGetNumRows();
|
||||
//
|
||||
$db->dbGetNumFields();
|
||||
$foo = $db->dbGetNumFields();
|
||||
//
|
||||
$db->dbGetFieldNames();
|
||||
$foo = $db->dbGetFieldNames();
|
||||
//
|
||||
$db->dbGetFieldTypes();
|
||||
$foo = $db->dbGetFieldTypes();
|
||||
//
|
||||
$db->dbGetFieldNameTypes();
|
||||
$foo = $db->dbGetFieldNameTypes();
|
||||
//
|
||||
$db->dbGetFieldName(0);
|
||||
$foo = $db->dbGetFieldName(0);
|
||||
//
|
||||
$db->dbGetFieldType(0);
|
||||
$db->dbGetFieldType('foo');
|
||||
$foo = $db->dbGetFieldType(0);
|
||||
$foo = $db->dbGetFieldType('foo');
|
||||
//
|
||||
$db->dbGetPrepareCursorValue('foo', 'bar');
|
||||
$foo = $db->dbGetPrepareCursorValue('foo', 'bar');
|
||||
|
||||
// TEST CACHE READS
|
||||
|
||||
@@ -707,6 +707,17 @@ if (
|
||||
} else {
|
||||
print "[PGB] [3] pgb_sel_test_foo prepare OK<br>";
|
||||
}
|
||||
$stm_status = $db->dbPreparedCursorStatus('');
|
||||
print "[PGB] Empty statement name: " . $log->prAr($stm_status) . "<br>";
|
||||
$stm_status = $db->dbPreparedCursorStatus('pgb_sel_test_foobar');
|
||||
print "[PGB] Prepared name not match status: $stm_status<br>";
|
||||
$stm_status = $db->dbPreparedCursorStatus('pgb_sel_test_foo');
|
||||
print "[PGB] Prepared name match status: $stm_status<br>";
|
||||
$stm_status = $db->dbPreparedCursorStatus('pgb_sel_test_foo', $q_prep);
|
||||
print "[PGB] prepared exists and query match status: $stm_status<br>";
|
||||
$stm_status = $db->dbPreparedCursorStatus('pgb_sel_test_foo', "SELECT * FROM test_foo");
|
||||
print "[PGB] prepared exists and query not match status: $stm_status<br>";
|
||||
|
||||
$db_pgb->dbClose();
|
||||
|
||||
# db write class test
|
||||
|
||||
@@ -54,7 +54,7 @@ if (($dbh = $db->dbGetDbh()) instanceof \PgSql\Connection) {
|
||||
print "NO DB HANDLER<br>";
|
||||
}
|
||||
// REGEX for placeholder count
|
||||
print "Placeholder regex: <pre>" . CoreLibs\DB\Support\ConvertPlaceholder::REGEX_LOOKUP_PLACEHOLDERS . "</pre>";
|
||||
print "Placeholder lookup regex: <pre>" . CoreLibs\DB\Support\ConvertPlaceholder::REGEX_LOOKUP_NUMBERED . "</pre>";
|
||||
|
||||
// turn on debug replace for placeholders
|
||||
$db->dbSetDebugReplacePlaceholder(true);
|
||||
@@ -148,6 +148,7 @@ RETURNING
|
||||
bigint_a, number_real, number_double, numeric_3,
|
||||
uuid_var
|
||||
SQL;
|
||||
print "Placeholders: <pre>" . print_r($db->dbGetQueryParamPlaceholders($query_insert), true) . "<pre>";
|
||||
$status = $db->dbExecParams($query_insert, $query_params);
|
||||
echo "<b>*</b><br>";
|
||||
echo "INSERT ALL COLUMN TYPES: "
|
||||
@@ -326,6 +327,7 @@ SQL,
|
||||
) {
|
||||
print "RES: " . Support::prAr($res) . "<br>";
|
||||
}
|
||||
print "PL: " . Support::PrAr($db->dbGetPlaceholderConverted()) . "<br>";
|
||||
print "ERROR: " . $db->dbGetLastError(true) . "<br>";
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
107
www/admin/class_test.deprecated.helper.php
Normal file
107
www/admin/class_test.deprecated.helper.php
Normal file
@@ -0,0 +1,107 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
error_reporting(E_ALL | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-phpv';
|
||||
ob_end_flush();
|
||||
|
||||
$log = new CoreLibs\Logging\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'log_file_id' => $LOG_FILE_ID,
|
||||
'log_per_date' => true,
|
||||
]);
|
||||
$_phpv = new CoreLibs\Check\PhpVersion();
|
||||
$phpv_class = 'CoreLibs\Check\PhpVersion';
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: PHP VERSION';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title></head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
// fputcsv
|
||||
print "<h3>\CoreLibs\DeprecatedHelper\Deprecated84::fputcsv()</h3>";
|
||||
$test_csv = BASE . TMP . 'DeprecatedHelper.test.csv';
|
||||
print "File: $test_csv<br>";
|
||||
|
||||
$fp = fopen($test_csv, "w");
|
||||
if (!is_resource($fp)) {
|
||||
die("Cannot open file: $test_csv");
|
||||
}
|
||||
\CoreLibs\DeprecatedHelper\Deprecated84::fputcsv($fp, ["A", "B", "C"]);
|
||||
fclose($fp);
|
||||
|
||||
$fp = fopen($test_csv, "r");
|
||||
if (!is_resource($fp)) {
|
||||
die("Cannot open file: $test_csv");
|
||||
}
|
||||
while ($entry = \CoreLibs\DeprecatedHelper\Deprecated84::fgetcsv($fp)) {
|
||||
print "fgetcsv: <pre>" . print_r($entry, true) . "</pre>";
|
||||
}
|
||||
fclose($fp);
|
||||
|
||||
$out = \CoreLibs\DeprecatedHelper\Deprecated84::str_getcsv("A,B,C");
|
||||
print "str_getcsv: <pre>" . print_r($out, true) . "</pre>";
|
||||
|
||||
/**
|
||||
* temporary different CSV function, because fgetcsv seems to be broken on some systems
|
||||
* (does not read out japanese text)
|
||||
*
|
||||
* @param string $string full line for csv split
|
||||
* @param string $encoding optional, if given, converts string to the internal encoding
|
||||
* before we do anything
|
||||
* @param string $delimiter sepperate character, default ','
|
||||
* @param string $enclosure string line marker, default '"'
|
||||
* @param string $flag INTERN | EXTERN. if INTERN uses the PHP function, else uses explode
|
||||
* @return array<int,string|null> array with split data from input line
|
||||
*/
|
||||
function mtParseCSV(
|
||||
string $string,
|
||||
string $encoding = '',
|
||||
string $delimiter = ',',
|
||||
string $enclosure = '"',
|
||||
string $flag = 'INTERN'
|
||||
): array {
|
||||
$lines = [];
|
||||
if ($encoding) {
|
||||
$string = \CoreLibs\Convert\Encoding::convertEncoding(
|
||||
$string,
|
||||
'UTF-8',
|
||||
$encoding
|
||||
);
|
||||
}
|
||||
if ($flag == 'INTERN') {
|
||||
// split with PHP function
|
||||
$lines = str_getcsv($string, $delimiter, $enclosure);
|
||||
} else {
|
||||
// split up with delimiter
|
||||
$lines = explode(',', $string) ?: [];
|
||||
}
|
||||
// strip " from beginning and end of line
|
||||
for ($i = 0; $i < count($lines); $i++) {
|
||||
// remove line breaks
|
||||
$lines[$i] = preg_replace("/\r\n?/", '', (string)$lines[$i]) ?? '';
|
||||
// lingering " at the beginning and end of the line
|
||||
$lines[$i] = preg_replace("/^\"/", '', (string)$lines[$i]) ?? '';
|
||||
$lines[$i] = preg_replace("/\"$/", '', (string)$lines[$i]) ?? '';
|
||||
}
|
||||
return $lines;
|
||||
}
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
@@ -19,6 +19,7 @@ $LOG_FILE_ID = 'classTest-hash';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Create\Hash;
|
||||
use CoreLibs\Security\CreateKey;
|
||||
|
||||
$log = new CoreLibs\Logging\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
@@ -38,28 +39,66 @@ print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
$to_crc = 'Some text block';
|
||||
// static
|
||||
print "S::__CRC32B: $to_crc: " . $hash_class::__crc32b($to_crc) . "<br>";
|
||||
print "S::__SHA1SHORT(off): $to_crc: " . $hash_class::__sha1short($to_crc) . "<br>";
|
||||
print "S::__SHA1SHORT(on): $to_crc: " . $hash_class::__sha1short($to_crc, true) . "<br>";
|
||||
print "S::__hash(d): " . $to_crc . "/"
|
||||
. Hash::STANDARD_HASH_SHORT . ": " . $hash_class::__hash($to_crc) . "<br>";
|
||||
foreach (['adler32', 'fnv132', 'fnv1a32', 'joaat', 'sha512'] as $__hash_c) {
|
||||
print "S::__hash($__hash_c): $to_crc: " . $hash_class::__hash($to_crc, $__hash_c) . "<br>";
|
||||
print "S::__CRC32B: $to_crc: " . Hash::__crc32b($to_crc) . "<br>";
|
||||
// print "S::__SHA1SHORT(off): $to_crc: " . Hash::__sha1short($to_crc) . "<br>";
|
||||
print "S::hashShort(__sha1Short replace): $to_crc: " . Hash::hashShort($to_crc) . "<br>";
|
||||
// print "S::__SHA1SHORT(on): $to_crc: " . Hash::__sha1short($to_crc, true) . "<br>";
|
||||
print "S::sha1Short(__sha1Short replace): $to_crc: " . Hash::sha1Short($to_crc) . "<br>";
|
||||
// print "S::__hash(d): " . $to_crc . "/"
|
||||
// . Hash::STANDARD_HASH_SHORT . ": " . $hash_class::__hash($to_crc) . "<br>";
|
||||
$to_crc_list = [
|
||||
'Some text block',
|
||||
'Some String Text',
|
||||
'any string',
|
||||
];
|
||||
foreach ($to_crc_list as $__to_crc) {
|
||||
foreach (['adler32', 'fnv132', 'fnv1a32', 'joaat', 'ripemd160', 'sha256', 'sha512'] as $__hash_c) {
|
||||
print "Hash::hash($__hash_c): $__to_crc: " . Hash::hash($to_crc, $__hash_c) . "<br>";
|
||||
}
|
||||
}
|
||||
// static use
|
||||
print "U-S::__CRC32B: $to_crc: " . Hash::__crc32b($to_crc) . "<br>";
|
||||
|
||||
echo "<hr>";
|
||||
$text = 'Some String Text';
|
||||
// $text = 'any string';
|
||||
$type = 'crc32b';
|
||||
print "Hash: " . $type . ": " . hash($type, $text) . "<br>";
|
||||
print "Class: " . $type . ": " . Hash::__hash($text, $type) . "<br>";
|
||||
// print "Class (old): " . $type . ": " . Hash::__hash($text, $type) . "<br>";
|
||||
print "Class (new): " . $type . ": " . Hash::hash($text, $type) . "<br>";
|
||||
|
||||
echo "<hr>";
|
||||
print "<br>CURRENT STANDARD_HASH_SHORT: " . Hash::STANDARD_HASH_SHORT . "<br>";
|
||||
print "<br>CURRENT STANDARD_HASH_LONG: " . Hash::STANDARD_HASH_LONG . "<br>";
|
||||
print "HASH SHORT: " . $to_crc . ": " . Hash::__hash($to_crc) . "<br>";
|
||||
print "HASH LONG: " . $to_crc . ": " . Hash::__hashLong($to_crc) . "<br>";
|
||||
print "CURRENT STANDARD_HASH_SHORT: " . Hash::STANDARD_HASH_SHORT . "<br>";
|
||||
print "CURRENT STANDARD_HASH_LONG: " . Hash::STANDARD_HASH_LONG . "<br>";
|
||||
print "CURRENT STANDARD_HASH: " . Hash::STANDARD_HASH . "<br>";
|
||||
print "HASH SHORT: " . $to_crc . ": " . Hash::hashShort($to_crc) . "<br>";
|
||||
print "HASH LONG: " . $to_crc . ": " . Hash::hashLong($to_crc) . "<br>";
|
||||
print "HASH DEFAULT: " . $to_crc . ": " . Hash::hashStd($to_crc) . "<br>";
|
||||
|
||||
echo "<hr>";
|
||||
$key = CreateKey::generateRandomKey();
|
||||
$key = "FIX KEY";
|
||||
print "Secret Key: " . $key . "<br>";
|
||||
print "HASHMAC DEFAULT (fix): " . $to_crc . ": " . Hash::hashHmac($to_crc, $key) . "<br>";
|
||||
$key = CreateKey::generateRandomKey();
|
||||
print "Secret Key: " . $key . "<br>";
|
||||
print "HASHMAC DEFAULT (random): " . $to_crc . ": " . Hash::hashHmac($to_crc, $key) . "<br>";
|
||||
|
||||
echo "<hr>";
|
||||
$hash_types = ['crc32b', 'sha256', 'invalid'];
|
||||
foreach ($hash_types as $hash_type) {
|
||||
echo "<b>Checking $hash_type:</b><br>";
|
||||
if (Hash::isValidHashType($hash_type)) {
|
||||
echo "hash type: $hash_type is valid<br>";
|
||||
} else {
|
||||
echo "hash type: $hash_type is INVALID<br>";
|
||||
}
|
||||
if (Hash::isValidHashHmacType($hash_type)) {
|
||||
echo "hash hmac type: $hash_type is valid<br>";
|
||||
} else {
|
||||
echo "hash hmac type: $hash_type is INVALID<br>";
|
||||
}
|
||||
}
|
||||
|
||||
// print "UNIQU ID SHORT : " . Hash::__uniqId() . "<br>";
|
||||
// print "UNIQU ID LONG : " . Hash::__uniqIdLong() . "<br>";
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -117,7 +119,7 @@ if (isset($login->loginGetAcl()['unit'])) {
|
||||
if ($login->loginCheckEditAccessCuid($edit_access_cuid)) {
|
||||
print "Set new:" . $edit_access_cuid . "<br>";
|
||||
} else {
|
||||
print "Load default unit id: " . $login->loginGetAcl()['unit_id'] . "<br>";
|
||||
print "Load default unit id: " . $login->loginGetAcl()['unit_cuid'] . "<br>";
|
||||
}
|
||||
} else {
|
||||
print "Something went wrong with the login<br>";
|
||||
@@ -127,6 +129,12 @@ if (isset($login->loginGetAcl()['unit'])) {
|
||||
// IP check: 'REMOTE_ADDR', 'HTTP_X_FORWARDED_FOR', 'CLIENT_IP' in _SERVER
|
||||
// Agent check: 'HTTP_USER_AGENT'
|
||||
|
||||
print "<hr>";
|
||||
print "PAGE lookup:<br>";
|
||||
$file_name = 'test_edit_base.php';
|
||||
print "Access to '$file_name': " . $log->prAr($login->loginPageAccessAllowed($file_name)) . "<br>";
|
||||
$file_name = 'i_do_not_exists.php';
|
||||
print "Access to '$file_name': " . $log->prAr($login->loginPageAccessAllowed($file_name)) . "<br>";
|
||||
|
||||
echo "<hr>";
|
||||
print "SESSION: " . Support::printAr($_SESSION) . "<br>";
|
||||
@@ -140,4 +148,18 @@ $login->writeLog(
|
||||
write_type:'JSON'
|
||||
);
|
||||
|
||||
echo "<hr>";
|
||||
print "<h3>Legacy Lookups</h3>";
|
||||
|
||||
$edit_access_id = 1;
|
||||
$edit_access_cuid = $login->loginGetEditAccessCuidFromId($edit_access_id);
|
||||
$edit_access_id_rev = null;
|
||||
if (is_string($edit_access_cuid)) {
|
||||
$edit_access_id_rev = $login->loginGetEditAccessIdFromCuid($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>";
|
||||
|
||||
@@ -95,6 +95,7 @@ $test_files = [
|
||||
'class_test.db.dbReturn.php' => 'Class Test: DB dbReturn',
|
||||
'class_test.db.single.php' => 'Class Test: DB single query tests',
|
||||
'class_test.db.convert-placeholder.php' => 'Class Test: DB convert placeholder',
|
||||
'class_test.db.encryption.php' => 'Class Test: DB pgcrypto',
|
||||
'class_test.convert.colors.php' => 'Class Test: CONVERT COLORS',
|
||||
'class_test.check.colors.php' => 'Class Test: CHECK COLORS',
|
||||
'class_test.mime.php' => 'Class Test: MIME',
|
||||
@@ -141,6 +142,7 @@ $test_files = [
|
||||
'class_test.error_msg.php' => 'Class Test: ERROR MSG',
|
||||
'class_test.url-requests.curl.php' => 'Class Test: URL REQUESTS: CURL',
|
||||
'subfolder/class_test.config.direct.php' => 'Class Test: CONFIG DIRECT SUB',
|
||||
'class_test.deprecated.helper.php' => 'Class Test: DEPRECATED HELPERS',
|
||||
];
|
||||
|
||||
asort($test_files);
|
||||
|
||||
@@ -28,8 +28,6 @@ $log = new CoreLibs\Logging\Logging([
|
||||
$_phpv = new CoreLibs\Check\PhpVersion();
|
||||
$phpv_class = 'CoreLibs\Check\PhpVersion';
|
||||
|
||||
// define a list of from to color sets for conversion test
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: PHP VERSION';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title></head>";
|
||||
|
||||
@@ -86,8 +86,10 @@ if (!isset($_SESSION['counter'])) {
|
||||
$_SESSION['counter']++;
|
||||
print "[READ] A " . $var . ": " . ($_SESSION[$var] ?? '{UNSET}') . "<br>";
|
||||
$_SESSION[$var] = $value;
|
||||
/** @phpstan-ignore-next-line nullCoalesce.offset */
|
||||
print "[READ] B " . $var . ": " . ($_SESSION[$var] ?? '{UNSET}') . "<br>";
|
||||
print "[READ] Confirm " . $var . " is " . $value . ": "
|
||||
/** @phpstan-ignore-next-line equal.alwaysTrue, nullCoalesce.offset */
|
||||
. (($_SESSION[$var] ?? '') == $value ? 'Matching' : 'Not matching') . "<br>";
|
||||
|
||||
// test set wrappers methods
|
||||
|
||||
Reference in New Issue
Block a user