using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Utility.Tools;
using static System.Net.Mime.MediaTypeNames;
using Utility.Entity;
using Microsoft.AspNetCore.Http;
namespace Utility
{
///
/// 验签
///
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
public class VerificationAttribute : ActionFilterAttribute
{
private string appKey;
private static readonly double Minutes = SignConfig.Minutes;//时间戳必须5分钟内的,否则不通过
public VerificationAttribute()
{
}
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
var request = context.HttpContext.Request;
// 获取请求中的时间戳和签名
var system = request.Headers["System"].FirstOrDefault();
var timestamp = request.Headers["Timestamp"].FirstOrDefault();
var signature = request.Headers["Signature"].FirstOrDefault();
//var timestamp = "1718873584";
//var signature = "1718873584";
switch (system)
{
case "ERP":
appKey = SignConfig.ERPAppKey;
break;
case "MES":
appKey = SignConfig.MESAppKey;
break;
case "LIMS":
appKey = SignConfig.LIMSAppKey;
break;
case "FuMa":
appKey = SignConfig.FuMaAppKey;
break;
default:
context.Result = new UnauthorizedResult();
return;
}
if (string.IsNullOrEmpty(timestamp) || string.IsNullOrEmpty(signature))
{
context.Result = new UnauthorizedResult();
return;
}
// 验证时间戳是否在允许的时间范围内
if (!IsTimestampValid(timestamp))
{
context.Result = new UnauthorizedResult();
var apiResponse = new ApiResponse