mirror of
				https://github.com/Kareadita/Kavita.git
				synced 2025-10-31 10:37:04 -04:00 
			
		
		
		
	Co-authored-by: DieselTech <30128380+DieselTech@users.noreply.github.com> Co-authored-by: majora2007 <josephmajora@gmail.com>
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.Collections.Generic;
 | |
| using System.Linq;
 | |
| using System.Security.Claims;
 | |
| using API.Constants;
 | |
| using Kavita.Common;
 | |
| using JwtRegisteredClaimNames = Microsoft.IdentityModel.JsonWebTokens.JwtRegisteredClaimNames;
 | |
| 
 | |
| namespace API.Extensions;
 | |
| #nullable enable
 | |
| 
 | |
| public static class ClaimsPrincipalExtensions
 | |
| {
 | |
|     private const string NotAuthenticatedMessage = "User is not authenticated";
 | |
|     private const string EmailVerifiedClaimType = "email_verified";
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Get's the authenticated user's username
 | |
|     /// </summary>
 | |
|     /// <remarks>Warning! Username's can contain .. and /, do not use folders or filenames explicitly with the Username</remarks>
 | |
|     /// <param name="user"></param>
 | |
|     /// <returns></returns>
 | |
|     /// <exception cref="KavitaException"></exception>
 | |
|     public static string GetUsername(this ClaimsPrincipal user)
 | |
|     {
 | |
|         var userClaim = user.FindFirst(JwtRegisteredClaimNames.Name) ?? throw new KavitaException(NotAuthenticatedMessage);
 | |
|         return userClaim.Value;
 | |
|     }
 | |
| 
 | |
|     public static int GetUserId(this ClaimsPrincipal user)
 | |
|     {
 | |
|         var userClaim = user.FindFirst(ClaimTypes.NameIdentifier) ?? throw new KavitaException(NotAuthenticatedMessage);
 | |
|         return int.Parse(userClaim.Value);
 | |
|     }
 | |
| 
 | |
|     public static bool HasVerifiedEmail(this ClaimsPrincipal user)
 | |
|     {
 | |
|         var emailVerified = user.FindFirst(EmailVerifiedClaimType);
 | |
|         if (emailVerified == null) return false;
 | |
| 
 | |
|         if (!bool.TryParse(emailVerified.Value, out bool emailVerifiedValue) || !emailVerifiedValue)
 | |
|         {
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     public static IList<string> GetClaimsWithPrefix(this ClaimsPrincipal claimsPrincipal, string claimType, string prefix)
 | |
|     {
 | |
|         return claimsPrincipal
 | |
|             .FindAll(claimType)
 | |
|             .Where(c => c.Value.StartsWith(prefix))
 | |
|             .Select(c => c.Value.TrimPrefix(prefix))
 | |
|             .ToList();
 | |
|     }
 | |
| }
 |