Push Changes from Techcrafters Repo
This commit is contained in:
213
uniper_hmi/UniperHMI/Common/UserManagementWindowVm.cs
Normal file
213
uniper_hmi/UniperHMI/Common/UserManagementWindowVm.cs
Normal file
@@ -0,0 +1,213 @@
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user