Settings bugfix, frontend implementation, API CLI template integration

This commit is contained in:
2024-04-05 13:01:15 +02:00
parent 10f7025569
commit 98fcd2822c
12 changed files with 1098 additions and 27 deletions

View File

@@ -17,8 +17,13 @@ class StringType extends Parameter {
return false;
}
// as long as it's numeric or bool, we can safely cast it to a string
if (!is_string($value)) {
return false;
if (is_bool($value) || is_int($value) || is_float($value)) {
$this->value = strval($value);
} else {
return false;
}
}
if ($this->maxLength > 0 && strlen($value) > $this->maxLength) {

View File

@@ -129,6 +129,8 @@ abstract class Request {
}
protected abstract function _execute(): bool;
// TODO: replace this function with two abstract methods: getDefaultPermittedGroups and getDescription
public static function getDefaultACL(Insert $insert): void { }
protected function check2FA(?TwoFactorToken $tfaToken = null): bool {

View File

@@ -13,6 +13,7 @@ namespace Core\API {
namespace Core\API\Settings {
use Core\API\Parameter\ArrayType;
use Core\API\Parameter\Parameter;
use Core\API\Parameter\StringType;
use Core\API\SettingsAPI;
@@ -20,8 +21,6 @@ namespace Core\API\Settings {
use Core\Driver\SQL\Column\Column;
use Core\Driver\SQL\Condition\CondBool;
use Core\Driver\SQL\Condition\CondIn;
use Core\Driver\SQL\Condition\CondNot;
use Core\Driver\SQL\Condition\CondRegex;
use Core\Driver\SQL\Query\Insert;
use Core\Driver\SQL\Strategy\UpdateStrategy;
use Core\Objects\Context;
@@ -57,7 +56,7 @@ namespace Core\API\Settings {
class Set extends SettingsAPI {
public function __construct(Context $context, bool $externalCall = false) {
parent::__construct($context, $externalCall, array(
'settings' => new Parameter('settings', Parameter::TYPE_ARRAY)
'settings' => new ArrayType("settings", Parameter::TYPE_MIXED)
));
}
@@ -75,13 +74,13 @@ namespace Core\API\Settings {
$keys = array();
$deleteKeys = array();
foreach($values as $key => $value) {
foreach ($values as $key => $value) {
if (!$paramKey->parseParam($key)) {
$key = print_r($key, true);
return $this->createError("Invalid Type for key in parameter settings: '$key' (Required: " . $paramKey->getTypeName() . ")");
} else if(!is_null($value) && !$paramValue->parseParam($value)) {
} else if (!is_null($value) && !$paramValue->parseParam($value)) {
$value = print_r($value, true);
return $this->createError("Invalid Type for value in parameter settings: '$value' (Required: " . $paramValue->getTypeName() . ")");
return $this->createError("Invalid Type for value in parameter settings for key '$key': '$value' (Required: " . $paramValue->getTypeName() . ")");
} else if(preg_match("/^[a-zA-Z_][a-zA-Z_0-9-]*$/", $paramKey->value) !== 1) {
return $this->createError("The property key should only contain alphanumeric characters, underscores and dashes");
} else {
@@ -91,6 +90,8 @@ namespace Core\API\Settings {
$deleteKeys[] = $paramKey->value;
}
$keys[] = $paramKey->value;
$paramKey->reset();
$paramValue->reset();
}
}
@@ -103,7 +104,7 @@ namespace Core\API\Settings {
}
}
if (!empty($deleteKeys) && !$this->deleteKeys($keys)) {
if (!empty($deleteKeys) && !$this->deleteKeys($deleteKeys)) {
return false;
}