The checks engine, the path and the cards: me-web? 0.1 reads the connection
MeWeb.Core runs seven checks concurrently and reports each as it settles:
online or behind a login page, this connection, the public IPv4 and IPv6
seen from v4./v6.meweb, the provider from a built-in map, the router
(UPnP IGD, NAT-PMP and PCP, read-only), address sharing (router WAN
against the echo, TTL hops only as a hint), and the history kept on the
device. The app draws the path from this device to the internet and lights
it node by node, with a card per check and a sheet listing every host it
contacts.
The provider map is iptoasn's table compressed to 2.1 MB by
tools/knowledge.cs and built before every app release; eleven Italian
provider profiles carry each fact with who said it, the source and the
month. The server gains a download page (en, it) and /download/{platform}
from the latest Gitea release.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
This commit is contained in:
1 parent
16a1cecaae
commit
0dffbc27d6
61 files changed
+3750
-149
No files matched your search
@@ -1,5 +1,8 @@
|
||||
using MeWeb.App.Services;
|
||||
using MeWeb.App.ViewModels;
|
||||
using MeWeb.Core.Checks;
|
||||
using MeWeb.Core.History;
|
||||
using MeWeb.Core.Knowledge;
|
||||
using MeWeb.Core.Net;
|
||||
using MeWeb.Shared;
|
||||
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
@@ -8,14 +11,24 @@ namespace MeWeb.App;
|
||||
|
||||
public static class AppServices
|
||||
{
|
||||
public static IServiceCollection AddMeWebApp(this IServiceCollection services)
|
||||
public const string Secure = "secure";
|
||||
public const string Plain = "plain";
|
||||
|
||||
public static IServiceCollection AddMeWebApp(this IServiceCollection services, IPlatform platform)
|
||||
{
|
||||
services.AddHttpClient(ServerClient.Name, http =>
|
||||
var agent = $"me-web/{BuildInfo.Version}";
|
||||
services.AddHttpClient(Secure, http => http.DefaultRequestHeaders.UserAgent.ParseAdd(agent));
|
||||
services.AddHttpClient(Plain, http => http.DefaultRequestHeaders.UserAgent.ParseAdd(agent))
|
||||
.ConfigurePrimaryHttpMessageHandler(() => new SocketsHttpHandler { AllowAutoRedirect = false });
|
||||
services.AddSingleton(platform);
|
||||
services.AddSingleton(sp =>
|
||||
{
|
||||
http.BaseAddress = new Uri(Endpoints.Base);
|
||||
http.DefaultRequestHeaders.UserAgent.ParseAdd($"me-web/{BuildInfo.Version}");
|
||||
var factory = sp.GetRequiredService<IHttpClientFactory>();
|
||||
return new ServerProbe(factory.CreateClient(Secure), factory.CreateClient(Plain));
|
||||
});
|
||||
services.AddSingleton<ServerClient>();
|
||||
services.AddSingleton<KnowledgeBase>();
|
||||
services.AddSingleton(new HistoryStore(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MeWeb")));
|
||||
services.AddSingleton<CheckRunner>();
|
||||
services.AddTransient<MainViewModel>();
|
||||
return services;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user