aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/share20/manager.php8
-rw-r--r--tests/lib/share20/managertest.php27
2 files changed, 35 insertions, 0 deletions
diff --git a/lib/private/share20/manager.php b/lib/private/share20/manager.php
index a393cdeb89c..c4fec31fb85 100644
--- a/lib/private/share20/manager.php
+++ b/lib/private/share20/manager.php
@@ -803,6 +803,14 @@ class Manager implements IManager {
$share = $provider->getShareById($id, $recipient);
+ // Validate link shares expiration date
+ if ($share->getShareType() === \OCP\Share::SHARE_TYPE_LINK &&
+ $share->getExpirationDate() !== null &&
+ $share->getExpirationDate() <= new \DateTime()) {
+ $this->deleteShare($share);
+ throw new ShareNotFound();
+ }
+
return $share;
}
diff --git a/tests/lib/share20/managertest.php b/tests/lib/share20/managertest.php
index d93a881a448..55c13f03f8c 100644
--- a/tests/lib/share20/managertest.php
+++ b/tests/lib/share20/managertest.php
@@ -501,6 +501,33 @@ class ManagerTest extends \Test\TestCase {
}
/**
+ * @expectedException \OCP\Share\Exceptions\ShareNotFound
+ */
+ public function testGetExpiredShareById() {
+ $manager = $this->createManagerMock()
+ ->setMethods(['deleteShare'])
+ ->getMock();
+
+ $date = new \DateTime();
+ $date->setTime(0,0,0);
+
+ $share = $this->manager->newShare();
+ $share->setExpirationDate($date)
+ ->setShareType(\OCP\Share::SHARE_TYPE_LINK);
+
+ $this->defaultProvider->expects($this->once())
+ ->method('getShareById')
+ ->with('42')
+ ->willReturn($share);
+
+ $manager->expects($this->once())
+ ->method('deleteShare')
+ ->with($share);
+
+ $manager->getShareById('default:42');
+ }
+
+ /**
* @expectedException InvalidArgumentException
* @expectedExceptionMessage Passwords are enforced for link shares
*/