using System.Text;
using System.Web;
using Common;
using Extensions;
using Infrastructure;
using Infrastructure.Model;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Services;
//本命名空间暂时先不改,改动比较大2023年9月2日
namespace Filters
{
///
///
public class AuthorizationFilter : IAuthorizationFilter
{
public AuthorizationFilter()
{
}
///
///
///
public void OnAuthorization(AuthorizationFilterContext context)
{
// var request = context.HttpContext.Request;
// if(!request.Path.Value.ToLower().Contains("noauth/"))
// {
// string content = "";
// if(context.HttpContext.Request.Method.ToLower() == "get")
// {
// content = context.HttpContext.GetQueryString();
// content = GetParam(content, "value");
// content = HttpUtility.UrlDecode(content);
// content = Decrypt(content);
// content = HttpUtility.UrlDecode(content);
// if(!string.IsNullOrEmpty(content))
// {
// Dictionary dic = Newtonsoft.Json.JsonConvert.DeserializeObject>(content);
// string queryString = "";
// var parameters = context.ActionDescriptor.Parameters;
// foreach(var parameter in parameters)
// {
// string parameterName = parameter.Name;
// Type objectType = parameter.ParameterType;
// if(objectType.FullName != "System.String")
// {
// System.Reflection.Assembly assembly = System.Reflection.Assembly.GetAssembly(objectType);
// var entry = assembly.CreateInstance(objectType.FullName);
// Type type = entry.GetType();
// System.Reflection.PropertyInfo[] propertyInfos = type.GetProperties();
// for (int i = 0; i < propertyInfos.Length; i++)
// {
// foreach (string key in dic.Keys)
// {
// if (propertyInfos[i].Name == key)
// {
// object value = dic[key];
// string ParameterType = propertyInfos[i].GetMethod.ReturnParameter.ParameterType.Name;
// if (ParameterType == "Int32")
// {
// if(value == null || value == "") value = "0";
// value = Convert.ToInt32(value);
// }
// else if (ParameterType == "Int64[]")
// {
// value = Tools.SpitLongArrary(Newtonsoft.Json.JsonConvert.SerializeObject(value).Replace("[", "").Replace("]", "").Trim('"'), ',');
// }
// else if (ParameterType == "Int32[]")
// {
// value = Tools.SpitIntArrary(Newtonsoft.Json.JsonConvert.SerializeObject(value).Replace("[", "").Replace("]", "").Trim('"'), ',');
// }
// else if (ParameterType == "List`1")
// {
// string val = Newtonsoft.Json.JsonConvert.SerializeObject(value).Replace("[", "").Replace("]", "").Trim('"');
// value = Tools.SpitLongArrary(val, ',').ToList();
// }
// if(value.ToString() == "-1") value = -1;
// if(value.ToString() == "[]") value = "";
// queryString += key + "=" + value.ToString() + "&";
// break;
// }
// }
// }
// }
// }
// request.QueryString = new QueryString("?" + queryString.TrimEnd('&'));
// }
// }
// else if(context.HttpContext.Request.Method.ToLower() == "delete")
// {
// string path = request.Path.Value;
// string value = path.Substring(path.LastIndexOf("/") + 1);
// path = path.Substring(0, path.LastIndexOf("/") + 1);
// value = Decrypt(value);
// path += value;
// request.Path = new PathString(path);
// request.RouteValues["id"] = value;
// }
// else
// {
// content = context.HttpContext.GetBody();
// content = Decrypt(content);
// //{"username":"admin","password":"000000"}
// request.Body = new MemoryStream(Encoding.UTF8.GetBytes(content));
// //验证登录接口
// if(request.Path.Value.EndsWith("/oauth2/token"))
// {
// var scope = request.Query["scope"].ToString();
// var grantType = request.Query["grant_type"].ToString();
// bool checkLogin = SysLoginService.CheckLogin(scope, grantType, context.HttpContext.GetToken().Replace("Basic ", ""));
// if(!checkLogin)
// {
// string msg = $"请求访问失败,无法访问系统资源";
// context.Result = new JsonResult(ApiResult.Error(ResultCode.DENY, msg));
// }
// }
// }
// }
}
// public string Decrypt(string str)
// {
// str = str.Trim('"');
// str = Encoding.UTF8.GetString(Convert.FromBase64String(str));
// return Dbconn.AesDecrypt(str, Base.GlobalConstant.ApiKey, Base.GlobalConstant.ApiIv);
// }
// public string GetParam(string content, string key)
// {
// if(content.StartsWith("?")) content = content.Substring(1);
// string[] data = content.Split('&');
// foreach(string sub in data)
// {
// if(sub.StartsWith(key + "="))
// {
// return sub.Substring(sub.IndexOf("=") + 1);
// }
// }
// return "";
// }
}
}