11using Microsoft . AspNetCore . Mvc ;
22using OsmoDoc . API . Models ;
33using OsmoDoc . API . Helpers ;
4+ using OsmoDoc . Services ;
45
56namespace OsmoDoc . API . Controllers ;
67
78[ Route ( "api" ) ]
89[ ApiController ]
910public 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}
0 commit comments