From 52149cbeb8e01abf058e4c7a7afa1b1c11d42f16 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Tue, 24 Mar 2020 10:57:07 +0100 Subject: [PATCH] more logging --- .../ZUGFeRDInterface/PDFAttachments.vb | 145 ++++++++++++------ .../Controllers/ValidationController.cs | 24 ++- 2 files changed, 114 insertions(+), 55 deletions(-) diff --git a/Modules.Interfaces/ZUGFeRDInterface/PDFAttachments.vb b/Modules.Interfaces/ZUGFeRDInterface/PDFAttachments.vb index bf9d7c61..d2382f37 100644 --- a/Modules.Interfaces/ZUGFeRDInterface/PDFAttachments.vb +++ b/Modules.Interfaces/ZUGFeRDInterface/PDFAttachments.vb @@ -21,69 +21,116 @@ Public Class PDFAttachments ''' Extracts all embedded files from a PDF file. ''' Note: This does NOT filter out `ZUGFeRD-invoice.xml` anymore to allow for a more generic use. ''' - ''' - ''' - ''' - Public Function Extract(FileName As String, AllowedExtensions As List(Of String)) As List(Of AttachmentResult) + ''' Filepath of the pdf + ''' List of allowed extensions to be extracted + Public Function Extract(FilePath As String, AllowedExtensions As List(Of String)) As List(Of AttachmentResult) Dim oResults As New List(Of AttachmentResult) Dim oExtensions = AllowedExtensions.ConvertAll(New Converter(Of String, String)(Function(ext) ext.ToUpper)) + Logger.Debug("Extracting embedded files from [{0}]", FilePath) + Try Using oGDPicturePDF As New GdPicturePDF() - If oGDPicturePDF.LoadFromFile(FileName, False) = GdPictureStatus.OK Then - Dim oEmbeddedFileCount As Integer = oGDPicturePDF.GetEmbeddedFileCount() - If oGDPicturePDF.GetStat() = GdPictureStatus.OK Then - If oEmbeddedFileCount > 0 Then - For index = 0 To oEmbeddedFileCount - 1 - Dim oFileName As String = oGDPicturePDF.GetEmbeddedFileName(index) - - If oGDPicturePDF.GetStat() = GdPictureStatus.OK Then - Dim oExtension = New FileInfo(oFileName).Extension.ToUpper.Substring(1) - If oExtensions.Contains(oExtension) Then - Dim FileSize As Integer = oGDPicturePDF.GetEmbeddedFileSize(index) - - If oGDPicturePDF.GetStat() = GdPictureStatus.OK Then - Dim oFileData As Byte() = New Byte(FileSize) {} - Dim status As GdPictureStatus = oGDPicturePDF.ExtractEmbeddedFile(index, oFileData) - - If status = GdPictureStatus.OK Then - oResults.Add(New AttachmentResult() With { - .FileContents = oFileData, - .FileName = oFileName - }) - Else - Logger.Error("The embedded file [{0}] has failed to extract. Status: {1}", oFileName, oGDPicturePDF.GetStat().ToString()) - Continue For - End If - Else - Logger.Error("An error occurred getting the file size for [{0}]. Status: {1}", oFileName, oGDPicturePDF.GetStat().ToString()) - Continue For - End If - Else - Logger.Warn("File [{0}] was skipped because its extension [{1}] is not allowed.", oFileName, oExtension) - Continue For - End If - Else - Logger.Error("An error occurred getting the file name for [{0}]. Status: {1}", oFileName, oGDPicturePDF.GetStat().ToString()) - Continue For - End If - Next - End If - Else - Dim oMessage = String.Format("An error occurred getting the number of embedded files. Status: {0}", oGDPicturePDF.GetStat().ToString()) - Throw New ApplicationException(oMessage) - End If + If oGDPicturePDF.LoadFromFile(FilePath, False) = GdPictureStatus.OK Then + oResults = DoExtract(oGDPicturePDF, oExtensions) + Else + Dim oMessage = String.Format("The file [{0}] can't be loaded. Status: [{1}]", FilePath, oGDPicturePDF.GetStat().ToString()) + Throw New ApplicationException(oMessage) + End If + End Using + + Return oResults + Catch ex As Exception + Logger.Warn("Unexpected Error while Extracting attachments from File [{0}]", FilePath) + Logger.Error(ex) + Return Nothing + End Try + End Function + + ''' + ''' Extracts all embedded files from a PDF file. + ''' Note: This does NOT filter out `ZUGFeRD-invoice.xml` anymore to allow for a more generic use. + ''' + ''' Filestream of the pdf + ''' List of allowed extensions to be extracted + Public Function Extract(Stream As Stream, AllowedExtensions As List(Of String)) As List(Of AttachmentResult) + Dim oResults As New List(Of AttachmentResult) + Dim oExtensions = AllowedExtensions.ConvertAll(New Converter(Of String, String)(Function(ext) ext.ToUpper)) + + Logger.Debug("Extracting embedded files from stream") + + Try + Using oGDPicturePDF As New GdPicturePDF() + If oGDPicturePDF.LoadFromStream(Stream, False) = GdPictureStatus.OK Then + oResults = DoExtract(oGDPicturePDF, oExtensions) Else - Dim oMessage = String.Format("The file [{0}] can't be loaded. Status: [{1}]", FileName, oGDPicturePDF.GetStat().ToString()) + Dim oMessage = String.Format("The filestream can't be loaded. Status: [{0}]", oGDPicturePDF.GetStat().ToString()) Throw New ApplicationException(oMessage) End If End Using Return oResults Catch ex As Exception - Logger.Warn("Unexpected Error while Extracting attachments from File [{0}]", FileName) + Logger.Warn("Unexpected Error while Extracting attachments from Filestream") Logger.Error(ex) Return Nothing End Try End Function + + Private Function DoExtract(GDPicturePDF As GdPicturePDF, Extensions As List(Of String)) As List(Of AttachmentResult) + Dim oResults As New List(Of AttachmentResult) + Dim oEmbeddedFileCount As Integer = GDPicturePDF.GetEmbeddedFileCount() + + If GDPicturePDF.GetStat() = GdPictureStatus.OK Then + Logger.Debug("Embedded file count is: [{0}]", oEmbeddedFileCount) + + If oEmbeddedFileCount > 0 Then + For oIndex = 0 To oEmbeddedFileCount - 1 + Dim oFileName As String = GDPicturePDF.GetEmbeddedFileName(oIndex) + + If GDPicturePDF.GetStat() = GdPictureStatus.OK Then + Logger.Debug("Extracting embedded file [{0}]", oFileName) + + Dim oExtension = New FileInfo(oFileName).Extension.ToUpper.Substring(1) + If Extensions.Contains(oExtension) Then + Dim oFileSize As Integer = GDPicturePDF.GetEmbeddedFileSize(oIndex) + + If GDPicturePDF.GetStat() = GdPictureStatus.OK Then + Logger.Debug("Filesize of embedded file is [{0}]", oFileSize) + + Dim oFileData As Byte() = New Byte(oFileSize) {} + Dim oStatus As GdPictureStatus = GDPicturePDF.ExtractEmbeddedFile(oIndex, oFileData) + + If oStatus = GdPictureStatus.OK Then + Logger.Debug("Embedded file [{0}] extracted sucessfully!", oFileName) + + oResults.Add(New AttachmentResult() With { + .FileContents = oFileData, + .FileName = oFileName + }) + Else + Logger.Error("The embedded file [{0}] has failed to extract. Status: {1}", oFileName, GDPicturePDF.GetStat().ToString()) + Continue For + End If + Else + Logger.Error("An error occurred getting the file size for [{0}]. Status: {1}", oFileName, GDPicturePDF.GetStat().ToString()) + Continue For + End If + Else + Logger.Warn("File [{0}] was skipped because its extension [{1}] is not allowed.", oFileName, oExtension) + Continue For + End If + Else + Logger.Error("An error occurred getting the file name for [{0}]. Status: {1}", oFileName, GDPicturePDF.GetStat().ToString()) + Continue For + End If + Next + End If + + Return oResults + Else + Dim oMessage = String.Format("An error occurred getting the number of embedded files. Status: {0}", GDPicturePDF.GetStat().ToString()) + Throw New ApplicationException(oMessage) + End If + End Function End Class diff --git a/WEBSERVICES/ZUGFeRDRESTService/Controllers/ValidationController.cs b/WEBSERVICES/ZUGFeRDRESTService/Controllers/ValidationController.cs index 90565c26..1c7b516d 100644 --- a/WEBSERVICES/ZUGFeRDRESTService/Controllers/ValidationController.cs +++ b/WEBSERVICES/ZUGFeRDRESTService/Controllers/ValidationController.cs @@ -38,7 +38,7 @@ namespace ZUGFeRDRESTService.Controllers public ValidationResponse() { status = RESPONSE_OK; - message = String.Empty; + message = string.Empty; errors = new List(); } @@ -85,7 +85,7 @@ namespace ZUGFeRDRESTService.Controllers { _logger.Debug("Start processing request to ValidationController"); - string oFilePath = Path.Combine(Path.GetTempPath(), file.FileName); + string oFilePath = Path.Combine(Path.GetTempPath(), file.FileName); _logger.Debug("Saving file to temp-path [{0}]", oFilePath); @@ -109,17 +109,22 @@ namespace ZUGFeRDRESTService.Controllers oResult = _props.CheckPropertyValues(oDocument, _propertyMap, "MESSAGEID"); - _logger.Debug("Result of checking against the database: {0} valid properties, {1} missing properties", oResult.ValidProperties, oResult.MissingProperties); + _logger.Debug("Result of checking against the database: {0} valid properties, {1} missing properties", + oResult.ValidProperties.Count, oResult.MissingProperties.Count); if (oResult.MissingProperties.Count > 0) { - throw new ZUGFeRDExecption(ZUGFeRDInterface.ErrorType.MissingProperties, + throw new ZUGFeRDExecption(ZUGFeRDInterface.ErrorType.MissingProperties, "Die hochgeladene Datei ist eine gültige ZUGFeRD-Rechnung, allerdings fehlen benötigte Daten."); } + string oMessage = "Die hochgeladene Datei ist eine gültige-ZUGFeRD Rechnung"; + + _logger.Debug($"Replying with: [{oMessage}]"); + return new ValidationResponse() { status = RESPONSE_OK, - message = "Die hochgeladene Datei ist eine gültige-ZUGFeRD Rechnung" + message = oMessage }; } catch (ZUGFeRDExecption ex) @@ -144,6 +149,8 @@ namespace ZUGFeRDRESTService.Controllers _ => new List() }; + _logger.Debug($"Replying with: [{oMessage}]"); + return new ValidationResponse() { status = RESPONSE_ERROR, @@ -153,10 +160,15 @@ namespace ZUGFeRDRESTService.Controllers catch (Exception ex) { _logger.Error(ex); + + string oMessage = "Die hochgeladene Datei kann nicht validiert werden!"; + + _logger.Debug($"Replying with: [{oMessage}]"); + return new ValidationResponse() { status = RESPONSE_ERROR, - message = "Die hochgeladene Datei kann nicht validiert werden!" + message = oMessage }; } }