using Hncore.Infrastructure.Service; using Hncore.Pass.Vpn.Domain; using Hncore.Pass.Vpn.Request.Product; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Threading.Tasks; using Hncore.Infrastructure.Extension; using Hncore.Infrastructure.WebApi; using System.Diagnostics; using System.IO; using System.Net; using Microsoft.EntityFrameworkCore; using Hncore.Pass.Vpn.Model; namespace Hncore.Pass.Vpn.Service { public abstract class AgentClientBaseService { protected string BaseUrl { get; set; } protected string Token { get; set; } string LoginUrl { get; set; } string LoginCodeUrl { get; set; } string RefrushTokenUrl { get; set; } string SingleAddUrl { get; set; } string SingleReAddUrl { get; set; } string MuiltAddUrl { get; set; } string RefundUrl { get; set; } string OnlineUrl { get; set; } string KIllUrl { get; set; } string UpdateUrl { get; set; } public string ClientName { get; set; } public string Raw { get; set; } IHttpClientFactory m_HttpClientFactory; public AgentClientBaseService(IHttpClientFactory httpClientFactory) { m_HttpClientFactory = httpClientFactory; } public ProductEntity Product { get; set; } public void Init(string BaseUrl,string Token) { this.BaseUrl = BaseUrl; this.Token = Token; } public virtual string GetOpTitle(string op,string account) { return $"{this.ClientName}_{op}_{account}"; } protected virtual HttpClient CreateHttpClient(bool autoCooke = true) { var client = m_HttpClientFactory.CreateClient("agentClient"); client.BaseAddress = new System.Uri(this.BaseUrl); if (this.Token.Has()&& autoCooke) { AddCookie(client, this.Token); } return client; } public virtual string MD5(string password) { byte[] textBytes = System.Text.Encoding.Default.GetBytes(password); try { System.Security.Cryptography.MD5CryptoServiceProvider cryptHandler; cryptHandler = new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] hash = cryptHandler.ComputeHash (textBytes); string ret = ""; foreach (byte a in hash) { if (a<16) ret += "0" + a.ToString ("x"); else ret += a.ToString ("x"); } return ret ; } catch { throw; } } protected virtual void AddCookie(HttpClient client, string cookie) { client.DefaultRequestHeaders.Remove("Cookie"); client.DefaultRequestHeaders.Add("Cookie", cookie); client.DefaultRequestHeaders.Add("Authorization", "Bearer " + cookie); } public string GetCookie(HttpResponseMessage resp, string name) { if (resp.Headers.TryGetValues("Set-Cookie", out IEnumerable cookies)) { foreach (var cookie in cookies) { var ret = cookie.Split(";").FirstOrDefault(m => m.IndexOf(name) != -1); if (ret.Has()) return ret; } } return ""; } public string GetCookies(HttpResponseMessage resp) { if (resp.Headers.TryGetValues("Set-Cookie", out IEnumerable cookies)) { return string.Join(";", cookies); } return ""; } protected string GetCookieValue(string cookies, string name) { foreach (var item in cookies.Split(";")) { var token = item.Split("="); if (token.Length == 2 && token[0] == name) { return token[1]; } } return ""; } public virtual async Task RefrushStatus() { return 0; } public virtual async Task<(byte[], string)> GetCode() { return (null, ""); } public virtual async Task Login(AgentLoginRequest request) { return new ApiResult(); } public virtual bool CheckAccount(int productId,List accounts) { return false; } /// /// 新开 /// /// /// /// /// public virtual async Task NewAccount(string packageKey, string account,string pwd,int connCount=1,int accountType=1, int payCount = 1) { return new ApiResult(); } public virtual async Task NewMuiltAccount(string packageKey, string account, string pwd, int connCount = 1, int accountType = 1, int startNum = 0, int endNum = 1) { return new ApiResult(); } /// /// 续费 /// /// /// /// /// public virtual async Task NewReAccount(string packageKey,string account,int connCount, int payCount = 1) { return new ApiResult(); } /// /// 删除账号 /// /// /// /// public virtual async Task DeleteAccount(string account) { return true; } /// /// 得到账号信息 /// /// /// /// public virtual async Task> GetAccountInfo(string account, bool isTest = false) { return new ApiResult(); } /// /// 修改账号密码 /// /// /// /// /// public virtual async Task UpdateAccountPwd(string account,string pwd) { return true; } /// /// 退款 /// /// /// /// public virtual async Task Refund(string account, string packageKey, int days) { return new ApiResult(); } /// /// 是否在线 /// /// /// /// public virtual async Task>> OnLine(string account) { return new ApiResult>(); } /// /// 踢号 /// /// /// /// public virtual async Task KillOut(string account) { return true; } /// /// 是否存在 /// /// /// public virtual async Task Exist(string account) { return true; } } }