From 699c5951d965be33b6fcb5dec974a07f02dc0be1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20Schro=CC=88der?= Date: Tue, 12 Aug 2014 16:40:43 +0200 Subject: [PATCH] validate plugin ID and shutdown if it's missing - DEV_MODE needed to keep running without proper ID --- application/core/Plugins/PluginManager.php | 44 +++++++++++++--------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/application/core/Plugins/PluginManager.php b/application/core/Plugins/PluginManager.php index b4d51916..a63ab9bd 100644 --- a/application/core/Plugins/PluginManager.php +++ b/application/core/Plugins/PluginManager.php @@ -9,6 +9,7 @@ use ManiaControl\Files\FileUtil; use ManiaControl\Logger; use ManiaControl\ManiaControl; use ManiaControl\Manialinks\ManialinkPageAnswerListener; +use ManiaControl\Utils\ClassUtil; /** * Class managing Plugins @@ -108,7 +109,7 @@ class PluginManager { * @return bool */ public static function isPluginClass($pluginClass) { - $pluginClass = self::getClass($pluginClass); + $pluginClass = ClassUtil::getClass($pluginClass); if (!class_exists($pluginClass, false)) { return false; } @@ -122,19 +123,6 @@ class PluginManager { return true; } - /** - * Get the Class of the Object - * - * @param mixed $object - * @return string - */ - private static function getClass($object) { - if (is_object($object)) { - return get_class($object); - } - return (string)$object; - } - /** * Deactivate the Plugin with the given Class * @@ -190,9 +178,9 @@ class PluginManager { * @return string */ public static function getPluginClass($pluginClass) { - $pluginClass = self::getClass($pluginClass); + $pluginClass = ClassUtil::getClass($pluginClass); if (!self::isPluginClass($pluginClass)) { - return false; + return null; } return $pluginClass; } @@ -258,9 +246,17 @@ class PluginManager { $newClasses = array_diff($classesAfter, $classesBefore); foreach ($newClasses as $className) { - if (!$this->isPluginClass($className)) { + if (!self::isPluginClass($className)) { continue; } + if (!self::validatePluginClass($className)) { + $message = "The plugin class '{$className}' isn't correctly implemented: You need to return a proper ID by registering it on maniacontrol.com!"; + Logger::logWarning($message); + if (!DEV_MODE) { + $message = 'Fix the plugin or turn on DEV_MODE!'; + $this->maniaControl->quit($message, true); + } + } if (!$this->addPluginClass($className)) { continue; @@ -313,6 +309,20 @@ class PluginManager { } } + /** + * Validate that the given class is a correctly implemented plugin class + * + * @param string $pluginClass + * @return bool + */ + private static function validatePluginClass($pluginClass) { + if (!self::isPluginClass($pluginClass)) { + return false; + } + /** @var Plugin $pluginClass */ + return ($pluginClass::getId() > 0); + } + /** * Add the class to array of loaded plugin classes *