Skip to content

Commit 1057e4d

Browse files
committed
feat: add endpoint for revoking token and update login endpoint to save generated token to redis
1 parent 76fcfbf commit 1057e4d

File tree

2 files changed

+39
-3
lines changed

2 files changed

+39
-3
lines changed

OsmoDoc.API/Controllers/LoginController.cs

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,34 @@
11
using Microsoft.AspNetCore.Mvc;
2+
using Microsoft.AspNetCore.Authorization;
23
using OsmoDoc.API.Models;
34
using OsmoDoc.API.Helpers;
4-
using Microsoft.AspNetCore.Authorization;
5+
using OsmoDoc.Services;
56

67
namespace OsmoDoc.API.Controllers;
78

89
[Route("api")]
910
[ApiController]
1011
public class LoginController : ControllerBase
1112
{
13+
private readonly IRedisTokenStoreService _tokenStoreSerivce;
1214
private readonly ILogger<LoginController> _logger;
1315

14-
public LoginController(ILogger<LoginController> logger)
16+
public LoginController(IRedisTokenStoreService tokenStoreService, ILogger<LoginController> logger)
1517
{
18+
this._tokenStoreSerivce = tokenStoreService;
1619
this._logger = logger;
1720
}
1821

1922
[HttpPost]
2023
[Route("login")]
2124
[AllowAnonymous]
22-
public ActionResult<BaseResponse> Login([FromBody] LoginRequestDTO loginRequest)
25+
public async Task<ActionResult<BaseResponse>> Login([FromBody] LoginRequestDTO loginRequest)
2326
{
2427
BaseResponse response = new BaseResponse(ResponseStatus.Fail);
2528
try
2629
{
2730
string token = AuthenticationHelper.JwtTokenGenerator(loginRequest.Email);
31+
await this._tokenStoreSerivce.StoreTokenAsync(token, loginRequest.Email);
2832

2933
response.Status = ResponseStatus.Success;
3034
response.AuthToken = token;
@@ -40,4 +44,27 @@ public ActionResult<BaseResponse> Login([FromBody] LoginRequestDTO loginRequest)
4044
return this.StatusCode(StatusCodes.Status500InternalServerError, response);
4145
}
4246
}
47+
48+
[HttpPost]
49+
[Route("revoke")]
50+
public async Task<ActionResult<BaseResponse>> RevokeToken([FromBody] RevokeTokenRequestDTO request)
51+
{
52+
BaseResponse response = new BaseResponse(ResponseStatus.Fail);
53+
try
54+
{
55+
await this._tokenStoreSerivce.RevokeTokenAsync(request.Token);
56+
57+
response.Status = ResponseStatus.Success;
58+
response.Message = "Token revoked";
59+
return this.Ok(response);
60+
}
61+
catch (Exception ex)
62+
{
63+
response.Status = ResponseStatus.Error;
64+
response.Message = ex.Message;
65+
this._logger.LogError(ex.Message);
66+
this._logger.LogError(ex.StackTrace);
67+
return this.StatusCode(StatusCodes.Status500InternalServerError, response);
68+
}
69+
}
4370
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using System.ComponentModel.DataAnnotations;
2+
3+
namespace OsmoDoc.API.Models;
4+
5+
public class RevokeTokenRequestDTO
6+
{
7+
[Required(ErrorMessage = "Token is required")]
8+
public string Token { get; set; } = string.Empty;
9+
}

0 commit comments

Comments
 (0)