diff --git a/app/Console/Command/AdminShell.php b/app/Console/Command/AdminShell.php index c2866284c..d520c5de0 100644 --- a/app/Console/Command/AdminShell.php +++ b/app/Console/Command/AdminShell.php @@ -22,12 +22,18 @@ class AdminShell extends AppShell 'value' => ['help' => __('Setting value'), 'required' => true], ], 'options' => [ - 'force' => array( + 'force' => [ 'short' => 'f', 'help' => 'Force the command.', 'default' => false, 'boolean' => true - ) + ], + 'null' => [ + 'short' => 'n', + 'help' => 'Set the value to null.', + 'default' => false, + 'boolean' => true + ], ] ], ]); @@ -392,15 +398,17 @@ class AdminShell extends AppShell public function setSetting() { - $setting_name = !isset($this->args[0]) ? null : $this->args[0]; - $value = !isset($this->args[1]) ? null : $this->args[1]; + list($setting_name, $value) = $this->args; if ($value === 'false') { $value = 0; } elseif ($value === 'true') { $value = 1; } + if ($this->params['null']) { + $value = null; + } $cli_user = array('id' => 0, 'email' => 'SYSTEM', 'Organisation' => array('name' => 'SYSTEM')); - if (empty($setting_name) || $value === null) { + if (empty($setting_name) || ($value === null && !$this->params['null'])) { die('Usage: ' . $this->Server->command_line_functions['console_admin_tasks']['data']['Set setting'] . PHP_EOL); } $setting = $this->Server->getSettingData($setting_name); @@ -410,7 +418,7 @@ class AdminShell extends AppShell } $result = $this->Server->serverSettingsEditValue($cli_user, $setting, $value, $this->params['force']); if ($result === true) { - echo 'Setting "' . $setting_name . '" changed to ' . $value . PHP_EOL; + $this->out(__('Setting "%s" changed to %s', $setting_name, is_string($value) ? '"' . $value . '"' : (string)$value)); } else { $message = __("The setting change was rejected. MISP considers the requested setting value as invalid and would lead to the following error:\n\n\"%s\"\n\nIf you still want to force this change, please supply the --force argument.\n", $result); $this->error(__('Setting change rejected.'), $message); diff --git a/app/Model/Server.php b/app/Model/Server.php index 36435f14c..8a47b3d88 100644 --- a/app/Model/Server.php +++ b/app/Model/Server.php @@ -2147,21 +2147,28 @@ class Server extends AppModel return $beforeResult; } } - $value = trim($value); - if ($setting['type'] === 'boolean') { - $value = (bool)$value; - } else if ($setting['type'] === 'numeric') { - $value = (int)($value); - } - if (isset($setting['test'])) { - if ($setting['test'] instanceof Closure) { - $testResult = $setting['test']($value); - } else { - $testResult = $this->{$setting['test']}($value); + if ($value !== null) { + $value = trim($value); + if ($setting['type'] === 'boolean') { + $value = (bool)$value; + } else if ($setting['type'] === 'numeric') { + $value = (int)($value); } + if (isset($setting['test'])) { + if ($setting['test'] instanceof Closure) { + $testResult = $setting['test']($value); + } else { + $testResult = $this->{$setting['test']}($value); + } + } else { + $testResult = true; # No test defined for this setting: cannot fail + } + } else if (isset($setting['null']) && $setting['null']) { + $testResult = true; } else { - $testResult = true; # No test defined for this setting: cannot fail + $testResult = __('Value could not be null.'); } + if (!$forceSave && $testResult !== true) { if ($testResult === false) { $errorMessage = $setting['errorMessage'];