mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-08-29 12:09:20 +03:00
Resolve #1514
This commit is contained in:
parent
b45459d645
commit
3513669412
1 changed files with 34 additions and 26 deletions
|
|
@ -17,6 +17,15 @@ trait Attachments
|
|||
$sFilename = \MailSo\Base\Utils::SecureFileName($this->GetActionParam('filename', ''));
|
||||
$aHashes = $this->GetActionParam('hashes', null);
|
||||
$oFilesProvider = $this->FilesProvider();
|
||||
if (empty($sAction)) {
|
||||
$this->logWrite('AttachmentsAction target not set');
|
||||
}
|
||||
if (!$this->GetCapa(Capa::ATTACHMENTS_ACTIONS)) {
|
||||
$this->logWrite('AttachmentsAction disabled');
|
||||
}
|
||||
if (!$oFilesProvider || !$oFilesProvider->IsActive()) {
|
||||
$this->logWrite('AttachmentsAction FilesProvider inactive');
|
||||
}
|
||||
if (empty($sAction) || !$this->GetCapa(Capa::ATTACHMENTS_ACTIONS) || !$oFilesProvider || !$oFilesProvider->IsActive()) {
|
||||
return $this->FalseResponse();
|
||||
}
|
||||
|
|
@ -31,6 +40,7 @@ trait Attachments
|
|||
foreach ($aHashes as $sZipHash) {
|
||||
$aResult = $this->getMimeFileByHash($oAccount, $sZipHash);
|
||||
if (empty($aResult['data']) && empty($aResult['fileHash'])) {
|
||||
$this->logWrite('AttachmentsAction data/fileHash not set: ' . \print_r($aResult,1));
|
||||
$bError = true;
|
||||
break;
|
||||
}
|
||||
|
|
@ -151,34 +161,32 @@ trait Attachments
|
|||
$aValues['fileHash'] = null;
|
||||
if (isset($aValues['data'])) {
|
||||
$aValues['data'] = \MailSo\Base\Utils::UrlSafeBase64Decode($aValues['data']);
|
||||
} else {
|
||||
$sFolder = isset($aValues['folder']) ? (string) $aValues['folder'] : '';
|
||||
$iUid = isset($aValues['uid']) ? (int) $aValues['uid'] : 0;
|
||||
$sMimeIndex = isset($aValues['mimeIndex']) ? (string) $aValues['mimeIndex'] : '';
|
||||
if ($sFolder && $iUid && $sMimeIndex) {
|
||||
$oFileProvider = $this->FilesProvider();
|
||||
$mResult = $this->MailClient()->MessageMimeStream(
|
||||
function ($rResource, $sContentType, $sFileName, $sMimeIndex = '')
|
||||
use ($oAccount, $oFileProvider, &$aValues) {
|
||||
unset($sContentType, $sFileName, $sMimeIndex);
|
||||
if (\is_resource($rResource)) {
|
||||
$sContentTypeIn = isset($aValues['mimeType']) ? (string) $aValues['mimeType'] : '';
|
||||
$sHash = \MailSo\Base\Utils::Sha1Rand($aValues['fileName'].'~'.$sContentTypeIn);
|
||||
$rTempResource = $oFileProvider->GetFile($oAccount, $sHash, 'wb+');
|
||||
if (\is_resource($rTempResource)) {
|
||||
if (-1 < \MailSo\Base\Utils::WriteStream($rResource, $rTempResource)) {
|
||||
$sResultHash = $sHash;
|
||||
$aValues['fileHash'] = $sHash;
|
||||
}
|
||||
\fclose($rTempResource);
|
||||
} else if (!empty($aValues['folder']) && !empty($aValues['uid'])) {
|
||||
$sFolder = (string) $aValues['folder'];
|
||||
$iUid = (int) $aValues['uid'];
|
||||
$sMimeIndex = (string) $aValues['mimeIndex'];
|
||||
$oFileProvider = $this->FilesProvider();
|
||||
$mResult = $this->MailClient()->MessageMimeStream(
|
||||
function ($rResource, $sContentType, $sFileName, $sMimeIndex = '')
|
||||
use ($oAccount, $oFileProvider, &$aValues) {
|
||||
unset($sContentType, $sFileName, $sMimeIndex);
|
||||
if (\is_resource($rResource)) {
|
||||
$sContentTypeIn = isset($aValues['mimeType']) ? (string) $aValues['mimeType'] : '';
|
||||
$sHash = \MailSo\Base\Utils::Sha1Rand($aValues['fileName'].'~'.$sContentTypeIn);
|
||||
$rTempResource = $oFileProvider->GetFile($oAccount, $sHash, 'wb+');
|
||||
if (\is_resource($rTempResource)) {
|
||||
if (-1 < \MailSo\Base\Utils::WriteStream($rResource, $rTempResource)) {
|
||||
$sResultHash = $sHash;
|
||||
$aValues['fileHash'] = $sHash;
|
||||
}
|
||||
\fclose($rTempResource);
|
||||
}
|
||||
},
|
||||
$sFolder,
|
||||
$iUid,
|
||||
$sMimeIndex
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
$sFolder,
|
||||
$iUid,
|
||||
$sMimeIndex
|
||||
);
|
||||
}
|
||||
|
||||
return $aValues;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue