From 41c5a84dacfd036b8d8f01f72226ac5a519995e3 Mon Sep 17 00:00:00 2001 From: Rory& Date: Tue, 14 May 2024 17:49:09 +0200 Subject: Organise tools somewhat, set proper icons for nav menu --- .../Pages/Tools/Debug/MediaLocator.razor | 109 +++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 MatrixUtils.Web/Pages/Tools/Debug/MediaLocator.razor (limited to 'MatrixUtils.Web/Pages/Tools/Debug/MediaLocator.razor') diff --git a/MatrixUtils.Web/Pages/Tools/Debug/MediaLocator.razor b/MatrixUtils.Web/Pages/Tools/Debug/MediaLocator.razor new file mode 100644 index 0000000..6e87926 --- /dev/null +++ b/MatrixUtils.Web/Pages/Tools/Debug/MediaLocator.razor @@ -0,0 +1,109 @@ +@page "/Tools/MediaLocator" +@inject HttpClient Http +

Media locator

+
+ +This is going to expose your IP address to all these homeservers! +
+ Checked homeserver list (@homeservers.Count entries) + +
+ +
+MXC URL: + + + +@if (successResults.Count > 0) { +

Successes

+ +} + +@if (errorResults.Count > 0) { +

Errors

+ +} + + +@code { + string mxcUrl { get; set; } + readonly List successResults = new(); + readonly List errorResults = new(); + readonly List homeservers = new(); + + protected override async Task OnInitializedAsync() { + await base.OnInitializedAsync(); + homeservers.AddRange(new[] { + "matrix.org", + "feline.support", + "rory.gay", + "the-apothecary.club", + "envs.net", + "projectsegfau.lt" + }); + } + + Task executeSearch() { + var sem = new SemaphoreSlim(128, 128); + homeservers.ForEach(async hs => { + await sem.WaitAsync(); + var httpClient = new HttpClient { BaseAddress = new Uri(hs) }; + httpClient.Timeout = TimeSpan.FromSeconds(5); + var rmu = mxcUrl.Replace("mxc://", $"{hs}/_matrix/media/v3/download/"); + try { + var res = await httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Head, rmu)); + if (res.IsSuccessStatusCode) { + successResults.Add($"{hs}: found - {res.Content.Headers.ContentLength} bytes"); + StateHasChanged(); + return; + } + errorResults.Add($"Error: {hs} - {res.StatusCode}\n" + await res.Content.ReadAsStringAsync()); + } + catch (Exception e) { + errorResults.Add($"Error: {e}"); + } + finally { + sem.Release(); + } + StateHasChanged(); + }); + return Task.CompletedTask; + } + + async Task addMoreHomeservers() { + var res = await Http.GetAsync("/homeservers.txt"); + var content = await res.Content.ReadAsStringAsync(); + homeservers.Clear(); + var lines = content.Split("\n"); + + var sem = new SemaphoreSlim(128, 128); + lines.ToList().ForEach(async line => { + await sem.WaitAsync(); + try { + homeservers.Add((await hsResolver.ResolveHomeserverFromWellKnown(line)).Client); + StateHasChanged(); + } + catch (Exception e) { + Console.WriteLine(e); + } + finally { + sem.Release(); + } + }); + + StateHasChanged(); + } + +} -- cgit 1.4.1