mirror of
https://github.com/Kizuren/QuizConnect.git
synced 2025-12-24 08:14:12 +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()
|
private string? GetBearerToken()
|
||||||
{
|
{
|
||||||
if (!HttpContext.Request.Headers.TryGetValue("Authorization", out var authHeader))
|
if (!HttpContext.Request.Headers.TryGetValue("Authorization", out var authHeader))
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public class UserController : ControllerBase
|
||||||
|
|
||||||
if (user == null)
|
if (user == null)
|
||||||
{
|
{
|
||||||
return Ok(new UserLoginResponse
|
return Ok(new UserLoginResponse
|
||||||
{
|
{
|
||||||
Success = false,
|
Success = false,
|
||||||
ErrorMessage = "Invalid PIN"
|
ErrorMessage = "Invalid PIN"
|
||||||
|
|
@ -43,6 +43,24 @@ public class UserController : ControllerBase
|
||||||
AccessToken = accessToken
|
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")]
|
[HttpGet("username")]
|
||||||
public async Task<ActionResult<UserGetUsernameResponse>> GetUsername()
|
public async Task<ActionResult<UserGetUsernameResponse>> GetUsername()
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,17 @@ public class AdminLoginResponse
|
||||||
public string AccessToken { get; set; } = string.Empty;
|
public string AccessToken { get; set; } = string.Empty;
|
||||||
public string? ErrorMessage { get; set; }
|
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
|
#endregion
|
||||||
|
|
||||||
#region User Administration
|
#region User Administration
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,17 @@ public class UserLoginResponse
|
||||||
public string AccessToken { get; set; } = string.Empty;
|
public string AccessToken { get; set; } = string.Empty;
|
||||||
public string? ErrorMessage { get; set; }
|
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
|
#endregion
|
||||||
|
|
||||||
#region User States
|
#region User States
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,15 @@
|
||||||
GET {{baseUrl}}/admin/test-exception
|
GET {{baseUrl}}/admin/test-exception
|
||||||
|
|
||||||
|
|
||||||
|
### Admin Logout
|
||||||
|
# @name logoutAdmin
|
||||||
|
DELETE {{baseUrl}}/admin/logout
|
||||||
|
Content-Type: application/json
|
||||||
|
|
||||||
|
{
|
||||||
|
"accessToken": "{{adminToken}}"
|
||||||
|
}
|
||||||
|
|
||||||
### Admin Login
|
### Admin Login
|
||||||
# @name loginAdmin
|
# @name loginAdmin
|
||||||
POST {{baseUrl}}/admin/login
|
POST {{baseUrl}}/admin/login
|
||||||
|
|
@ -174,13 +183,22 @@ Authorization: Bearer {{adminToken}}
|
||||||
|
|
||||||
### User APIs ###
|
### User APIs ###
|
||||||
|
|
||||||
|
### User Login
|
||||||
|
# @name logoutUser
|
||||||
|
DELETE {{baseUrl}}/user/logout
|
||||||
|
Content-Type: application/json
|
||||||
|
|
||||||
|
{
|
||||||
|
"accessToken": "{{userToken}}"
|
||||||
|
}
|
||||||
|
|
||||||
### User Login
|
### User Login
|
||||||
# @name loginUser
|
# @name loginUser
|
||||||
POST {{baseUrl}}/user/login
|
POST {{baseUrl}}/user/login
|
||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
|
|
||||||
{
|
{
|
||||||
"pin": "2D21"
|
"pin": "{{loginUser}}"
|
||||||
}
|
}
|
||||||
> {%
|
> {%
|
||||||
const userToken = response.body.accessToken;
|
const userToken = response.body.accessToken;
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ public interface IAdminTokenService
|
||||||
{
|
{
|
||||||
void StoreToken(string token);
|
void StoreToken(string token);
|
||||||
bool ValidateToken(string token);
|
bool ValidateToken(string token);
|
||||||
|
bool ClearToken(string token);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class AdminTokenService : IAdminTokenService
|
public class AdminTokenService : IAdminTokenService
|
||||||
|
|
@ -19,4 +20,6 @@ public class AdminTokenService : IAdminTokenService
|
||||||
{
|
{
|
||||||
return _adminTokens.ContainsKey(token) && _adminTokens[token];
|
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);
|
Task<UserModel?> GetUserByNameAsync(string userName);
|
||||||
string GenerateAccessToken(string username);
|
string GenerateAccessToken(string username);
|
||||||
void ResetLoginState(string userName);
|
void ResetLoginState(string userName);
|
||||||
|
bool ClearToken(string token);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class UserManagementService : IUserManagementService
|
public class UserManagementService : IUserManagementService
|
||||||
|
|
@ -135,4 +136,6 @@ public class UserManagementService : IUserManagementService
|
||||||
u => u.Username == userName,
|
u => u.Username == userName,
|
||||||
Builders<UserModel>.Update.Set(u => u.ResetState, false));
|
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);
|
void StoreToken(string token, string username);
|
||||||
string? GetUsernameFromToken(string token);
|
string? GetUsernameFromToken(string token);
|
||||||
bool ValidateToken(string token);
|
bool ValidateToken(string token);
|
||||||
void ClearToken(string token);
|
bool ClearToken(string token);
|
||||||
void RemoveTokensForUser(string username);
|
void RemoveTokensForUser(string username);
|
||||||
void UpdateUserInTokens(string oldUsername, string newUsername);
|
void UpdateUserInTokens(string oldUsername, string newUsername);
|
||||||
}
|
}
|
||||||
|
|
@ -29,10 +29,7 @@ public class UserTokenService : IUserTokenService
|
||||||
return _userTokens.ContainsKey(token);
|
return _userTokens.ContainsKey(token);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearToken(string token)
|
public bool ClearToken(string token) => _userTokens.Remove(token);
|
||||||
{
|
|
||||||
_userTokens.Remove(token);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RemoveTokensForUser(string username)
|
public void RemoveTokensForUser(string username)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"dev": {
|
"dev": {
|
||||||
"loginAdmin": "admin123",
|
"loginAdmin": "admin123",
|
||||||
"loginUser": "value",
|
"loginUser": "2D21",
|
||||||
"createQuestionSet": "value",
|
"createQuestionSet": "value",
|
||||||
"createQuestion": "value"
|
"createQuestion": "value"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue