348 lines
16 KiB
VB.net
348 lines
16 KiB
VB.net
Imports System.ComponentModel
|
|
Imports DigitalData.Modules.Logging
|
|
Imports DigitalData.Modules.Config
|
|
Imports DigitalData.Modules.Windream
|
|
Imports DigitalData.Modules.Filesystem
|
|
Imports DigitalData.Modules.Messaging
|
|
Imports DigitalData.Modules.Database
|
|
Imports DLLLicenseManager
|
|
Public Class ClassInit
|
|
Private Form As Form
|
|
|
|
Public Sub New(pForm As Form)
|
|
Form = pForm
|
|
End Sub
|
|
|
|
Public Sub InitLogger()
|
|
LOGCONFIG = New LogConfig(LogConfig.PathType.AppData, Nothing, Nothing,
|
|
CompanyName:=My.Application.Info.CompanyName,
|
|
ProductName:=My.Application.Info.ProductName)
|
|
LOGGER = LOGCONFIG.GetLogger("Globix")
|
|
LOGGER.Info("Programmstart: " & Now)
|
|
LOGGER.Info("Username: {0}", Environment.UserName)
|
|
End Sub
|
|
|
|
Public Sub InitConfig()
|
|
CONFIG = New ConfigManager(Of ClassConfig)(LOGCONFIG, Application.UserAppDataPath, Application.CommonAppDataPath, Application.StartupPath)
|
|
LOGCONFIG.Debug = Not CONFIG.Config.LogDEBUG
|
|
LOGGER.Info("Debug log set to: [{0}]", LOGCONFIG.Debug)
|
|
|
|
MyConnectionString = DecryptConnectionString(CONFIG.Config.ConnectionString)
|
|
LogErrorsOnly = CONFIG.Config.LogDEBUG
|
|
|
|
'myPreviewActive = CONFIG.Config.FilePreview
|
|
FW_started = CONFIG.Config.FolderWatchStarted
|
|
CURR_DELETE_ORIGIN = CONFIG.Config.DeleteOriginalFile
|
|
End Sub
|
|
|
|
Public Function InitDatabase()
|
|
Dim dbResult As Boolean
|
|
'LoadMyConfig()
|
|
If LoadFileExclusion() = False Then
|
|
If USER_LANGUAGE = "de-DE" Then
|
|
MsgBox("Die Ausschlusskriterien für Dateien in Folderwatch konnten nicht angelegt werden!", MsgBoxStyle.Information)
|
|
Else
|
|
MsgBox("File-Exclusions in Folderwatch could not be created!", MsgBoxStyle.Information)
|
|
End If
|
|
|
|
End If
|
|
|
|
If MyConnectionString <> String.Empty Then
|
|
' === NEW ===
|
|
DATABASE_ECM = New MSSQLServer(LOGCONFIG, MyConnectionString)
|
|
dbResult = DATABASE_ECM.DBInitialized
|
|
|
|
' === OLD ===
|
|
'dbResult = ClassDatabase.Init()
|
|
Else
|
|
MsgBox("No Databaseconnection configured. (First Start or Appdata not accessible)" & vbNewLine & "Basic-Config will be loaded.", MsgBoxStyle.Information)
|
|
ERROR_STATE = "NO DB-CONNECTION"
|
|
frmConfig_Basic.ShowDialog()
|
|
|
|
' === NEW ===
|
|
DATABASE_ECM = New MSSQLServer(LOGCONFIG, MyConnectionString)
|
|
dbResult = DATABASE_ECM.DBInitialized
|
|
|
|
' === OLD ===
|
|
'dbResult = ClassDatabase.Init()
|
|
End If
|
|
|
|
If dbResult = False Then
|
|
ERROR_STATE = "FAILED DBCONNECTION"
|
|
' Fehler wird in frmSplash abgehandelt
|
|
'MsgBox("Error in init database. (Connection failed) More information in the logfile.", MsgBoxStyle.Critical)
|
|
Return False
|
|
Else
|
|
Return True
|
|
End If
|
|
End Function
|
|
<STAThread()>
|
|
Public Sub InitBasics()
|
|
Dim configResult As Boolean
|
|
configResult = Load_BasicConfig()
|
|
|
|
FILESYSTEM = New File(LOGCONFIG)
|
|
EMAIL = New Email2(LOGCONFIG)
|
|
|
|
If configResult = False Then
|
|
If USER_LANGUAGE = "de-DE" Then
|
|
Throw New Exception("Unerwarteter Fehler beim Initialisieren der Basis-Einstellungen. Weitere Informationen finden Sie in der Logdatei.")
|
|
Else
|
|
Throw New Exception("Unexpected error while initializing basic-settings. More info in the log.")
|
|
End If
|
|
Else
|
|
If IDB_ACTIVE = False Then
|
|
Try
|
|
WINDREAM = New Windream(LOGCONFIG, False, WMDrive, WINDREAM_BASEPATH, True, "", "", "", "")
|
|
If Not IsNothing(WINDREAM) Then
|
|
If WINDREAM.SessionLoggedin = True Then
|
|
LOGGER.Debug("windream initialisiert")
|
|
Else
|
|
Throw New Exception("Could not create a windream session")
|
|
End If
|
|
End If
|
|
Catch ex As Exception
|
|
LOGGER.Warn("CHECKING WMConnectivity: " & ex.Message)
|
|
Throw New Exception("Unexpected error in CHECKING WMConnectivity")
|
|
End Try
|
|
End If
|
|
|
|
End If
|
|
End Sub
|
|
|
|
Public Function Load_BasicConfig()
|
|
Try
|
|
'ClassDatabase.Init()
|
|
Dim oSql As String = "SELECT * FROM TBDD_MODULES WHERE NAME = 'Global-Indexer'"
|
|
Dim DT As DataTable = DATABASE_ECM.GetDatatable(oSql)
|
|
If DT.Rows.Count = 1 Then
|
|
GI_withWindream = DT.Rows(0).Item("BIT1")
|
|
'vWLaufwerk = DT.Rows(0).Item("STRING1")
|
|
End If
|
|
oSql = "SELECT * FROM TBDD_BASECONFIG"
|
|
DT = DATABASE_ECM.GetDatatable(oSql)
|
|
If DT.Rows.Count = 1 Then
|
|
WMDrive = DT.Rows(0).Item("WM_DRIVE")
|
|
Return True
|
|
Else
|
|
Return False
|
|
End If
|
|
Catch ex As Exception
|
|
MsgBox("Error in Load_BasicConfig" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
|
|
Return False
|
|
End Try
|
|
Return True
|
|
End Function
|
|
|
|
Public Sub Init_Folderwatch()
|
|
Try
|
|
FILE_HANDLER = New ClassFileHandler(LOGCONFIG)
|
|
FOLDER_WATCHER = New ClassFolderWatcher(LOGCONFIG)
|
|
AddHandler FOLDER_WATCHER.FileCreated, AddressOf OnCreated
|
|
|
|
Dim sql As String = "SELECT FOLDER_PATH FROM TBGI_FOLDERWATCH_USER WHERE FOLDER_TYPE = 'DEFAULT' AND USER_ID = " & USER_ID
|
|
Dim folderwatchPath = DATABASE_ECM.GetScalarValue(sql)
|
|
|
|
folderwatchPath = IIf(IsDBNull(folderwatchPath), "", folderwatchPath)
|
|
|
|
If folderwatchPath = String.Empty Then
|
|
LOGGER.Info("Init_Folderwatch: folderwatchPath is empty")
|
|
FW_started = False
|
|
'SaveConfigValue("FW_started", "False")
|
|
CONFIG.Config.FolderWatchStarted = False
|
|
CONFIG.Save()
|
|
|
|
End If
|
|
|
|
If Not IO.Directory.Exists(folderwatchPath) Then
|
|
LOGGER.Info("Init_Folderwatch: folderwatchPath does not exists or is invalid path")
|
|
FW_started = False
|
|
'SaveConfigValue("FW_started", "False")
|
|
CONFIG.Config.FolderWatchStarted = False
|
|
CONFIG.Save()
|
|
|
|
End If
|
|
|
|
CURRENT_FOLDERWATCH = folderwatchPath
|
|
|
|
FW_started = True
|
|
FWFunction_STARTED = True
|
|
FOLDER_WATCHER.StartStop_FolderWatch()
|
|
Catch ex As Exception
|
|
MsgBox($"Init_Folderwatch: Unexpected error while starting FolderWatch: {ex.Message}", MsgBoxStyle.Critical)
|
|
LOGGER.Info($"Init_Folderwatch: Unexpected error: {ex.Message}")
|
|
START_INCOMPLETE = True
|
|
End Try
|
|
|
|
Try
|
|
Dim sql As String = "SELECT FOLDER_PATH FROM TBGI_FOLDERWATCH_USER WHERE FOLDER_TYPE = 'SCAN' AND USER_ID = " & USER_ID
|
|
Dim folderwatchScanPath = DATABASE_ECM.GetScalarValue(sql)
|
|
|
|
folderwatchScanPath = IIf(IsDBNull(folderwatchScanPath), "", folderwatchScanPath)
|
|
|
|
If folderwatchScanPath = String.Empty Then
|
|
LOGGER.Info("Init_Folderwatch: folderwatchScanPath is empty")
|
|
CONFIG.Config.FolderWatchStarted = False
|
|
CONFIG.Save()
|
|
Exit Sub
|
|
End If
|
|
|
|
If Not IO.Directory.Exists(folderwatchScanPath) Then
|
|
LOGGER.Info("Init_Folderwatch: folderwatchScanPath does not exists or is invalid path")
|
|
CONFIG.Config.FolderWatchStarted = False
|
|
CONFIG.Save()
|
|
Exit Sub
|
|
End If
|
|
|
|
CURRENT_SCAN_FOLDERWATCH = folderwatchScanPath
|
|
|
|
|
|
FWFunction_STARTED = True
|
|
FOLDER_WATCHER.StartStop_FolderWatchSCAN()
|
|
Catch ex As Exception
|
|
MsgBox($"Init_Folderwatch: Unexpected error while starting FolderWatchScan: {ex.Message}", MsgBoxStyle.Critical)
|
|
LOGGER.Info($"Init_Folderwatch: Unexpected error: {ex.Message}")
|
|
START_INCOMPLETE = True
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub OnCreated(source As Object, e As IO.FileSystemEventArgs)
|
|
Try
|
|
For Each row As DataRow In DTEXCLUDE_FILES.Rows
|
|
Dim content As String = row.Item(0).ToString.ToLower
|
|
If e.FullPath.ToLower.Contains(content) Then
|
|
Exit Sub
|
|
End If
|
|
Next
|
|
|
|
Dim oHandleType As String
|
|
If e.FullPath.ToLower.EndsWith(".msg") Then
|
|
oHandleType = "|FW_OUTLOOK_MESSAGE|"
|
|
Else
|
|
oHandleType = "|FW_SIMPLEINDEXER|"
|
|
End If
|
|
'Die Datei übergeben
|
|
LOGGER.Info(">> OnCreated-File:" & e.FullPath)
|
|
|
|
If ClassIndexFunctions.CheckDuplicateFiles(Form, e.FullPath, "FolderWatch/Scan") Then
|
|
FILE_HANDLER.Decide_FileHandle(e.FullPath, oHandleType)
|
|
End If
|
|
Catch ex As Exception
|
|
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error in folder_watch_Created")
|
|
End Try
|
|
|
|
End Sub
|
|
|
|
Public Sub InitUserLogin()
|
|
Try
|
|
Dim oSql As String
|
|
|
|
oSql = String.Format($"SELECT * FROM [dbo].[FNDD_CHECK_USER_MODULE] ('{Environment.UserName}','GLOBIX',{1},'{CONFIG.Config.OverrideLanguage}')")
|
|
Dim DT_CHECKUSER_MODULE As DataTable = DATABASE_ECM.GetDatatable(oSql)
|
|
If DT_CHECKUSER_MODULE.Rows.Count = 0 Then
|
|
LOGGER.Info("DT_CHECKUSER_MODULE.Rows.Count = 0")
|
|
START_INCOMPLETE = True
|
|
ERROR_STATE = "NO USER"
|
|
MsgBox("Sorry - Something went wrong in getting Your rights." & vbNewLine & "Please contact the system administrator!", MsgBoxStyle.Exclamation)
|
|
Exit Sub
|
|
End If
|
|
If DT_CHECKUSER_MODULE.Rows.Count = 1 Then
|
|
|
|
Dim oRow As DataRow = DT_CHECKUSER_MODULE.Rows(0)
|
|
|
|
If oRow.Item("USER_ID") = 0 And IsDBNull(oRow.Item("USER_SURNAME")) Then
|
|
LOGGER.Info("User '" & Environment.UserName & "' not configured in Useradministration!")
|
|
START_INCOMPLETE = True
|
|
Throw New Exception("You are not configured in the Useradministration." & vbNewLine & "Please contact the system administrator!")
|
|
Exit Sub
|
|
End If
|
|
USER_IN_MODULE = oRow.Item("MODULE_ACCESS")
|
|
USER_ID = oRow.Item("USER_ID")
|
|
USER_SURNAME = IIf(IsDBNull(oRow.Item("USER_SURNAME")), "", oRow.Item("USER_SURNAME"))
|
|
USER_PRENAME = IIf(IsDBNull(oRow.Item("USER_PRENAME")), "", oRow.Item("USER_PRENAME"))
|
|
USER_SHORTNAME = IIf(IsDBNull(oRow.Item("USER_SHORTNAME")), "", oRow.Item("USER_SHORTNAME"))
|
|
USER_EMAIL = IIf(IsDBNull(oRow.Item("USER_EMAIL")), "", oRow.Item("USER_EMAIL"))
|
|
USER_LANGUAGE = oRow.Item("USER_LANGUAGE")
|
|
USER_IN_MODULE = oRow.Item("MODULE_ACCESS")
|
|
USER_IS_ADMIN = oRow.Item("IS_ADMIN")
|
|
USERCOUNT_LOGGED_IN = oRow.Item("USERCOUNT_LOGGED_IN")
|
|
ClassParamRefresh.Refresh_Params(DT_CHECKUSER_MODULE)
|
|
If USER_IN_MODULE = False Then
|
|
LOGGER.Info(" - User: " & Environment.UserName & " nicht für Modul freigegben!")
|
|
START_INCOMPLETE = True
|
|
|
|
Throw New Exception("Your user is not allowed to use this module." & vbNewLine & "Please contact the system administrator!")
|
|
|
|
Exit Sub
|
|
End If
|
|
USER_IS_ADMIN = oRow.Item("IS_ADMIN")
|
|
|
|
ClassLicence.Refresh_Licence()
|
|
|
|
Dim sql1 = "SELECT COUNT(T.GUID) FROM TBDD_DOKUMENTART T, TBDD_DOKUMENTART_MODULE T1 WHERE T.AKTIV = 1 AND T.GUID = T1.DOKART_ID AND T1.MODULE_ID = 1"
|
|
DOCTYPE_COUNT_ACTUAL = DATABASE_ECM.GetScalarValue(sql1)
|
|
If DOCTYPE_COUNT_ACTUAL > LICENSE_DOCTYPE_COUNT Then
|
|
If USER_LANGUAGE = "de-DE" Then
|
|
MsgBox("Ihre Anzahl von konfigurierbaren Dokumentarten ist limitiert auf: '" & LICENSE_DOCTYPE_COUNT.ToString & "'." & vbNewLine & "Bitte kontaktieren Sie Digital Data für weitere Details.", MsgBoxStyle.Information)
|
|
Else
|
|
MsgBox("Your amount of configurable documenttypes is limited to " & LICENSE_DOCTYPE_COUNT.ToString & " doctypes. You can not add more doctypes!" & vbNewLine & "Please contact Digital Data for further licensedetails", MsgBoxStyle.Information)
|
|
End If
|
|
End If
|
|
USER_LANGUAGE = oRow.Item("USER_LANGUAGE")
|
|
|
|
oSql = "DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = " & USER_ID & " AND UPPER(MODULE) = UPPER('Global-Indexer')"
|
|
DATABASE_ECM.ExecuteNonQuery(oSql)
|
|
oSql = "INSERT INTO TBDD_USER_MODULE_LOG_IN (USER_ID,MODULE, CLIENT_ID) VALUES (" & USER_ID & ",'Global-Indexer', 1)"
|
|
DATABASE_ECM.ExecuteNonQuery(oSql)
|
|
oSql = "SELECT COUNT(*) AS Expr1 FROM TBDD_USER_MODULE_LOG_IN WHERE Upper(MODULE) = UPPER('Global-Indexer')"
|
|
|
|
If LICENSE_COUNT < USERCOUNT_LOGGED_IN And LICENSE_EXPIRED = False Then
|
|
MsgBox("Die Anzahl der aktuell angemeldeten User (" & USERCOUNT_LOGGED_IN.ToString & ") überschreitet die Anzahl der aktuellen Lizenzen!" & vbNewLine & "Anzahl der Lizenzen: " & LICENSE_COUNT.ToString & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!", MsgBoxStyle.Critical, "Achtung:")
|
|
LOGGER.Info(" >> Die Anzahl der aktuell angemeldeten User (" & USERCOUNT_LOGGED_IN.ToString & ") überschreitet die Anzahl der Lizenzen (" & LICENSE_COUNT & ") für File Flow!")
|
|
If USER_IS_ADMIN = False Then
|
|
'Anmeldung wieder herausnehmen
|
|
oSql = "DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = " & USER_ID & " AND MODULE= 'Global-Indexer'"
|
|
DATABASE_ECM.ExecuteNonQuery(oSql)
|
|
LOGGER.Info(" - Wieder abgemeldet")
|
|
START_INCOMPLETE = True
|
|
End If
|
|
End If
|
|
'Alles OK bis hierhin...nun die FolderwatchKonfig laden
|
|
Init_Folderwatch()
|
|
'LabelLoggedIn.Caption = "Anzahl Angemeldete User: " & anzahl.ToString
|
|
End If
|
|
|
|
|
|
Catch ex As Exception
|
|
LOGGER.Info("Unexpected Error in InitUserLogin: " & ex.Message)
|
|
LOGGER.Error(ex)
|
|
MsgBox(ex.Message, MsgBoxStyle.Critical)
|
|
START_INCOMPLETE = True
|
|
End Try
|
|
|
|
End Sub
|
|
|
|
Private Function DecryptConnectionString(EncryptedConnectionString As String) As String
|
|
Dim oBuilder As New SqlClient.SqlConnectionStringBuilder With {
|
|
.ConnectionString = EncryptedConnectionString
|
|
}
|
|
|
|
If oBuilder.ConnectionString.Contains("Password=") Then
|
|
Dim oPlaintextPassword As String
|
|
Dim oDecryptor As New ClassEncryption("!35452didalog=")
|
|
|
|
Try
|
|
oPlaintextPassword = oDecryptor.DecryptData(oBuilder.Password)
|
|
Catch ex As Exception
|
|
LOGGER.Error(ex)
|
|
LOGGER.Debug("Password {0} could not be decrypted. Assuming plaintext password.")
|
|
oPlaintextPassword = oBuilder.Password
|
|
End Try
|
|
Return EncryptedConnectionString.Replace(oBuilder.Password, oPlaintextPassword)
|
|
Else
|
|
Return EncryptedConnectionString
|
|
End If
|
|
End Function
|
|
|
|
End Class
|