You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

124 lines
3.3 KiB

#if DELETED
using Apewer;
using Apewer.Network;
using Apewer.Web;
using System;
using System.Collections.Generic;
using System.Text;
namespace Apewer.Internals
{
internal class WebFromTrusted
{
#region Instance
private List<string> _presetips = new List<string>();
public List<string> PresetIPs { get { return _presetips; } }
public string ClientIP { get; private set; }
public string Mode { get; private set; }
public string RemoteIP { get; private set; }
public string ProxyIP { get; private set; }
public bool Trusted { get; private set; }
internal WebFromTrusted(IEnumerable<string> hosts)
{
foreach (var domain in hosts) AddPreset(domain);
ClientIP = PageUtility.ClientIP;
Trusted = GetTrusted();
}
internal WebFromTrusted(params string[] hosts) : this((IEnumerable<string>)hosts) { }
private bool AddPreset(string domain)
{
if (domain.IsEmpty()) return false;
var ip = null as string;
ip = NetworkUtility.IsIP(domain) ? domain : NetworkUtility.Resolve(domain);
if (ip.IsEmpty()) return false;
if (!NetworkUtility.IsIP(ip)) return false;
if (!_presetips.Contains(ip)) _presetips.Add(ip);
return true;
}
private bool GetTrusted()
{
var ips = ClientIP.Split(",");
switch (ips.Length)
{
case 1:
{
Mode = "direct";
RemoteIP = ips[0].Split(":")[0];
// 信任局域网访问。
if (NetworkUtility.FromLAN(RemoteIP)) return true;
// 检测公网地址。
if (PresetIPs.Contains(RemoteIP)) return true;
}
break;
case 2:
{
Mode = "proxy";
ProxyIP = ips[1].Split(":")[0];
RemoteIP = ips[0].Split(":")[0];
// 拒绝匿源代理。
if (RemoteIP.IsEmpty()) return false;
// 信任局域网中的代理。
if (NetworkUtility.FromLAN(ProxyIP)) return true;
// 信任公网远端。(CDN:Remote=Preset Proxy=CDN)
if (PresetIPs.Contains(RemoteIP)) return true;
#if DEBUG
// 信任预置 IP 代理。(本地调试:Remote=127.0.0.1 Proxy=Preset)
if (PresetIPs.Contains(ProxyIP)) return true;
#endif
}
break;
default:
{
Mode = "other";
}
break;
}
return false;
}
#endregion
#region Static Methods
/// <summary>获取远端 IP。</summary>
public static string GetRemoteIP()
{
var ip = PageUtility.ClientIP;
var iof = ip.IndexOf(",");
if (iof > -1) ip = ip.Substring(0, iof);
ip = ip.Split(":")[0];
return ip;
}
#endregion
}
}
#endif