214 lines
4.5 KiB
C#
214 lines
4.5 KiB
C#
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<string>? savedUsers;
|
|
|
|
private ObservableCollection<User> 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<ObservableCollection<User>>(filePath);
|
|
savedUsers = new ObservableCollection<string>();
|
|
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<ObservableCollection<User>>(filePath);
|
|
savedUsers = new ObservableCollection<string>();
|
|
if (users == null)
|
|
{
|
|
users = new ObservableCollection<User>();
|
|
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<string>();
|
|
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;
|
|
}
|
|
|
|
|
|
}
|