using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Heisig.HMI.AdsManager; using HMIToolkit; using InfineonHMI.Common; using MahApps.Metro.Controls; using Microsoft.Win32; using System.Collections.ObjectModel; using System.ComponentModel.DataAnnotations; using System.Drawing.Text; using System.Security; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using TwinCAT.TypeSystem; namespace Common; public sealed partial class UserManagementWindowVm : ObservableValidator { private IAdsManager _adsManager; private readonly string _variableName; [ObservableProperty] private string? selectedUsername; [ObservableProperty] private string newUser; [ObservableProperty] private ObservableCollection? savedUsers; private ObservableCollection users; private UserManagementWindow dlg = new UserManagementWindow(); private string selectedUserPassword; private string filePath = "C:\\ProgramData\\InfineonHMI_UserData\\Userdata.xml"; private string selectedUserPasswordWdh; public User CurrentUser { get; set; } public string SelectedUserPassword { get { return selectedUserPassword; } set { SetProperty(ref selectedUserPassword, value); IsCreateCommandEnabled = SelectedUserPasswordWdh.Equals(value) && !string.IsNullOrEmpty(value)&& CurrentUser.UserLevel>0; } } public string? SelectedUserPasswordWdh { get { return selectedUserPasswordWdh; } set { SetProperty(ref selectedUserPasswordWdh, value); IsCreateCommandEnabled = SelectedUserPassword.Equals(value) && !string.IsNullOrEmpty(value) && CurrentUser.UserLevel > 0; } } [ObservableProperty] private bool isCreateCommandEnabled; public UserManagementWindowVm() { IsCreateCommandEnabled = false; CurrentUser = new("default", "default", 0); users = L4ItXmlSerializer.DeSerializeObject>(filePath); savedUsers = new ObservableCollection(); foreach (var user in users) { if (user.UserName != null) savedUsers.Add(user.UserName); } selectedUserPassword = ""; selectedUserPasswordWdh = ""; selectedUsername = ""; SelectedUserPasswordWdh = ""; SelectedUserPassword = ""; SelectedUsername = ""; } public UserManagementWindowVm(User curUser) { IsCreateCommandEnabled = true; if (curUser != null) { CurrentUser = curUser; } else { CurrentUser = new User("unknown", "default", 100); } users = L4ItXmlSerializer.DeSerializeObject>(filePath); savedUsers = new ObservableCollection(); if (users == null) { users = new ObservableCollection(); users.Add(new User("default", "ssW+1nwLrdWTKi1tkE/pfQ==", 100)); } foreach (var user in users) { if(user.UserName != null) savedUsers.Add(user.UserName); } selectedUserPassword = ""; selectedUserPasswordWdh = ""; selectedUsername = ""; SelectedUserPasswordWdh = ""; SelectedUserPassword = ""; SelectedUsername = ""; } public User GetCurrentUserLevel() { dlg.DataContext = this; dlg.ShowDialog(); return CurrentUser; } [RelayCommand] private void Login() { User userInFile = new User("default", "default", 0); bool userFound = false; foreach (var user in users) { if (user.UserName.Equals(SelectedUsername)) { userInFile = user; userFound = true; break; } } if (userFound && CheckPassword(userInFile)) { CurrentUser = userInFile; } dlg.Close(); } [RelayCommand] private void Logoff() { CurrentUser = new User("default", "default", 0); dlg.Close(); } [RelayCommand] private void CreateUser() { if(!SelectedUserPassword.Equals(SelectedUserPasswordWdh)) return; if (users == null) users = new (); var u = new User { UserName = NewUser, PasswordHash = L4ItXmlSerializer.Encrypt(SelectedUserPassword), UserLevel = 100, }; users.Add(new User(u)); SavedUsers.Add(NewUser); SelectedUserPassword = ""; SelectedUserPasswordWdh = ""; L4ItXmlSerializer.SerializeObject(users, filePath); } [RelayCommand] private void DeleteUser() { if (SelectedUsername.Equals("default")) return; users.Remove(users.First(user => user.UserName.Equals(SelectedUsername))); SavedUsers = new ObservableCollection(); foreach (var user in users) { SavedUsers.Add(user.UserName); } L4ItXmlSerializer.SerializeObject(users, filePath); } private bool CheckPassword(User user) { var hashcode = L4ItXmlSerializer.Decrypt(user.PasswordHash); if (hashcode.Equals(SelectedUserPassword)) return true; return false; } }