. /** * Check API manager * * @package core * @category check * @copyright 2020 Brendan Heywood * @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 * @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 // _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->set_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 // _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\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 // _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; } }