add remember me to API

This commit is contained in:
john 2025-06-16 21:24:37 +02:00
parent 84457413b2
commit dac3acfecf
5 changed files with 32 additions and 24 deletions

View file

@ -9,10 +9,8 @@ namespace Femto.Api.Controllers.Auth;
[ApiController]
[Route("auth")]
public class AuthController(
ICurrentUserContext currentUserContext,
IAuthService authService
) : ControllerBase
public class AuthController(ICurrentUserContext currentUserContext, IAuthService authService)
: ControllerBase
{
[HttpPost("login")]
public async Task<ActionResult<LoginResponse>> Login(
@ -23,14 +21,15 @@ public class AuthController(
var result = await authService.GetUserWithCredentials(
request.Username,
request.Password,
request.RememberMe,
cancellationToken
);
if (result is null)
return this.BadRequest();
var (user, session) = result;
HttpContext.SetSession(session, user);
return new LoginResponse(user.Id, user.Username, user.Roles.Any(r => r == Role.SuperUser));
@ -39,10 +38,15 @@ public class AuthController(
[HttpPost("register")]
public async Task<ActionResult<RegisterResponse>> Register([FromBody] RegisterRequest request)
{
var (user, session) = await authService.CreateUserWithCredentials(request.Username, request.Password, request.SignupCode);
var (user, session) = await authService.CreateUserWithCredentials(
request.Username,
request.Password,
request.SignupCode,
request.RememberMe
);
HttpContext.SetSession(session, user);
return new RegisterResponse(
user.Id,
user.Username,

View file

@ -1,3 +1,3 @@
namespace Femto.Api.Controllers.Auth;
public record LoginRequest(string Username, string Password);
public record LoginRequest(string Username, string Password, bool RememberMe);

View file

@ -1,3 +1,3 @@
namespace Femto.Api.Controllers.Auth;
public record RegisterRequest(string Username, string Password, string SignupCode, string? Email);
public record RegisterRequest(string Username, string Password, string SignupCode, bool RememberMe);

View file

@ -15,11 +15,10 @@ internal class AuthService(
IDbConnectionFactory connectionFactory
) : IAuthService
{
public async Task<UserAndSession?> GetUserWithCredentials(
string username,
public async Task<UserAndSession?> GetUserWithCredentials(string username,
string password,
CancellationToken cancellationToken = default
)
bool createLongTermSession,
CancellationToken cancellationToken = default)
{
var user = await context
.Users.Where(u => u.Username == username)
@ -77,12 +76,11 @@ internal class AuthService(
await storage.DeleteSession(sessionId);
}
public async Task<UserAndSession> CreateUserWithCredentials(
string username,
public async Task<UserAndSession> CreateUserWithCredentials(string username,
string password,
string signupCode,
CancellationToken cancellationToken = default
)
bool createLongTermSession,
CancellationToken cancellationToken = default)
{
var now = DateTimeOffset.UtcNow;

View file

@ -14,6 +14,7 @@ public interface IAuthService
public Task<UserAndSession?> GetUserWithCredentials(
string username,
string password,
bool createLongTermSession,
CancellationToken cancellationToken = default
);
public Task<UserInfo?> GetUserWithId(
@ -25,16 +26,21 @@ public interface IAuthService
public Task<Session?> GetSession(string sessionId);
public Task DeleteSession(string sessionId);
public Task<UserAndSession> CreateUserWithCredentials(
string username,
public Task<UserAndSession> CreateUserWithCredentials(string username,
string password,
string signupCode,
bool createLongTermSession,
CancellationToken cancellationToken = default);
public Task AddSignupCode(
string code,
string recipientName,
CancellationToken cancellationToken = default
);
public Task AddSignupCode(string code, string recipientName, CancellationToken cancellationToken = default);
public Task<ICollection<SignupCodeDto>> GetSignupCodes(CancellationToken cancellationToken = default);
public Task<ICollection<SignupCodeDto>> GetSignupCodes(
CancellationToken cancellationToken = default
);
}
public record UserAndSession(UserInfo User, Session Session);