Actions::MainClearFileName() belongs to Raw

This commit is contained in:
the-djmaze 2024-03-08 03:09:58 +01:00
parent 8a3948777f
commit d498bf2b53
3 changed files with 31 additions and 38 deletions

View file

@ -832,19 +832,6 @@ class Actions
return $this->DefaultResponse(APP_VERSION === (string)$this->GetActionParam('version', ''));
}
public function MainClearFileName(string $sFileName, string $sContentType, string $sMimeIndex, int $iMaxLength = 250): string
{
$sFileName = !\strlen($sFileName) ? \preg_replace('/[^a-zA-Z0-9]/', '.', (empty($sMimeIndex) ? '' : $sMimeIndex . '.') . $sContentType) : $sFileName;
$sClearedFileName = \MailSo\Base\Utils::StripSpaces(\preg_replace('/[\.]+/', '.', $sFileName));
$sExt = \MailSo\Base\Utils::GetFileExtension($sClearedFileName);
if (10 < $iMaxLength && $iMaxLength < \strlen($sClearedFileName) - \strlen($sExt)) {
$sClearedFileName = \substr($sClearedFileName, 0, $iMaxLength) . (empty($sExt) ? '' : '.' . $sExt);
}
return \MailSo\Base\Utils::SecureFileName(\MailSo\Base\Utils::Utf8Clear($sClearedFileName));
}
public function Upload(?array $aFile, int $iError): array
{
$oAccount = $this->getAccountFromToken();

View file

@ -695,7 +695,6 @@ trait Messages
?: \SnappyMail\File\MimeType::fromFilename($sFileName)
?: 'application/octet-stream'; // 'text/plain'
// $sFileName = $self->MainClearFileName($sFileName, $sContentType, $sMimeIndex);
$sTempName .= \SnappyMail\File\MimeType::toExtension($sContentType);
if ($self->FilesProvider()->PutFile($oAccount, $sTempName, $rResource)) {
@ -714,7 +713,7 @@ trait Messages
?: \SnappyMail\File\MimeType::fromFilename($sTempName)
?: 'application/octet-stream'; // 'text/plain'
$aAttachments[$mIndex] = [
// 'name' => $sFileName,
// 'name' => '',
'tempName' => $sTempName,
'mimeType' => $sContentType
// 'size' => $oFilesProvider->FileSize($oAccount, $sTempName)

View file

@ -76,6 +76,19 @@ trait Raw
return false;
}
private function clearFileName(string $sFileName, string $sContentType, string $sMimeIndex, int $iMaxLength = 250): string
{
$sFileName = !\strlen($sFileName) ? \preg_replace('/[^a-zA-Z0-9]/', '.', (empty($sMimeIndex) ? '' : $sMimeIndex . '.') . $sContentType) : $sFileName;
$sClearedFileName = \MailSo\Base\Utils::StripSpaces(\preg_replace('/[\.]+/', '.', $sFileName));
$sExt = \MailSo\Base\Utils::GetFileExtension($sClearedFileName);
if (10 < $iMaxLength && $iMaxLength < \strlen($sClearedFileName) - \strlen($sExt)) {
$sClearedFileName = \substr($sClearedFileName, 0, $iMaxLength) . (empty($sExt) ? '' : '.' . $sExt);
}
return \MailSo\Base\Utils::SecureFileName(\MailSo\Base\Utils::Utf8Clear($sClearedFileName));
}
/**
* Message, Message Attachment or Zip
*/
@ -99,6 +112,8 @@ trait Raw
$sRangeStart = $aMatch[1];
$sRangeEnd = $aMatch[2];
$bIsRangeRequest = true;
} else {
$this->verifyCacheByKey($sRawKey);
}
$sMimeIndex = isset($aValues['mimeIndex']) ? (string) $aValues['mimeIndex'] : '';
@ -106,8 +121,10 @@ trait Raw
$sFileNameIn = isset($aValues['fileName']) ? (string) $aValues['fileName'] : '';
if (!empty($aValues['fileHash'])) {
$this->verifyCacheByKey($sRawKey);
$rResource = $this->FilesProvider()->GetFile($oAccount, (string) $aValues['fileHash']);
if (!\is_resource($rResource)) {
return false;
}
// https://github.com/the-djmaze/snappymail/issues/144
if ('.pdf' === \substr($sFileNameIn,-4)) {
$sContentTypeOut = 'application/pdf'; // application/octet-stream
@ -116,23 +133,14 @@ trait Raw
?: \SnappyMail\File\MimeType::fromFilename($sFileNameIn)
?: 'application/octet-stream';
}
$sFileNameOut = $this->MainClearFileName($sFileNameIn, $sContentTypeIn, $sMimeIndex);
$rResource = $this->FilesProvider()->GetFile($oAccount, (string) $aValues['fileHash']);
if (\is_resource($rResource)) {
\header('Content-Type: '.$sContentTypeOut);
\header('Content-Disposition: attachment; '.
\trim(\MailSo\Base\Utils::EncodeHeaderUtf8AttributeValue('filename', $sFileNameOut)));
\header('Accept-Ranges: none');
\header('Content-Transfer-Encoding: binary');
\MailSo\Base\Utils::FpassthruWithTimeLimitReset($rResource);
return true;
}
return false;
$sFileNameOut = $this->clearFileName($sFileNameIn, $sContentTypeIn, $sMimeIndex);
\header('Content-Type: '.$sContentTypeOut);
\header('Content-Disposition: attachment; '.
\trim(\MailSo\Base\Utils::EncodeHeaderUtf8AttributeValue('filename', $sFileNameOut)));
\header('Accept-Ranges: none');
\header('Content-Transfer-Encoding: binary');
\MailSo\Base\Utils::FpassthruWithTimeLimitReset($rResource);
return true;
}
$sFolder = isset($aValues['folder']) ? (string) $aValues['folder'] : '';
@ -141,8 +149,6 @@ trait Raw
return false;
}
$this->verifyCacheByKey($sRawKey);
$this->initMailClientConnection();
$self = $this;
@ -166,7 +172,7 @@ trait Raw
if ($sFileNameIn) {
$sFileName = $sFileNameIn;
}
$sFileName = $self->MainClearFileName($sFileName, $sContentType, $sMimeIndex);
$sFileName = $self->clearFileName($sFileName, $sContentType, $sMimeIndex);
if ('.pdf' === \substr($sFileName, -4)) {
// https://github.com/the-djmaze/snappymail/issues/144
@ -257,7 +263,8 @@ trait Raw
\MailSo\Base\Utils::FpassthruWithTimeLimitReset($rResource);
}
}
}, $sFolder, $iUid, $sMimeIndex);
}, $sFolder, $iUid, $sMimeIndex
);
}
private static function loadImage($resource, bool $bDetectImageOrientation = false, int $iThumbnailBoxSize = 0) : \SnappyMail\Image