This commit is contained in:
john 2025-05-15 17:47:20 +02:00
parent 0dc41337da
commit 14fd359ea8
28 changed files with 156 additions and 52 deletions

View file

@ -35,6 +35,8 @@ public static class AuthenticationStartup
builder.EnableSensitiveDataLogging();
});
services.AddScoped<DbContext>(s => s.GetRequiredService<AuthContext>());
services.AddMediatR(c =>
{
c.RegisterServicesFromAssembly(typeof(AuthenticationStartup).Assembly);

View file

@ -1,6 +1,5 @@
using Femto.Common.Domain;
using Femto.Modules.Auth.Application.Dto;
using Femto.Modules.Auth.Application.Services;
using Femto.Modules.Auth.Data;
using Femto.Modules.Auth.Models;
using MediatR;
@ -8,7 +7,7 @@ using Microsoft.EntityFrameworkCore;
namespace Femto.Modules.Auth.Application.Commands.Login;
internal class LoginCommandHandler(AuthContext context, SessionGenerator sessionGenerator)
internal class LoginCommandHandler(AuthContext context)
: ICommandHandler<LoginCommand, LoginResult>
{
public async Task<LoginResult> Handle(LoginCommand request, CancellationToken cancellationToken)
@ -19,14 +18,12 @@ internal class LoginCommandHandler(AuthContext context, SessionGenerator session
);
if (user is null)
throw new DomainException("invalid credentials");
throw new DomainError("invalid credentials");
if (!user.HasPassword(request.Password))
throw new DomainException("invalid credentials");
throw new DomainError("invalid credentials");
var session = sessionGenerator.GenerateSession();
await context.AddAsync(session, cancellationToken);
var session = user.StartNewSession();
return new(new Session(session.Id, session.Expires), user.Id, user.Username);
}

View file

@ -1,12 +1,11 @@
using Femto.Common.Domain;
using Femto.Modules.Auth.Application.Dto;
using Femto.Modules.Auth.Application.Services;
using Femto.Modules.Auth.Data;
using Femto.Modules.Auth.Models;
namespace Femto.Modules.Auth.Application.Commands.Register;
internal class RegisterCommandHandler(AuthContext context, SessionGenerator sessionGenerator) : ICommandHandler<RegisterCommand, RegisterResult>
internal class RegisterCommandHandler(AuthContext context) : ICommandHandler<RegisterCommand, RegisterResult>
{
public async Task<RegisterResult> Handle(RegisterCommand request, CancellationToken cancellationToken)
{

View file

@ -3,4 +3,8 @@ using Femto.Modules.Auth.Application.Dto;
namespace Femto.Modules.Auth.Application.Commands.ValidateSession;
public record ValidateSessionCommand(string SessionId) : ICommand<ValidateSessionResult>;
/// <summary>
/// Validate an existing session, and then return either the current session, or a new one in case the expiry is further in the future
/// </summary>
/// <param name="SessionId"></param>
public record ValidateSessionCommand(string SessionId) : ICommand<ValidateSessionResult>;

View file

@ -1,6 +1,7 @@
using Femto.Common.Domain;
using Femto.Modules.Auth.Application.Dto;
using Femto.Modules.Auth.Data;
using Femto.Modules.Auth.Errors;
using Microsoft.EntityFrameworkCore;
namespace Femto.Modules.Auth.Application.Commands.ValidateSession;
@ -21,7 +22,7 @@ internal class ValidateSessionCommandHandler(AuthContext context)
);
if (user is null)
throw new DomainException("invalid session");
throw new InvalidSessionError();
var session = user.StartNewSession();

View file

@ -1,11 +0,0 @@
using Femto.Modules.Auth.Models;
namespace Femto.Modules.Auth.Application.Services;
public class SessionGenerator
{
public UserSession GenerateSession()
{
throw new NotImplementedException();
}
}