TeamsNetphoneLink/TeamsNetphoneLinkWPF/WPF/SettingsWindow.xaml.cs
2025-03-25 22:43:13 +01:00

133 lines
5.5 KiB
C#

using Microsoft.Identity.Client.NativeInterop;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using TeamsNetphoneLink;
namespace TeamsNetphoneLink.WPF
{
/// <summary>
/// Interaktionslogik für SettingsWindow.xaml
/// </summary>
public partial class SettingsWindow : Window
{
Syncronisation _sync;
public SettingsWindow(Syncronisation sync)
{
_sync = sync;
InitializeComponent();
TenantIDTextBox.Text = Settings.Default.TenantID;
AppIDTextBox.Text = Settings.Default.AppID;
SaveEntraCredentialsCheck.IsChecked = Settings.Default.SaveEntraCredentials;
UseGraphForMeetingStateCheck.IsChecked = Settings.Default.UseGraphForMeetingState;
}
private void RestartApplication()
{
string exePath = Process.GetCurrentProcess().MainModule.FileName;
var startInfo = new ProcessStartInfo
{
FileName = exePath,
UseShellExecute = true
};
Process.Start(startInfo);
Application.Current.Shutdown();
}
// Speichern der Einstellungen
private void SaveButton_Click(object sender, RoutedEventArgs e)
{
string tenantId = TenantIDTextBox.Text.Replace(" ", "");
string appId = AppIDTextBox.Text.Replace(" ", "");
bool SaveEntraCredentials = SaveEntraCredentialsCheck.IsChecked.HasValue ? SaveEntraCredentialsCheck.IsChecked.Value : false;
bool UseGraphForMeetingState = UseGraphForMeetingStateCheck.IsChecked.HasValue ? UseGraphForMeetingStateCheck.IsChecked.Value : false;
if (SaveEntraCredentials && !ShowSecurityWarningMessage())
return;
Settings.Default.TenantID = tenantId;
Settings.Default.AppID = appId;
Settings.Default.SaveEntraCredentials = SaveEntraCredentials;
Settings.Default.UseGraphForMeetingState = UseGraphForMeetingState;
Settings.Default.Save();
RestartApplication();
}
// Reset der Einstellungen
private void ResetButton_Click(object sender, RoutedEventArgs e)
{
Settings.Default.Reset();
RestartApplication();
}
private void SaveEntraCredentialsCheck_Checked(object sender, RoutedEventArgs e)
{
//ShowSecurityWarningMessage();
}
public bool ShowSecurityWarningMessage()
{
string message =
"Die Anmeldedaten werden mit dem MSAL Cache unter Verwendung von DPAPI (Data Protection API) gespeichert. " +
"DPAPI bietet eine sichere Verschlüsselung der Daten auf Benutzerebene, sodass die Anmeldedaten nur für das Benutzerkonto zugänglich sind, " +
"unter dem sie gespeichert wurden.\n\n" +
"Allerdings ist zu beachten, dass theoretisch jede Anwendung mit derselben App-ID auf den MSAL Cache zugreifen könnte. " +
"Das liegt daran, dass der Cache anhand der App-ID identifiziert wird. Wenn eine andere Anwendung dieselbe App-ID verwendet, " +
"könnte sie versuchen, auf die gespeicherten Anmeldedaten zuzugreifen.\n\n" +
"Bewertung des Sicherheitsrisikos:\n" +
"- In einer vertrauenswürdigen Umgebung ist das Risiko gering.\n" +
"- Die App-ID sollte geheim gehalten werden, um unbefugten Zugriff zu verhindern.\n" +
"- DPAPI bietet eine starke Verschlüsselung, solange das Benutzerkonto nicht kompromittiert ist.\n\n" +
"Unter normalen Umständen stellt die Verwendung des MSAL Caches kein signifikantes Sicherheitsrisiko dar. " +
"Es ist jedoch wichtig, die App-ID geheim zu halten und sicherzustellen, dass nur vertrauenswürdige Anwendungen dieselbe App-ID verwenden.\n\n" +
"Sollen die Einstellungen gespeichert werden?.\n\n";
var result = MessageBox.Show(
message,
"Sicherheitshinweis zur Speicherung von Anmeldedaten",
MessageBoxButton.YesNo,
MessageBoxImage.Warning
);
if (result == MessageBoxResult.Yes)
return true;
return false;
}
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
ValidateInput();
}
private void ValidateInput()
{
if (this.IsInitialized)
{
bool isAppIDValid = Teams.TeamsGraph.IsGuid(AppIDTextBox.Text);
bool isTenantIDValid = Teams.TeamsGraph.IsGuid(TenantIDTextBox.Text);
// Set border color based on validation
AppIDTextBox.BorderBrush = isAppIDValid ? System.Windows.Media.Brushes.Green : System.Windows.Media.Brushes.Red;
TenantIDTextBox.BorderBrush = isTenantIDValid ? System.Windows.Media.Brushes.Green : System.Windows.Media.Brushes.Red;
// Enable Save button only if both fields are valid
SaveButton.IsEnabled = isAppIDValid && isTenantIDValid;
}
}
}
}