using Crm.Core.Identity.Domain.Config; using Crm.Core.Identity.Domain.Dto; using Crm.Core.Identity.Domain.Impl; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; namespace Crm.Core.Identity.Domain { internal class IdentityDomain : IIdentityDomain { private readonly IBaseRepository _weworkRepository; private readonly IRedisManager _redisManager; private readonly SystemConfig _systemConfig; private readonly IConfiguration _configuration; private readonly IHttpContextAccessor _contextAccessor; public IdentityDomain(IBaseRepository weworkRepository, IRedisManager redisManager, IConfiguration configuration, IHttpContextAccessor contextAccessor) { _weworkRepository = weworkRepository; _redisManager = redisManager; _systemConfig = configuration.GetSection("SystemConfig").Get(); _contextAccessor = contextAccessor; } public async Task Encrypt(EncryptDto encryptDto) { var key = _systemConfig.EncryptKey; var vi = _systemConfig.Vi; var dueMinutes = _systemConfig.DueMinutes; var request = _contextAccessor?.HttpContext?.Request; var ip = IPHelper.GetIP(request); var decryptString = AesUtil.EncryptByAES(encryptDto.Content, key, vi); var now = DateTime.Now.AddMinutes(dueMinutes).Subtract(new DateTime(1970, 1, 1)).TotalMilliseconds.ToString("F0"); var duetime = AesUtil.EncryptByAES(now, key, vi); // todo记录逻辑 Log.Information($"{ip}"); await Task.Delay(1); var result = new EncryptResultDto { Duetime = duetime, Content = decryptString, }; return result; } public async Task Decrypt(DecryptDto decryptDto) { var key = _systemConfig.EncryptKey; var vi = _systemConfig.Vi; var request = _contextAccessor?.HttpContext?.Request; var ip = IPHelper.GetIP(request); //decryptDto.Content = HttpUtility.UrlDecode(decryptDto.Content); //decryptDto.Duetime = HttpUtility.UrlDecode(decryptDto.Duetime); var decryptString = AesUtil.DecryptByAES(decryptDto.Content, key, vi); var config = await _weworkRepository.GetRepository().Query().FirstOrDefaultAsync(x => x.Code == "IdentityWhiteList"); var whiteList = JsonHelper.FromJson>(config?.Value ?? "[]"); if (!whiteList.Contains(ip)) { var duetime = AesUtil.DecryptByAES(decryptDto.Duetime, key, vi); var time = TimeHelper.GetTimeFromLinuxTime(long.Parse(duetime)); if (time < DateTime.Now) { throw new ApiException("已过期,请重新请求!"); } } return decryptString; } } }