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] [ApiController]
[Route("auth")] [Route("auth")]
public class AuthController( public class AuthController(ICurrentUserContext currentUserContext, IAuthService authService)
ICurrentUserContext currentUserContext, : ControllerBase
IAuthService authService
) : ControllerBase
{ {
[HttpPost("login")] [HttpPost("login")]
public async Task<ActionResult<LoginResponse>> Login( public async Task<ActionResult<LoginResponse>> Login(
@ -23,6 +21,7 @@ public class AuthController(
var result = await authService.GetUserWithCredentials( var result = await authService.GetUserWithCredentials(
request.Username, request.Username,
request.Password, request.Password,
request.RememberMe,
cancellationToken cancellationToken
); );
@ -39,7 +38,12 @@ public class AuthController(
[HttpPost("register")] [HttpPost("register")]
public async Task<ActionResult<RegisterResponse>> Register([FromBody] RegisterRequest request) 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); HttpContext.SetSession(session, user);

View file

@ -1,3 +1,3 @@
namespace Femto.Api.Controllers.Auth; 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; 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 IDbConnectionFactory connectionFactory
) : IAuthService ) : IAuthService
{ {
public async Task<UserAndSession?> GetUserWithCredentials( public async Task<UserAndSession?> GetUserWithCredentials(string username,
string username,
string password, string password,
CancellationToken cancellationToken = default bool createLongTermSession,
) CancellationToken cancellationToken = default)
{ {
var user = await context var user = await context
.Users.Where(u => u.Username == username) .Users.Where(u => u.Username == username)
@ -77,12 +76,11 @@ internal class AuthService(
await storage.DeleteSession(sessionId); await storage.DeleteSession(sessionId);
} }
public async Task<UserAndSession> CreateUserWithCredentials( public async Task<UserAndSession> CreateUserWithCredentials(string username,
string username,
string password, string password,
string signupCode, string signupCode,
CancellationToken cancellationToken = default bool createLongTermSession,
) CancellationToken cancellationToken = default)
{ {
var now = DateTimeOffset.UtcNow; var now = DateTimeOffset.UtcNow;

View file

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