Merge pull request #22192 from owncloud/fix_19685
Only set the default expiration date on share creation
This commit is contained in:
commit
29f6f451a9
4 changed files with 51 additions and 7 deletions
|
@ -261,7 +261,14 @@ class Manager implements IManager {
|
|||
}
|
||||
|
||||
// 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->setTime(0,0,0);
|
||||
$expirationDate->add(new \DateInterval('P'.$this->shareApiLinkDefaultExpireDays().'D'));
|
||||
|
@ -315,8 +322,12 @@ class Manager implements IManager {
|
|||
$existingShares = $provider->getSharesByPath($share->getNode());
|
||||
foreach($existingShares as $existingShare) {
|
||||
// Ignore if it is the same share
|
||||
if ($existingShare->getFullId() === $share->getFullId()) {
|
||||
continue;
|
||||
try {
|
||||
if ($existingShare->getFullId() === $share->getFullId()) {
|
||||
continue;
|
||||
}
|
||||
} catch (\UnexpectedValueException $e) {
|
||||
//Shares are not identical
|
||||
}
|
||||
|
||||
// Identical share already existst
|
||||
|
@ -360,8 +371,12 @@ class Manager implements IManager {
|
|||
$provider = $this->factory->getProviderForType(\OCP\Share::SHARE_TYPE_GROUP);
|
||||
$existingShares = $provider->getSharesByPath($share->getNode());
|
||||
foreach($existingShares as $existingShare) {
|
||||
if ($existingShare->getFullId() === $share->getFullId()) {
|
||||
continue;
|
||||
try {
|
||||
if ($existingShare->getFullId() === $share->getFullId()) {
|
||||
continue;
|
||||
}
|
||||
} catch (\UnexpectedValueException $e) {
|
||||
//It is a new share so just continue
|
||||
}
|
||||
|
||||
if ($existingShare->getSharedWith() === $share->getSharedWith()) {
|
||||
|
@ -558,7 +573,11 @@ class Manager implements IManager {
|
|||
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!
|
||||
if ($share->getShareType() !== $originalShare->getShareType()) {
|
||||
|
@ -673,10 +692,15 @@ class Manager implements IManager {
|
|||
*
|
||||
* @param \OCP\Share\IShare $share
|
||||
* @throws ShareNotFound
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
public function deleteShare(\OCP\Share\IShare $share) {
|
||||
// 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) {
|
||||
// Prepare hook
|
||||
|
|
|
@ -90,6 +90,9 @@ class Share implements \OCP\Share\IShare {
|
|||
* @inheritdoc
|
||||
*/
|
||||
public function getFullId() {
|
||||
if ($this->providerId === null || $this->id === null) {
|
||||
throw new \UnexpectedValueException;
|
||||
}
|
||||
return $this->providerId . ':' . $this->id;
|
||||
}
|
||||
|
||||
|
|
|
@ -48,6 +48,7 @@ interface IShare {
|
|||
*
|
||||
* @return string
|
||||
* @since 9.0.0
|
||||
* @throws \UnexpectedValueException If the fullId could not be constructed
|
||||
*/
|
||||
public function getFullId();
|
||||
|
||||
|
|
|
@ -890,6 +890,22 @@ class ManagerTest extends \Test\TestCase {
|
|||
$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
|
||||
* @expectedExceptionMessage Only sharing with group members is allowed
|
||||
|
|
Loading…
Reference in a new issue