avisoController

This commit is contained in:
2024-11-12 09:34:50 +01:00
parent 8ab7ab8c38
commit f6348fd3b2

View File

@@ -1,6 +1,11 @@
Imports System.IO
Imports System.Net
Imports System.Net.Http
Imports System.Threading
Imports System.Web.Http
Imports System.Web.Http.Description
Imports Microsoft.Web.Http
Imports Org.BouncyCastle.Asn1
Imports VERAG_PROG_ALLGEMEIN
Namespace ApiController.Controllers
@@ -21,12 +26,19 @@ Namespace ApiController.Controllers
<ApiVersion("1")>
<System.Web.Http.Route("api/v{version:apiVersion}/uploadAvisoAttachment")>
<BasicAuthentication>
Public Function uploadAvisoAttachment(anhangsart As String, arrayOfFiles() As String, Optional avisoId As Integer = -1, Optional sendungsId As Integer = -1) As String
Public Function uploadAvisoAttachment(anhangsart As String, arrayOfFiles() As String, Optional avisoId As Integer = -1, Optional sendungsId As Integer = -1, Optional saveOnServer As Boolean = False) As HttpResponseMessage
VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = False
VERAG_PROG_ALLGEMEIN.cAllgemein.ERR_OP_GLOBAL = VERAG_PROG_ALLGEMEIN.ERROR_OP.MAIL
VERAG_PROG_ALLGEMEIN.cAllgemein.ERR_OP_GLOBAL = VERAG_PROG_ALLGEMEIN.ERROR_OP.LOG
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Dim prog As String = ""
Dim DSZugang As New DataTable
Dim DS_Domain As String = ""
Dim DS_name As String = ""
Dim DS_pw As String = ""
Dim uploadAvisoAttachmentErr As String = "ERR"
Try
Dim ip = Request.Properties("MS_HttpContext").Request.UserHostAddress()
@@ -52,36 +64,74 @@ Namespace ApiController.Controllers
' Return uploadAvisoAttachment
'End If
uploadAvisoAttachment = "ERR"
If arrayOfFiles Is Nothing OrElse arrayOfFiles.Length < 0 Then
If arrayOfFiles Is Nothing Then
uploadAvisoAttachmentErr = "FILESARRAY_NOTHING_ERR"
Return Request.CreateErrorResponse(HttpStatusCode.NotFound, uploadAvisoAttachmentErr)
End If
If arrayOfFiles.Length < 1 Then
uploadAvisoAttachmentErr = "FILESARRAY_EMPTY_ERR" & arrayOfFiles.ToString
Return Request.CreateErrorResponse(HttpStatusCode.NotFound, uploadAvisoAttachmentErr)
uploadAvisoAttachment = "FILESARRAY_EMPTY_ERR"
Return uploadAvisoAttachment
End If
If anhangsart <> "" Then ' AndAlso listOfImages IsNot Nothing AndAlso listOfImages.Count > 0
If Not saveOnServer Then
prog = "Datenarchiv"
DSZugang = SQL.loadDgvBySql("SELECT top(1) * FROM tblAPIEinstellungen WHERE api_program='" & prog & "' and api_productive ='" & IIf(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, "0", "1") & "'", "ADMIN")
If DSZugang.Rows.Count = 0 Then
uploadAvisoAttachmentErr = "LOGIN_DS_ERR"
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
End If
'Zugang für Datenarchiv
DS_Domain = DSZugang.Rows(0).Item("api_url")
DS_name = DSZugang.Rows(0).Item("api_user")
DS_pw = DSZugang.Rows(0).Item("api_password")
End If
If sendungsId > 0 Then
Dim SENDUNG = New VERAG_PROG_ALLGEMEIN.cSendungen(sendungsId)
If SENDUNG Is Nothing Then
uploadAvisoAttachment = "NO_SENDUNG_ERR"
Return uploadAvisoAttachment
uploadAvisoAttachmentErr = "NO_SENDUNG_ERR"
Return Request.CreateErrorResponse(HttpStatusCode.NotFound, uploadAvisoAttachmentErr)
Else
If Not saveOnServer Then
'wenn bereits offen, dann wareten
For i = 0 To 20
If Not NetzwerkVerbindungOffen(DS_name, DS_Domain) Then Exit For
Thread.Sleep(1000)
i = i + 1
If i = 10 AndAlso NetzwerkVerbindungOffen(DS_name, DS_Domain) Then
uploadAvisoAttachmentErr = "NO_NEW_DS_CONNECTION_ERR"
Return Request.CreateErrorResponse(600, uploadAvisoAttachmentErr)
End If
Next
NetzwerkVerbindungHerstellen(DS_Domain, DS_name, DS_pw)
End If
For Each image In arrayOfFiles
Dim filetemp = image.Replace("data:application/pdf;base64,", "")
Try
Convert.FromBase64String(filetemp)
Catch ex As Exception
uploadAvisoAttachment = "BASE64_FORMAT_ERR"
Return uploadAvisoAttachment
uploadAvisoAttachmentErr = "BASE64_FORMAT_ERR"
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
End Try
Dim fileextension = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getFileExtensionFromBase64String(filetemp)
@@ -91,44 +141,114 @@ Namespace ApiController.Controllers
' Return uploadAvisoAttachment
'End If
If Not saveOnServer Then
Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "AVISO_ANHAENGE", SENDUNG.tblSnd_AvisoID, Now.ToString("ddMMyy_HHmmss.ffff"), "", anhangsart & "_" & Now.ToString("ddMMyy_HHmmss"), False)
DS.uploadDataToDATENSERVER_fromBase64String(filetemp, DS.da_name, IIf(fileextension.ToLower <> "unknown", "." & fileextension, "." & "jpg"), False, False)
If DS.da_id <= 0 Then
uploadAvisoAttachment = "UPLOAD_DS_ERR"
Return uploadAvisoAttachment
End If
Dim fileName = DS.da_name
Dim destPath = DS.GET_TOP1_PATH
fileName = VERAG_PROG_ALLGEMEIN.cDATENSERVER.replaceInvalidCahr(fileName)
Dim fi As New FileInfo(destPath)
Dim ANH As New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(SENDUNG.tblSnd_AvisoID, fileName, DS.da_id, anhangsart, fi.Extension, sendungsId,, fi.Length,)
If Not ANH.SAVE Then
uploadAvisoAttachment = "SAVE_ANH_ERR"
Return uploadAvisoAttachment
Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "AVISO_ANHAENGE", SENDUNG.tblSnd_AvisoID, Now.ToString("ddMMyy_HHmmss.ffff"), "", anhangsart & "_" & Now.ToString("ddMMyy_HHmmss"), False)
DS.uploadDataToDATENSERVER_fromBase64String(filetemp, DS.da_name, IIf(fileextension.ToLower <> "unknown", "." & fileextension, "." & "jpg"), False, False)
If DS Is Nothing AndAlso DS.da_id Is Nothing AndAlso DS.da_id <= 0 Then
uploadAvisoAttachmentErr = "UPLOAD_DS_ERR"
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
End If
Dim fileName = DS.da_name
Dim destPath = DS.GET_TOP1_PATH
fileName = VERAG_PROG_ALLGEMEIN.cDATENSERVER.replaceInvalidCahr(fileName)
If destPath <> "" Then
Dim fi As New FileInfo(destPath)
Dim ANH As New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(SENDUNG.tblSnd_AvisoID, fileName, DS.da_id, anhangsart, fi.Extension, sendungsId,, fi.Length,)
If Not ANH.SAVE Then
uploadAvisoAttachmentErr = "SAVE_ANH_ERR"
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
End If
Else
Dim ANH As New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(SENDUNG.tblSnd_AvisoID, fileName, DS.da_id, anhangsart, IIf(fileextension.ToLower <> "unknown", "." & fileextension, "." & "jpg"), sendungsId,, 100,)
If Not ANH.SAVE Then
uploadAvisoAttachmentErr = "SAVE_ANH_ERR"
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
End If
End If
Else
Try
Dim TMP_PATH = ""
If Environment.GetFolderPath(Environment.SpecialFolder.Personal) = "" Then ' WEB_SERV
TMP_PATH = "G:\temp\Verag\DatenTMP\SENDUNGSID\"
Else
TMP_PATH = Path.GetTempPath() & "\VERAG\DatenTMP\"
End If
TMP_PATH = TMP_PATH.Replace("\\", "\")
If Not My.Computer.FileSystem.DirectoryExists(TMP_PATH) Then
My.Computer.FileSystem.CreateDirectory(TMP_PATH)
End If
Dim name = VERAG_PROG_ALLGEMEIN.cDATENSERVER.replaceInvalidCahr(sendungsId & "_" & anhangsart & "_" & Now.ToString("ddMMyy_HHmmss"))
name = name.Replace("?", "")
Dim extension = IIf(fileextension.ToLower <> "unknown", "." & fileextension, "." & "jpg")
Dim destPath = TMP_PATH & name
While System.IO.File.Exists(destPath)
destPath = TMP_PATH & name & "_" & Now.ToString("yyyyMMddHHmmssfff")
End While
Dim bytes As Byte() = Convert.FromBase64String(filetemp)
File.WriteAllBytes(destPath & extension, bytes)
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine, System.Reflection.MethodInfo.GetCurrentMethod.Name)
uploadAvisoAttachmentErr = ex.Message & " " & ex.StackTrace
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
End Try
End If
Next
If Not saveOnServer Then NetzwerkVerbindungTrennen(DS_Domain)
End If
ElseIf avisoId > 0 Then
Dim AVISO = VERAG_PROG_ALLGEMEIN.cAviso.getAvisoById(avisoId)
If AVISO Is Nothing Then
uploadAvisoAttachment = "NO_AVISO_ERR"
Return uploadAvisoAttachment
uploadAvisoAttachmentErr = "NO_AVISO_ERR"
Return Request.CreateErrorResponse(HttpStatusCode.NotFound, uploadAvisoAttachmentErr)
Else
If Not saveOnServer Then
'wenn bereits offen, dann wareten
For i = 0 To 20
If Not NetzwerkVerbindungOffen(DS_name, DS_Domain) Then Exit For
Thread.Sleep(1000)
i = i + 1
If i = 10 AndAlso NetzwerkVerbindungOffen(DS_name, DS_Domain) Then
uploadAvisoAttachmentErr = "NO_NEW_DS_CONNECTION_ERR"
Return Request.CreateErrorResponse(600, uploadAvisoAttachmentErr)
End If
Next
NetzwerkVerbindungHerstellen(DS_Domain, DS_name, DS_pw)
End If
For Each image In arrayOfFiles
Dim filetemp = image.Replace("data:application/pdf;base64,", "")
Try
Convert.FromBase64String(filetemp)
Catch ex As Exception
uploadAvisoAttachment = "BASE64_FORMAT_ERR"
Return uploadAvisoAttachment
uploadAvisoAttachmentErr = "BASE64_FORMAT_ERR"
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
End Try
@@ -139,45 +259,103 @@ Namespace ApiController.Controllers
' Return uploadAvisoAttachment
'End If
Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "AVISO_ANHAENGE", avisoId, Now.ToString("ddMMyy_HHmmss.ffff"), "", anhangsart & "_" & Now.ToString("ddMMyy_HHmmss"), False)
DS.uploadDataToDATENSERVER_fromBase64String(filetemp, DS.da_name, IIf(fileextension.ToLower <> "unknown", "." & fileextension, "." & "jpg"), False, False)
If Not saveOnServer Then
Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "AVISO_ANHAENGE", avisoId, Now.ToString("ddMMyy_HHmmss.ffff"), "", anhangsart & "_" & Now.ToString("ddMMyy_HHmmss"), False)
DS.uploadDataToDATENSERVER_fromBase64String(filetemp, DS.da_name, IIf(fileextension.ToLower <> "unknown", "." & fileextension, "." & "jpg"), False, False)
If DS Is Nothing AndAlso DS.da_id Is Nothing AndAlso DS.da_id <= 0 Then
uploadAvisoAttachmentErr = "UPLOAD_DS_ERR"
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
End If
Dim fileName = DS.da_name
Dim destPath = DS.GET_TOP1_PATH
fileName = VERAG_PROG_ALLGEMEIN.cDATENSERVER.replaceInvalidCahr(fileName)
If destPath <> "" Then
Dim fi As New FileInfo(destPath)
Dim ANH As New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(avisoId, fileName, DS.da_id, anhangsart, fi.Extension, sendungsId,, fi.Length,)
If Not ANH.SAVE Then
uploadAvisoAttachmentErr = "SAVE_ANH_ERR"
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
End If
Else
Dim ANH As New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(avisoId, fileName, DS.da_id, anhangsart, IIf(fileextension.ToLower <> "unknown", "." & fileextension, "." & "jpg"), sendungsId,, 100,)
If Not ANH.SAVE Then
uploadAvisoAttachmentErr = "SAVE_ANH_ERR"
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
End If
End If
Else
Try
Dim TMP_PATH = ""
If Environment.GetFolderPath(Environment.SpecialFolder.Personal) = "" Then ' WEB_SERV
TMP_PATH = "G:\temp\Verag\DatenTMP\AVISOID\"
Else
TMP_PATH = Path.GetTempPath() & "\VERAG\DatenTMP\"
End If
TMP_PATH = TMP_PATH.Replace("\\", "\")
If Not My.Computer.FileSystem.DirectoryExists(TMP_PATH) Then
My.Computer.FileSystem.CreateDirectory(TMP_PATH)
End If
Dim name = VERAG_PROG_ALLGEMEIN.cDATENSERVER.replaceInvalidCahr(avisoId & "_" & anhangsart & "_" & Now.ToString("ddMMyy_HHmmss"))
name = name.Replace("?", "")
Dim extension = IIf(fileextension.ToLower <> "unknown", "." & fileextension, "." & "jpg")
Dim destPath = TMP_PATH & name
While System.IO.File.Exists(destPath)
destPath = TMP_PATH & name & "_" & Now.ToString("yyyyMMddHHmmssfff")
End While
Dim bytes As Byte() = Convert.FromBase64String(filetemp)
File.WriteAllBytes(destPath & extension, bytes)
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine, System.Reflection.MethodInfo.GetCurrentMethod.Name)
uploadAvisoAttachmentErr = ex.Message & " " & ex.StackTrace
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
End Try
If DS.da_id <= 0 Then
uploadAvisoAttachment = "UPLOAD_DS_ERR"
Return uploadAvisoAttachment
End If
Dim fileName = DS.da_name
Dim destPath = DS.GET_TOP1_PATH
fileName = VERAG_PROG_ALLGEMEIN.cDATENSERVER.replaceInvalidCahr(fileName)
Dim fi As New FileInfo(destPath)
Dim ANH As New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(avisoId, fileName, DS.da_id, anhangsart, fi.Extension, sendungsId,, fi.Length,)
If Not ANH.SAVE Then
uploadAvisoAttachment = "SAVE_ANH_ERR"
Return uploadAvisoAttachment
End If
Next
If Not saveOnServer Then NetzwerkVerbindungTrennen(DS_Domain)
End If
Else
Return uploadAvisoAttachment
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
End If
Return "OK"
Return Request.CreateErrorResponse(HttpStatusCode.OK, "DOCS HAS BEEN UPLOADED")
End If
Catch ex As Exception
Return uploadAvisoAttachment
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine, System.Reflection.MethodInfo.GetCurrentMethod.Name)
uploadAvisoAttachmentErr = ex.Message & " " & ex.StackTrace
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
End Try
Return uploadAvisoAttachment
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
End Function
@@ -365,6 +543,47 @@ Namespace ApiController.Controllers
Return TESTEN_POST
End Function
Public Shared Sub NetzwerkVerbindungHerstellen(remotePath As String, username As String, password As String)
' Netzwerkverbindung mit "net use" aufbauen
Dim startInfo As New ProcessStartInfo("net", $"use {remotePath} /user:{username} {password}")
startInfo.WindowStyle = ProcessWindowStyle.Hidden
startInfo.CreateNoWindow = True
Process.Start(startInfo).WaitForExit()
End Sub
' Methode zum Trennen der Verbindung
Public Shared Sub NetzwerkVerbindungTrennen(remotePath As String)
Dim startInfo As New ProcessStartInfo("net", $"use {remotePath} /delete")
startInfo.WindowStyle = ProcessWindowStyle.Hidden
startInfo.CreateNoWindow = True
Process.Start(startInfo).WaitForExit()
End Sub
Function NetzwerkVerbindungOffen(ByVal username As String, ByVal remotePath As String) As Boolean
Try
' Führe den Befehl "net use" aus und hole die Ausgabe
Dim process As New Process()
process.StartInfo.FileName = "cmd.exe"
process.StartInfo.Arguments = "/c net use"
process.StartInfo.RedirectStandardOutput = True
process.StartInfo.UseShellExecute = False
process.StartInfo.CreateNoWindow = True
process.Start()
' Lies die Ausgabe des Befehls
Dim output As String = process.StandardOutput.ReadToEnd()
process.WaitForExit()
' Überprüfe, ob die Ausgabe die gewünschte Freigabe und den Benutzernamen enthält
Return output.Contains(remotePath) AndAlso output.Contains(username)
Catch ex As Exception
Console.WriteLine("Fehler: " & ex.Message)
Return False
End Try
End Function
End Class