Working on auth

This commit is contained in:
blyssco 2025-09-06 19:51:07 +02:00
parent b60c57e19c
commit 247e256d09
16 changed files with 193 additions and 0 deletions

View File

@ -0,0 +1,9 @@
namespace Liber_Incantamentum.Application.Authentification.DTOs.Request
{
public class LoginRequestDto
{
public string? Username { get; set; }
public string? Email { get; set; }
public required string Password { get; set; }
}
}

View File

@ -0,0 +1,8 @@
namespace Liber_Incantamentum.Application.Authentification.DTOs.Request
{
public class RefreshTokenRequestDto
{
public Guid UserId { get; set; }
public required string RefreshToken { get; set; }
}
}

View File

@ -0,0 +1,9 @@
namespace Liber_Incantamentum.Application.Authentification.DTOs.Request
{
public class RegisterRequestDto
{
public required string Username { get; set; }
public required string Email { get; set; }
public required string Password { get; set; }
}
}

View File

@ -0,0 +1,9 @@
namespace Liber_Incantamentum.Application.Authentification.DTOs.Request
{
public class UserFilterDto
{
public Guid? Id { get; set; }
public string? UserName { get; set; }
public string? Email { get; set; }
}
}

View File

@ -0,0 +1,9 @@
namespace Liber_Incantamentum.Application.Authentification.DTOs.Response
{
public class AuthResponseDto
{
public UserResponseDto UserResponse { get; set; } = null!;
public string AccessToken { get; set; } = string.Empty;
public string Refreshtoken { get; set; } = string.Empty;
}
}

View File

@ -0,0 +1,10 @@
namespace Liber_Incantamentum.Application.Authentification.DTOs.Response
{
public class UserResponseDto
{
public Guid Id { get; set; }
public string Username { get; set; } = string.Empty;
public string Email { get; set; } = string.Empty;
public string Role { get; set; } = string.Empty;
}
}

View File

@ -0,0 +1,12 @@
using Liber_Incantamentum.Application.Authentification.DTOs.Request;
using Liber_Incantamentum.Application.Authentification.DTOs.Response;
namespace Liber_Incantamentum.Application.Authentification.Interfaces
{
public interface IAuthentificationService
{
Task<UserResponseDto> RegisterUserAsync(RegisterRequestDto user);
Task<IEnumerable<UserResponseDto>> GetAllUsersAsync(UserFilterDto filter);
Task<UserResponseDto> LoginUserAsync(LoginRequestDto user);
}
}

View File

@ -0,0 +1,12 @@
using Liber_Incantamentum.Application.Authentification.DTOs.Request;
using Liber_Incantamentum.Application.Authentification.DTOs.Response;
using Liber_Incantamentum.Domain.Authentification.Entities;
namespace Liber_Incantamentum.Application.Authentification.Interfaces
{
public interface ITokenService
{
Task<AuthResponseDto> GenerateTokensAsync(User user); // génère et stocke refresh token
Task<AuthResponseDto?> RefreshTokensAsync(RefreshTokenRequestDto request); // vérifie et renouvelle
}
}

View File

@ -0,0 +1,23 @@
using Liber_Incantamentum.Application.Authentification.DTOs.Request;
using Liber_Incantamentum.Application.Authentification.DTOs.Response;
using Liber_Incantamentum.Application.Authentification.Interfaces;
namespace Liber_Incantamentum.Application.Authentification.Services.Generals
{
public class AuthentificationService : IAuthentificationService
{
public Task<UserResponseDto> RegisterUserAsync(RegisterRequestDto user)
{
throw new NotImplementedException();
}
public Task<UserResponseDto> LoginUserAsync(LoginRequestDto user)
{
throw new NotImplementedException();
}
public Task<IEnumerable<UserResponseDto>> GetAllUsersAsync(UserFilterDto filter)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,21 @@
using Liber_Incantamentum.Application.Authentification.DTOs.Request;
using Liber_Incantamentum.Application.Authentification.DTOs.Response;
using Liber_Incantamentum.Application.Authentification.Interfaces;
using Liber_Incantamentum.Domain.Authentification.Entities;
using System.Security.Cryptography;
namespace Liber_Incantamentum.Application.Authentification.Services.Generals
{
public class TokenService : ITokenService
{
public Task<AuthResponseDto> GenerateTokensAsync(User user)
{
throw new NotImplementedException();
}
public Task<AuthResponseDto?> RefreshTokensAsync(RefreshTokenRequestDto request)
{
throw new NotImplementedException();
}
}
}

View File

@ -6,4 +6,14 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Folder Include="Authentification\Exceptions\" />
<Folder Include="Authentification\Services\Mappings\" />
<Folder Include="Authentification\Services\Validations\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LiberIncantamentum.Domain\Liber_Incantamentum.Domain.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,13 @@
namespace Liber_Incantamentum.Domain.Authentification.Entities
{
public class RefreshToken
{
public Guid Id { get; set; }
public required string Token { get; set; }
public DateTime ExpiresAt { get; set; }
public bool IsRevoked { get; set; }
public Guid UserId { get; set; }
public User User { get; set; } = null!;
}
}

View File

@ -0,0 +1,13 @@
namespace Liber_Incantamentum.Domain.Authentification.Entities
{
public class User
{
public Guid Id { get; set; }
public string Username { get; set; } = string.Empty;
public string Email { get; set; } = string.Empty;
public string PasswordHash { get; set; } = string.Empty;
public string Role { get; set; } = string.Empty;
public string? RefreshToken { get; set; }
public DateTime? RefreshTokenExpiryTime { get; set; }
}
}

View File

@ -0,0 +1,9 @@
namespace Liber_Incantamentum.Domain.Authentification.Filters
{
public class UserFilter
{
public Guid? Id { get; set; }
public string? Username { get; set; }
public string? Email { get; set; }
}
}

View File

@ -0,0 +1,13 @@
using Liber_Incantamentum.Domain.Authentification.Entities;
using Liber_Incantamentum.Domain.Authentification.Filters;
namespace Liber_Incantamentum.Domain.Authentification.Repositories
{
public interface IAuthentificationRepository
{
Task<User?> ListUsersAsync(UserFilter datasOnUser); // Usage : Récuperer un/des users à partir d'infos
Task<bool> AddAsync(User user); // Usage : Créer un user
Task<bool> UpdateAsync(User user); // Usage : Mettre à jour un user
Task<bool> RemoveUserAsync(Guid id); // Usage : Supprimer un user
}
}

View File

@ -0,0 +1,13 @@
using Liber_Incantamentum.Domain.Authentification.Entities;
namespace Liber_Incantamentum.Domain.Authentification.Repositories
{
public interface IRefreshTokenRepository
{
Task<RefreshToken?> GetRefreshTokenByIdAsync(string token); //Usage : quand lutilisateur envoie un refresh token pour obtenir un nouveau JWT, on doit vérifier quil est valide et non révoqué.
Task<IEnumerable<RefreshToken>> GetRefreshTokenByUserIdAsync(Guid userId); // Usage : afficher les sessions actives dun utilisateur & révoquer certains tokens manuellement
Task AddRefreshTokenAsyn(RefreshToken refreshToken); // Usage : après un login réussi ou une génération de refresh token.
Task UpdateRefreshTokenAsync(RefreshToken refreshToken); // Usage : marquer un token comme révoqué (IsRevoked = true) & prolonger la date dexpiration si tu veux étendre la validité
Task RevokeAllRefreshTokenAsync(Guid userId); // Usage : lutilisateur se déconnecte de tous les appareils & le compte a été compromis
}
}