diff --git a/lib/DAV/LockPlugin.php b/lib/DAV/LockPlugin.php index 4fdcd751..09f72c77 100644 --- a/lib/DAV/LockPlugin.php +++ b/lib/DAV/LockPlugin.php @@ -139,7 +139,7 @@ public function customProperties(PropFind $propFind, INode $node) { return null; } - return $lock->getTimeout(); + return $lock->getETA() === FileLock::ETA_INFINITE ? null : $lock->getTimeout(); }); $propFind->handle(Application::DAV_PROPERTY_LOCK_OWNER_DISPLAYNAME, function () use ($nodeId, $node) { @@ -278,7 +278,7 @@ private function getLockProperties(?FileLock $lock, Node $file): array { Application::DAV_PROPERTY_LOCK_OWNER_DISPLAYNAME => $lock ? $lock->getDisplayName() : null, Application::DAV_PROPERTY_LOCK_EDITOR => $lock ? $lock->getOwner() : null, Application::DAV_PROPERTY_LOCK_TIME => $lock ? $lock->getCreatedAt() : null, - Application::DAV_PROPERTY_LOCK_TIMEOUT => $lock ? $lock->getTimeout() : null, + Application::DAV_PROPERTY_LOCK_TIMEOUT => $lock && $lock->getETA() !== FileLock::ETA_INFINITE ? $lock->getTimeout() : null, Application::DAV_PROPERTY_LOCK_TOKEN => $lock ? $lock->getToken() : null, ]; } diff --git a/tests/Feature/LockFeatureTest.php b/tests/Feature/LockFeatureTest.php index 0ce84474..c2e2b229 100644 --- a/tests/Feature/LockFeatureTest.php +++ b/tests/Feature/LockFeatureTest.php @@ -387,6 +387,21 @@ public function testExtendLock() { $this->assertEquals($id, $locks[0]->getId()); } + /** + * Default config (LOCK_TIMEOUT = -1) must produce ETA_INFINITE, not a negative timestamp. + * Regression: getTimeout() returned -60 which clients interpreted as a past expiry. + */ + public function testDefaultInfiniteTimeoutProducesEtaInfinite() { + \OCP\Server::get(IConfig::class)->setAppValue(Application::APP_ID, ConfigService::LOCK_TIMEOUT, '-1'); + + $file = $this->loginAndGetUserFolder(self::TEST_USER1)->newFile('test-file', 'AAA'); + $this->lockManager->lock(new LockContext($file, ILock::TYPE_USER, self::TEST_USER1)); + $locks = $this->lockManager->getLocks($file->getId()); + + $this->assertCount(1, $locks); + $this->assertEquals(FileLock::ETA_INFINITE, $locks[0]->getEta()); + } + /** * Regression test for https://github.com/nextcloud/files_lock/issues/130 */