| using Microsoft.AspNetCore.Http; | 
| using Microsoft.Extensions.DependencyInjection; | 
| using Microsoft.Extensions.Logging; | 
| using SqlSugar; | 
| using System; | 
| using System.Collections.Generic; | 
| using System.IdentityModel.Tokens.Jwt; | 
| using System.Linq; | 
| using System.Security.Claims; | 
| using System.Text; | 
| using System.Threading.Tasks; | 
| using WIDESEA_Core.Extensions; | 
| using WIDESEA_Core.Helper; | 
| using ICacheService = WIDESEA_Core.Caches.ICacheService; | 
|   | 
| namespace WIDESEA_Core.HttpContextUser | 
| { | 
|     public class AspNetUser : IUser | 
|     { | 
|         private readonly IHttpContextAccessor _accessor; | 
|         private readonly ICacheService _cacheService; | 
|         //private readonly ILogger<AspNetUser> _logger; | 
|   | 
|         public AspNetUser(IHttpContextAccessor accessor, ICacheService cacheService) | 
|         { | 
|             _accessor = accessor; | 
|             _cacheService = cacheService; | 
|             /*_logger = logger;*/ | 
|         } | 
|   | 
|         public string UserName => GetUserInfoFromToken(ClaimTypes.Name).FirstOrDefault() ?? ""; | 
|   | 
|         public int UserId => GetClaimValueByType(JwtRegisteredClaimNames.Jti) == null ? 0 : GetClaimValueByType(JwtRegisteredClaimNames.Jti).FirstOrDefault()?.ObjToInt() ?? 0; | 
|   | 
|         public long TenantId => GetUserInfoFromToken(nameof(TenantId)).FirstOrDefault()?.ObjToLong() ?? -1; | 
|   | 
|         public int RoleId => GetUserInfoFromToken(ClaimTypes.Role).FirstOrDefault()?.ObjToInt() ?? 0; | 
|   | 
|         public string Token => GetToken(); | 
|   | 
|         public int MenuType => (_accessor.HttpContext?.Request.Headers.ContainsKey("uniapp") ?? false) ? 1 : 0; | 
|   | 
|         public bool IsAuthenticated() | 
|         { | 
|             return _accessor.HttpContext?.User?.Identity?.IsAuthenticated ?? false; | 
|         } | 
|   | 
|         public string GetToken() | 
|         { | 
|             string token = ""; | 
|             token = _cacheService.Get(UserId.ToString()); | 
|             if (!string.IsNullOrEmpty(token)) { return token; } | 
|             token = _accessor.HttpContext?.Request?.Headers["Authorization"].ObjToString().Replace("Bearer ", "") ?? ""; | 
|             if (!token.IsNullOrEmpty()) | 
|             { | 
|                 return token; | 
|             } | 
|             //if (_accessor.HttpContext?.IsSuccessSwagger() ?? false) | 
|             //{ | 
|             //    token = _accessor.HttpContext.GetSuccessSwaggerJwt(); | 
|             //    if (token.IsNotEmptyOrNull()) | 
|             //    { | 
|             //        List<Claim> claims1 = _accessor.HttpContext.User.Claims.ToList(); | 
|             //        if (_accessor.HttpContext.User.Claims.Any(s => s.Type == JwtRegisteredClaimNames.Jti)) | 
|             //        { | 
|             //            return token; | 
|             //        } | 
|   | 
|             //        var claims = new ClaimsIdentity(GetClaimsIdentity(token)); | 
|             //        _accessor.HttpContext.User.AddIdentity(claims); | 
|             //        return token; | 
|             //    } | 
|             //} | 
|             return token; | 
|   | 
|             //    string token = _cacheService.Get(UserId.ToString()); | 
|             //if (!string.IsNullOrEmpty(token)) { return token; } | 
|             //return string.Empty; | 
|             //return _accessor.HttpContext?.Request?.Headers["Authorization"].ObjToString().Replace("Bearer ", "") ?? ""; | 
|         } | 
|   | 
|         public void UpdateToke(string token) | 
|         { | 
|             _cacheService.AddOrUpdate(UserId.ToString(), token); | 
|         } | 
|   | 
|         public bool IsSuperAdmin => IsRoleIdSuperAdmin(RoleId); | 
|   | 
|         public bool IsHighestRole => UserId == 1; | 
|   | 
|         public List<string> GetUserInfoFromToken(string ClaimType) | 
|         { | 
|             var jwtHandler = new JwtSecurityTokenHandler(); | 
|             var token = ""; | 
|   | 
|             token = GetToken(); | 
|             // token校验 | 
|             if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token)) | 
|             { | 
|                 JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token); | 
|   | 
|                 List<string> items = (from item in jwtToken.Claims | 
|                                       where item.Type == ClaimType | 
|                                       select item.Value).ToList(); | 
|                 return items; | 
|             } | 
|   | 
|             return new List<string>() { }; | 
|         } | 
|   | 
|         public IEnumerable<Claim> GetClaimsIdentity() | 
|         { | 
|             if (_accessor.HttpContext != null) | 
|             { | 
|                 var claims = _accessor.HttpContext.User.Claims.ToList(); | 
|                 var headers = _accessor.HttpContext.Request.Headers; | 
|                 foreach (var header in headers) | 
|                 { | 
|                     claims.Add(new Claim(header.Key, header.Value)); | 
|                 } | 
|   | 
|                 return claims; | 
|             } | 
|             return ArraySegment<Claim>.Empty; | 
|         } | 
|   | 
|         public IEnumerable<Claim> GetClaimsIdentity(string token) | 
|         { | 
|             var jwtHandler = new JwtSecurityTokenHandler(); | 
|             // token校验 | 
|             if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token)) | 
|             { | 
|                 var jwtToken = jwtHandler.ReadJwtToken(token); | 
|   | 
|                 return jwtToken.Claims; | 
|             } | 
|   | 
|             return new List<Claim>(); | 
|         } | 
|   | 
|         public List<string> GetClaimValueByType(string ClaimType) | 
|         { | 
|             return (from item in GetClaimsIdentity() | 
|                     where item.Type == ClaimType | 
|                     select item.Value).ToList(); | 
|         } | 
|   | 
|         public bool IsRoleIdSuperAdmin(int roleId) | 
|         { | 
|             return roleId == 1; | 
|         } | 
|     } | 
|   | 
|     public class UserInfo | 
|     { | 
|         public long TenantId { get; set; } | 
|   | 
|         public int RoleId { get; set; } | 
|   | 
|         public string UserName { get; set; } | 
|   | 
|         public int UserId { get; set; } | 
|   | 
|         public string UserTrueName { get; set; } | 
|   | 
|         public string HeadImageUrl { get; set; } | 
|     } | 
| } |