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;
}

View File

@@ -1,7 +1,7 @@
<?php
return [
"settings" => "Einstellungen",
"title" => "Einstellungen",
"information" => "Informationen",
# API Key
@@ -21,5 +21,40 @@ return [
"Unter Android kannst du den Google Authenticator benutzen.",
"register_2fa_fido_text" => "Möglicherweise musst du mit dem Gerät interagieren, zum Beispiel durch Eingeben einer PIN oder durch Berühren des Geräts",
"remove_2fa" => "2FA-Token entfernen",
"remove_2fa_text" => "Gib dein aktuelles Passwort ein um das Entfernen des 2FA-Tokens zu bestätigen"
"remove_2fa_text" => "Gib dein aktuelles Passwort ein um das Entfernen des 2FA-Tokens zu bestätigen",
# settings
"key" => "Schlüssel",
"value" => "Wert",
"general" => "Allgemein",
"mail" => "Mail",
"recaptcha" => "reCaptcha",
"uncategorized" => "Unkategorisiert",
"unchanged" => "Unverändert",
# general settings
"site_name" => "Seitenname",
"base_url" => "Basis URL",
"user_registration_enabled" => "Benutzerregistrierung erlauben",
"allowed_extensions" => "Erlaubte Dateierweiterungen",
"time_zone" => "Zeitzone",
# mail settings
"mail_enabled" => "E-Mail Versand aktiviert",
"mail_from" => "Absender E-Mailadresse",
"mail_host" => "Mail-Server Host",
"mail_port" => "Mail-Server Port",
"mail_username" => "Mail-Server Benutzername",
"mail_password" => "Mail-Server Passwort",
"mail_footer" => "Pfad zum E-Mail-Footer",
# recaptcha
"recaptcha_enabled" => "Aktiviere Google reCaptcha",
"recaptcha_public_key" => "reCaptcha öffentlicher Schlüssel",
"recaptcha_private_key" => "reCaptcha privater Schlüssel",
# dialog
"fetch_settings_error" => "Fehler beim Holen der Einstellungen",
"save_settings_success" => "Einstellungen erfolgreich gespeichert",
"save_settings_error" => "Fehler beim Speichern der Einstellungen",
];

View File

@@ -1,7 +1,7 @@
<?php
return [
"settings" => "Settings",
"title" => "Settings",
"information" => "Information",
# API Key
@@ -22,4 +22,39 @@ return [
"register_2fa_fido_text" => "You may need to interact with your Device, e.g. typing in your PIN or touching to confirm the registration.",
"remove_2fa" => "Remove 2FA Token",
"remove_2fa_text" => "Enter your current password to confirm the removal of your 2FA Token",
# settings
"key" => "Key",
"value" => "Value",
"general" => "General",
"mail" => "Mail",
"recaptcha" => "reCaptcha",
"uncategorized" => "Uncategorized",
"unchanged" => "Unchanged",
# general settings
"site_name" => "Site Name",
"base_url" => "Base URL",
"user_registration_enabled" => "Allow user registration",
"allowed_extensions" => "Allowed file extensions",
"time_zone" => "Time zone",
# mail settings
"mail_enabled" => "Enable e-mail transport",
"mail_from" => "Sender e-mail address",
"mail_host" => "Mail server host",
"mail_port" => "Mail server port",
"mail_username" => "Mail server username",
"mail_password" => "Mail server password",
"mail_footer" => "Path to e-mail footer",
# recaptcha
"recaptcha_enabled" => "Enable Google reCaptcha",
"recaptcha_public_key" => "reCaptcha Public Key",
"recaptcha_private_key" => "reCaptcha Private Key",
# dialog
"fetch_settings_error" => "Error fetching settings",
"save_settings_success" => "Settings saved successfully",
"save_settings_error" => "Error saving settings",
];