@page "/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; } List successResults = new List(); List errorResults = new List(); List homeservers = new List(); protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); homeservers.AddRange(new [] { "matrix.org", "feline.support", "rory.gay", "the-apothecary.club", "envs.net", "projectsegfau.lt" }); } async 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/r0/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(); }); } async Task addMoreHomeservers() { await LocalStorageWrapper.LoadFromLocalStorage(LocalStorage); var res = await Http.GetAsync("/homeservers.txt"); var content = await res.Content.ReadAsStringAsync(); homeservers.Clear(); var lines = content.Split("\n"); var rhs = new RemoteHomeServer("rory.gay"); var sem = new SemaphoreSlim(128, 128); lines.ToList().ForEach(async line => { await sem.WaitAsync(); try { homeservers.Add(await rhs.ResolveHomeserverFromWellKnown(line)); StateHasChanged(); if(Random.Shared.Next(0,101) == 50) await LocalStorageWrapper.SaveToLocalStorage(LocalStorage); } catch (Exception e) { Console.WriteLine(e); } finally { sem.Release(); } }); StateHasChanged(); } }