Compare commits

..
Author SHA1 Message Date
Clemens Schwaighofer c7f3dd212e Merge branch 'development' into feature/TTD-2608/LoginACLSetAjaxPageViaClassOption 2025-06-05 18:26:08 +09:00
Clemens Schwaighofer 20c2c665d4 Set the AJAX PAGE global setting via an option intead of using the global variable
Also update the ACL list read updates. We shift this to on demand reads and not before it is needed. This avoids DB access if there is no need for this data
2025-05-15 18:58:36 +09:00
4 changed files with 59 additions and 63 deletions
@@ -125,33 +125,11 @@ final class CoreLibsCreateRandomKeyTest extends TestCase
);
$this->assertEquals(
$expected,
strlen(\CoreLibs\Create\RandomKey::randomKeyGen($input))
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__
-4
View File
@@ -53,10 +53,6 @@ print "===<Br>";
// CHANGE key characters
$_array = new CoreLibs\Create\RandomKey(['A', 'F', 'B'], ['1', '5', '9']);
print "C->RANDOMKEYGEN(pre set): " . $_array->randomKeyGen() . "<br>";
$random_key = new CoreLibs\Create\RandomKey();
print "C->RANDOMKEYGEN(auto): " . $random_key->randomKeyGen() . "<br>";
$random_key->setRandomKeyCharacters(['a', 'z']);
print "C->RANDOMKEYGEN(Fixed set): " . $random_key->randomKeyGen() . "<br>";
print "</body></html>";
+57 -9
View File
@@ -197,8 +197,10 @@ class Login
// login html, if we are on an ajax page
/** @var string|null */
private ?string $login_html = '';
/** @var bool */
/** @var bool flag set on run */
private bool $login_is_ajax_page = false;
/** @var bool flag set on load */
private bool $login_is_ajax_page_option = false;
// logging
/** @var array<string> list of allowed types for edit log write */
@@ -268,8 +270,6 @@ class Login
}
// init error array
$this->loginInitErrorMessages();
// acess right list
$this->loginLoadAccessRightList();
// log allowed write flags
$this->loginSetEditLogWriteTypeAvailable();
@@ -342,6 +342,7 @@ class Login
* locale_path <string>: absolue path to the locale folder
* site_locale <string>: what locale to load
* site_domain <string>: what domain (locale file name) to use
* ajax_page <bool>: if we are loading from an AJAX page (eg backend)
*
* @param array<string,mixed> $options Options array from class load
* @return bool True on ok, False on failure
@@ -361,6 +362,15 @@ class Login
$options['debug'] = false;
}
// AUTO LOGIN
if (
!isset($options['ajax_page']) ||
!is_bool($options['ajax_page'])
) {
$options['ajax_page'] = false;
}
$this->login_is_ajax_page_option = $options['ajax_page'];
// AUTO LOGIN
if (
!isset($options['auto_login']) ||
@@ -691,6 +701,34 @@ class Login
]);
}
/**
* get the default ACL list type
* if not set loads it from DB
*
* @return array<string,int>
*/
private function loginGetAccessRightListType(): array
{
if (empty($this->default_acl_list_type)) {
$this->loginLoadAccessRightList();
}
return $this->default_acl_list_type;
}
/**
* get the default ACL list
* if not set loads from DB
*
* @return array<string|int, mixed>
*/
private function loginGetAccessRightList(): array
{
if (empty($this->default_acl_list)) {
$this->loginLoadAccessRightList();
}
return $this->default_acl_list;
}
/**
* Improves the application's security over HTTP(S) by setting specific headers
*
@@ -1540,6 +1578,10 @@ class Login
$this->acl['unit'] = [];
$this->acl['unit_legacy'] = [];
$this->acl['unit_detail'] = [];
// integrate the type acl list, but only for the keyword -> level
$this->acl['min'] = $this->loginGetAccessRightListType();
// set the full acl list too (lookup level number and get level data)
$this->acl['acl_list'] = $this->loginGetAccessRightList();
// PER ACCOUNT (UNIT/edit access)->
foreach ($_SESSION['LOGIN_UNIT'] as $ea_cuid => $unit) {
@@ -1561,7 +1603,7 @@ class Login
'name' => $unit['name'],
'uid' => $unit['uid'],
'cuuid' => $unit['cuuid'],
'level' => $this->default_acl_list[$this->acl['unit'][$ea_cuid]]['name'] ?? -1,
'level' => $this->acl['acl_list'][$this->acl['unit'][$ea_cuid]]['name'] ?? -1,
'level_number' => $this->acl['unit'][$ea_cuid],
'default' => $unit['default'],
'data' => $unit['data'],
@@ -1582,10 +1624,6 @@ class Login
}
// set the default edit access
$this->acl['default_edit_access'] = $_SESSION['LOGIN_UNIT_DEFAULT_EACUID'];
// integrate the type acl list, but only for the keyword -> level
$this->acl['min'] = $this->default_acl_list_type;
// set the full acl list too (lookup level number and get level data)
$this->acl['acl_list'] = $this->default_acl_list;
// debug
// $this->debug('ACL', $this->print_ar($this->acl));
}
@@ -2519,7 +2557,12 @@ HTML;
// or need to pass it back
// to the continue AJAX class for output back to the user
$this->login_is_ajax_page = false;
if ($ajax_page === true || !empty($GLOBALS['AJAX_PAGE'])) {
if (
$ajax_page === true ||
$this->login_is_ajax_page_option == true ||
// this is deprecated
!empty($GLOBALS['AJAX_PAGE'])
) {
$this->login_is_ajax_page = true;
}
@@ -3147,6 +3190,8 @@ HTML;
*/
public function loginGetAclList(?int $level = null): array
{
// make sure it is loaded
$this->loginGetAccessRightList();
// if no level given, return full list
if (empty($level)) {
return $this->default_acl_list;
@@ -3169,6 +3214,9 @@ HTML;
*/
public function loginGetAclListFromType(string $type): int|bool
{
// make sure it is loaded
$this->loginGetAccessRightListType();
// if not et return false
if (!isset($this->default_acl_list_type[$type])) {
return false;
}
-26
View File
@@ -119,32 +119,6 @@ class RandomKey
}
}
/**
* sets a different character range
*
* @param array<array{0:string,1:string}> $ranges
* @return bool
*/
public static function setRandomKeyCharacters(array ...$ranges): bool
{
// each range must be an arary of start end range
$character_range = [];
foreach ($ranges as $range) {
if (count($range) != 2) {
throw new \ArgumentCountError(__FUNCTION__ . ' array must have two range entries');
}
$character_range = array_merge($character_range, range($range[0], $range[1]));
}
self::$key_range = join('', $character_range);
self::$one_key_length = strlen(self::$key_range);
if (
self::$one_key_length == 0
) {
return false;
}
return true;
}
/**
* sets the key length and checks that they key given is valid
* if failed it will not change the default key length and return false