Files
infosys-publisher/InfosysPublisher/WinLogin.xaml.cs
David Štaleker 1dc48d2d85 login
2024-08-02 11:13:53 +02:00

124 lines
3.8 KiB
C#

using Renci.SshNet;
using ResevalnaScanner.Classes;
using System;
using System.Collections.Generic;
using System.Data;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using InfosysPublisher.Classes;
using Microsoft.Data.SqlClient;
namespace InfosysPublisher
{
/// <summary>
/// Interaction logic for WinLogin.xaml
/// </summary>
public partial class WinLogin : Window
{
public WinLogin()
{
InitializeComponent();
tbUsername.KeyDown += (sender, args) =>
{
if (args.Key != Key.Enter) return;
tbPassword.Focus();
};
tbPassword.KeyDown += (sender, args) =>
{
if (args.Key != Key.Enter) return;
Login();
};
tblVersion.Text = $"Version: {App.CurrentVersion}";
tbUsername.Focus();
}
private void Login_OnClick(object sender, RoutedEventArgs e)
{
Login();
}
private async void Login()
{
var succeeded = false;
var isLockedOut = false;
var username = tbUsername.Text;
var password = tbPassword.Password;
tbPassword.Password = "";
User user = null;
await Task.Run(() =>
{
using var sqlConnection = new SqlConnection(App.SqlConnectionString);
sqlConnection.Open();
var sqlCommandString = @"
SELECT ID_Uporabnik,
UporabniskoIme,
Ime,
Priimek,
GesloBytes,
SaltBytes,
Aktiven
FROM Uporabnik
WHERE UporabniskoIme = @uporabniskoIme
AND GesloBytes IS NOT NULL
AND SaltBytes IS NOT NULL"
;
using var sqlCommand = new SqlCommand(sqlCommandString, sqlConnection);
sqlCommand.Parameters.AddWithValue("uporabniskoIme", username);
using var sqlDataReader = sqlCommand.ExecuteReader();
if (sqlDataReader.Read())
{
if (sqlDataReader.GetString("UporabniskoIme") == username
&& Encryption.CompareByteArrays(Encryption.CreatePasswordHash(password, (byte[])sqlDataReader.GetValue("SaltBytes")).Hash, (byte[])sqlDataReader.GetValue("GesloBytes")))
{
if (sqlDataReader.GetBoolean("Aktiven"))
{
user = new User
{
Id = sqlDataReader.GetInt32(sqlDataReader.GetOrdinal("ID_Uporabnik")),
Name = sqlDataReader.GetString(sqlDataReader.GetOrdinal("Ime")),
Surname = sqlDataReader.GetString(sqlDataReader.GetOrdinal("Priimek")),
Username = sqlDataReader.GetString(sqlDataReader.GetOrdinal("UporabniskoIme")),
};
succeeded = true;
}
else
{
isLockedOut = true;
}
}
}
else
{
//zato da ne takoj konca
Encryption.CompareByteArrays(Encryption.CreatePasswordHash(password).Hash, new byte[4] { 0, 1, 0, 1 });
}
});
tbPassword.Password = "";
if (!succeeded)
{
MessageBox.Show("Wrong login data!", "Login", MessageBoxButton.OK, MessageBoxImage.Stop);
return;
}
App.User = user;
this.Hide();
var win = new WinMain();
win.ShowDialog();
this.Show();
this.Close();
}
}
}