From 4c9e6a687162729f96a2de428aa19058c04efe2b Mon Sep 17 00:00:00 2001
From: Chris Moultrie <tebriel@frodux.in>
Date: Sat, 7 Mar 2026 10:51:40 -0500
Subject: [PATCH 1/2] Define configs with env vars

---
 app.php                           | 8 ++++----
 controllers/BaseApiController.php | 2 +-
 services/DatabaseService.php      | 2 +-
 services/FilesService.php         | 2 +-
 services/StockService.php         | 2 +-
 5 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/app.php b/app.php
index 9224796a..da5c2357 100644
--- a/app.php
+++ b/app.php
@@ -12,7 +12,7 @@ use Slim\Factory\AppFactory;
 require_once __DIR__ . '/packages/autoload.php';
 
 // Load config files
-require_once GROCY_DATAPATH . '/config.php';
+require_once getenv('GROCY_CONFIG_FILE');
 require_once __DIR__ . '/config-dist.php'; // For not in own config defined values we use the default ones
 
 // Error reporting definitions
@@ -51,7 +51,7 @@ catch (\Grocy\Helpers\EInvalidConfig $ex)
 }
 
 // Create data/viewcache folder if it doesn't exist
-$viewcachePath = GROCY_DATAPATH . '/viewcache';
+$viewcachePath = getenv('GROCY_CACHE_DIR');
 if (!file_exists($viewcachePath))
 {
 	mkdir($viewcachePath);
@@ -84,7 +84,7 @@ $app = AppFactory::create();
 $container = $app->getContainer();
 $container->set('view', function (Container $container)
 {
-	return new SlimBladeView(__DIR__ . '/views', GROCY_DATAPATH . '/viewcache');
+	return new SlimBladeView(__DIR__ . '/views', getenv('GROCY_CACHE_DIR'));
 });
 
 $container->set('UrlManager', function (Container $container)
@@ -126,7 +126,7 @@ $errorMiddleware->setDefaultErrorHandler(
 
 $app->add(new CorsMiddleware($app->getResponseFactory()));
 
-$app->getRouteCollector()->setCacheFile(GROCY_DATAPATH . '/viewcache/route_cache.php');
+$app->getRouteCollector()->setCacheFile(getenv('GROCY_CACHE_DIR') . '/route_cache.php');
 
 ob_clean(); // No response output before here
 $app->run();
diff --git a/controllers/BaseApiController.php b/controllers/BaseApiController.php
index 5941e348..9283ba93 100644
--- a/controllers/BaseApiController.php
+++ b/controllers/BaseApiController.php
@@ -162,7 +162,7 @@ class BaseApiController extends BaseController
 		if (self::$htmlPurifierInstance == null)
 		{
 			$htmlPurifierConfig = \HTMLPurifier_Config::createDefault();
-			$htmlPurifierConfig->set('Cache.SerializerPath', GROCY_DATAPATH . '/viewcache');
+			$htmlPurifierConfig->set('Cache.SerializerPath', getenv('GROCY_CACHE_DIR'));
 			$htmlPurifierConfig->set('HTML.Allowed', 'div,b,strong,i,em,u,a[href|title|target],iframe[src|width|height|frameborder],ul,ol,li,p[style],br,span[style],img[style|width|height|alt|src],table[border|width|style],tbody,tr,td,th,blockquote,*[style|class|id],h1,h2,h3,h4,h5,h6');
 			$htmlPurifierConfig->set('Attr.EnableID', true);
 			$htmlPurifierConfig->set('HTML.SafeIframe', true);
diff --git a/services/DatabaseService.php b/services/DatabaseService.php
index 0b6672fb..94bb9412 100644
--- a/services/DatabaseService.php
+++ b/services/DatabaseService.php
@@ -145,6 +145,6 @@ class DatabaseService
 			return GROCY_DATAPATH . '/grocy_' . $dbSuffix . '.db';
 		}
 
-		return GROCY_DATAPATH . '/grocy.db';
+		return getenv('GROCY_DB_FILE');
 	}
 }
diff --git a/services/FilesService.php b/services/FilesService.php
index 113a6478..61568bc6 100644
--- a/services/FilesService.php
+++ b/services/FilesService.php
@@ -10,7 +10,7 @@ class FilesService extends BaseService
 
 	public function __construct()
 	{
-		$this->StoragePath = GROCY_DATAPATH . '/storage';
+		$this->StoragePath = getenv('GROCY_STORAGE_DIR');
 		if (!file_exists($this->StoragePath))
 		{
 			mkdir($this->StoragePath);
diff --git a/services/StockService.php b/services/StockService.php
index da27dacc..ffe714ec 100644
--- a/services/StockService.php
+++ b/services/StockService.php
@@ -1784,7 +1784,7 @@ class StockService extends BaseService
 
 		// User plugins take precedence
 		$standardPluginPath = __DIR__ . "/../plugins/$pluginName.php";
-		$userPluginPath = GROCY_DATAPATH . "/plugins/$pluginName.php";
+ 		$userPluginPath = getenv('GROCY_PLUGIN_DIR') . "/$pluginName.php";
 		if (file_exists($userPluginPath))
 		{
 			require_once $userPluginPath;
-- 
2.51.2

