Closed igh-ab closed 1 year ago
This seems to be an issue with the PHP 7.4 backwards compatibility.
Can you try applying this patch:
Subject: [PATCH] [#601] PHP Language Level Fix
---
Index: src/lib/.overrides/nc25/Middleware/ApiSessionMiddleware.php
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/lib/.overrides/nc25/Middleware/ApiSessionMiddleware.php b/src/lib/.overrides/nc25/Middleware/ApiSessionMiddleware.php
--- a/src/lib/.overrides/nc25/Middleware/ApiSessionMiddleware.php (revision 715935b9bd90636415b3b68066fc21faa38fbdc2)
+++ b/src/lib/.overrides/nc25/Middleware/ApiSessionMiddleware.php (date 1690821462113)
@@ -28,16 +28,24 @@
*/
class ApiSessionMiddleware extends Middleware {
+ /**
+ * @var SessionService
+ */
+ protected SessionService $sessionService;
+ /**
+ * @var UserChallengeService
+ */
+ protected UserChallengeService $challengeService;
/**
* ApiSessionMiddleware constructor.
*
* @param SessionService $sessionService
* @param UserChallengeService $challengeService
*/
- public function __construct(
- protected SessionService $sessionService,
- protected UserChallengeService $challengeService
- ) {
+ public function __construct(SessionService $sessionService, UserChallengeService $challengeService)
+ {
+ $this->sessionService = $sessionService;
+ $this->challengeService = $challengeService;
}
/**
Or just simply replace the contents of the file lib/.overrides/nc25/Middleware/ApiSessionMiddleware.php
in the folder of the passwords app with this:
<?php
/*
* @copyright 2023 Passwords App
*
* @author Marius David Wieschollek
* @license AGPL-3.0
*
* This file is part of the Passwords App
* created by Marius David Wieschollek.
*/
namespace OCA\Passwords\Middleware;
use OCA\Passwords\Controller\Api\ServiceApiController;
use OCA\Passwords\Controller\Api\SessionApiController;
use OCA\Passwords\Controller\Api\SettingsApiController;
use OCA\Passwords\Exception\ApiException;
use OCA\Passwords\Services\SessionService;
use OCA\Passwords\Services\UserChallengeService;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\FileDisplayResponse;
use OCP\AppFramework\Http\Response;
use OCP\AppFramework\Middleware;
/**
* @TODO remove in 2024.1.0
*/
class ApiSessionMiddleware extends Middleware {
/**
* @var SessionService
*/
protected SessionService $sessionService;
/**
* @var UserChallengeService
*/
protected UserChallengeService $challengeService;
/**
* ApiSessionMiddleware constructor.
*
* @param SessionService $sessionService
* @param UserChallengeService $challengeService
*/
public function __construct(SessionService $sessionService, UserChallengeService $challengeService)
{
$this->sessionService = $sessionService;
$this->challengeService = $challengeService;
}
/**
* @param Controller $controller
* @param string $methodName
*
* @throws ApiException
*/
public function beforeController($controller, $methodName): void {
if(!$this->isApiRequest($controller)) return;
$this->sessionService->load();
if(!$this->sessionService->isAuthorized() && $this->requiresAuthorization($controller, $methodName)) {
throw new ApiException('Authorized session required', Http::STATUS_PRECONDITION_FAILED);
}
parent::beforeController($controller, $methodName);
}
/**
* @param Controller $controller
* @param string $methodName
* @param Response $response
*
* @return Response
*/
public function afterController($controller, $methodName, Response $response): Response {
if(!$this->isApiRequest($controller) || $response instanceof FileDisplayResponse) return $response;
$this->sessionService->save();
$sessionId = $this->sessionService->getEncryptedId();
if($sessionId) {
$response->addHeader(SessionService::API_SESSION_HEADER, $sessionId);
$response->addCookie(SessionService::API_SESSION_COOKIE, $sessionId);
}
return parent::afterController($controller, $methodName, $response);
}
/**
* @param Controller $controller
*
* @return bool
*/
protected function isApiRequest(Controller $controller): bool {
$class = get_class($controller);
return substr($class, 0, 28) === 'OCA\Passwords\Controller\Api';
}
/**
* @param Controller $controller
* @param string $method
*
* @return bool
*/
protected function requiresAuthorization(Controller $controller, string $method): bool {
if(!$this->challengeService->hasChallenge()) {
return false;
}
if($controller instanceof SessionApiController && in_array($method, ['open', 'request', 'requestToken', 'keepAlive'])) {
return false;
}
if($controller instanceof ServiceApiController && in_array($method, ['getAvatar', 'getFavicon', 'getPreview'])) {
return false;
}
if($controller instanceof SettingsApiController && in_array($method, ['get', 'list'])) {
return false;
}
return true;
}
}
The patch works. Thanks a lot for the fast feedback.
⚠️ This issue respects the following points: ⚠️
Server Information
Client Information
Browser and Version: Firefox 102.13.0esr Client OS and Version: Debian Bulseye x86 64-Bit
Bug description
Try to acces the password site inside nextcloud causes a server error 500.
Updating the db indeces after update failes with an failure, too.
Seem to be an app registration problem.
Error Message:
php ./occ db:add-missing-indices {"reqId":"jvOxAlX01ulSMkBNzWhB","level":4,"time":"2023-07-31T11:57:46+02:00","remoteAddr":"","user":"--","app":"passwords","method":"","url":"--","message":"Error during app service registration: syntax error, unexpected 'protected' (T_PROTECTED), expecting variable (T_VARIABLE)","userAgent":"--","version":"25.0.9.2","exception":{"Exception":"ParseError","Message":"syntax error, unexpected 'protected' (T_PROTECTED), expecting variable (T_VARIABLE)","Code":0,"Trace":[{"file":"/var/www/html/nextcloud/lib/composer/composer/ClassLoader.php","line":571,"function":"include"},{"file":"/var/www/html/nextcloud/lib/composer/composer/ClassLoader.php","line":428,"function":"Composer\Autoload\includeFile"},{"function":"loadClass","class":"Composer\Autoload\ClassLoader","type":"->"},{"function":"spl_autoload_call"},{"file":"/var/www/html/nextcloud/lib/private/AppFramework/Bootstrap/Coordinator.php","line":126,"function":"class_exists"},{"file":"/var/www/html/nextcloud/lib/private/AppFramework/Bootstrap/Coordinator.php","line":91,"function":"registerApps","class":"OC\AppFramework\Bootstrap\Coordinator","type":"->"},{"file":"/var/www/html/nextcloud/lib/base.php","line":676,"function":"runInitialRegistration","class":"OC\AppFramework\Bootstrap\Coordinator","type":"->"},{"file":"/var/www/html/nextcloud/lib/base.php","line":1150,"function":"init","class":"OC","type":"::"},{"file":"/var/www/html/nextcloud/console.php","line":48,"args":["/var/www/html/nextcloud/lib/base.php"],"function":"require_once"},{"file":"/var/www/html/nextcloud/occ","line":11,"args":["/var/www/html/nextcloud/console.php"],"function":"require_once"}],"File":"/var/www/html/nextcloud/apps/passwords/lib/.overrides/nc25/Middleware/ApiSessionMiddleware.php","Line":38,"message":"Error during app service registration: syntax error, unexpected 'protected' (T_PROTECTED), expecting variable (T_VARIABLE)","exception":{},"CustomMessage":"Error during app service registration: syntax error, unexpected 'protected' (T_PROTECTED), expecting variable (T_VARIABLE)"}} Check indices of the share table. Check indices of the filecache table. Check indices of the twofactor_providers table. Check indices of the login_flow_v2 table. Check indices of the whats_new table. Check indices of the cards table. Check indices of the cards_properties table. Check indices of the calendarobjects_props table. Check indices of the schedulingobjects table. Check indices of the oc_properties table. Check indices of the oc_jobs table. Check indices of the oc_direct_edit table. Check indices of the oc_preferences table. Check indices of the oc_mounts table. Check indices of the oc_systemtag_object_mapping table. Done.
Steps to reproduce
Expected behavior
The passord request site should be presentted
Nextcloud Logs
No response
Browser Logs
No response