@page "/Login" @using System.Text.Json @inject ILocalStorageService LocalStorage @inject IJSRuntime JsRuntime

Login


@@: via



Parsed records


@foreach (var record in records) { var r = record; }
Username Homeserver Password Proxy
Remove


@code { readonly List records = new(); private LoginStruct newRecordInput = new(); List? LoggedInSessions { get; set; } = new(); async Task Login() { var loginTasks = records.Select(async record => { if (LoggedInSessions.Any(x => x.UserId == $"@{record.Username}:{record.Homeserver}" && x.Proxy == record.Proxy)) return; try { var result = new UserAuth(await hsProvider.Login(record.Homeserver, record.Username, record.Password, record.Proxy)) { Proxy = record.Proxy }; if (result == null) { Console.WriteLine($"Failed to login to {record.Homeserver} as {record.Username}!"); return; } Console.WriteLine($"Obtained access token for {result.UserId}!"); await MRUStorage.AddToken(result); LoggedInSessions = await MRUStorage.GetAllTokens(); } catch (Exception e) { Console.WriteLine($"Failed to login to {record.Homeserver} as {record.Username}!"); Console.WriteLine(e); } StateHasChanged(); }); await Task.WhenAll(loginTasks); } private async Task FileChanged(InputFileChangeEventArgs obj) { LoggedInSessions = await MRUStorage.GetAllTokens(); Console.WriteLine(JsonSerializer.Serialize(obj, new JsonSerializerOptions { WriteIndented = true })); await using var rs = obj.File.OpenReadStream(); using var sr = new StreamReader(rs); var tsvData = await sr.ReadToEndAsync(); records.Clear(); foreach (var line in tsvData.Split('\n')) { string?[] parts = line.Split('\t'); if (parts.Length < 3) continue; string? via = parts.Length > 3 ? parts[3] : null; records.Add(new() { Homeserver = parts[0], Username = parts[1], Password = parts[2], Proxy = via }); } } private async Task AddRecord() { LoggedInSessions = await MRUStorage.GetAllTokens(); records.Add(newRecordInput); newRecordInput = new(); } private class LoginStruct { public string? Homeserver { get; set; } = ""; public string? Username { get; set; } = ""; public string? Password { get; set; } = ""; public string? Proxy { get; set; } } }