Merge pull request #22192 from owncloud/fix_19685

Only set the default expiration date on share creation
This commit is contained in:
Thomas Müller 2016-02-09 23:38:00 +01:00
commit 29f6f451a9
4 changed files with 51 additions and 7 deletions

View File

@ -261,7 +261,14 @@ class Manager implements IManager {
} }
// If expiredate is empty set a default one if there is a default // If expiredate is empty set a default one if there is a default
if ($expirationDate === null && $this->shareApiLinkDefaultExpireDate()) { $fullId = null;
try {
$fullId = $share->getFullId();
} catch (\UnexpectedValueException $e) {
// This is a new share
}
if ($fullId === null && $expirationDate === null && $this->shareApiLinkDefaultExpireDate()) {
$expirationDate = new \DateTime(); $expirationDate = new \DateTime();
$expirationDate->setTime(0,0,0); $expirationDate->setTime(0,0,0);
$expirationDate->add(new \DateInterval('P'.$this->shareApiLinkDefaultExpireDays().'D')); $expirationDate->add(new \DateInterval('P'.$this->shareApiLinkDefaultExpireDays().'D'));
@ -315,8 +322,12 @@ class Manager implements IManager {
$existingShares = $provider->getSharesByPath($share->getNode()); $existingShares = $provider->getSharesByPath($share->getNode());
foreach($existingShares as $existingShare) { foreach($existingShares as $existingShare) {
// Ignore if it is the same share // Ignore if it is the same share
if ($existingShare->getFullId() === $share->getFullId()) { try {
continue; if ($existingShare->getFullId() === $share->getFullId()) {
continue;
}
} catch (\UnexpectedValueException $e) {
//Shares are not identical
} }
// Identical share already existst // Identical share already existst
@ -360,8 +371,12 @@ class Manager implements IManager {
$provider = $this->factory->getProviderForType(\OCP\Share::SHARE_TYPE_GROUP); $provider = $this->factory->getProviderForType(\OCP\Share::SHARE_TYPE_GROUP);
$existingShares = $provider->getSharesByPath($share->getNode()); $existingShares = $provider->getSharesByPath($share->getNode());
foreach($existingShares as $existingShare) { foreach($existingShares as $existingShare) {
if ($existingShare->getFullId() === $share->getFullId()) { try {
continue; if ($existingShare->getFullId() === $share->getFullId()) {
continue;
}
} catch (\UnexpectedValueException $e) {
//It is a new share so just continue
} }
if ($existingShare->getSharedWith() === $share->getSharedWith()) { if ($existingShare->getSharedWith() === $share->getSharedWith()) {
@ -558,7 +573,11 @@ class Manager implements IManager {
throw new \Exception('The Share API is disabled'); throw new \Exception('The Share API is disabled');
} }
$originalShare = $this->getShareById($share->getFullId()); try {
$originalShare = $this->getShareById($share->getFullId());
} catch (\UnexpectedValueException $e) {
throw new \InvalidArgumentException('Share does not have a full id');
}
// We can't change the share type! // We can't change the share type!
if ($share->getShareType() !== $originalShare->getShareType()) { if ($share->getShareType() !== $originalShare->getShareType()) {
@ -673,10 +692,15 @@ class Manager implements IManager {
* *
* @param \OCP\Share\IShare $share * @param \OCP\Share\IShare $share
* @throws ShareNotFound * @throws ShareNotFound
* @throws \InvalidArgumentException
*/ */
public function deleteShare(\OCP\Share\IShare $share) { public function deleteShare(\OCP\Share\IShare $share) {
// Just to make sure we have all the info // Just to make sure we have all the info
$share = $this->getShareById($share->getFullId()); try {
$share = $this->getShareById($share->getFullId());
} catch (\UnexpectedValueException $e) {
throw new \InvalidArgumentException('Share does not have a full id');
}
$formatHookParams = function(\OCP\Share\IShare $share) { $formatHookParams = function(\OCP\Share\IShare $share) {
// Prepare hook // Prepare hook

View File

@ -90,6 +90,9 @@ class Share implements \OCP\Share\IShare {
* @inheritdoc * @inheritdoc
*/ */
public function getFullId() { public function getFullId() {
if ($this->providerId === null || $this->id === null) {
throw new \UnexpectedValueException;
}
return $this->providerId . ':' . $this->id; return $this->providerId . ':' . $this->id;
} }

View File

@ -48,6 +48,7 @@ interface IShare {
* *
* @return string * @return string
* @since 9.0.0 * @since 9.0.0
* @throws \UnexpectedValueException If the fullId could not be constructed
*/ */
public function getFullId(); public function getFullId();

View File

@ -890,6 +890,22 @@ class ManagerTest extends \Test\TestCase {
$this->invokePrivate($this->manager, 'validateExpirationDate', [$share]); $this->invokePrivate($this->manager, 'validateExpirationDate', [$share]);
} }
public function testValidateExpirationDateExistingShareNoDefault() {
$share = $this->manager->newShare();
$share->setId('42')->setProviderId('foo');
$this->config->method('getAppValue')
->will($this->returnValueMap([
['core', 'shareapi_default_expire_date', 'no', 'yes'],
['core', 'shareapi_expire_after_n_days', '7', '6'],
]));
$this->invokePrivate($this->manager, 'validateExpirationDate', [$share]);
$this->assertEquals(null, $share->getExpirationDate());
}
/** /**
* @expectedException Exception * @expectedException Exception
* @expectedExceptionMessage Only sharing with group members is allowed * @expectedExceptionMessage Only sharing with group members is allowed