@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(); } }