66 lines
2.8 KiB
C#
66 lines
2.8 KiB
C#
namespace PostFundManagement.Application.Extensions;
|
|
|
|
public static class General
|
|
{
|
|
public static string Clean(this string input) => Patterns.SpaceRegex().Replace(input, string.Empty);
|
|
|
|
public static string ToJson<TValue>(this TValue obj) where TValue : class => JsonSerializer.Serialize(obj);
|
|
|
|
public static TValue FromJson<TValue>(this string json) where TValue : class => JsonSerializer.Deserialize<TValue>(json)!;
|
|
|
|
public static Guid GetUserId(this HttpContext context) => (Guid)context.Items[Domain.Extensions.Constants.UserIdItemKey]!;
|
|
|
|
public static string GetUserEmail(this HttpContext context) => (string)context.Items[Domain.Extensions.Constants.EmailtemKey]!;
|
|
|
|
public static string GetUserRole(this HttpContext context) => (string)context.Items[Domain.Extensions.Constants.UserRoleItemKey]!;
|
|
|
|
public static (bool Decoded, Guid userId) GetUserId(this ClaimsPrincipal principal)
|
|
{
|
|
var subClaim = principal.FindFirst(JwtRegisteredClaimNames.Sub)?.Value
|
|
?? principal.FindFirst(ClaimTypes.NameIdentifier)?.Value;
|
|
|
|
var decoded = Guid.TryParse(subClaim, out var userId);
|
|
|
|
return (decoded, userId);
|
|
}
|
|
|
|
public static (bool Decoded, string email) GetUserEmail(this ClaimsPrincipal principal)
|
|
{
|
|
var emailClaim = principal.FindFirst("email")?.Value
|
|
?? principal.FindFirst(ClaimTypes.Email)?.Value
|
|
?? principal.FindFirst("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress")?.Value
|
|
?? principal.FindFirst("preferred_username")?.Value
|
|
?? principal.FindFirst("name")?.Value
|
|
?? principal.FindFirst(ClaimTypes.Name)?.Value;
|
|
|
|
var decoded = !string.IsNullOrWhiteSpace(emailClaim);
|
|
|
|
return (decoded, emailClaim ?? string.Empty);
|
|
}
|
|
|
|
public static (bool Decoded, string role) GetUserRole(this ClaimsPrincipal principal)
|
|
{
|
|
var roleClaims = principal.FindAll("role")
|
|
.Concat(principal.FindAll(ClaimTypes.Role))
|
|
.Concat(principal.FindAll("http://schemas.microsoft.com/ws/2008/06/identity/claims/role"))
|
|
.Concat(principal.FindAll("roles"))
|
|
.Select(c => c.Value)
|
|
.Where(v => !string.IsNullOrWhiteSpace(v))
|
|
.ToList();
|
|
|
|
var partnerRole = roleClaims.FirstOrDefault(r => r.Equals("Partner", StringComparison.OrdinalIgnoreCase));
|
|
var role = partnerRole ?? roleClaims.FirstOrDefault();
|
|
|
|
var decoded = !string.IsNullOrWhiteSpace(role);
|
|
|
|
return (decoded, role ?? string.Empty);
|
|
}
|
|
|
|
public static Microsoft.AspNetCore.Mvc.ProblemDetails ToProblems(this IReadOnlyList<IError> errors, int statusCode = StatusCodes.Status400BadRequest) => new()
|
|
{
|
|
Detail = string.Join(',', errors.Select(e => e.Message)),
|
|
Status = statusCode,
|
|
Title = "Error",
|
|
};
|
|
}
|