using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.Filters; using System; using System.Collections.Generic; using System.Linq; using System.Text; using dodohold.core; using Dataoke; using System.Text.RegularExpressions; using Org.BouncyCastle.Ocsp; using System.Diagnostics; using TencentCloud.Fmu.V20191213.Models; using Microsoft.VisualBasic; using System.Text.Json; using static System.Runtime.InteropServices.JavaScript.JSType; using System.Security.Cryptography; using Google.Protobuf.WellKnownTypes; using System.Threading.Channels; using TencentCloud.Tione.V20211111.Models; namespace molilian.core { public partial class UnionCpsPlus { private static string _end_point; static UnionCpsPlus() { _end_point = Environment.GetEnvironmentVariable("EndPoint"); } public static UnionCpsDTO GetFormattedObject(CpsChannelEnum channel, string ip = "", string oaid = "") { return new() { channel = channel, end_point = _end_point, ip = ip, oaid = oaid }; } #region CPS 相关 public static async Task EleAsync(string ip, string oaid) { UnionCpsDTO result = GetFormattedObject(CpsChannelEnum.eleme, ip, oaid); var config = TkConfigCore.Get(); //============================== 放弃转链-地区过滤 ============================== if (CpsShouldIgnoreRequest(config, result.channel, ip, oaid, out string reason)) { result.success = false; result.message = "流量控制"; result.reason = reason; _ = TkLogCore.CpsLogAsync(result); return new APIResult(new { result.success, result.message, result.reason, channel = result.channel.ToString(), }); } result.deeplink_url = "eleme://web?action=ali.open.nav&module=h5&packageName=me.ele&bc_fl_src=locallife_wtzt_0-0-ADGROUPID-__REQID__-2&url=https%3A%2F%2Ffc.ele.me%2Fa%2FMWJhZDM1OTY5ZTg5MTFlYzllYWEwMDE2M2UxM2FkMTE%3D%3Fscene%3D8d6c64c7f62c48ea83e88383530edd2b%26o2i_1st_clk%3D__CLICK_ID__&fastmode=1"; result.success = true; result.message = "OK"; _ = TkLogCore.CpsLogAsync(result); return new APIResult(new { result.success, result.message, result.deeplink_url, channel = result.channel.ToString(), }); } public static async Task MeituanAsync(string ip, string oaid) { UnionCpsDTO result = GetFormattedObject(CpsChannelEnum.meituan, ip, oaid); var config = TkConfigCore.Get(); //============================== 放弃转链-地区过滤 ============================== if (CpsShouldIgnoreRequest(config, result.channel, ip, oaid, out string reason)) { result.success = false; result.message = "流量控制"; result.reason = reason; _ = TkLogCore.CpsLogAsync(result); return new APIResult(new { result.success, result.message, result.reason, channel = result.channel.ToString(), }); } result.deeplink_url = "imeituan://www.meituan.com/web?lch=cps:waimai:3:0f860c7cc90569fb14bc1fc4a4d8c057:001:33:445029&url=https%3A%2F%2Fclick.meituan.com%2Ft%3Ft%3D1%26c%3D2%26p%3DnvaI7r5zjmJB"; result.success = true; result.message = "OK"; _ = TkLogCore.CpsLogAsync(result); return new APIResult(new { result.success, result.message, result.deeplink_url, channel = result.channel.ToString(), }); } public static bool CpsShouldIgnoreRequest(TkConfigDTO config, CpsChannelEnum channel, string ip, string oaid, out string reason) { reason = string.Empty; try { // IP和流量控制 string ignorePercentageCity = config.cpsIgnorePercentageCity; string? ipInfo = IP2RegionPlus.Search(ip); if (AlimamaPlus.IgnoreRegionIncluded(ignorePercentageCity, ipInfo, out string regionInfo)) { reason = $"地区控制:{regionInfo}"; return true; } int limit_num = config.cps_limit_per_ip_24h; if (limit_num > 0) { int num = TkLogCore.getClientRequestTotalByIp(channel, ip); if (num > limit_num) { reason = "IP控制"; return true; } num = TkLogCore.getClientRequestTotalByOAID(channel, oaid); if (num > limit_num) { reason = "OAID控制"; return true; } } } catch (Exception ex) { reason = "配置异常"; } return false; } #endregion } }