This commit is contained in:
Jonathan Jenne 2023-11-23 10:23:16 +01:00
parent 200d6058cf
commit ee664f5512
5 changed files with 83 additions and 131 deletions

View File

@ -50,6 +50,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="DigitalDataController.vb" />
<Compile Include="IUselessModel.vb" />
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
@ -67,6 +68,7 @@
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<Compile Include="ServiceRegistrator.vb" />
<Compile Include="UselessModel.vb" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="My Project\Resources.resx">
@ -95,14 +97,6 @@
</Content>
</ItemGroup>
<ItemGroup>
<Reference Include="DigitalData.Modules.Database, Version=2.3.3.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\DDModules\Database\bin\Debug\DigitalData.Modules.Database.dll</HintPath>
</Reference>
<Reference Include="DigitalData.Modules.Logging, Version=2.6.2.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\DDModules\Logging\bin\Debug\DigitalData.Modules.Logging.dll</HintPath>
</Reference>
<Reference Include="Interop.WINDREAMLib">
<HintPath>P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WINDREAMLib.dll</HintPath>
<EmbedInteropTypes>True</EmbedInteropTypes>
@ -119,10 +113,7 @@
<HintPath>P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WMOTOOLLib.dll</HintPath>
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="Microsoft.Practices.Unity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>D:\ProgramFiles\windream\windream Web Service SDK\Libraries\3rdParty\Microsoft.Practices.Unity.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Practices.Unity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f" />
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\NLog.5.0.5\lib\net46\NLog.dll</HintPath>

View File

