From 906a785462f6e4ac27e57377951d43a19a23b84a Mon Sep 17 00:00:00 2001
From: Stein Magne Bjorklund <steinmb@smbjorklund.com>
Date: Mon, 20 Sep 2021 15:18:21 +0200
Subject: [PATCH] fix module loader

---
 classes/LoadModules.php | 22 +++++-----------------
 index.php               | 22 +++++++++++++---------
 2 files changed, 18 insertions(+), 26 deletions(-)

diff --git a/classes/LoadModules.php b/classes/LoadModules.php
index ad96343a..b15ccbd0 100644
--- a/classes/LoadModules.php
+++ b/classes/LoadModules.php
@@ -2,18 +2,8 @@
 
 namespace uib\ub\loadspeakr;
 
-use \uib\ub\loadspeakr\modules;
-use uib\ub\loadspeakr\modules\AdminModule;
-use uib\ub\loadspeakr\modules\ExportModule;
 use uib\ub\loadspeakr\modules\ModuleInterface;
-use uib\ub\loadspeakr\modules\RedirectModule;
-use uib\ub\loadspeakr\modules\ServiceModule;
-use uib\ub\loadspeakr\modules\SessionModule;
-use uib\ub\loadspeakr\modules\SparqlFilterModule;
-use uib\ub\loadspeakr\modules\StaticModule;
-use uib\ub\loadspeakr\modules\TypeModule;
 use uib\ub\loadspeakr\modules\UnknownModule;
-use uib\ub\loadspeakr\modules\UriModule;
 
 final class LoadModules
 {
@@ -26,12 +16,10 @@ final class LoadModules
 
   public function loadModule(string $uri): ModuleInterface
   {
-
-      $module = ucfirst($uri) . 'Module';
-      $className =  $this->loadClass($module);
+      $className =  $this->loadClass($uri);
       $unknown = new UnknownModule();
 
-      switch ($className) {
+      switch ($uri) {
           case 'admin':
               return new $className();
           case 'redirect':
@@ -60,13 +48,13 @@ final class LoadModules
     private function loadClass($module): string
     {
         if (!$this->moduleAvailable($module)) {
-            return '';
+            HTTPStatus::send500('Module: ' . $module . ' not found.');
         }
 
         $className = ucfirst($module) . 'Module';
 
-        if (class_exists($className)) {
-            return $className;
+        if (file_exists(__DIR__ . '/modules/' . $className . '.php')) {
+            return __NAMESPACE__ . '\\modules\\' . $className;
         }
 
         return '';
diff --git a/index.php b/index.php
index 5e83b129..abc16855 100644
--- a/index.php
+++ b/index.php
@@ -71,17 +71,21 @@ $uri = Utils::getMirroredUri($localUri);
  */
 foreach ($conf['modules']['available'] as $loadspkrModule) {
     $loader = new LoadModules($conf);
-    $module = $loader->loadModule($uri);
+    $module = $loader->loadModule($loadspkrModule);
     $matching = $module->match($uri);
 
-    if (!$matching) {
-        HTTPStatus::send404($uri);
-    }
-
-    $module->execute($matching);
+    if ($matching) {
+        $module->execute($matching);
+        if ($conf['logfile'] !== null) {
+            fwrite($conf['logfile'], "]}");
+            fclose($conf['logfile']);
+        }
 
-    if ($conf['logfile'] !== null) {
-        fwrite($conf['logfile'], "]}");
-        fclose($conf['logfile']);
+        /**
+         * Only run first Loadspeakr modules that matches.
+         */
+        exit(0);
     }
 }
+
+HTTPStatus::send404($uri);
-- 
GitLab