中间件重命名

This commit is contained in:
xljiulang 2021-06-12 00:06:23 +08:00
parent ea70ddda61
commit a2ea783c11
6 changed files with 23 additions and 77 deletions

View File

@ -8,6 +8,6 @@ namespace FastGithub
public TimeSpan PortScanTimeout { get; set; } = TimeSpan.FromSeconds(1d); public TimeSpan PortScanTimeout { get; set; } = TimeSpan.FromSeconds(1d);
public TimeSpan HttpTestTimeout { get; set; } = TimeSpan.FromSeconds(5d); public TimeSpan HttpsScanTimeout { get; set; } = TimeSpan.FromSeconds(5d);
} }
} }

View File

@ -19,7 +19,7 @@ namespace FastGithub
{ {
this.IPAddress = ipAddress; this.IPAddress = ipAddress;
this.Mask = mask; this.Mask = mask;
this.Size = (int)(uint.MaxValue << mask >> mask); this.Size = Math.Abs((int)(uint.MaxValue << mask >> mask));
} }
public IEnumerable<IPAddress> GetAllIPAddress() public IEnumerable<IPAddress> GetAllIPAddress()
@ -45,6 +45,17 @@ namespace FastGithub
return new IPAddress(span); return new IPAddress(span);
} }
public static IEnumerable<IPv4CIDR> From(IEnumerable<string> cidrs)
{
foreach (var item in cidrs)
{
if (TryParse(item, out var value))
{
yield return value;
}
}
}
public static bool TryParse(ReadOnlySpan<char> cidr, [MaybeNullWhen(false)] out IPv4CIDR value) public static bool TryParse(ReadOnlySpan<char> cidr, [MaybeNullWhen(false)] out IPv4CIDR value)
{ {
value = null; value = null;

View File

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Net; using System.Net;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
@ -37,20 +38,15 @@ namespace FastGithub
public IEnumerable<DomainAddress> ToDomainAddress() public IEnumerable<DomainAddress> ToDomainAddress()
{ {
foreach (var item in this.Web) foreach (var cidr in IPv4CIDR.From(this.Web).OrderBy(item => item.Size))
{
if (IPv4CIDR.TryParse(item, out var cidr))
{ {
foreach (var address in cidr.GetAllIPAddress()) foreach (var address in cidr.GetAllIPAddress())
{ {
yield return new DomainAddress("github.com", address); yield return new DomainAddress("github.com", address);
} }
} }
}
foreach (var item in this.Api) foreach (var cidr in IPv4CIDR.From(this.Api).OrderBy(item => item.Size))
{
if (IPv4CIDR.TryParse(item, out var cidr))
{ {
foreach (var address in cidr.GetAllIPAddress()) foreach (var address in cidr.GetAllIPAddress())
{ {
@ -58,7 +54,6 @@ namespace FastGithub
} }
} }
} }
}
public record DomainAddress(string Domain, IPAddress Address); public record DomainAddress(string Domain, IPAddress Address);
} }

View File

@ -1,60 +0,0 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using System;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
namespace FastGithub.Middlewares
{
sealed class HttpTestMiddleware : IGithubMiddleware
{
private readonly IOptionsMonitor<GithubOptions> options;
private readonly ILogger<HttpTestMiddleware> logger;
public HttpTestMiddleware(
IOptionsMonitor<GithubOptions> options,
ILogger<HttpTestMiddleware> logger)
{
this.options = options;
this.logger = logger;
}
public async Task InvokeAsync(GithubContext context, Func<Task> next)
{
try
{
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri($"https://{context.Address}/"),
};
request.Headers.Host = context.Domain;
using var httpClient = new HttpClient(new HttpClientHandler
{
Proxy = null,
UseProxy = false,
ServerCertificateCustomValidationCallback = (_, _, _, _) => true
});
var startTime = DateTime.Now;
using var cancellationTokenSource = new CancellationTokenSource(this.options.CurrentValue.HttpTestTimeout);
var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationTokenSource.Token);
var server = response.EnsureSuccessStatusCode().Headers.Server;
if (server.Any(s => string.Equals("GitHub.com", s.Product?.Name, StringComparison.OrdinalIgnoreCase)))
{
context.HttpElapsed = DateTime.Now.Subtract(startTime);
this.logger.LogWarning(context.ToString());
await next();
}
}
catch (Exception ex)
{
this.logger.LogInformation($"{context.Domain} {context.Address} {ex.Message}");
}
}
}
}

View File

@ -34,14 +34,14 @@ namespace FastGithub
.AddTransient<GithubService>() .AddTransient<GithubService>()
.AddSingleton<PortScanMiddleware>() .AddSingleton<PortScanMiddleware>()
.AddSingleton<HttpTestMiddleware>() .AddSingleton<HttpsScanMiddleware>()
.AddSingleton<ConcurrentMiddleware>() .AddSingleton<ConcurrentMiddleware>()
.AddSingleton(serviceProvider => .AddSingleton(serviceProvider =>
{ {
return new GithubBuilder(serviceProvider, ctx => Task.CompletedTask) return new GithubBuilder(serviceProvider, ctx => Task.CompletedTask)
.Use<ConcurrentMiddleware>() .Use<ConcurrentMiddleware>()
.Use<PortScanMiddleware>() .Use<PortScanMiddleware>()
.Use<HttpTestMiddleware>() .Use<HttpsScanMiddleware>()
.Build(); .Build();
}) })
.AddHostedService<GithubHostedService>() .AddHostedService<GithubHostedService>()

View File

@ -2,7 +2,7 @@
"Github": { "Github": {
"MetaUri": "https://gitee.com/jiulang/fast-github/raw/master/FastGithub/meta.json", // ipuri "MetaUri": "https://gitee.com/jiulang/fast-github/raw/master/FastGithub/meta.json", // ipuri
"PortScanTimeout": "00:00:01", // "PortScanTimeout": "00:00:01", //
"HttpTestTimeout": "00:00:05" // http "HttpsScanTimeout": "00:00:05" // https
}, },
"Logging": { "Logging": {
"LogLevel": { "LogLevel": {