diff --git a/changelog/61_UNRELEASED_xxxx-xx-xx.md b/changelog/61_UNRELEASED_xxxx-xx-xx.md index 77f84162..f9c088e8 100644 --- a/changelog/61_UNRELEASED_xxxx-xx-xx.md +++ b/changelog/61_UNRELEASED_xxxx-xx-xx.md @@ -6,6 +6,7 @@ - Improved the prerequisites checker (added missing required PHP extension `ctype`) (thanks @Forceu) - Added validation checks for most `data/config.php` settings to prevent using invalid ones (thanks @Forceu) +- When using reverse proxy authentication (`ReverseProxyAuthMiddleware`), _additionally_ a valid key can now also be used for authentication (if you don't want to protect the API endpoints via your reverse proxy, however) - Fixed that some number inputs were broken when the new decimal places setting were set to `0` - Fixed that browser camera barcode scanning did not work on the product edit page for adding product barcodes - Fixed that indirect unit conversions (those between units, not product overrides) could not be used/selected diff --git a/middleware/LdapAuthMiddleware.php b/middleware/LdapAuthMiddleware.php index f1495d5c..019d5040 100644 --- a/middleware/LdapAuthMiddleware.php +++ b/middleware/LdapAuthMiddleware.php @@ -16,7 +16,6 @@ class LdapAuthMiddleware extends AuthMiddleware // First try to authenticate by API key $auth = new ApiKeyAuthMiddleware($this->AppContainer, $this->ResponseFactory); $user = $auth->authenticate($request); - if ($user !== null) { return $user; diff --git a/middleware/ReverseProxyAuthMiddleware.php b/middleware/ReverseProxyAuthMiddleware.php index 190da80c..2135fe4e 100644 --- a/middleware/ReverseProxyAuthMiddleware.php +++ b/middleware/ReverseProxyAuthMiddleware.php @@ -10,25 +10,30 @@ class ReverseProxyAuthMiddleware extends AuthMiddleware { public function authenticate(Request $request) { + $db = DatabaseService::getInstance()->GetDbConnection(); + if (!defined('GROCY_SHOW_AUTH_VIEWS')) { define('GROCY_SHOW_AUTH_VIEWS', false); } - $db = DatabaseService::getInstance()->GetDbConnection(); + // API key authentication is also ok + $auth = new ApiKeyAuthMiddleware($this->AppContainer, $this->ResponseFactory); + $user = $auth->authenticate($request); + if ($user !== null) + { + return $user; + } $username = $request->getHeader(GROCY_REVERSE_PROXY_AUTH_HEADER); - if (count($username) !== 1) { // Invalid configuration of Proxy throw new \Exception('ReverseProxyAuthMiddleware: Invalid username from proxy: ' . var_dump($username)); } - $username = $username[0]; $user = $db->users()->where('username', $username)->fetch(); - if ($user == null) { $user = UsersService::getInstance()->CreateUser($username, '', '', '');