using MySql.Data.MySqlClient; using Newtonsoft.Json; using Support.Crypto; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Support.Controls { public partial class Settings : UserControl { private Models.Appsettings Appsettings = null; private Main _MainForm = null; public Settings() { InitializeComponent(); this.Appsettings = new Models.Appsettings(); txtDatabaseConnectionString_KeyUp(null, null); } public Settings(Models.Appsettings appsettings, Main mainForm) { InitializeComponent(); this.Appsettings = appsettings; this._MainForm = mainForm; if(this.Appsettings != null) { lblStatus.Text = ""; txtServiceInsideURL.Text = this.Appsettings.ServiceInsideURL; txtServiceOutsideURL.Text = this.Appsettings.ServiceOutsideURL; txtPrivateDirectoryPath.Text = this.Appsettings.PrivateDirectory; txtPublicDirectoryPath.Text = this.Appsettings.PublicDirectory; txtDatabaseConnectionString.Text = this.Appsettings.DatabaseConnectionString; } else { this.Appsettings = new Models.Appsettings(); } txtDatabaseConnectionString_KeyUp(null, null); } private void btnEmpy_Click(object sender, EventArgs e) { try { lblStatus.Text = ""; string constring = txtDatabaseConnectionString.Text; string decrypted = AES.Decrypt(constring); if (!string.IsNullOrEmpty(decrypted)) { constring = decrypted; } Database database = new Database(constring); using (MySqlConnection client = database.CreateConnection()) { client.Open(); MySqlCommand cmd = client.CreateCommand(); cmd.CommandText = "select maintenance from config c limit 1"; MySqlDataReader reader = cmd.ExecuteReader(); if(reader.Read()) { int maintenance = 0; string str_maintenance = reader["maintenance"].ToString(); Int32.TryParse(str_maintenance, out maintenance); if (maintenance == 1) { maintenance = 0; } else { maintenance = 1; } if(!reader.IsClosed) { reader.Close(); } cmd.CommandText = "update config set maintenance = @maintenance"; cmd.Parameters.Clear(); cmd.Parameters.Add(new MySqlParameter("maintenance", maintenance)); cmd.ExecuteNonQuery(); client.Close(); if (maintenance == 1) { lblStatus.Text = "Der Wartungsmodus wurde aktiviert"; btnMaintenanceWork.Text = "Wartungsmodus deaktivieren"; btnMaintenanceWork.BackColor = Color.Red; btnMaintenanceWork.ForeColor = Color.White; } else { lblStatus.Text = "Der Wartungsmodus wurde deaktiviert"; btnMaintenanceWork.Text = "Wartungsmodus aktivieren"; btnMaintenanceWork.BackColor = Color.Silver; btnMaintenanceWork.ForeColor = Color.Black; } } } } catch (Exception ex) { lblStatus.Text = ex.Message; } } private void btnSave_Click(object sender, EventArgs e) { try { if (string.IsNullOrEmpty(txtServiceInsideURL.Text)) { lblStatus.Text = "Bitte geben Sie die URL vom ServiceInside ein"; } else if (string.IsNullOrEmpty(txtServiceOutsideURL.Text)) { lblStatus.Text = "Bitte geben Sie die URL vom ServiceOutside ein"; } else if (string.IsNullOrEmpty(txtPrivateDirectoryPath.Text)) { lblStatus.Text = "Bitte wählen Sie den Pfad zum Verzeichnis \"private\" aus"; } else if (string.IsNullOrEmpty(txtPublicDirectoryPath.Text)) { lblStatus.Text = "Bitte wählen Sie den Pfad zum Verzeichnis \"public\" aus"; } else if (string.IsNullOrEmpty(txtDatabaseConnectionString.Text)) { lblStatus.Text = "Bitte geben Sie die Datenbank-Verbindungszeichenfolge ein"; } else { this.Appsettings.ServiceInsideURL = txtServiceInsideURL.Text; this.Appsettings.ServiceOutsideURL = txtServiceOutsideURL.Text; this.Appsettings.PrivateDirectory = txtPrivateDirectoryPath.Text; this.Appsettings.PublicDirectory = txtPublicDirectoryPath.Text; this.Appsettings.DatabaseConnectionString = txtDatabaseConnectionString.Text; if (!string.IsNullOrEmpty(txtNewPassword.Text)) { string key = txtCurrentPassword.Text; if (!string.IsNullOrEmpty(key)) { if (AES.Decrypt(this.Appsettings.SupportPassword, AES.GetKey(key)) == "Support_" + key) { this.Appsettings.SupportPassword = AES.Encrypt("Support_" + txtNewPassword.Text, AES.GetKey(txtNewPassword.Text)); if (this.Appsettings.Save()) { lblStatus.Text = "Die Einstellungen wurden erfolgreich gespeichert"; this._MainForm.Initialize(); } else { lblStatus.Text = "Die Einstellungen konnten nicht gespeichert werden"; } } else { lblStatus.Text = "Das aktuelle Support-Passwort ist ungültig"; } } else { lblStatus.Text = "Bitte geben Sie das aktuelle Support-Passwort ein"; } } else { if (this.Appsettings.Save()) { lblStatus.Text = "Die Einstellungen wurden erfolgreich gespeichert"; this._MainForm.Initialize(); } else { lblStatus.Text = "Die Einstellungen konnten nicht gespeichert werden"; } } } } catch (Exception ex) { lblStatus.Text = ex.Message; } } private void btnPrivateDirectorySelector_Click(object sender, EventArgs e) { FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog(); if(folderBrowserDialog.ShowDialog() == DialogResult.OK) { txtPrivateDirectoryPath.Text = folderBrowserDialog.SelectedPath; } } private void btnPublicDirectorySelector_Click(object sender, EventArgs e) { FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog(); if (folderBrowserDialog.ShowDialog() == DialogResult.OK) { txtPublicDirectoryPath.Text = folderBrowserDialog.SelectedPath; } } private void button1_Click(object sender, EventArgs e) { try { lblStatus.Text = ""; string constring = txtDatabaseConnectionString.Text; string decrypted = AES.Decrypt(constring); if(!string.IsNullOrEmpty(decrypted)) { constring = decrypted; } Database database = new Database(constring); using (MySqlConnection client = database.CreateConnection()) { client.Open(); MySqlCommand cmd = client.CreateCommand(); cmd.CommandText = "select * from config c limit 1"; MySqlDataReader reader = cmd.ExecuteReader(); client.Close(); lblStatus.Text = "Verbindung erfolgreich"; } } catch (Exception ex) { lblStatus.Text = ex.Message; } } private void txtDatabaseConnectionString_KeyUp(object sender, KeyEventArgs e) { if(!string.IsNullOrEmpty(txtDatabaseConnectionString.Text)) { btnMaintenanceWork.Visible = true; btnDatabaseConnectionCheck.Visible = true; } else { btnMaintenanceWork.Visible = false; btnDatabaseConnectionCheck.Visible = false; } } } }