Files
OfficeFlow/OfficeFlow/Utils/Session.cs
2025-05-22 20:26:15 +03:00

122 lines
4.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
}
}
}