add remember me to API
This commit is contained in:
parent
84457413b2
commit
dac3acfecf
5 changed files with 32 additions and 24 deletions
|
@ -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,14 +21,15 @@ 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
|
||||||
);
|
);
|
||||||
|
|
||||||
if (result is null)
|
if (result is null)
|
||||||
return this.BadRequest();
|
return this.BadRequest();
|
||||||
|
|
||||||
var (user, session) = result;
|
var (user, session) = result;
|
||||||
|
|
||||||
HttpContext.SetSession(session, user);
|
HttpContext.SetSession(session, user);
|
||||||
|
|
||||||
return new LoginResponse(user.Id, user.Username, user.Roles.Any(r => r == Role.SuperUser));
|
return new LoginResponse(user.Id, user.Username, user.Roles.Any(r => r == Role.SuperUser));
|
||||||
|
@ -39,10 +38,15 @@ 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);
|
||||||
|
|
||||||
return new RegisterResponse(
|
return new RegisterResponse(
|
||||||
user.Id,
|
user.Id,
|
||||||
user.Username,
|
user.Username,
|
||||||
|
|
|
@ -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);
|
|
@ -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);
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue