Files
moodle/lib/classes/check/manager.php
T
Kevin Pham 0b997f63e3 MDL-71627 check: Add AV status, notification levels and more logging
- `notifylevel` will change what gets sent as part of the antivirus
  notification emails based on the scan type. For example if set on
  SCAN_RESULT_FOUND, it will not notify for any detections, if set to
  SCAN_RESULT_ERROR, it will notify for both detections and errors.
- `threshold` will determine how far the lookback is when displaying the
  status of the /reports/status (System Status) page. It will display as
  an ERROR state if there has been scanner issues within this certain
  threshold period
- As part of the above, scanner errors will now trigger a new event
  which will be logged as antivirus_scan_data_error or
  antivirus_scan_file_error. Due to the nature of it reading from the
  logs table, it only works currently for the "Standard logging"
  logstore.
2021-08-11 11:46:15 +10:00

160 lines
5.2 KiB
PHP

<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle 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.
//
// Moodle 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 Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Check API manager
*
* @package core
* @category check
* @copyright 2020 Brendan Heywood <brendan@catalyst-au.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core\check;
defined('MOODLE_INTERNAL') || die();
/**
* Check API manager
*
* @package core
* @category check
* @copyright 2020 Brendan Heywood <brendan@catalyst-au.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class manager {
/**
* The list of valid check types
*/
public const TYPES = ['status', 'security', 'performance'];
/**
* Return all status checks
*
* @param string $type of checks to fetch
* @return array of check objects
*/
public static function get_checks(string $type): array {
if (!in_array($type, self::TYPES)) {
throw new \moodle_exception("Invalid check type '$type'");
}
$method = 'get_' . $type . '_checks';
$checks = self::$method();
return $checks;
}
/**
* Return all performance checks
*
* @return array of check objects
*/
static public function get_performance_checks() : array {
$checks = [
new performance\designermode(),
new performance\cachejs(),
new performance\debugging(),
new performance\backups(),
new performance\stats(),
new performance\dbschema(),
];
// Any plugin can add status checks to this report by implementing a callback
// <component>_status_checks() which returns a check object.
$morechecks = get_plugins_with_function('performance_checks', 'lib.php');
foreach ($morechecks as $plugintype => $plugins) {
foreach ($plugins as $plugin => $pluginfunction) {
$result = $pluginfunction();
foreach ($result as $check) {
$check->component = $plugintype . '_' . $plugin;
$checks[] = $check;
}
}
}
return $checks;
}
/**
* Return all status checks
*
* @return array of check objects
*/
public static function get_status_checks(): array {
$checks = [
new environment\environment(),
new environment\upgradecheck(),
new environment\antivirus(),
];
// Any plugin can add status checks to this report by implementing a callback
// <component>_status_checks() which returns a check object.
$morechecks = get_plugins_with_function('status_checks', 'lib.php');
foreach ($morechecks as $plugintype => $plugins) {
foreach ($plugins as $plugin => $pluginfunction) {
$result = $pluginfunction();
foreach ($result as $check) {
$check->set_component($plugintype . '_' . $plugin);
$checks[] = $check;
}
}
}
return $checks;
}
/**
* Return all security checks
*
* @return array of check objects
*/
public static function get_security_checks(): array {
$checks = [
new environment\displayerrors(),
new environment\unsecuredataroot(),
new environment\publicpaths(),
new environment\configrw(),
new environment\preventexecpath(),
new security\mediafilterswf(),
new security\embed(),
new security\openprofiles(),
new security\crawlers(),
new security\passwordpolicy(),
new security\emailchangeconfirmation(),
new security\webcron(),
new http\cookiesecure(),
new access\riskadmin(),
new access\riskxss(),
new access\riskbackup(),
new access\defaultuserrole(),
new access\guestrole(),
new access\frontpagerole(),
];
// Any plugin can add security checks to this report by implementing a callback
// <component>_security_checks() which returns a check object.
$morechecks = get_plugins_with_function('security_checks', 'lib.php');
foreach ($morechecks as $plugintype => $plugins) {
foreach ($plugins as $plugin => $pluginfunction) {
$result = $pluginfunction();
foreach ($result as $check) {
$check->set_component($plugintype . '_' . $plugin);
$checks[] = $check;
}
}
}
return $checks;
}
}