diff options
author | crupest <crupest@outlook.com> | 2021-04-24 19:13:35 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-04-24 19:13:35 +0800 |
commit | 6877db6a535e57fd1d7e01c966a6451dc6f186f0 (patch) | |
tree | be832b34ae3fc6dca963fb376d7f9b7527fa8444 /BackEnd/Timeline/Auth/MyAuthenticationHandler.cs | |
parent | 93527cceffcd2c7848294093ab9ba3a0e0f569bb (diff) | |
download | timeline-6877db6a535e57fd1d7e01c966a6451dc6f186f0.tar.gz timeline-6877db6a535e57fd1d7e01c966a6451dc6f186f0.tar.bz2 timeline-6877db6a535e57fd1d7e01c966a6451dc6f186f0.zip |
refactor: Refactor auth handler messages.
Diffstat (limited to 'BackEnd/Timeline/Auth/MyAuthenticationHandler.cs')
-rw-r--r-- | BackEnd/Timeline/Auth/MyAuthenticationHandler.cs | 55 |
1 files changed, 30 insertions, 25 deletions
diff --git a/BackEnd/Timeline/Auth/MyAuthenticationHandler.cs b/BackEnd/Timeline/Auth/MyAuthenticationHandler.cs index f1f71b20..f3d18a0e 100644 --- a/BackEnd/Timeline/Auth/MyAuthenticationHandler.cs +++ b/BackEnd/Timeline/Auth/MyAuthenticationHandler.cs @@ -14,7 +14,6 @@ using System.Threading.Tasks; using Timeline.Models;
using Timeline.Models.Http;
using Timeline.Services;
-using static Timeline.Resources.Authentication.AuthHandler;
namespace Timeline.Auth
{
@@ -37,16 +36,28 @@ namespace Timeline.Auth {
private const string TokenErrorCodeKey = "TokenErrorCode";
- private static CommonResponse CreateChallengeResponseBody(int errorCode)
+ private static int GetErrorCodeForUserTokenException(UserTokenException e)
{
- return new CommonResponse(errorCode, errorCode switch
+ return e switch
{
- ErrorCodes.Common.Token.TimeExpired => "The token is out of date and expired. Please create a new one.",
- ErrorCodes.Common.Token.VersionExpired => "The token is of old version and expired. Please create a new one.",
- ErrorCodes.Common.Token.BadFormat => "The token is of bad format. It might not be created by this server.",
- ErrorCodes.Common.Token.UserNotExist => "The owner of the token does not exist. It might have been deleted.",
- _ => "Unknown error."
- });
+ UserTokenTimeExpiredException => ErrorCodes.Common.Token.TimeExpired,
+ UserTokenVersionExpiredException => ErrorCodes.Common.Token.VersionExpired,
+ UserTokenBadFormatException => ErrorCodes.Common.Token.BadFormat,
+ UserTokenUserNotExistException => ErrorCodes.Common.Token.UserNotExist,
+ _ => ErrorCodes.Common.Token.Unknown
+ };
+ }
+
+ private static string GetTokenErrorMessageFromErrorCode(int errorCode)
+ {
+ return errorCode switch
+ {
+ ErrorCodes.Common.Token.TimeExpired => Resource.MessageTokenTimeExpired,
+ ErrorCodes.Common.Token.VersionExpired => Resource.MessageTokenVersionExpired,
+ ErrorCodes.Common.Token.BadFormat => Resource.MessageTokenBadFormat,
+ ErrorCodes.Common.Token.UserNotExist => Resource.MessageTokenUserNotExist,
+ _ => Resource.MessageTokenUnknownError
+ };
}
private readonly ILogger<MyAuthenticationHandler> _logger;
@@ -72,7 +83,7 @@ namespace Timeline.Auth if (!string.IsNullOrEmpty(header) && header.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase))
{
var token = header["Bearer ".Length..].Trim();
- _logger.LogInformation(LogTokenFoundInHeader, token);
+ _logger.LogInformation(Resource.LogTokenFoundInHeader, token);
return token;
}
@@ -83,7 +94,7 @@ namespace Timeline.Auth string token = Request.Query[paramQueryKey];
if (!string.IsNullOrEmpty(token))
{
- _logger.LogInformation(LogTokenFoundInQuery, paramQueryKey, token);
+ _logger.LogInformation(Resource.LogTokenFoundInQuery, paramQueryKey, token);
return token;
}
}
@@ -97,7 +108,7 @@ namespace Timeline.Auth var token = ExtractToken();
if (string.IsNullOrEmpty(token))
{
- _logger.LogInformation(LogTokenNotFound);
+ _logger.LogInformation(Resource.LogTokenNotFound);
return AuthenticateResult.NoResult();
}
@@ -117,19 +128,14 @@ namespace Timeline.Auth return AuthenticateResult.Success(new AuthenticationTicket(principal, AuthenticationConstants.Scheme));
}
- catch (Exception e) when (!(e is ArgumentException))
+ catch (UserTokenException e)
{
- _logger.LogInformation(e, LogTokenValidationFail);
+ var errorCode = GetErrorCodeForUserTokenException(e);
+
+ _logger.LogInformation(e, Resource.LogTokenValidationFail, GetTokenErrorMessageFromErrorCode(errorCode));
return AuthenticateResult.Fail(e, new AuthenticationProperties(new Dictionary<string, string?>()
{
- [TokenErrorCodeKey] = (e switch
- {
- UserTokenTimeExpiredException => ErrorCodes.Common.Token.TimeExpired,
- UserTokenVersionExpiredException => ErrorCodes.Common.Token.VersionExpired,
- UserTokenBadFormatException => ErrorCodes.Common.Token.BadFormat,
- UserTokenUserNotExistException => ErrorCodes.Common.Token.UserNotExist,
- _ => ErrorCodes.Common.Token.Unknown
- }).ToString(CultureInfo.InvariantCulture)
+ [TokenErrorCodeKey] = errorCode.ToString(CultureInfo.InvariantCulture)
}));
}
}
@@ -144,14 +150,13 @@ namespace Timeline.Auth {
if (!int.TryParse(tokenErrorCode, out var errorCode))
errorCode = ErrorCodes.Common.Token.Unknown;
- body = CreateChallengeResponseBody(errorCode);
+ body = new CommonResponse(errorCode, GetTokenErrorMessageFromErrorCode(errorCode));
}
else
{
- body = new CommonResponse(ErrorCodes.Common.Unauthorized, "You must use a token to authenticate.");
+ body = new CommonResponse(ErrorCodes.Common.Unauthorized, Resource.MessageNoToken);
}
-
var bodyData = JsonSerializer.SerializeToUtf8Bytes(body, typeof(CommonResponse), _jsonOptions.CurrentValue.JsonSerializerOptions);
Response.ContentType = MimeTypes.ApplicationJson;
|