using Microsoft.AspNetCore.Authorization; using PrivaPub.ClientModels; using PrivaPub.Models.User; using System.Security.Claims; namespace PrivaPub.Extensions { public static class Extensions { public static AuthorizationPolicy IsAdminPolicy() => new AuthorizationPolicyBuilder().RequireAuthenticatedUser() .RequireClaim(Policies.IsAdmin, true.ToString().ToLower()) .RequireClaim(Policies.IsUser, true.ToString().ToLower()) .RequireClaim(Policies.IsModerator, true.ToString().ToLower()) .Build(); public static AuthorizationPolicy IsUserPolicy() => new AuthorizationPolicyBuilder().RequireAuthenticatedUser() .RequireClaim(Policies.IsUser, true.ToString().ToLower()) .Build(); public static AuthorizationPolicy IsModeratorPolicy() => new AuthorizationPolicyBuilder().RequireAuthenticatedUser() .RequireClaim(Policies.IsUser, true.ToString().ToLower()) .RequireClaim(Policies.IsModerator, true.ToString().ToLower()) .Build(); public static string GetHostWithPath(this HttpContext httpContext) => $"https://{httpContext.Request.Host}{httpContext.Request.Path}"; public static string GetHost(this HttpContext httpContext) => $"https://{httpContext.Request.Host}"; public static UserPolicyType GetHighestPolicy(this ClaimsPrincipal claimsPrincipal) { if (claimsPrincipal.FindFirstValue(Policies.IsAdmin) == "true") return UserPolicyType.IsAdmin; if (claimsPrincipal.FindFirstValue(Policies.IsModerator) == "true") return UserPolicyType.IsModerator; return UserPolicyType.IsUser; } } }