about summary refs log tree commit diff
path: root/BugMine.Web/Pages/Auth
diff options
context:
space:
mode:
Diffstat (limited to 'BugMine.Web/Pages/Auth')
-rw-r--r--BugMine.Web/Pages/Auth/Auth.razor6
-rw-r--r--BugMine.Web/Pages/Auth/LegacyLogin.razor71
-rw-r--r--BugMine.Web/Pages/Auth/Login.razor69
-rw-r--r--BugMine.Web/Pages/Auth/Logout.razor18
4 files changed, 164 insertions, 0 deletions
diff --git a/BugMine.Web/Pages/Auth/Auth.razor b/BugMine.Web/Pages/Auth/Auth.razor
new file mode 100644

index 0000000..e58f47b --- /dev/null +++ b/BugMine.Web/Pages/Auth/Auth.razor
@@ -0,0 +1,6 @@ +@page "/Auth" +<h3>Auth</h3> + +@code { + +} \ No newline at end of file diff --git a/BugMine.Web/Pages/Auth/LegacyLogin.razor b/BugMine.Web/Pages/Auth/LegacyLogin.razor new file mode 100644
index 0000000..5257028 --- /dev/null +++ b/BugMine.Web/Pages/Auth/LegacyLogin.razor
@@ -0,0 +1,71 @@ +@page "/Auth/LegacyLogin" +@using System.Text.Json.Serialization +@using LibMatrix.Services +@inject HomeserverProviderService hsProvider +<h3>Login</h3> +<hr/> + +<span style="display: block;"> + <label>User ID:</label> + <span>@@</span><!-- + --><FancyTextBox @bind-Value="@authData.Username"></FancyTextBox><!-- + --><span>:</span><!-- + --><FancyTextBox @bind-Value="@authData.Homeserver"></FancyTextBox> +</span> +<span style="display: block;"> + <label>Password:</label> + <FancyTextBox @bind-Value="@authData.Password" IsPassword="true"></FancyTextBox> +</span> +<span style="display: block"> + <label>Proxy (<a href="https://cgit.rory.gay/matrix/MxApiExtensions.git">MxApiExtensions</a> or similar):</label> + <FancyTextBox @bind-Value="@authData.Proxy"></FancyTextBox> +</span> +<br/> +<LinkButton OnClick="@(() => LoginWithAuth(authData))">Log in</LinkButton> + +<h4>Continue as guest</h4> +<hr/> +<LinkButton OnClick="@(() => LoginWithAuth(new LoginStruct { Homeserver = "matrix.org", Username = "guest", Password = "guest" }))">Log in as guest</LinkButton> + +@code { + private LoginStruct authData = new(); + + List<UserAuth>? LoggedInSessions { get; set; } = new(); + + async Task LoginWithAuth(LoginStruct record) { + if (LoggedInSessions.Any(x => x.UserId == $"@{record.Username}:{record.Homeserver}" && x.Proxy == record.Proxy)) return; + StateHasChanged(); + 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 BugMineStorage.AddToken(result); + await BugMineStorage.SetCurrentToken(result); + } + catch (Exception e) { + Console.WriteLine($"Failed to login to {record.Homeserver} as {record.Username}!"); + Console.WriteLine(e); + record.Exception = e; + } + + StateHasChanged(); + } + + private class LoginStruct { + public string? Homeserver { get; set; } = ""; + public string? Username { get; set; } = ""; + public string? Password { get; set; } = ""; + public string? Proxy { get; set; } + + [JsonIgnore] + internal Exception? Exception { get; set; } + } + +} \ No newline at end of file diff --git a/BugMine.Web/Pages/Auth/Login.razor b/BugMine.Web/Pages/Auth/Login.razor new file mode 100644
index 0000000..7b457ec --- /dev/null +++ b/BugMine.Web/Pages/Auth/Login.razor
@@ -0,0 +1,69 @@ +@page "/Auth/Login" +@using ArcaneLibs.Extensions +@using LibMatrix.Homeservers +@using LibMatrix.Services +@inject HomeserverProviderService hsProvider +<h3>Login</h3> +<hr/> +<p>Notice: this doesn't work yet, please use <a href="/Auth/LegacyLogin">legacy login</a>.</p> +<span style="display: block;"> + <span>Homeserver: </span> + <FancyTextBox @bind-Value="@HomeserverName"></FancyTextBox> +</span> + +@* <span style="display: block;"> *@ +@* <label>User ID:</label> *@ +@* <span>@@</span><!-- *@ +@* --><FancyTextBox @bind-Value="@authData.Username"></FancyTextBox><!-- *@ +@* --><span>:</span><!-- *@ +@* --><FancyTextBox @bind-Value="@authData.Homeserver"></FancyTextBox> *@ +@* </span> *@ +@* <span style="display: block;"> *@ +@* <label>Password:</label> *@ +@* <FancyTextBox @bind-Value="@authData.Password" IsPassword="true"></FancyTextBox> *@ +@* </span> *@ +@* <br/> *@ +@* <LinkButton OnClick="@(() => LoginWithAuth(authData))">Log in</LinkButton> *@ + +@if (Constants.Debug) { + <br/> + <span>Auth client state:</span> + <pre> + @Homeserver?.Auth.ToJson() + </pre> + <span>Current stage:</span> + <pre> + @CurrentStage?.ToJson() + </pre> +} + +@code { + private string? _homeserverName = null; + + private string? HomeserverName { + get => _homeserverName; + set { + _homeserverName = value; + HomeserverChanged(); + } + } + + public RemoteHomeserver? Homeserver { get; set; } + public UserInteractiveAuthClient.IUIAStage CurrentStage { get; set; } = null!; + + //oninit + protected override async Task OnInitializedAsync() { + HomeserverName = "matrixunittests.rory.gay"; + } + + public async Task HomeserverChanged() { + if (string.IsNullOrWhiteSpace(HomeserverName)) return; + Homeserver = await hsProvider.GetRemoteHomeserver(HomeserverName); + CurrentStage = await Homeserver.Auth.GetAvailableFlowsAsync(enableRegister: true, enableGuest: true); + + + StateHasChanged(); + } + +} + diff --git a/BugMine.Web/Pages/Auth/Logout.razor b/BugMine.Web/Pages/Auth/Logout.razor new file mode 100644
index 0000000..dd019a1 --- /dev/null +++ b/BugMine.Web/Pages/Auth/Logout.razor
@@ -0,0 +1,18 @@ +@page "/Auth/Logout" +<p>Logging out...</p> + +@code { + + protected override async Task OnInitializedAsync() { + var client = await BugMineStorage.GetCurrentSessionOrNull(); + if (client != null) { + await client.Homeserver.Logout(); + } + + await BugMineStorage.RemoveToken(await BugMineStorage.GetCurrentToken()); + await BugMineStorage.SetCurrentToken(null); + + NavigationManager.NavigateTo("/", true); + } + +} \ No newline at end of file