Generated PDF download action and the data file download wrapper

This commit is contained in:
Thilina
2021-06-27 17:08:16 +02:00
parent 235924f80b
commit 142395591e

View File

@@ -3,7 +3,10 @@
use Classes\BaseService; use Classes\BaseService;
use Classes\IceResponse; use Classes\IceResponse;
use Classes\PasswordManager; use Classes\PasswordManager;
use Classes\Pdf\PDFRegister;
use Classes\SettingsManager;
use Metadata\Common\Model\SupportedLanguage; use Metadata\Common\Model\SupportedLanguage;
use Model\File;
use Users\Common\Model\User; use Users\Common\Model\User;
use Utils\LogManager; use Utils\LogManager;
use Classes\Exception\IceHttpException; use Classes\Exception\IceHttpException;
@@ -173,19 +176,20 @@ try {// Domain aware input cleanup
$type = strtolower(substr($file->filename, strrpos($file->filename, ".") + 1)); $type = strtolower(substr($file->filename, strrpos($file->filename, ".") + 1));
if ($file->name == $name) { if ($file->name == $name) {
$ret['status'] = "SUCCESS"; $ret['status'] = "SUCCESS";
if (\Classes\SettingsManager::getInstance()->getSetting("Files: Upload Files to S3") == '1') { $file->ext = explode('.', $file->filename)[1];
$uploadFilesToS3Key = \Classes\SettingsManager::getInstance()->getSetting("Files: Amazon S3 Key for File Upload"); if (SettingsManager::getInstance()->getSetting("Files: Upload Files to S3") == '1') {
$uploadFilesToS3Secret = \Classes\SettingsManager::getInstance()->getSetting("Files: Amazone S3 Secret for File Upload"); $uploadFilesToS3Key = SettingsManager::getInstance()->getSetting("Files: Amazon S3 Key for File Upload");
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting("Files: Amazon S3 Secret for File Upload");
$s3FileSys = new \Classes\S3FileSystem($uploadFilesToS3Key, $uploadFilesToS3Secret); $s3FileSys = new \Classes\S3FileSystem($uploadFilesToS3Key, $uploadFilesToS3Secret);
$s3WebUrl = \Classes\SettingsManager::getInstance()->getSetting("Files: S3 Web Url"); $s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url");
$fileUrl = $s3WebUrl . CLIENT_NAME . "/" . $file->filename; $fileUrl = $s3WebUrl . CLIENT_NAME . "/" . $file->filename;
$fileUrl = $s3FileSys->generateExpiringURL($fileUrl); $fileUrl = $s3FileSys->generateExpiringURL($fileUrl);
$file->filename = $fileUrl; $file->filename = $fileUrl;
} else { } else {
$file->filename = CLIENT_BASE_URL . 'data/' . $file->filename; $file->filename = \Classes\FileService::getInstance()->getLocalSecureUrl($file->filename);
} }
$ret['data'] = $file; $ret['data'] = BaseService::getInstance()->cleanUpAll($file);
} else { } else {
$ret['status'] = "ERROR"; $ret['status'] = "ERROR";
} }
@@ -193,21 +197,49 @@ try {// Domain aware input cleanup
$fileName = $_REQUEST['file']; $fileName = $_REQUEST['file'];
$fileName = str_replace("..", "", $fileName); $fileName = str_replace("..", "", $fileName);
$fileName = str_replace("/", "", $fileName); $fileName = str_replace("/", "", $fileName);
$fileName = CLIENT_BASE_PATH . 'data/' . $fileName;
if (!file_exists($fileName)) { $file = new File();
$file->Load('name = ?', array($fileName));
if ($fileName !== $file->name) {
$file->Load('filename = ?', array($fileName));
}
if (empty($file->id)) {
exit; exit;
} }
if (!file_exists(CLIENT_BASE_PATH . 'data/' . $file->filename)) {
exit;
}
$extension = explode('.', $file->filename)[1];
header('Content-Description: File Transfer'); header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream'); if ('png' === $extension) {
header('Content-Disposition: attachment; filename=' . basename($fileName)); header('Content-Type: image/png');
header('Content-Transfer-Encoding: binary'); } elseif ('gif' === $extension) {
header('Expires: 0'); header('Content-Type: image/png');
header('Cache-Control: must-revalidate'); } elseif ('jpg' === $extension || 'jpeg' === $extension) {
header('Pragma: public'); header('Content-Type: image/jpeg');
header('Content-Length: ' . filesize($fileName)); } elseif ('pdf' === $extension) {
header('Content-Type: application/pdf');
} elseif ('xml' === $extension) {
header('Content-Type: application/xml');
} else {
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
}
header('Content-Disposition: attachment; filename=' . basename($file->filename));
header('Content-Length: ' . filesize(CLIENT_BASE_PATH . 'data/' . $file->filename));
ob_clean(); ob_clean();
flush(); flush();
readfile($fileName); readfile(CLIENT_BASE_PATH . 'data/' . $file->filename);
exit; exit;
} else if ($action == 'rsp') { // linked clicked from password change email } else if ($action == 'rsp') { // linked clicked from password change email
@@ -305,13 +337,31 @@ try {// Domain aware input cleanup
} }
} }
} }
try {
echo BaseService::getInstance()->safeJsonEncode($ret); if ($action == 'pdf') {
} catch (Exception $e) { $data = $_REQUEST['data'];
LogManager::getInstance()->error($e->getMessage()); $hash = $_REQUEST['h'];
LogManager::getInstance()->notifyException($e); PDFRegister::init();
echo json_encode(['status' => 'Error']); $callback = PDFRegister::get($hash);
if (empty($callback) || !$callback($data)->granted()) {
$ret['status'] = "ERROR";
$ret['message'] = "Invalid request";
} else {
$pdfBuilder = $callback($data);
$pdf = $pdfBuilder->createPdf();
$pdf->SetAuthor(SettingsManager::getInstance()->getSetting('Company: Name'));
$pdf->Output();
}
} else {
try {
echo BaseService::getInstance()->safeJsonEncode($ret);
} catch (Exception $e) {
LogManager::getInstance()->error($e->getMessage());
LogManager::getInstance()->notifyException($e);
echo json_encode(['status' => 'Error']);
}
} }
} catch (IceHttpException $e) { } catch (IceHttpException $e) {
http_response_code($e->getCode()); http_response_code($e->getCode());
echo json_encode(['message' => $e->getMessage()]); echo json_encode(['message' => $e->getMessage()]);