From 3676183b10c3fa71d8d46c2e0f98c2104cfb760e Mon Sep 17 00:00:00 2001 From: djmaze Date: Mon, 1 Nov 2021 00:29:20 +0100 Subject: [PATCH] Part of issue #157 (rfc2086 & rfc4314) --- .../libraries/MailSo/Imap/Commands/ACL.php | 99 +++++++++++++++++++ .../MailSo/Imap/Enumerations/FolderACL.php | 53 ++++++++++ .../app/libraries/MailSo/Imap/ImapClient.php | 1 + 3 files changed, 153 insertions(+) create mode 100644 snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/ACL.php create mode 100644 snappymail/v/0.0.0/app/libraries/MailSo/Imap/Enumerations/FolderACL.php diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/ACL.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/ACL.php new file mode 100644 index 000000000..26ed5e99c --- /dev/null +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/ACL.php @@ -0,0 +1,99 @@ +SendRequestGetResponse('SETACL', array( + $this->EscapeString($sFolderName), + $this->EscapeString($sIdentifier), + $this->EscapeString($sAccessRights) + )); + } + + public function FolderDeleteACL(string $sFolderName, string $sIdentifier) : void + { + $this->SendRequestGetResponse('DELETEACL', array( + $this->EscapeString($sFolderName), + $this->EscapeString($sIdentifier) + )); + } + + public function FolderGetACL(string $sFolderName) : array + { + $oResponses = $this->SendRequestGetResponse('GETACL', array($this->EscapeString($sFolderName))); + $aResult = array(); + foreach ($oResponses as $oResponse) { + if (MailSo\Imap\Enumerations\ResponseType::UNTAGGED === $oResponse->ResponseType + && isset($oResponse->ResponseList[4]) + && 'ACL' === $oResponse->ResponseList[1] + && $sFolderName === $oResponse->ResponseList[2] + ) + { + $aResult[$oResponse->ResponseList[3]] = static::aclRightsToArray(\array_slice($oResponse->ResponseList, 4)); + } + } + return $aResult; + } + + public function FolderListRights(string $sFolderName, string $sIdentifier) : ?array + { + $oResponses = $this->SendRequestGetResponse('LISTRIGHTS', array( + $this->EscapeString($sFolderName), + $this->EscapeString($sIdentifier) + )); + foreach ($oResponses as $oResponse) { + if (MailSo\Imap\Enumerations\ResponseType::UNTAGGED === $oResponse->ResponseType + && isset($oResponse->ResponseList[4]) + && 'LISTRIGHTS' === $oResponse->ResponseList[1] + && $sFolderName === $oResponse->ResponseList[2] + && $sIdentifier === $oResponse->ResponseList[3] + ) + { + return static::aclRightsToArray(\array_slice($oResponse->ResponseList, 4)); + } + } + return null; + } + + public function FolderMyRights(string $sFolderName) : ?array + { + $oResponses = $this->SendRequestGetResponse('MYRIGHTS', array($this->EscapeString($sFolderName))); + foreach ($oResponses as $oResponse) { + if (MailSo\Imap\Enumerations\ResponseType::UNTAGGED === $oResponse->ResponseType + && isset($oResponse->ResponseList[3]) + && 'MYRIGHTS' === $oResponse->ResponseList[1] + && $sFolderName === $oResponse->ResponseList[2] + ) + { + return static::aclRightsToArray(\array_slice($oResponse->ResponseList, 3)); + } + } + return null; + } + + private static function aclRightsToArray(array $rules) : array + { + $result = array(); + foreach ($rules as $rule) { + $result = \array_merge($result, \str_split($rule)); + } + return \array_unique($result); + } + +} diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Enumerations/FolderACL.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Enumerations/FolderACL.php new file mode 100644 index 000000000..d0f7ea163 --- /dev/null +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Enumerations/FolderACL.php @@ -0,0 +1,53 @@ +