Files
juipnet/Services/Hncore.Pass.Vpn/Service/AgentClientBaseService.cs
“wanyongkang” b7e8820693 蘑菇
2021-01-26 14:48:05 +08:00

225 lines
7.4 KiB
C#

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;
}
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<string> 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<string> 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<int> RefrushStatus()
{
return 0;
}
public virtual async Task<(byte[], string)> GetCode()
{
return (null, "");
}
public virtual async Task<ApiResult> Login(AgentLoginRequest request)
{
return new ApiResult();
}
public virtual bool CheckAccount(int productId,List<string> accounts)
{
return false;
}
/// <summary>
/// 新开
/// </summary>
/// <param name="packageId"></param>
/// <param name="account"></param>
/// <param name="pwd"></param>
/// <returns></returns>
public virtual async Task<ApiResult> NewAccount(string packageKey, string account,string pwd,int connCount=1,int accountType=1, int payCount = 1)
{
return new ApiResult();
}
public virtual async Task<ApiResult> NewMuiltAccount(string packageKey, string account, string pwd, int connCount = 1, int accountType = 1, int startNum = 0, int endNum = 1)
{
return new ApiResult();
}
/// <summary>
/// 续费
/// </summary>
/// <param name="productId"></param>
/// <param name="account"></param>
/// <param name="pwd"></param>
/// <returns></returns>
public virtual async Task<ApiResult> NewReAccount(string packageKey,string account,int connCount, int payCount = 1)
{
return new ApiResult();
}
/// <summary>
/// 删除账号
/// </summary>
/// <param name="productId"></param>
/// <param name="account"></param>
/// <returns></returns>
public virtual async Task<bool> DeleteAccount(string account)
{
return true;
}
/// <summary>
/// 得到账号信息
/// </summary>
/// <param name="productId"></param>
/// <param name="account"></param>
/// <returns></returns>
public virtual async Task<ApiResult<OriginAccountModel>> GetAccountInfo(string account, bool isTest = false)
{
return new ApiResult<OriginAccountModel>();
}
/// <summary>
/// 修改账号密码
/// </summary>
/// <param name="productId"></param>
/// <param name="account"></param>
/// <param name="pwd"></param>
/// <returns></returns>
public virtual async Task<bool> UpdateAccountPwd(string account,string pwd)
{
return true;
}
/// <summary>
/// 退款
/// </summary>
/// <param name="packageId"></param>
/// <param name="account"></param>
/// <returns></returns>
public virtual async Task<ApiResult> Refund(string account, string packageKey, int days)
{
return new ApiResult();
}
/// <summary>
/// 是否在线
/// </summary>
/// <param name="productId"></param>
/// <param name="account"></param>
/// <returns></returns>
public virtual async Task<ApiResult<List<OriginAccountOnlineModel>>> OnLine(string account)
{
return new ApiResult<List<OriginAccountOnlineModel>>();
}
/// <summary>
/// 踢号
/// </summary>
/// <param name="productId"></param>
/// <param name="account"></param>
/// <returns></returns>
public virtual async Task<bool> KillOut(string account)
{
return true;
}
/// <summary>
/// 是否存在
/// </summary>
/// <param name="account"></param>
/// <returns></returns>
public virtual async Task<bool> Exist(string account)
{
return true;
}
}
}