Interlinked/src/Interlinked.Core/Pages/Register.razor
2023-10-01 13:37:15 +02:00

96 lines
2.6 KiB
Text

@page "/register"
@using System.ComponentModel.DataAnnotations;
@using System.Net
@inject HttpClient req
@inject UserManager usr
@inject NavigationManager nav
<PageTitle>Register</PageTitle>
<h1>Register</h1>
<EditForm class="form" Model="@Model" OnValidSubmit="@Submit">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="form-group">
<label for="username">Username</label>
<InputText @bind-Value="Model!.Username" id="username" />
</div>
<div class="form-group">
<label for="name">Full name</label>
<InputText @bind-Value="Model!.Name" id="name" />
</div>
<div class="form-group">
<label for="email">E-mail</label>
<InputText @bind-Value="Model!.Email" id="email" />
</div>
<div class="form-group">
<label for="pwd">Password</label>
<InputText type="password" @bind-Value="Model!.Password" id="pwd" />
</div>
<button type="submit">Log in</button>
</EditForm>
@if (!string.IsNullOrWhiteSpace(ValidationMsg))
{
<p class="text-danger">@ValidationMsg</p>
}
@code {
public record LoginModel
{
[Required]
public string Username { get; set; } = default!;
public string? Name { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; } = default!;
[Required]
public string Password { get; set; } = default!;
};
public LoginModel Model { get; set; } = new();
public string ValidationMsg = string.Empty;
protected override async Task OnInitializedAsync()
{
if (await usr.GetUser() != null)
{
nav.NavigateTo("/", true);
return;
}
Model ??= new();
}
private async Task Submit()
{
var resp = await req.PostAsJsonAsync("/api/auth/register", Model);
if (resp.StatusCode == HttpStatusCode.OK)
{
Model = new();
ValidationMsg = "Successful register <3"; var user = await resp.Content.ReadFromJsonAsync<UserModel>();
if (user == null)
{
ValidationMsg = "Unknown authentication error";
this.StateHasChanged();
return;
}
usr.SetUser(user);
this.StateHasChanged();
nav.NavigateTo("/", true);
return;
}
if (resp.StatusCode == HttpStatusCode.Conflict)
{
Model = new();
ValidationMsg = "User already registered.";
this.StateHasChanged();
return;
}
Model = new();
ValidationMsg = "Registration error...";
this.StateHasChanged();
}
}