Skip to content

Commit b7b0ec4

Browse files
committed
feat: add endpoint for revoking token and update login endpoint to save generated token to redis
1 parent 23e028b commit b7b0ec4

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

OsmoDoc.API/Controllers/LoginController.cs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
using Microsoft.AspNetCore.Mvc;
22
using OsmoDoc.API.Models;
33
using OsmoDoc.API.Helpers;
4+
using OsmoDoc.Services;
45

56
namespace OsmoDoc.API.Controllers;
67

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

13-
public LoginController(ILogger<LoginController> logger)
15+
public LoginController(IRedisTokenStoreService tokenStoreService, ILogger<LoginController> logger)
1416
{
17+
this._tokenStoreSerivce = tokenStoreService;
1518
this._logger = logger;
1619
}
1720

@@ -23,6 +26,7 @@ public async Task<ActionResult<BaseResponse>> Login([FromBody] LoginRequestDTO l
2326
try
2427
{
2528
string token = await Task.Run(() => AuthenticationHelper.JwtTokenGenerator(loginRequest.Email));
29+
await this._tokenStoreSerivce.StoreTokenAsync(token, loginRequest.Email);
2630

2731
response.Status = ResponseStatus.Success;
2832
response.AuthToken = token;
@@ -38,4 +42,27 @@ public async Task<ActionResult<BaseResponse>> Login([FromBody] LoginRequestDTO l
3842
return this.StatusCode(StatusCodes.Status500InternalServerError, response);
3943
}
4044
}
45+
46+
[HttpPost]
47+
[Route("revoke")]
48+
public async Task<ActionResult<BaseResponse>> RevokeToken([FromBody] RevokeTokenRequestDTO request)
49+
{
50+
BaseResponse response = new BaseResponse(ResponseStatus.Fail);
51+
try
52+
{
53+
await this._tokenStoreSerivce.RevokeTokenAsync(request.Token);
54+
55+
response.Status = ResponseStatus.Success;
56+
response.Message = "Token revoked";
57+
return this.Ok(response);
58+
}
59+
catch (Exception ex)
60+
{
61+
response.Status = ResponseStatus.Error;
62+
response.Message = ex.Message;
63+
this._logger.LogError(ex.Message);
64+
this._logger.LogError(ex.StackTrace);
65+
return this.StatusCode(StatusCodes.Status500InternalServerError, response);
66+
}
67+
}
4168
}
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)