Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2013-10-16 23:30:31 +0400
committerThomas Müller <thomas.mueller@tmit.eu>2013-10-16 23:30:31 +0400
commit9628f5245c996951882e9e774520a6db657a434b (patch)
treee19e4c707804b8e4fdce9a70f5e83e6c312011da
parent57ccd50b54a0055422d563ba8297c5e320a4533d (diff)
parent49686dc85c7ccb04625557b9947e66f120646b8f (diff)
Merge pull request #5229 from owncloud/more-link-expiration-stable5
Backport of #4856 to stable5: Fix Sharing "Expiration Date" for Shares of type Link (i.e. Token)
-rw-r--r--lib/public/share.php13
-rw-r--r--tests/lib/share/share.php48
2 files changed, 60 insertions, 1 deletions
diff --git a/lib/public/share.php b/lib/public/share.php
index c9807126742..d7569933458 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -293,7 +293,18 @@ class Share {
if (\OC_DB::isError($result)) {
\OC_Log::write('OCP\Share', \OC_DB::getErrorMessage($result) . ', token=' . $token, \OC_Log::ERROR);
}
- return $result->fetchRow();
+ $row = $result->fetchRow();
+
+ if (!empty($row['expiration'])) {
+ $now = new \DateTime();
+ $expirationDate = new \DateTime($row['expiration'], new \DateTimeZone('UTC'));
+ if ($now > $expirationDate) {
+ self::delete($row['id']);
+ return false;
+ }
+ }
+
+ return $row;
}
/**
diff --git a/tests/lib/share/share.php b/tests/lib/share/share.php
index e02b0e4354d..8e9eef65d32 100644
--- a/tests/lib/share/share.php
+++ b/tests/lib/share/share.php
@@ -535,4 +535,52 @@ class Test_Share extends PHPUnit_Framework_TestCase {
'Failed asserting that user 3 still has access to test.txt after expiration date has been set.'
);
}
+
+ protected function getShareByValidToken($token) {
+ $row = OCP\Share::getShareByToken($token);
+ $this->assertInternalType(
+ 'array',
+ $row,
+ "Failed asserting that a share for token $token exists."
+ );
+ return $row;
+ }
+
+ public function testShareItemWithLink() {
+ OC_User::setUserId($this->user1);
+ $token = OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_LINK, null, OCP\PERMISSION_READ);
+ $this->assertInternalType(
+ 'string',
+ $token,
+ 'Failed asserting that user 1 successfully shared text.txt as link with token.'
+ );
+
+ // testGetShareByTokenNoExpiration
+ $row = $this->getShareByValidToken($token);
+ $this->assertEmpty(
+ $row['expiration'],
+ 'Failed asserting that the returned row does not have an expiration date.'
+ );
+
+ // testGetShareByTokenExpirationValid
+ $this->assertTrue(
+ OCP\Share::setExpirationDate('test', 'test.txt', $this->dateInFuture),
+ 'Failed asserting that user 1 successfully set a future expiration date for the test.txt share.'
+ );
+ $row = $this->getShareByValidToken($token);
+ $this->assertNotEmpty(
+ $row['expiration'],
+ 'Failed asserting that the returned row has an expiration date.'
+ );
+
+ // testGetShareByTokenExpirationExpired
+ $this->assertTrue(
+ OCP\Share::setExpirationDate('test', 'test.txt', $this->dateInPast),
+ 'Failed asserting that user 1 successfully set a past expiration date for the test.txt share.'
+ );
+ $this->assertFalse(
+ OCP\Share::getShareByToken($token),
+ 'Failed asserting that an expired share could not be found.'
+ );
+ }
}