初始提交

This commit is contained in:
wanyongkang
2020-10-07 20:25:03 +08:00
commit d318014316
3809 changed files with 263103 additions and 0 deletions

View File

@@ -0,0 +1,155 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using Etor.Infrastructure.Common;
using Etor.Infrastructure.Data;
using Etor.Infrastructure.Extension;
using Etor.PSIP.Manage.Models;
using Etor.PSIP.Manage.Request;
using Etor.PSIP.Manage.Response;
using JWT;
using JWT.Algorithms;
using JWT.Serializers;
using Microsoft.EntityFrameworkCore;
namespace Etor.PSIP.Manage.Service
{
public class ManageService
{
private static string _secret = "etor_yh_lzh_20f_2017_PETER";
private EtorPropertyDbContext _dbContext;
public ManageService(EtorPropertyDbContext dbContext)
{
_dbContext = dbContext;
}
public async Task<LoginResponse> Login(LoginRequestData request)
{
if (request == null
|| !request.Code.Has()
|| !request.CodeKey.Has()
|| !request.Logincode.Has()
|| !request.Password.Has()
)
{
BusinessException.Throw("登陆信息异常");
}
string valCode = await RedisHelper.GetAsync(request.CodeKey);
if (!valCode.Has() || valCode.ToLower() != request.Code.ToLower())
{
BusinessException.Throw("验证码错误");
}
var manage = await _dbContext.Set<etor_authority_manager>()
.FirstOrDefaultAsync(m => (m.logincode == request.Logincode || m.phone == request.Logincode)
&& m.DeleteTag == 0
&& m.state == (int) ManagerState.Enabled);
if (manage == null)
{
BusinessException.Throw("登录名不存在");
}
if (HashPassword(request.Password).ToUpper() != manage.password.ToUpper())
{
BusinessException.Throw("密码错误");
}
var tokenDic = new Dictionary<string, object>()
{
{"LoginName", manage.logincode},
{"RoleName", ""},
{"OperaterID", manage.ID},
{"OwnerID", manage.owner_id}
};
var isRoot = await _dbContext.Set<etor_authority_role>().AnyAsync(r => r.DeleteTag == 0
&& r.ID == manage.roleid
&& r.owner_id == manage.owner_id
&& r.isroot);
if (!isRoot)
{
int[] domains = await _dbContext.Set<etor_authority_managerdatadomain>()
.Where(p => p.owner_id == manage.owner_id && p.DeleteTag == 0 && p.managerid == manage.ID)
.Select(t => t.projectcode)
.ToArrayAsync();
tokenDic.Add("DataDomain", domains);
}
var minutes = (DateTime.Now.AddYears(1) - DateTime.Now).TotalMinutes;
var token = GenerateToken(tokenDic, Convert.ToInt32(minutes));
var response = new LoginManagerResponse().FromEntity(manage);
var property = await _dbContext.Set<etor_property>()
.FirstOrDefaultAsync(f => f.ID == manage.owner_id && f.DeleteTag == 0);
response.PropertyCompanyName = property.companyname;
response.ExpiredTime = property.ExpiredTime;
response.ValidDays = (property.ExpiredTime - DateTime.Now.Date).Days;
response.IsRootUser = isRoot;
if (response.Phone.Has())
{
var employee = await _dbContext.EtorNinternalStaff.FirstOrDefaultAsync(_ => _.DeleteTag == 0
&& _.Mobile ==
response.Phone);
if (employee != null)
{
response.WorkerName = employee.Position;
var departmentName = await _dbContext.Set<etor_ninternal_department>()
.Where(_ => _.DeleteTag == 0 && _.ID == employee.Departmentid)
.Select(t => t.departmentname)
.FirstOrDefaultAsync();
response.DepartmentName = departmentName;
}
}
return new LoginResponse()
{
Token = token,
Manager = response
};
}
private static string GenerateToken(Dictionary<string, object> param, int timeoutMinutes = 120)
{
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serializer = new JsonNetSerializer();
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
IDateTimeProvider provider = new UtcDateTimeProvider();
var now = provider.GetNow();
var secondsSinceEpoch = Math.Round((now - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds);
param["exp"] = secondsSinceEpoch + Math.Max(0, timeoutMinutes) * 60; //什么时候签发的
//param["exp"] = secondsSinceEpoch + 1;//什么时候签发的
var token = encoder.Encode(param, _secret);
return token;
}
public static string HashPassword(string password)
{
using (MD5 md5 = MD5.Create())
{
byte[] bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(password));
return Convert.ToBase64String(bytes);
}
}
}
}