From b557f52c2290379b99838f86c7ab90892b955b41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Molakvo=C3=A6=20=28skjnldsv=29?= Date: Mon, 12 Aug 2019 10:56:23 +0200 Subject: [PATCH] Add expiration event for shares MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: John Molakvoæ (skjnldsv) --- .../lib/Activity/Providers/Groups.php | 8 ++++++++ .../files_sharing/lib/Activity/Providers/Users.php | 14 +++++++++++++- lib/private/Share20/Manager.php | 3 +-- lib/private/Share20/Share.php | 8 ++++++++ lib/public/Share/IShare.php | 8 ++++++++ 5 files changed, 38 insertions(+), 3 deletions(-) diff --git a/apps/files_sharing/lib/Activity/Providers/Groups.php b/apps/files_sharing/lib/Activity/Providers/Groups.php index 10f52882ae..9585646491 100644 --- a/apps/files_sharing/lib/Activity/Providers/Groups.php +++ b/apps/files_sharing/lib/Activity/Providers/Groups.php @@ -35,9 +35,12 @@ class Groups extends Base { const SUBJECT_SHARED_GROUP_SELF = 'shared_group_self'; const SUBJECT_RESHARED_GROUP_BY = 'reshared_group_by'; + const SUBJECT_UNSHARED_GROUP_SELF = 'unshared_group_self'; const SUBJECT_UNSHARED_GROUP_BY = 'unshared_group_by'; + const SUBJECT_EXPIRED_GROUP = 'expired_group'; + /** @var IGroupManager */ protected $groupManager; @@ -73,6 +76,8 @@ class Groups extends Base { $subject = $this->l->t('{actor} shared with group {group}'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_GROUP_BY) { $subject = $this->l->t('{actor} removed share for group {group}'); + } else if ($event->getSubject() === self::SUBJECT_EXPIRED_GROUP) { + $subject = $this->l->t('Share for group {group} expired'); } else { throw new \InvalidArgumentException(); } @@ -104,6 +109,8 @@ class Groups extends Base { $subject = $this->l->t('{actor} shared {file} with group {group}'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_GROUP_BY) { $subject = $this->l->t('{actor} removed group {group} from {file}'); + } else if ($event->getSubject() === self::SUBJECT_EXPIRED_GROUP) { + $subject = $this->l->t('Share for file {file} with group {group} expired'); } else { throw new \InvalidArgumentException(); } @@ -132,6 +139,7 @@ class Groups extends Base { ]; case self::SUBJECT_SHARED_GROUP_SELF: case self::SUBJECT_UNSHARED_GROUP_SELF: + case self::SUBJECT_EXPIRED_GROUP: return [ 'file' => $this->getFile($parameters[0], $event), 'group' => $this->generateGroupParameter($parameters[1]), diff --git a/apps/files_sharing/lib/Activity/Providers/Users.php b/apps/files_sharing/lib/Activity/Providers/Users.php index 61f169fd09..8f30f2cdc0 100644 --- a/apps/files_sharing/lib/Activity/Providers/Users.php +++ b/apps/files_sharing/lib/Activity/Providers/Users.php @@ -38,6 +38,9 @@ class Users extends Base { const SUBJECT_SELF_UNSHARED = 'self_unshared'; const SUBJECT_SELF_UNSHARED_BY = 'self_unshared_by'; + const SUBJECT_EXPIRED_USER = 'expired_user'; + const SUBJECT_EXPIRED = 'expired'; + /** * @param IEvent $event * @return IEvent @@ -63,7 +66,10 @@ class Users extends Base { $subject = $this->l->t('Shared by {actor}'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_BY) { $subject = $this->l->t('{actor} removed share'); - + } else if ($event->getSubject() === self::SUBJECT_EXPIRED_USER) { + $subject = $this->l->t('Share for {user} expired'); + } else if ($event->getSubject() === self::SUBJECT_EXPIRED) { + $subject = $this->l->t('Share expired'); } else { throw new \InvalidArgumentException(); } @@ -103,6 +109,10 @@ class Users extends Base { $subject = $this->l->t('{actor} shared {file} with you'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_BY) { $subject = $this->l->t('{actor} removed you from the share named {file}'); + } else if ($event->getSubject() === self::SUBJECT_EXPIRED_USER) { + $subject = $this->l->t('Share for file {file} with {user} expired'); + } else if ($event->getSubject() === self::SUBJECT_EXPIRED) { + $subject = $this->l->t('Share for file {file} expired'); } else { throw new \InvalidArgumentException(); @@ -125,6 +135,8 @@ class Users extends Base { switch ($subject) { case self::SUBJECT_SHARED_USER_SELF: case self::SUBJECT_UNSHARED_USER_SELF: + case self::SUBJECT_EXPIRED_USER: + case self::SUBJECT_EXPIRED: return [ 'file' => $this->getFile($parameters[0], $event), 'user' => $this->getUser($parameters[1]), diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php index 2a2c64cf38..2e8e6f9a3a 100644 --- a/lib/private/Share20/Manager.php +++ b/lib/private/Share20/Manager.php @@ -1313,8 +1313,7 @@ class Manager implements IManager { } protected function checkExpireDate($share) { - if ($share->getExpirationDate() !== null && - $share->getExpirationDate() <= new \DateTime()) { + if ($share->isExpired()) { $this->deleteShare($share); throw new ShareNotFound($this->l->t('The requested share does not exist anymore')); } diff --git a/lib/private/Share20/Share.php b/lib/private/Share20/Share.php index f9b548c1ad..9ce88b5af2 100644 --- a/lib/private/Share20/Share.php +++ b/lib/private/Share20/Share.php @@ -368,6 +368,14 @@ class Share implements \OCP\Share\IShare { return $this->expireDate; } + /** + * @inheritdoc + */ + public function isExpired() { + return $this->getExpirationDate() !== null && + $this->getExpirationDate() <= new \DateTime(); + } + /** * @inheritdoc */ diff --git a/lib/public/Share/IShare.php b/lib/public/Share/IShare.php index 7bcecbdc87..0a93c3144c 100644 --- a/lib/public/Share/IShare.php +++ b/lib/public/Share/IShare.php @@ -257,6 +257,14 @@ interface IShare { */ public function getExpirationDate(); + /** + * Is the share expired ? + * + * @return boolean + * @since 18.0.0 + */ + public function isExpired(); + /** * set a label for a share, some shares, e.g. public links can have a label *