patbef-ServiceInside/Support/Controls/Settings.cs

287 lines
10 KiB
C#
Raw Permalink Normal View History

2024-01-29 16:26:54 +01:00
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;
}
}
}
}