Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feature: Added web validation (#7474)
* refactor: convert validations to modules to prep for gui integration * accidentally dropped, schema update * fix accidental output to webui * mention discovery-wrapper.py and re-arrange. * refine some fix statements * rename the Config validation group to Configuration. * fix some scrutinizer issues remove as many local functions from validator.php as possible move extensions from pre-check remove duplicate timezone check looks like there is some db schema differences between mariadb 10.1 and 10.2, investigating * mariadb version diff take2 * Check schema version first for database. Remove stop to go back to command line for install docs. Add helpful link when there is no devices added to /addhost * fix incorrect validation for empty string defaults * Fix style * Add additional file permissions checks * catch exception and fail for invalid timezone Change visuals a bit. * add php version warning * fix space
- Loading branch information
Showing
36 changed files
with
3,278 additions
and
1,665 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
<?php | ||
/** | ||
* ValidationGroup.php | ||
* | ||
* An interface for validation groups, this will be run by Validator. | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
* | ||
* @package LibreNMS | ||
* @link http://librenms.org | ||
* @copyright 2017 Tony Murray | ||
* @author Tony Murray <murraytony@gmail.com> | ||
*/ | ||
|
||
namespace LibreNMS\Interfaces; | ||
|
||
use LibreNMS\Validator; | ||
|
||
interface ValidationGroup | ||
{ | ||
/** | ||
* Validate this module. | ||
* To return ValidationResults, call ok, warn, fail, or result methods on the $validator | ||
* | ||
* @param Validator $validator | ||
*/ | ||
public function validate(Validator $validator); | ||
|
||
/** | ||
* Returns if this test should be run by default or not. | ||
* | ||
* @return bool | ||
*/ | ||
public function isDefault(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,198 @@ | ||
<?php | ||
/** | ||
* ValidationResult.php | ||
* | ||
* Encapsulates the result of a validation test. | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
* | ||
* @package LibreNMS | ||
* @link http://librenms.org | ||
* @copyright 2017 Tony Murray | ||
* @author Tony Murray <murraytony@gmail.com> | ||
*/ | ||
|
||
namespace LibreNMS; | ||
|
||
class ValidationResult | ||
{ | ||
const FAILURE = 0; | ||
const WARNING = 1; | ||
const SUCCESS = 2; | ||
|
||
private $message; | ||
private $status; | ||
private $list_description = ''; | ||
private $list; | ||
private $fix; | ||
|
||
/** | ||
* ValidationResult constructor. | ||
* @param string $message The message to describe this result | ||
* @param int $status The status of this result FAILURE, WARNING, or SUCCESS | ||
* @param string $fix a suggested fix to highlight for the user | ||
*/ | ||
public function __construct($message, $status, $fix = null) | ||
{ | ||
$this->message = $message; | ||
$this->status = $status; | ||
$this->fix = $fix; | ||
} | ||
|
||
/** | ||
* Create a new ok Validation result | ||
* @param string $message The message to describe this result | ||
* @param string $fix a suggested fix to highlight for the user | ||
* @return ValidationResult | ||
*/ | ||
public static function ok($message, $fix = null) | ||
{ | ||
return new self($message, self::SUCCESS, $fix); | ||
} | ||
|
||
/** | ||
* Create a new warning Validation result | ||
* @param string $message The message to describe this result | ||
* @param string $fix a suggested fix to highlight for the user | ||
* @return ValidationResult | ||
*/ | ||
public static function warn($message, $fix = null) | ||
{ | ||
return new self($message, self::WARNING, $fix); | ||
} | ||
|
||
/** | ||
* Create a new failure Validation result | ||
* @param string $message The message to describe this result | ||
* @param string $fix a suggested fix to highlight for the user | ||
* @return ValidationResult | ||
*/ | ||
public static function fail($message, $fix = null) | ||
{ | ||
return new self($message, self::FAILURE, $fix); | ||
} | ||
|
||
/** | ||
* Returns the status an int representing | ||
* ValidationResult::FAILURE, ValidationResult::WARNING, or ValidationResult::SUCCESS | ||
* | ||
* @return int | ||
*/ | ||
public function getStatus() | ||
{ | ||
return $this->status; | ||
} | ||
|
||
public function getMessage() | ||
{ | ||
return $this->message; | ||
} | ||
|
||
public function hasList() | ||
{ | ||
return !empty($this->list); | ||
} | ||
|
||
public function getList() | ||
{ | ||
return $this->list; | ||
} | ||
|
||
public function setList($description, array $list) | ||
{ | ||
$this->list_description = $description; | ||
$this->list = $list; | ||
return $this; | ||
} | ||
|
||
public function hasFix() | ||
{ | ||
return !empty($this->fix); | ||
} | ||
|
||
public function getFix() | ||
{ | ||
return $this->fix; | ||
} | ||
|
||
public function setFix($fix) | ||
{ | ||
$this->fix = $fix; | ||
return $this; | ||
} | ||
|
||
/** | ||
* Print out this result to the console. Formatted nicely and with color. | ||
*/ | ||
public function consolePrint() | ||
{ | ||
c_echo(str_pad('[' . $this->getStatusText($this->status) . ']', 12) . $this->message . PHP_EOL); | ||
|
||
if (isset($this->fix)) { | ||
c_echo("\t[%BFIX%n] %B$this->fix%n\n"); | ||
} | ||
|
||
if (!empty($this->list)) { | ||
echo "\t" . $this->getListDescription() . ":\n"; | ||
$this->printList(); | ||
} | ||
} | ||
|
||
/** | ||
* Get the colorized string that represents the status of a ValidatonResult | ||
* | ||
* @return string | ||
*/ | ||
public static function getStatusText($status) | ||
{ | ||
if ($status === self::SUCCESS) { | ||
return '%gOK%n'; | ||
} elseif ($status === self::WARNING) { | ||
return '%YWARN%n'; | ||
} elseif ($status === self::FAILURE) { | ||
return '%RFAIL%n'; | ||
} | ||
return 'Unknown'; | ||
} | ||
|
||
public function getListDescription() | ||
{ | ||
return $this->list_description; | ||
} | ||
|
||
/** | ||
* Print a list of items up to a max amount | ||
* If over that number, a line will print the total items | ||
* | ||
* @param string $format format as consumed by printf() | ||
* @param int $max the max amount of items to print, default 15 | ||
*/ | ||
private function printList($format = "\t %s\n", $max = 15) | ||
{ | ||
if (is_array(current($this->list))) { | ||
$this->list = array_map(function ($item) { | ||
return implode(' ', $item); | ||
}, $this->list); | ||
} | ||
|
||
foreach (array_slice($this->list, 0, $max) as $item) { | ||
printf($format, $item); | ||
} | ||
|
||
$extra = count($this->list) - $max; | ||
if ($extra > 0) { | ||
printf($format, " and $extra more..."); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
<?php | ||
/** | ||
* Configuration.php | ||
* | ||
* Checks various config settings are correct. | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
* | ||
* @package LibreNMS | ||
* @link http://librenms.org | ||
* @copyright 2017 Tony Murray | ||
* @author Tony Murray <murraytony@gmail.com> | ||
*/ | ||
|
||
namespace LibreNMS\Validations; | ||
|
||
use LibreNMS\Config; | ||
use LibreNMS\Interfaces\ValidationGroup; | ||
use LibreNMS\Validator; | ||
|
||
class Configuration implements ValidationGroup | ||
{ | ||
/** | ||
* Validate this module. | ||
* To return ValidationResults, call ok, warn, fail, or result methods on the $validator | ||
* | ||
* @param Validator $validator | ||
*/ | ||
public function validate(Validator $validator) | ||
{ | ||
// Test transports | ||
if (Config::get('alerts.email.enable') == true) { | ||
$validator->warn('You have the old alerting system enabled - this is to be deprecated on the 1st of June 2015: https://groups.google.com/forum/#!topic/librenms-project/1llxos4m0p4'); | ||
} | ||
} | ||
|
||
/** | ||
* Returns if this test should be run by default or not. | ||
* | ||
* @return bool | ||
*/ | ||
public function isDefault() | ||
{ | ||
return true; | ||
} | ||
} |
Oops, something went wrong.