@ -1,7 +1,6 @@
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Logging
Imports System.Collections.Generic
Imports System.Collections.Generic
Imports System.Data
Imports System.Data.SqlClient
Imports System.Net
Imports System.Net.Http
Imports System.Net.Http.Headers
@ -12,6 +11,7 @@ Imports System.Web.Http
Imports System.Web.Http.Controllers
Imports System.Xml
Imports Windream.WebService.Documents
Imports Windream.WebService.Logging
Imports Windream.WebService.WebAPI.PlugIns
Imports WINDREAMLib
Imports WMCNNCTDLLLib
@ -22,14 +22,9 @@ Namespace Controllers
Public Class DigitalDataController
Inherits PlugInBaseController
Private ReadOnly _routesSettings As IEnumerable(Of RouteSettings)
Private ReadOnly _docController As IDocumentsController
Private _session As IWMSession6
Private ReadOnly _logConfig As LogConfig
Private ReadOnly _logger As Logger
Private ReadOnly _database As MSSQLServer
Private _logger As ILogging
''' <summary>
''' Gets the routes settings for the controller.
@ -40,61 +35,21 @@ Namespace Controllers
''' </value>
Public Overrides ReadOnly Property RoutesSettings As IEnumerable(Of RouteSettings)
Get
Return _routesSettings
Return New List(Of RouteSettings) From {
New RouteSettings("DigitalDataController", "DigitalData/{action}/{id}", New With {
.id = RouteParameter.Optional, .controller = "DigitalData"
})
}
End Get
End Property
Public Overrides Function ExecuteAsync(controllerContext As HttpControllerContext, cancellationToken As CancellationToken) As Task(Of HttpResponseMessage)
Return MyBase.ExecuteAsync(controllerContext, cancellationToken)
End Function
''' <summary>
''' Initializes a new instance of the <see cref="DigitalDataController"/> class.
''' </summary>
Sub New()
MyBase.New()
Sub New(pLogger As ILogging)
_logger = pLogger
Dim routesSettings As New List(Of RouteSettings) From {
New RouteSettings("DigitalDataController", "DigitalData/{action}/{id}", New With {
.id = RouteParameter.Optional, .controller = "DigitalData"
})
}
_routesSettings = routesSettings
Dim oLogPath = GetLogPath()
_logConfig = New LogConfig(LogPath:=LogConfig.PathType.CustomPath, oLogPath)
_logger = _logConfig.GetLogger()
'Dim config = New LoggingConfiguration()
'Dim fileTarget = New FileTarget() With {
' .Name = "BNSPlugin",
' .ArchiveEvery = FileArchivePeriod.Day,
' .FileName = "D:/ProgramFiles/DigitalData/SERVICES/WMWebServiceBNS/Log/${date:format=yyyy-MM-dd}-WMWebServiceBNS.txt",
' .Layout = "${longdate} || ${message}"
'}
'config.AddTarget("file", fileTarget)
'Dim rule = New LoggingRule("*", LogLevel.Debug, fileTarget)
'config.LoggingRules.Add(rule)
'LogManager.Configuration = config
'_logger = LogManager.GetLogger("DigitalDataController")
Dim oConnectionString = GetConnectionString()
_logger.Info($"[DATABASE] Verbindung zu {oConnectionString}")
_database = New MSSQLServer(_logConfig, oConnectionString)
If _database.DBInitialized = False Then
_logger.Info("[DATABASE] Die Verbindung zur Datenbank konnte nicht hergestellt werden.")
Else
_logger.Info("[DATABASE] Die Verbindung zur Datenbank wurde hergestellt.")
End If
_logger.Info("[INIT] Die Initialisierung wurde abgeschlossen.")
_logger.Write("[INIT] Die Initialisierung wurde abgeschlossen.")
End Sub
Private Function GetPluginPath()
@ -117,7 +72,7 @@ Namespace Controllers
Return Doc
Else
_logger.Info($"[CONFIG] Konfigurations Datei {configFile} wurde NICHT gefunden!")
_logger.Write($"[CONFIG] Konfigurations Datei {configFile} wurde NICHT gefunden!")
Return Nothing
End If
@ -134,17 +89,6 @@ Namespace Controllers
End If
End Function
Private Function GetLogPath() As String
Dim oConfig = GetConfig()
If oConfig IsNot Nothing Then
Dim oLogPath As String = oConfig.DocumentElement.SelectSingleNode("/config/logPath").InnerText
Return oLogPath
Else
Return Nothing
End If
End Function
''' <summary>
''' A simple example of a http-get service method implementation.
''' </summary>
@ -153,31 +97,37 @@ Namespace Controllers
''' <remarks>This method creates a nice greeting.</remarks>
<HttpGet>
Public Function BNSDownload(<FromUri> docId As Integer, <FromUri> userId As String) As HttpResponseMessage
Dim DT As DataTable
Dim DT As New DataTable("DDRESULT")
Dim Domain, Username, Password As String
_logger.Info($"[REQUEST] Anfrage von Benutzer-ID {userId} für Dokument-ID {docId}")
_logger.Write($"[REQUEST] Anfrage von Benutzer-ID {userId} für Dokument-ID {docId}")
Try
DT = _database.GetDatatable($"SELECT DOMAIN, USERNAME, PW FROM TBDD_WEBSERVICE_USER_EX WHERE USERNAME_LINK = '{userId}'")
Using oConnection As New SqlConnection(GetConnectionString())
Using oAdapter As New SqlDataAdapter($"SELECT DOMAIN, USERNAME, PW FROM TBDD_WEBSERVICE_USER_EX WHERE USERNAME_LINK = '{userId}'", oConnection)
oAdapter.Fill(DT)
End Using
End Using
'DT = _database.GetDatatable($"SELECT DOMAIN, USERNAME, PW FROM TBDD_WEBSERVICE_USER_EX WHERE USERNAME_LINK = '{userId}'")
Catch ex As Exception
_logger.Info("[DATABASE] Fehler beim Zugriff auf die Datenbank ")
_logger.Info(ex.Message)
_logger.Write("[DATABASE] Fehler beim Zugriff auf die Datenbank ")
_logger.WriteError(ex)
Return CreateResponseMessage(Request, HttpStatusCode.InternalServerError)
End Try
If DT.Rows.Count = 0 Then
_logger.Info($"[DATABASE] BenutzerID {userId} wurde nicht in der Datenbank gefunden.")
_logger.Write($"[DATABASE] BenutzerID {userId} wurde nicht in der Datenbank gefunden.")
Return CreateResponseMessage(Request, $"Benutzer {userId} wurde nicht gefunden", HttpStatusCode.Unauthorized)
Else
Dim firstRow As DataRow = DT.Rows.Item(0)
Dim oRow As DataRow = DT.Rows.Item(0)
Domain = firstRow.Item("DOMAIN")
Username = firstRow.Item("USERNAME")
Password = firstRow.Item("PW")
Domain = oRow.Item("DOMAIN")
Username = oRow.Item("USERNAME")
Password = oRow.Item("PW")
_logger.Info($"[DATABASE] BenutzerID {userId} wurde gefunden.")
_logger.Write($"[DATABASE] BenutzerID {userId} wurde gefunden.")
End If
Dim loggedIn As Boolean = CreateSessionForUser(Username, Password, Domain)
@ -194,9 +144,9 @@ Namespace Controllers
Try
WMDoc = _session.GetWMObjectById(WMEntity.WMEntityDocument, docId)
Catch ex As Exception
_logger.Info("[WINDREAM/GetWMObjectById] Ein Fehler beim Zugriff auf Windream ist aufgetreten ")
_logger.Info(ex.Message)
_logger.Info($"[WINDREAM/Session] Session für Benutzer {Username} wird geschlossen")
_logger.Write("[WINDREAM/GetWMObjectById] Ein Fehler beim Zugriff auf Windream ist aufgetreten ")
_logger.WriteError(ex)
_logger.Write($"[WINDREAM/Session] Session für Benutzer {Username} wird geschlossen")
_session.Logout()
Return CreateResponseMessage(Request, "Document not found", HttpStatusCode.NotFound)
@ -206,15 +156,15 @@ Namespace Controllers
WMStream = WMDoc.OpenStream("BinaryObject", WMObjectStreamOpenMode.WMObjectStreamOpenModeRead)
fileContent = WMStream.Read(WMStream.GetSize())
Catch ex As Exception
_logger.Info("[WINDREAM/OpenStream] Ein Fehler beim Zugriff auf Windream ist aufgetreten")
_logger.Info(ex.Message)
_logger.Info($"[WINDREAM/Session] Session für Benutzer {Username} wird geschlossen")
_logger.Write("[WINDREAM/OpenStream] Ein Fehler beim Zugriff auf Windream ist aufgetreten")
_logger.WriteError(ex)
_logger.Write($"[WINDREAM/Session] Session für Benutzer {Username} wird geschlossen")
_session.Logout()
Return CreateResponseMessage(Request, HttpStatusCode.InternalServerError)
End Try
_logger.Info($"[WINDREAM/Session] Session für Benutzer {Username} wird geschlossen")
_logger.Write($"[WINDREAM/Session] Session für Benutzer {Username} wird geschlossen")
_session.Logout()
' Gibt die Datei zum Download zurück
@ -222,10 +172,11 @@ Namespace Controllers
End Function
Private Function CreateFileResponseMessage(data As Byte(), filename As String) As HttpResponseMessage
_logger.Info($"[WINDREAM/Download] Datei {filename} wird für Download zur Verfügung gestellt")
Dim Res = New HttpResponseMessage()
Res.StatusCode = HttpStatusCode.OK
Res.Content = New ByteArrayContent(data)
_logger.Write($"[WINDREAM/Download] Datei {filename} wird für Download zur Verfügung gestellt")
Dim Res = New HttpResponseMessage With {
.StatusCode = HttpStatusCode.OK,
.Content = New ByteArrayContent(data)
}
Res.Content.Headers.ContentType = New MediaTypeHeaderValue("application/octet-stream")
Res.Content.Headers.ContentDisposition = New ContentDispositionHeaderValue("attachment") With {
.FileName = filename
@ -244,66 +195,68 @@ Namespace Controllers
'' Get the current Windream Server
DMSServer = WMServerBrowser.GetCurrentServer()
Catch ex As Exception
_logger.Info($"[WINDREAM/ServerBrowser] DMS Server konnte nicht ausgelesen werden.")
_logger.Info(ex.Message)
_logger.Write($"[WINDREAM/ServerBrowser] DMS Server konnte nicht ausgelesen werden.")
_logger.WriteError(ex)
Return False
End Try
Try
' Create a User Object for Session
User = New WMOTOOLLib.WMUserIdentity()
User.aDomain = domain
User.aPassword = password
User.aUserName = username
User.aServerName = DMSServer
User = New WMOTOOLLib.WMUserIdentity With {
.aDomain = domain,
.aPassword = password,
.aUserName = username,
.aServerName = DMSServer
}
Catch ex As Exception
_logger.Info($"[WINDREAM/User] User Objekt konnte nicht erstellt werden.")
_logger.Info(ex.Message)
_logger.Write($"[WINDREAM/User] User Objekt konnte nicht erstellt werden.")
_logger.WriteError(ex)
Return False
End Try
_logger.Info("[WINDREAM/Session] Session wird aufgebaut")
_logger.Info($"[WINDREAM/Session] Username: {username}")
_logger.Info($"[WINDREAM/Session] Passwort: {password}")
_logger.Info($"[WINDREAM/Session] Domäne: {domain}")
_logger.Info($"[WINDREAM/Session] Windream Server: {DMSServer}")
_logger.Write("[WINDREAM/Session] Session wird aufgebaut")
_logger.Write($"[WINDREAM/Session] Username: {username}")
_logger.Write($"[WINDREAM/Session] Passwort: {password}")
_logger.Write($"[WINDREAM/Session] Domäne: {domain}")
_logger.Write($"[WINDREAM/Session] Windream Server: {DMSServer}")
Try
' Create Connect Object for Session
Connect = New WMConnect()
Connect.ModuleId = 9
Connect = New WMConnect With {
.ModuleId = 9
}
Catch ex As Exception
_logger.Info($"[WINDREAM/Connect] Connect Objekt konnte nicht erstellt werden.")
_logger.Info(ex.Message)
_logger.Write($"[WINDREAM/Connect] Connect Objekt konnte nicht erstellt werden.")
_logger.WriteError(ex)
Return False
End Try
Try
Session = Connect.Login(User)
_logger.Info($"[WINDREAM/Session] Session wurde aufgebaut")
_logger.Write($"[WINDREAM/Session] Session wurde aufgebaut")
If Session.aLoggedin Then
_session = Session
_logger.Info($"[WINDREAM/Session] Benutzer {username} ist eingeloggt")
_logger.Write($"[WINDREAM/Session] Benutzer {username} ist eingeloggt")
Return True
Else
_logger.Info($"[WINDREAM/Session] Fehler beim Aufbau der Session. Benutzer {username} ist nicht eingeloggt!")
_logger.Write($"[WINDREAM/Session] Fehler beim Aufbau der Session. Benutzer {username} ist nicht eingeloggt!")
Return False
End If
Catch ex As Exception
_logger.Info($"[WINDREAM/Session] Fehler bei Login von Benutzer {username}!")
_logger.Info(ex.Message)
_logger.Write($"[WINDREAM/Session] Fehler bei Login von Benutzer {username}!")
_logger.WriteError(ex)
If Not IsNothing(Session) AndAlso Session.aLoggedin Then
_session = Session
_logger.Info($"[WINDREAM/Session] Benutzer {username} ist eingeloggt")
_logger.Write($"[WINDREAM/Session] Benutzer {username} ist eingeloggt")
Return True
Else
_logger.Info($"[WINDREAM/Session] Fehler beim Aufbau der Session. Benutzer {username} ist nicht eingeloggt!")
_logger.Info(ex.Message)
_logger.Write($"[WINDREAM/Session] Fehler beim Aufbau der Session. Benutzer {username} ist nicht eingeloggt!")
_logger.WriteError(ex)
Return False
End If
End Try

View File

@ -0,0 +1,3 @@
Friend Interface IUselessModel
Property Message As String
End Interface

View File

@ -1,10 +1,10 @@
Imports Microsoft.Practices.Unity
Imports Microsoft.practices.unity
Imports Windream.WebService.PlugIns
Public Class ServiceRegistrator
Implements IServiceRegistrator
Public Sub RegisterServices(container As IUnityContainer) Implements IServiceRegistrator.RegisterServices
' container.RegisterType(Of TInterface, TImpl)()
container.RegisterType(Of IUselessModel, UselessModel)()
End Sub
End Class

View File

@ -0,0 +1,5 @@
Public Class UselessModel
Implements IUselessModel
Public Property Message As String Implements IUselessModel.Message
End Class