Imports System.ComponentModel Imports DD_LIB_Standards Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Language.Utils Imports DigitalData.Modules.Config Imports DigitalData.Modules.Database Imports DigitalData.Modules.EDMI.API Imports DigitalData.Modules.EDMI.API.EDMIServiceReference Public Class ClassInit Public _lizenzManager As clsLicenseManager Public _database As MSSQLServer Private _DataASorDB As ClassDataASorDB Public Sub InitLogger() LogConfig = New LogConfig(LogConfig.PathType.AppData, Nothing, Nothing, Application.CompanyName, Application.ProductName) Logger = LogConfig.GetLogger() _DataASorDB = New ClassDataASorDB(LogConfig) Try Dim directory As New IO.DirectoryInfo(LogConfig.LogDirectory) For Each file As IO.FileInfo In directory.GetFiles If (Now - file.CreationTime).Days > 29 Then file.Delete() Else Exit For End If Next Catch ex As Exception End Try End Sub Public Function InitDatabase() Dim dbResult As Boolean clsDatabase.GUI = True If MyConnectionString <> String.Empty Then dbResult = clsDatabase.Init(MyConnectionString) Else MsgBox("No Databaseconnection configured. (First Start or Appdata not accessible)" & vbNewLine & "Basic-Config will be loaded.", MsgBoxStyle.Information) ERROR_INIT = "NO DB-CONNECTION" frmConfig_Basic.ShowDialog() dbResult = clsDatabase.Init(MyConnectionString) InitBasics() End If If dbResult = False Then ERROR_INIT = "FAILED DBCONNECTION" MsgBox("Error in init database. (Connection failed) More information in the logfile.", MsgBoxStyle.Critical) Return False Else Return True End If End Function Public Function InitDatabase_New() As Boolean If MyConnectionString = String.Empty Then MsgBox("No Databaseconnection configured. (First Start or Appdata not accessible)" & vbNewLine & "Basic-Config will be loaded.", MsgBoxStyle.Information) ERROR_INIT = "NO DB-CONNECTION" frmConfig_Basic.ShowDialog() End If Try Database = New MSSQLServer(LogConfig, MyConnectionString) If Database.DBInitialized = True Then Return True Else Return False End If Catch ex As Exception Logger.Error(ex) Return False End Try End Function Public Function InitAppDatabase() As Boolean Try DatabaseAppServ = New MSSQLServer(LogConfig, MyConStringAppserv) If DatabaseAppServ.DBInitialized = True Then Return True Else Return False End If Catch ex As Exception Logger.Error(ex) Return False End Try End Function Public Function InitBasics() Dim oUserAppDataPath As String = Application.UserAppDataPath Dim oLegacyAppDataPath As String = Application.UserAppDataPath Dim oCommonAppDataPath = Application.CommonAppDataPath Dim oStartupPath = Application.StartupPath Dim oConfigPrefix As String = My.Settings.UserConfig_Prefix ' If prefix is configured, use it to create a subfolder in app data and migrate existing data If oConfigPrefix.Length > 0 Then oUserAppDataPath = IO.Path.Combine(Application.UserAppDataPath, oConfigPrefix) Dim oConfigUtils As New ConfigUtils(LogConfig) If oConfigUtils.TestMigrationNeeded(oUserAppDataPath) Then LogConfig.Debug = True oConfigUtils.MigrateConfig(oLegacyAppDataPath, oUserAppDataPath) LogConfig.Debug = False End If End If ' If AppConfig from Startup Path should be forced, rewrite the common app data path If My.Settings.UseAppConfigConString = True Then ' UserAppDataPath = StartupPath oCommonAppDataPath = oStartupPath End If ConfigManager = New ConfigManager(Of ClassConfig)(LogConfig, oUserAppDataPath, oCommonAppDataPath, oStartupPath) With ConfigManager.Config MyConnectionString = DecryptConnectionString(.ConnectionString) LogErrorsOnly = .LogErrorsOnly HotkeySearchKey = .HotkeySearchKey LogConfig.Debug = Not .LogErrorsOnly End With If HotkeySearchKey_via_Server = False Then HotkeyFunctionKey = ConfigManager.Config.HotkeyFunctionKey End If If ConfigManager.Config.ConnectionStringAppServer <> String.Empty Then MyConStringAppserv = DecryptConnectionString(ConfigManager.Config.ConnectionStringAppServer) If InitAppDatabase() Then Logger.Debug("ConnectionStringAppServer will be used") End If End If If ConfigManager.Config.AppServerConfig <> String.Empty Then Try Dim oDynSplitCharacter As String If ConfigManager.Config.AppServerConfig.Contains(":") Then oDynSplitCharacter = ":" ElseIf ConfigManager.Config.AppServerConfig.Contains(";") Then oDynSplitCharacter = ";" End If Dim oSplit() As String = ConfigManager.Config.AppServerConfig.ToString.Split(oDynSplitCharacter) Dim oAppServerAddress As String = oSplit(0) Dim oAppServerPort As Integer = 9000 If oSplit.Length = 2 Then oAppServerPort = oSplit(1) End If _Client = New Client(LogConfig, oAppServerAddress, oAppServerPort) If Not IsNothing(_Client) Then If _Client.Connect() Then APPSERVER_ACTIVE = True Else Logger.Warn($"###!!!APPServer [{ConfigManager.Config.AppServerConfig.ToString}] could not be initialized ") End If End If Catch ex As Exception Logger.Warn($"Could not initialize the AppServer: {ex.Message}") End Try End If Return True End Function 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 clsEncryption("!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 Public Function CheckModuleData() Try Dim oSql = String.Format("SELECT * FROM [dbo].[FNDD_CHECK_USER_MODULE] ('{0}','CW',{1})", USER_USERNAME, CLIENT_SELECTED) Dim DT_CHECKUSER_MODULE As DataTable DT_CHECKUSER_MODULE = _DataASorDB.GetDatatable(oSql, "TBDD_USER_MODULE", $"USERNAME = '{USER_USERNAME.ToLower}' AND MODULE_SHORT = 'CW'", "", "") 'If APPSERVER_ACTIVE = True Then ' Dim oTableResult As TableResult = _Client.GetDatatableByName("TBDD_USER_MODULE", $"USERNAME = '{USER_USERNAME.ToLower}' AND MODULE_SHORT = 'CW'") ' DT_CHECKUSER_MODULE = oTableResult.Table 'Else ' DT_CHECKUSER_MODULE = Database.GetDatatable(oSql) 'End If If DT_CHECKUSER_MODULE.Rows.Count = 0 Then Logger.Info("DT_CHECKUSER_MODULE.Rows.Count = 0", True) 'ERROR_STATE = "NO USER" MsgBox("Sorry - Something went wrong in getting Your rights." & vbNewLine & "Please contact the system administrator!", MsgBoxStyle.Exclamation) Return False End If If DT_CHECKUSER_MODULE.Rows.Count = 1 Then Logger.Info("Login Username: " & USER_ID, False) Logger.Info("Login time: " & Now.ToShortDateString, False) USER_ID = DT_CHECKUSER_MODULE.Rows(0).Item("USER_ID") USER_SURNAME = NotNull(DT_CHECKUSER_MODULE.Rows(0).Item("USER_SURNAME"), "") USER_PRENAME = NotNull(DT_CHECKUSER_MODULE.Rows(0).Item("USER_PRENAME"), "") USER_SHORTNAME = NotNull(DT_CHECKUSER_MODULE.Rows(0).Item("USER_SHORTNAME"), "") USER_EMAIL = NotNull(DT_CHECKUSER_MODULE.Rows(0).Item("USER_EMAIL"), "") USER_LANGUAGE = NotNull(DT_CHECKUSER_MODULE.Rows(0).Item("USER_LANGUAGE"), "de-DE") USER_DATE_FORMAT = NotNull(DT_CHECKUSER_MODULE.Rows(0).Item("USER_DATE_FORMAT"), "dd.MM.yyyy") USER_IN_MODULE = NotNull(DT_CHECKUSER_MODULE.Rows(0).Item("MODULE_ACCESS"), False) USER_IS_ADMIN = NotNull(DT_CHECKUSER_MODULE.Rows(0).Item("IS_ADMIN"), False) ADDITIONAL_TITLE = NotNull(DT_CHECKUSER_MODULE.Rows(0).Item("ADDITIONAL_TITLE"), "") If ADDITIONAL_TITLE = String.Empty Then ADDITIONAL_TITLE = My.Application.Info.ProductName End If USERCOUNT_LOGGED_IN = DT_CHECKUSER_MODULE.Rows(0).Item("USERCOUNT_LOGGED_IN") USERCOUNT_LOGGED_IN += 1 Try WORKING_MODE = DT_CHECKUSER_MODULE.Rows(0).Item("WORKING_MODE") Catch ex As Exception WORKING_MODE = "" End Try Dim oSplitWorkMode As String() = WORKING_MODE.Split("#") Dim oMode As String For Each oMode In oSplitWorkMode Logger.Debug($"oWorkingMode Parameter: {oMode}") If oMode = "NO_BASICCONF" Then BASIC_CONF_VISIBLE = False ElseIf oMode.StartsWith("NOMATCH_INFO") Then Try Dim oResult = oMode.Replace("NOMATCH_INFO=", "") Logger.Info($"NOMATCH_INFO: {oResult}") NOMATCH_INFO = CBool(oResult) Catch ex As Exception NOMATCH_INFO = False End Try ElseIf oMode.StartsWith("HotkeySearchKey") Then Try Dim oResult = oMode.Replace("HotkeySearchKey=", "") Logger.Info($"HotkeySearchKey: {oResult}") HotkeySearchKey = oResult HotkeySearchKey_via_Server = True Catch ex As Exception HotkeySearchKey = "d" End Try ElseIf oMode.StartsWith("NotifyMode") Then Try Dim oResult = oMode.Replace("NotifyMode=", "") Logger.Info($"NotifyMode: {oResult}") NOTIFY_MODE = oResult Catch ex As Exception End Try Else Logger.Info($"Wrong oMode: {oMode}") End If Next Return True Else Logger.Info(" - UserId '" & USER_ID & "' not listed in Useradministration!", False) 'MsgBox("Achtung: Sie sind nicht in der Userverwaltung hinterlegt." & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!", MsgBoxStyle.Critical, "Achtung:") 'Me.Close() Dim msg = String.Format("You are not listed in the Useradministration." & vbNewLine & "Please contact the admin.") MsgBox(msg, MsgBoxStyle.Exclamation) Return False End If Catch ex As Exception Logger.Error(ex) Return False End Try End Function Public Function InitUserLogin(Optional _User As String = "") As Boolean Try If _User = "" Then USER_USERNAME = Environment.UserName Else USER_USERNAME = _User End If Try If CheckModuleData() = False Then Return False End If Dim oSQL1 = String.Format("SELECT * FROM VWDD_USER_CLIENT WHERE UPPER(USERNAME) = UPPER('{0}')", USER_USERNAME) DT_CLIENT_USER = _DataASorDB.GetDatatable(oSQL1, "VWDD_USER_CLIENT", $"USER_ID = {USER_ID}", "", "") 'If APPSERVER_ACTIVE = True Then ' Dim oTableResult As TableResult = _Client.GetDatatableByName("VWDD_USER_CLIENT", $"USER_ID = {USER_ID}") ' DT_CLIENT_USER = oTableResult.Table 'Else ' DT_CLIENT_USER = Database.GetDatatable(String.Format("SELECT * FROM VWDD_USER_CLIENT WHERE UPPER(USERNAME) = UPPER('{0}')", Environment.UserName)) 'End If If Not IsNothing(DT_CLIENT_USER) Then If DT_CLIENT_USER.Rows.Count > 1 Then frmClientLogin.ShowDialog() ElseIf DT_CLIENT_USER.Rows.Count = 1 Then CLIENT_SELECTED = DT_CLIENT_USER.Rows(0).Item("CLIENT_ID") Else Logger.Info("User '" & USER_ID & "' not related to a client", True) ERROR_INIT = "NO CLIENT" 'ERROR_STATE = "NO CLIENT" Return False End If Else Logger.Info("User '" & USER_ID & "' not related to a client", True) ERROR_INIT = "NO CLIENT" 'ERROR_STATE = "NO CLIENT" Return False End If Catch ex As Exception Logger.Info("Unexpected error in checking CLIENT: " & ex.Message) CLIENT_SELECTED = 1 End Try If USER_IN_MODULE = False Then If USER_IS_ADMIN = False Then Logger.Info("User: " & USER_ID & " not related to module!", False) Dim msg = String.Format("Sie sind nicht für die Nutzung dieses Moduls freigeschaltet." & vbNewLine & "Bitte setzen Sie sich mit dem Systemadministrator in Verbindung!") If USER_LANGUAGE <> LANGUAGE_GERMAN Then msg = String.Format("You are not authorized for using this module." & vbNewLine & "Please contact the admin.") End If MsgBox(msg, MsgBoxStyle.Exclamation, "Attention:") Return False End If End If 'Am System anmelden ClassLicense.Refresh_Licence(DT_CLIENT_USER.Rows(0).Item("CLIENT_ID")) 'Am System anmelden ' sql = String.Format("UPDATE TBDD_USER SET LOGGED_IN = 1, LOGGED_WHERE = '{0}' WHERE GUID = {1}", Environment.MachineName, USER_ID) 'Database.GetDatatable(sql) Dim oSQL As String oSQL = "DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = " & USER_ID & " AND MODULE = 'Clipboard-Watcher'" Database.ExecuteNonQuery(oSQL) oSQL = String.Format("INSERT INTO TBDD_USER_MODULE_LOG_IN (USER_ID,CLIENT_ID,MODULE,VERSION_CLIENT,MACHINE_NAME) VALUES ({0},{1},'Clipboard-Watcher','{2}','{3}')", USER_ID, 0, My.Application.Info.Version.ToString, Environment.MachineName) Database.ExecuteNonQuery(oSQL) If USER_IS_ADMIN = True Then If ESC_Hidden = True Then 'frmLoginUserSelect.ShowDialog() ESC_Hidden = False If USER_USERNAME <> "" Then InitUserLogin(USER_USERNAME) End If End If ' 'Admin ' pageAdmin.Visible = True End If WD_UNICODE = Database.GetScalarValue("SELECT WD_UNICODE FROM TBCW_CONFIGURATION WHERE GUID = 1") GDPICTURE_LICENSE = Database.GetScalarValue("SELECT LICENSE FROM TBDD_3RD_PARTY_MODULES WHERE NAME = 'GDPICTURE'") Logger.Debug(" >> Count Users logged in: " & USERCOUNT_LOGGED_IN.ToString, False) If LICENSE_COUNT < USERCOUNT_LOGGED_IN And LICENSE_EXPIRED = False Then Dim msg = String.Format("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!") If USER_LANGUAGE <> LANGUAGE_GERMAN Then msg = String.Format("The number of logged Users (" & USERCOUNT_LOGGED_IN.ToString & ") exceeds the number of licenses." & vbNewLine & "Number of licenses: " & LICENSE_COUNT.ToString & vbNewLine & "Please contact Your admin!") End If MsgBox(msg, MsgBoxStyle.Exclamation) Logger.Info(" >> The number of logged Users (" & USERCOUNT_LOGGED_IN.ToString & ") exceeds the number of licenses (" & LICENSE_COUNT & ") ", False) If USER_IS_ADMIN = False Then 'Anmeldung wieder herausnehmen oSQL = "DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = " & USER_ID & " AND MODULE= 'Clipboard-Watcher'" Database.ExecuteNonQuery(oSQL) Logger.Info(" - logged out the user", False) Return False End If End If Return True Catch ex As Exception Logger.Info("Unexpected Error in InitUserLogin: " & ex.Message, True) MsgBox("Unexpected Error in InitUserLogin: " & ex.Message, MsgBoxStyle.Critical) Return False End Try End Function Public Sub Refresh_Connections() Try Dim oSql = String.Format("SELECT * FROM TBDD_CONNECTION") Dim oDatatable As New MyDataset.TBDD_CONNECTIONDataTable() Dim oResult As DataTable oDatatable = _DataASorDB.GetDatatable(oSql, "TBDD_CONNECTION", "", "", "") 'If APPSERVER_ACTIVE = True Then ' Dim oTableResult As TableResult = _Client.GetDatatableByName("TBDD_CONNECTION") ' oResult = oTableResult.Table 'Else ' oResult = Database.GetDatatable(oSql) 'End If 'oDatatable.Merge(oResult) DT_CONNECTIONS = oDatatable Catch ex As Exception Logger.Error(ex) MsgBox("Unexpected Error in Refresh_Connections: " & ex.Message, MsgBoxStyle.Critical) End Try End Sub Public Shared Function Refresh_Profile_Links() As String Dim oWhereClause = $"T1.USER_ID = {USER_ID} OR GROUP_ID IN (SELECT DISTINCT GUID FROM TBDD_GROUPS WHERE GUID IN (SELECT GROUP_ID FROM TBDD_GROUPS_USER WHERE USER_ID = {USER_ID}))" Dim ProfileSQL As String = $"SELECT DISTINCT GUID, NAME,REGEX_EXPRESSION,COMMENT,PROC_NAME,PROFILE_TYPE FROM VWCW_USER_PROFILE T1 WHERE {oWhereClause}" Dim oProcessSQL As String = $"SELECT DISTINCT T.GUID, T.PROFILE_ID,T.PROC_NAME FROM TBCW_PROFILE_PROCESS T, VWCW_USER_PROFILE T1 WHERE T.PROFILE_ID = T1.GUID AND ({oWhereClause})" Dim oWindowSQL As String = $"SELECT DISTINCT T.* FROM VWCW_PROFILE_REL_WINDOW T, VWCW_USER_PROFILE T1 WHERE T.PROFILE_ID = T1.GUID AND ({oWhereClause})" Dim oControlSQL As String = $"SELECT DISTINCT T.* FROM VWCW_PROFILE_REL_CONTROL T, VWCW_USER_PROFILE T1 WHERE T.PROFILE_ID = T1.GUID AND ({oWhereClause})" Try DT_USER_PROFILES = Database.GetDatatable(ProfileSQL) If DT_USER_PROFILES Is Nothing OrElse DT_USER_PROFILES.Rows.Count = 0 Then Return "Es wurden noch keine Profile für den aktuellen Benutzer konfiguriert." End If DTPROFILE_REL_PROCESS = Database.GetDatatable(oProcessSQL) DTPROFILE_REL_WINDOW = Database.GetDatatable(oWindowSQL) DTPROFILE_REL_CONTROL = Database.GetDatatable(oControlSQL) Catch ex As Exception Logger.Error(ex) MsgBox("Unexpected Error in Refresh_Profile_Links: " & ex.Message, MsgBoxStyle.Critical) Return "Fehler bei Aktualisierung!" End Try Return "Aktualisierung erfolgreich." End Function End Class