122 lines
4.5 KiB
C#
122 lines
4.5 KiB
C#
using OfficeFlow.Models;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace OfficeFlow.Utils
|
||
{
|
||
public static class Session
|
||
{
|
||
// Текущий авторизованный пользователь
|
||
public static User CurrentUser { get; private set; }
|
||
|
||
/// <summary>
|
||
/// Авторизация пользователя по логину и паролю
|
||
/// </summary>
|
||
/// <param name="login">Логин пользователя</param>
|
||
/// <param name="password">Пароль пользователя</param>
|
||
/// <returns>True, если авторизация успешна</returns>
|
||
public static bool Authenticate(string login, string password)
|
||
{
|
||
try
|
||
{
|
||
// Находим пользователя по логину
|
||
var user = App.Entities.Users.FirstOrDefault(u => u.Login == login);
|
||
if (user == null)
|
||
{
|
||
throw new Exception("Пользователь с таким логином не найден.");
|
||
}
|
||
|
||
// Проверяем пароль
|
||
if (!String.Equals(HashPassword(password), user.PasswordHash))//!BCrypt.Verify(password, user.PasswordHash))
|
||
{
|
||
throw new Exception("Неверный пароль.");
|
||
}
|
||
|
||
// Устанавливаем текущего пользователя
|
||
CurrentUser = user;
|
||
return true;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
throw new Exception($"Ошибка авторизации: {ex.Message}");
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Создание нового пользователя
|
||
/// </summary>
|
||
/// <param name="login">Логин</param>
|
||
/// <param name="password">Пароль</param>
|
||
/// <param name="email">Email</param>
|
||
/// <returns>Созданный пользователь</returns>
|
||
public static User CreateUser(string login, string password, Role role, string email=null)
|
||
{
|
||
try
|
||
{
|
||
// Проверяем уникальность логина и email
|
||
if (App.Entities.Users.Any(u => u.Login == login))
|
||
{
|
||
throw new Exception("Пользователь с таким логином уже существует.");
|
||
}
|
||
if (App.Entities.Users.Any(u => u.Email == email))
|
||
{
|
||
throw new Exception("Пользователь с таким email уже существует.");
|
||
}
|
||
|
||
// Создаем нового пользователя
|
||
var newUser = new User
|
||
{
|
||
Login = login,
|
||
PasswordHash = HashPassword(password), // Хэшируем пароль
|
||
Email = email,
|
||
AccountStatusID = App.Entities.AccountStatuses.Where((acs) => acs.StatusName == "Активен").First().StatusID
|
||
};
|
||
|
||
App.Entities.Users.Add(newUser);
|
||
App.Entities.User_Role.Add(
|
||
new User_Role
|
||
{
|
||
Role = role,
|
||
User = newUser
|
||
}
|
||
);
|
||
|
||
|
||
// Возвращаем созданного пользователя
|
||
return newUser;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
throw new Exception($"Ошибка при создании пользователя: {ex.Message}");
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Хэширование пароля
|
||
/// </summary>
|
||
/// <param name="password">Пароль</param>
|
||
/// <returns>Хэшированный пароль</returns>
|
||
private static string HashPassword(string password)
|
||
{
|
||
return password.GetHashCode().ToString();
|
||
}
|
||
|
||
/// <summary>
|
||
/// Выход из системы (очистка текущего пользователя)
|
||
/// </summary>
|
||
public static void Logout()
|
||
{
|
||
CurrentUser = null;
|
||
}
|
||
|
||
public static bool Authenticate(User user)
|
||
{
|
||
CurrentUser = user;
|
||
return true;
|
||
}
|
||
}
|
||
}
|