using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace FastGithub
{
///
/// FastGithub的配置
///
public class FastGithubOptions
{
///
/// 域名
///
private DomainMatch[]? domainMatches;
///
/// 受信任的dns服务
///
public DnsIPEndPoint TrustedDns { get; set; } = new DnsIPEndPoint { IPAddress = "127.0.0.1", Port = 5533 };
///
/// 不受信任的dns服务
///
public DnsIPEndPoint UntrustedDns { get; set; } = new DnsIPEndPoint { IPAddress = "114.114.114.114", Port = 53 };
///
/// 代理的域名匹配
///
public HashSet DomainMatches { get; set; } = new();
///
/// 是否匹配指定的域名
///
///
///
public bool IsMatch(string domain)
{
if (this.domainMatches == null)
{
this.domainMatches = this.DomainMatches.Select(item => new DomainMatch(item)).ToArray();
}
return this.domainMatches.Any(item => item.IsMatch(domain));
}
///
/// 域名匹配
///
private class DomainMatch
{
private readonly Regex regex;
private readonly string pattern;
///
/// 域名匹配
///
/// 域名表达式
public DomainMatch(string pattern)
{
this.pattern = pattern;
var regexPattern = Regex.Escape(pattern).Replace(@"\*", ".*");
this.regex = new Regex($"^{regexPattern}$", RegexOptions.IgnoreCase);
}
///
/// 是否与指定域名匹配
///
///
///
public bool IsMatch(string domain)
{
return this.regex.IsMatch(domain);
}
///
/// 转换为文本
///
///
public override string ToString()
{
return this.pattern;
}
}
}
}