mirror of
https://github.com/Kizuren/QuizConnect.git
synced 2025-12-21 21:16:14 +01:00
Added Logout endpoints
This commit is contained in:
parent
4343cade95
commit
1f03e8caf7
9 changed files with 87 additions and 8 deletions
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"dev": {
|
||||
"loginAdmin": "admin123",
|
||||
"loginUser": "value",
|
||||
"loginUser": "2D21",
|
||||
"createQuestionSet": "value",
|
||||
"createQuestion": "value"
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue