From 41a98d68c5feb7788c6cc112a08eb318194f2512 Mon Sep 17 00:00:00 2001 From: djmaze <> Date: Wed, 15 Dec 2021 13:06:30 +0100 Subject: [PATCH] Bugfix: demo plugin broken due to v2.9.6 changes --- plugins/demo-account/index.php | 16 +++++------- plugins/demo-account/storage.php | 26 ++++++++++++++++--- .../0.0.0/app/libraries/RainLoop/Actions.php | 2 +- .../Providers/Storage/FileStorage.php | 2 +- 4 files changed, 32 insertions(+), 14 deletions(-) diff --git a/plugins/demo-account/index.php b/plugins/demo-account/index.php index 51f7e2851..b10a309ff 100644 --- a/plugins/demo-account/index.php +++ b/plugins/demo-account/index.php @@ -61,21 +61,22 @@ class DemoAccountPlugin extends \RainLoop\Plugins\AbstractPlugin * * @return bool */ - public function isDemoAccount($oAccount) + private function isDemoAccount() { + $oAccount = $this->Manager()->Actions()->GetAccount(); return ($oAccount && $oAccount->Email() === $this->Config()->Get('plugin', 'email')); } public function JsonActionPreCall($sAction) { - if ('AccountSetup' === $sAction && $this->isDemoAccount($this->Manager()->Actions()->GetAccount())) { + if ('AccountSetup' === $sAction && $this->isDemoAccount()) { throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::DemoAccountError); } } public function FilterSendMessage($oMessage) { - if ($oMessage && $this->isDemoAccount($this->Manager()->Actions()->GetAccount())) { + if ($oMessage && $this->isDemoAccount()) { throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::DemoSendMessageError); } } @@ -87,12 +88,9 @@ class DemoAccountPlugin extends \RainLoop\Plugins\AbstractPlugin public function MainFabrica($sName, &$oDriver) { if ('storage' === $sName || 'storage-local' === $sName) { - $oAccount = $this->Manager()->Actions()->GetAccount(); - if ($this->isDemoAccount($oAccount)) { - require_once __DIR__ . '/storage.php'; - $oDriver = new \DemoStorage(APP_PRIVATE_DATA.'storage', $sName === 'storage-local'); - } + require_once __DIR__ . '/storage.php'; + $oDriver = new \DemoStorage(APP_PRIVATE_DATA.'storage', $sName === 'storage-local'); + $oDriver->setDemoEmail($this->Config()->Get('plugin', 'email')); } } } - diff --git a/plugins/demo-account/storage.php b/plugins/demo-account/storage.php index 4391e0e2b..9ad039f0a 100644 --- a/plugins/demo-account/storage.php +++ b/plugins/demo-account/storage.php @@ -1,5 +1,7 @@ Email(); + if (StorageType::SIGN_ME === $iStorageType) { + $sSubFolder = '/.sign_me'; + } else if (StorageType::SESSION === $iStorageType) { + $sSubFolder = '/.sessions'; + } + } else if (\is_string($mAccount)) { + $sEmail = $mAccount; + } + if ($sEmail != $this->sDemoEmail) { return parent::generateFileName($mAccount, $iStorageType, $sKey, $bMkDir, $bForDeleteAction); } $sDataPath = "{$this->sDataPath}/demo"; + if (\is_dir($sDataPath) && 0 === \random_int(0, 100)) { - \MailSo\Base\Utils::RecRmDir("{$this->sDataPath}/demo"); + \MailSo\Base\Utils::RecTimeDirRemove($sDataPath, 3600 * 3); // 3 hours } - $sDataPath .= '/' . \RainLoop\Utils::fixName(\RainLoop\Utils::GetConnectionToken()); + $sDataPath .= '/' . \RainLoop\Utils::fixName(\RainLoop\Utils::GetConnectionToken()) . $sSubFolder; \is_dir($sDataPath) || \mkdir($sDataPath, 0700, true); return $sDataPath . '/' . ($sKey ? \RainLoop\Utils::fixName($sKey) : ''); } + + private $sDemoEmail; + public function setDemoEmail(string $sEmail) + { + $this->sDemoEmail = $sEmail; + } } diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php index b09091862..ecf52141d 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php @@ -367,7 +367,7 @@ class Actions if (false !== \strpos($sLine, '{user:uid}')) { $sLine = \str_replace('{user:uid}', Utils::UrlEncode(\base_convert(\sprintf('%u', - \crc32(\md5(Utils::GetConnectionToken()))), 10, 32), $bUrlEncode), + \crc32(Utils::GetConnectionToken())), 10, 32), $bUrlEncode), $sLine ); } diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Storage/FileStorage.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Storage/FileStorage.php index 5db01b4ff..460ab17c9 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Storage/FileStorage.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Providers/Storage/FileStorage.php @@ -99,7 +99,7 @@ class FileStorage implements \RainLoop\Providers\Storage\IStorage if ($this->bLocal && !$bForDeleteAction) { $sSubFolder = $mAccount->Email(); } - } else if (\is_string($mAccount) && empty($sEmail)) { + } else if (\is_string($mAccount)) { $sEmail = $mAccount; }