183 lines
6.9 KiB
C#
183 lines
6.9 KiB
C#
using Ink_Canvas.Helpers;
|
|
using Ink_Canvas.Windows.SettingsViews.Helpers;
|
|
using System;
|
|
using System.Windows;
|
|
using Page = iNKORE.UI.WPF.Modern.Controls.Page;
|
|
|
|
namespace Ink_Canvas.Windows.SettingsViews.Pages
|
|
{
|
|
public partial class SecurityPage : Page
|
|
{
|
|
private bool _isLoaded = false;
|
|
|
|
public SecurityPage()
|
|
{
|
|
InitializeComponent();
|
|
Loaded += Page_Loaded;
|
|
Unloaded += Page_Unloaded;
|
|
}
|
|
|
|
private void Page_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
LoadSettings();
|
|
_isLoaded = true;
|
|
}
|
|
|
|
private void Page_Unloaded(object sender, RoutedEventArgs e)
|
|
{
|
|
_isLoaded = false;
|
|
}
|
|
|
|
private void LoadSettings()
|
|
{
|
|
_isLoaded = false;
|
|
try
|
|
{
|
|
var settings = SettingsManager.Settings;
|
|
if (settings == null) return;
|
|
if (settings.Security == null) settings.Security = new Security();
|
|
|
|
var sec = settings.Security;
|
|
CardPasswordEnabled.IsOn = sec.PasswordEnabled;
|
|
CardRequirePasswordOnExit.IsOn = sec.RequirePasswordOnExit;
|
|
CardRequirePasswordOnEnterSettings.IsOn = sec.RequirePasswordOnEnterSettings;
|
|
CardRequirePasswordOnResetConfig.IsOn = sec.RequirePasswordOnResetConfig;
|
|
CardRequirePasswordOnModifyOrClearNameList.IsOn = sec.RequirePasswordOnModifyOrClearNameList;
|
|
CardEnableProcessProtection.IsOn = sec.EnableProcessProtection;
|
|
|
|
UpdatePasswordUiState();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
System.Diagnostics.Debug.WriteLine($"加载安全页面设置时出错: {ex.Message}");
|
|
}
|
|
_isLoaded = true;
|
|
}
|
|
|
|
private void UpdatePasswordUiState()
|
|
{
|
|
var sec = SettingsManager.Settings?.Security;
|
|
var enabled = sec != null && sec.PasswordEnabled;
|
|
|
|
if (BtnSetOrChangePassword != null) BtnSetOrChangePassword.IsEnabled = enabled;
|
|
|
|
CardRequirePasswordOnExit.IsEnabled = enabled;
|
|
CardRequirePasswordOnEnterSettings.IsEnabled = enabled;
|
|
CardRequirePasswordOnResetConfig.IsEnabled = enabled;
|
|
CardRequirePasswordOnModifyOrClearNameList.IsEnabled = enabled;
|
|
}
|
|
|
|
private void SetCardIsOnSilently(Ink_Canvas.Controls.LabeledSettingsCard card, bool value)
|
|
{
|
|
var prev = _isLoaded;
|
|
_isLoaded = false;
|
|
try { card.IsOn = value; }
|
|
finally { _isLoaded = prev; }
|
|
}
|
|
|
|
private async void ToggleSwitchPasswordEnabled_Toggled(object sender, RoutedEventArgs e)
|
|
{
|
|
if (!_isLoaded) return;
|
|
var settings = SettingsManager.Settings;
|
|
if (settings == null) return;
|
|
if (settings.Security == null) settings.Security = new Security();
|
|
var sec = settings.Security;
|
|
|
|
bool newState = CardPasswordEnabled.IsOn;
|
|
var owner = Window.GetWindow(this);
|
|
|
|
if (newState)
|
|
{
|
|
var havePassword = SecurityManager.HasPasswordConfigured(settings);
|
|
if (!havePassword)
|
|
{
|
|
var pwd = await SecurityManager.PromptSetNewPasswordAsync(owner);
|
|
if (string.IsNullOrEmpty(pwd))
|
|
{
|
|
SetCardIsOnSilently(CardPasswordEnabled, false);
|
|
return;
|
|
}
|
|
SecurityManager.SetPassword(settings, pwd);
|
|
}
|
|
|
|
sec.PasswordEnabled = true;
|
|
SettingsManager.SaveSettingsToFile();
|
|
UpdatePasswordUiState();
|
|
}
|
|
else
|
|
{
|
|
if (SecurityManager.HasPasswordConfigured(settings))
|
|
{
|
|
bool ok = await SecurityManager.PromptAndVerifyAsync(settings, owner,
|
|
"关闭安全密码", "请输入当前密码以关闭安全密码功能。");
|
|
if (!ok)
|
|
{
|
|
SetCardIsOnSilently(CardPasswordEnabled, true);
|
|
return;
|
|
}
|
|
}
|
|
|
|
sec.PasswordEnabled = false;
|
|
SecurityManager.ClearPassword(settings);
|
|
SettingsManager.SaveSettingsToFile();
|
|
UpdatePasswordUiState();
|
|
}
|
|
}
|
|
|
|
private async void BtnSetOrChangePassword_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
var settings = SettingsManager.Settings;
|
|
if (settings == null) return;
|
|
if (settings.Security == null) settings.Security = new Security();
|
|
|
|
var owner = Window.GetWindow(this);
|
|
var newPwd = await SecurityManager.PromptChangePasswordAsync(settings, owner);
|
|
if (!string.IsNullOrEmpty(newPwd))
|
|
{
|
|
SecurityManager.SetPassword(settings, newPwd);
|
|
settings.Security.PasswordEnabled = true;
|
|
SettingsManager.SaveSettingsToFile();
|
|
|
|
SetCardIsOnSilently(CardPasswordEnabled, true);
|
|
UpdatePasswordUiState();
|
|
}
|
|
}
|
|
|
|
private void ToggleSwitchRequirePasswordOnExit_Toggled(object sender, RoutedEventArgs e)
|
|
{
|
|
if (!_isLoaded) return;
|
|
SettingsManager.Settings.Security.RequirePasswordOnExit = CardRequirePasswordOnExit.IsOn;
|
|
SettingsManager.SaveSettingsToFile();
|
|
}
|
|
|
|
private void ToggleSwitchRequirePasswordOnEnterSettings_Toggled(object sender, RoutedEventArgs e)
|
|
{
|
|
if (!_isLoaded) return;
|
|
SettingsManager.Settings.Security.RequirePasswordOnEnterSettings = CardRequirePasswordOnEnterSettings.IsOn;
|
|
SettingsManager.SaveSettingsToFile();
|
|
}
|
|
|
|
private void ToggleSwitchRequirePasswordOnResetConfig_Toggled(object sender, RoutedEventArgs e)
|
|
{
|
|
if (!_isLoaded) return;
|
|
SettingsManager.Settings.Security.RequirePasswordOnResetConfig = CardRequirePasswordOnResetConfig.IsOn;
|
|
SettingsManager.SaveSettingsToFile();
|
|
}
|
|
|
|
private void ToggleSwitchRequirePasswordOnModifyOrClearNameList_Toggled(object sender, RoutedEventArgs e)
|
|
{
|
|
if (!_isLoaded) return;
|
|
SettingsManager.Settings.Security.RequirePasswordOnModifyOrClearNameList = CardRequirePasswordOnModifyOrClearNameList.IsOn;
|
|
SettingsManager.SaveSettingsToFile();
|
|
}
|
|
|
|
private void ToggleSwitchEnableProcessProtection_Toggled(object sender, RoutedEventArgs e)
|
|
{
|
|
if (!_isLoaded) return;
|
|
bool newState = CardEnableProcessProtection.IsOn;
|
|
SettingsManager.Settings.Security.EnableProcessProtection = newState;
|
|
SettingsManager.SaveSettingsToFile();
|
|
ProcessProtectionManager.SetEnabled(newState);
|
|
}
|
|
}
|
|
} |