Files
OfficeFlow/OfficeFlow/Utils/Session.cs

122 lines
4.5 KiB
C#
Raw Normal View History

2025-05-22 20:26:15 +03:00
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;
}
}
}