From 9fae3b978ff864d6793246c82b59b85ef9eb07eb Mon Sep 17 00:00:00 2001 From: Carl Tibule Date: Sun, 7 Apr 2024 20:18:53 -0500 Subject: [PATCH] Modified ClaimNameAttribute to support multiple claim names depending on environment Environment name will be pulled from environment variable: ASPNETCORE_ENVIRONMENT --- API/YABA.API/Middlewares/AddCustomClaimsMiddleware.cs | 3 ++- API/YABA.Common/Attributes/ClaimNameAttribute.cs | 8 +++++--- API/YABA.Common/Extensions/EnumExtensions.cs | 4 ++-- API/YABA.Common/Extensions/UserIdentityExtensions.cs | 6 ++++-- API/YABA.Common/Lookups/ClaimsLookup.cs | 10 +++++----- API/YABA.Common/Utils/EnvironmentUtils.cs | 9 +++++++++ 6 files changed, 27 insertions(+), 13 deletions(-) create mode 100644 API/YABA.Common/Utils/EnvironmentUtils.cs diff --git a/API/YABA.API/Middlewares/AddCustomClaimsMiddleware.cs b/API/YABA.API/Middlewares/AddCustomClaimsMiddleware.cs index 14ef26e..0c01307 100644 --- a/API/YABA.API/Middlewares/AddCustomClaimsMiddleware.cs +++ b/API/YABA.API/Middlewares/AddCustomClaimsMiddleware.cs @@ -2,6 +2,7 @@ using YABA.API.Extensions; using YABA.Common.Extensions; using YABA.Common.Lookups; +using YABA.Common.Utils; using YABA.Service.Interfaces; namespace YABA.API.Middlewares @@ -31,7 +32,7 @@ namespace YABA.API.Middlewares userId = registedUser.Id; } - httpContext.User.Identities.FirstOrDefault().AddClaim(new Claim(ClaimsLookup.UserId.GetClaimName(), userId.ToString())); + httpContext.User.Identities.FirstOrDefault().AddClaim(new Claim(ClaimsLookup.UserId.GetClaimName(EnvironmentUtils.IsDevelopmentEnvironment()), userId.ToString())); } } diff --git a/API/YABA.Common/Attributes/ClaimNameAttribute.cs b/API/YABA.Common/Attributes/ClaimNameAttribute.cs index 20d2190..c083539 100644 --- a/API/YABA.Common/Attributes/ClaimNameAttribute.cs +++ b/API/YABA.Common/Attributes/ClaimNameAttribute.cs @@ -4,11 +4,13 @@ namespace YABA.Common.Attributes { public class ClaimNameAttribute : Attribute { - public string Name { get; private set; } + public string DevClaimName { get; private set; } + public string ProdClaimName { get; private set; } - public ClaimNameAttribute(string name) + public ClaimNameAttribute(string devClaimName, string prodClaimName) { - this.Name = name; + this.DevClaimName = devClaimName; + ProdClaimName = prodClaimName; } } } diff --git a/API/YABA.Common/Extensions/EnumExtensions.cs b/API/YABA.Common/Extensions/EnumExtensions.cs index f87847e..b8853e4 100644 --- a/API/YABA.Common/Extensions/EnumExtensions.cs +++ b/API/YABA.Common/Extensions/EnumExtensions.cs @@ -28,9 +28,9 @@ namespace YABA.Common.Extensions return enumValue.GetAttribute().Name; } - public static string GetClaimName(this ClaimsLookup claimLookup) + public static string GetClaimName(this ClaimsLookup claimLookup, bool isDevelopmentEnvironment) { - return claimLookup.GetAttribute().Name; + return isDevelopmentEnvironment ? claimLookup.GetAttribute().DevClaimName : claimLookup.GetAttribute().ProdClaimName; } public static bool IsCrudResultSuccessful(this CrudResultLookup importStatusLookup) => SuccessfulCrudStatuses.Contains(importStatusLookup); diff --git a/API/YABA.Common/Extensions/UserIdentityExtensions.cs b/API/YABA.Common/Extensions/UserIdentityExtensions.cs index 67132db..ed67a2d 100644 --- a/API/YABA.Common/Extensions/UserIdentityExtensions.cs +++ b/API/YABA.Common/Extensions/UserIdentityExtensions.cs @@ -1,6 +1,8 @@ -using System.Security.Claims; +using System; +using System.Security.Claims; using System.Security.Principal; using YABA.Common.Lookups; +using YABA.Common.Utils; namespace YABA.Common.Extensions { @@ -12,7 +14,7 @@ namespace YABA.Common.Extensions public static string GetCustomClaim(this IIdentity identity, ClaimsLookup claim) { var claimsIdentity = identity as ClaimsIdentity; - return claimsIdentity.FindFirst(claim.GetClaimName())?.Value.ToString(); + return claimsIdentity.FindFirst(claim.GetClaimName(EnvironmentUtils.IsDevelopmentEnvironment()))?.Value.ToString(); } } } diff --git a/API/YABA.Common/Lookups/ClaimsLookup.cs b/API/YABA.Common/Lookups/ClaimsLookup.cs index 43972d5..7808eef 100644 --- a/API/YABA.Common/Lookups/ClaimsLookup.cs +++ b/API/YABA.Common/Lookups/ClaimsLookup.cs @@ -4,19 +4,19 @@ namespace YABA.Common.Lookups { public enum ClaimsLookup { - [ClaimNameAttribute("https://dev.iwanaga.moe/api/auth_provider_id")] + [ClaimName("https://auth.dev.iwanaga.moe/api/auth_provider_id", "https://auth.iwanaga.moe/api/auth_provider_id")] AuthProviderId = 1, - [ClaimNameAttribute("https://dev.iwanaga.moe/api/email_address")] + [ClaimName("https://auth.dev.iwanaga.moe/api/email_address", "https://auth.iwanaga.moe/api/email_address")] UserEmail = 2, - [ClaimNameAttribute("https://dev.iwanaga.moe/api/email_verified")] + [ClaimName("https://auth.dev.iwanaga.moe/api/email_verified", "https://auth.iwanaga.moe/api/email_verified")] IsEmailConfirmed = 3, - [ClaimNameAttribute("https://dev.iwanaga.moe/api/username")] + [ClaimName("https://auth.dev.iwanaga.moe/api/username", "https://auth.iwanaga.moe/api/username")] Username = 4, - [ClaimNameAttribute("https://dev.iwanaga.moe/api/id")] + [ClaimName("https://auth.dev.iwanaga.moe/api/id", "https://auth.iwanaga.moe/api/id")] UserId = 5 } } diff --git a/API/YABA.Common/Utils/EnvironmentUtils.cs b/API/YABA.Common/Utils/EnvironmentUtils.cs new file mode 100644 index 0000000..4fecaec --- /dev/null +++ b/API/YABA.Common/Utils/EnvironmentUtils.cs @@ -0,0 +1,9 @@ +using System; + +namespace YABA.Common.Utils +{ + public static class EnvironmentUtils + { + public static bool IsDevelopmentEnvironment() => Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development"; + } +}