133 lines
5.5 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|