Added Logout endpoints

This commit is contained in:
MarcUs7i 2025-04-27 21:37:34 +02:00
parent 4343cade95
commit 1f03e8caf7
9 changed files with 87 additions and 8 deletions

View file

@ -47,6 +47,24 @@ public class AdminController : ControllerBase
});
}
[HttpDelete("logout")]
public ActionResult<AdminLogoutResponse> Login([FromBody] AdminLogoutRequest request)
{
if (request.AccessToken == string.Empty || !_tokenService.ClearToken(request.AccessToken))
{
return Ok(new AdminLogoutResponse
{
Success = false,
ErrorMessage = "Invalid access token"
});
}
return Ok(new AdminLogoutResponse
{
Success = true
});
}
private string? GetBearerToken()
{
if (!HttpContext.Request.Headers.TryGetValue("Authorization", out var authHeader))

View file

@ -24,7 +24,7 @@ public class UserController : ControllerBase
if (user == null)
{
return Ok(new UserLoginResponse
return Ok(new UserLoginResponse
{
Success = false,
ErrorMessage = "Invalid PIN"
@ -43,6 +43,24 @@ public class UserController : ControllerBase
AccessToken = accessToken
});
}
[HttpDelete("logout")]
public ActionResult<UserLogoutResponse> Logout([FromBody] UserLogoutRequest request)
{
if (request.AccessToken == string.Empty || !_userManagementService.ClearToken(request.AccessToken))
{
return Ok(new UserLogoutResponse
{
Success = false,
ErrorMessage = "Invalid access token"
});
}
return Ok(new UserLogoutResponse
{
Success = true
});
}
[HttpGet("username")]
public async Task<ActionResult<UserGetUsernameResponse>> GetUsername()

View file

@ -12,6 +12,17 @@ public class AdminLoginResponse
public string AccessToken { get; set; } = string.Empty;
public string? ErrorMessage { get; set; }
}
public class AdminLogoutRequest
{
public string AccessToken { get; set; } = string.Empty;
}
public class AdminLogoutResponse
{
public bool Success { get; set; }
public string? ErrorMessage { get; set; }
}
#endregion
#region User Administration

View file

@ -12,6 +12,17 @@ public class UserLoginResponse
public string AccessToken { get; set; } = string.Empty;
public string? ErrorMessage { get; set; }
}
public class UserLogoutRequest
{
public string AccessToken { get; set; } = string.Empty;
}
public class UserLogoutResponse
{
public bool Success { get; set; }
public string? ErrorMessage { get; set; }
}
#endregion
#region User States

View file

@ -6,6 +6,15 @@
GET {{baseUrl}}/admin/test-exception
### Admin Logout
# @name logoutAdmin
DELETE {{baseUrl}}/admin/logout
Content-Type: application/json
{
"accessToken": "{{adminToken}}"
}
### Admin Login
# @name loginAdmin
POST {{baseUrl}}/admin/login
@ -174,13 +183,22 @@ Authorization: Bearer {{adminToken}}
### User APIs ###
### User Login
# @name logoutUser
DELETE {{baseUrl}}/user/logout
Content-Type: application/json
{
"accessToken": "{{userToken}}"
}
### User Login
# @name loginUser
POST {{baseUrl}}/user/login
Content-Type: application/json
{
"pin": "2D21"
"pin": "{{loginUser}}"
}
> {%
const userToken = response.body.accessToken;

View file

@ -4,6 +4,7 @@ public interface IAdminTokenService
{
void StoreToken(string token);
bool ValidateToken(string token);
bool ClearToken(string token);
}
public class AdminTokenService : IAdminTokenService
@ -19,4 +20,6 @@ public class AdminTokenService : IAdminTokenService
{
return _adminTokens.ContainsKey(token) && _adminTokens[token];
}
public bool ClearToken(string token) => _adminTokens.Remove(token);
}

View file

@ -16,6 +16,7 @@ public interface IUserManagementService
Task<UserModel?> GetUserByNameAsync(string userName);
string GenerateAccessToken(string username);
void ResetLoginState(string userName);
bool ClearToken(string token);
}
public class UserManagementService : IUserManagementService
@ -135,4 +136,6 @@ public class UserManagementService : IUserManagementService
u => u.Username == userName,
Builders<UserModel>.Update.Set(u => u.ResetState, false));
}
public bool ClearToken(string accessToken) => _tokenService.ClearToken(accessToken);
}

View file

@ -5,7 +5,7 @@ public interface IUserTokenService
void StoreToken(string token, string username);
string? GetUsernameFromToken(string token);
bool ValidateToken(string token);
void ClearToken(string token);
bool ClearToken(string token);
void RemoveTokensForUser(string username);
void UpdateUserInTokens(string oldUsername, string newUsername);
}
@ -29,10 +29,7 @@ public class UserTokenService : IUserTokenService
return _userTokens.ContainsKey(token);
}
public void ClearToken(string token)
{
_userTokens.Remove(token);
}
public bool ClearToken(string token) => _userTokens.Remove(token);
public void RemoveTokensForUser(string username)
{

View file

@ -1,7 +1,7 @@
{
"dev": {
"loginAdmin": "admin123",
"loginUser": "value",
"loginUser": "2D21",
"createQuestionSet": "value",
"createQuestion": "value"
}