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
This commit is contained in:
Tony Murray
2017-10-26 01:56:09 -05:00
committed by Neil Lathwood
parent 383557f628
commit 51ba934e11
36 changed files with 3279 additions and 1666 deletions

View File

@@ -0,0 +1,92 @@
<?php
/**
* Mail.php
*
* -Description-
*
* 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 Mail 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)
{
if (Config::get('alert.transports.mail') === true) {
$run_test = 1;
if (!Config::has('alert.default_mail')) {
$validator->fail('default_mail config option needs to be specified to test email');
$run_test = 0;
} elseif (Config::get('email_backend') == 'sendmail') {
if (Config::has('email_sendmail_path')) {
$validator->fail("You have selected sendmail but not configured email_sendmail_path");
$run_test = 0;
} elseif (!file_exists(Config::get('email_sendmail_path'))) {
$validator->fail("The configured email_sendmail_path is not valid");
$run_test = 0;
}
} elseif (Config::get('email_backend') == 'smtp') {
if (!Config::has('email_smtp_host')) {
$validator->fail('You have selected SMTP but not configured an SMTP host');
$run_test = 0;
}
if (!Config::has('email_smtp_port')) {
$validator->fail('You have selected SMTP but not configured an SMTP port');
$run_test = 0;
}
if (Config::get('email_smtp_auth')
&& (!Config::has('email_smtp_username') || !Config::has('email_smtp_password'))
) {
$validator->fail('You have selected SMTP auth but have not configured both username and password');
$run_test = 0;
}
}//end if
if ($run_test == 1) {
$email = Config::get('alert.default_mail');
if ($err = send_mail($email, 'Test email', 'Testing email from NMS')) {
$validator->ok('Email has been sent');
} else {
$validator->fail("Issue sending email to $email with error $err");
}
}
}//end if
}
/**
* Returns if this test should be run by default or not.
*
* @return bool
*/
public function isDefault()
{
return false;
}
}