@page "/register"
@using HopFrame.Security.Services
@using HopFrame.Web.Model
@using HopFrame.Web.Services
@using Microsoft.AspNetCore.Components.Forms
@implements IDisposable
@**@
The password needs to be at least 8 characters long
@inject NavigationManager Navigation
@inject IUserService Users
@inject IAuthService Auth
@code {
public static string RedirectAfterRegister { get; set; } = "/";
private const string RefreshTokenType = "HopFrame.Security.RefreshToken";
[SupplyParameterFromForm]
private RegisterData RegisterData { get; set; }
private EditContext _context;
private ValidationMessageStore _messages;
protected override void OnInitialized() {
RegisterData ??= new();
_context = new EditContext(RegisterData);
_context.OnValidationRequested += ValidateForm;
_messages = new ValidationMessageStore(_context);
}
private async Task OnRegister() {
var hasConflict = false;
if (await Users.GetUserByEmail(RegisterData.Email) is not null) {
_messages.Add(() => RegisterData.Email, "Email is already in use");
hasConflict = true;
}
if (await Users.GetUserByUsername(RegisterData.Username) is not null) {
_messages.Add(() => RegisterData.Username, "Username is already in use");
hasConflict = true;
}
if (hasConflict) return;
await Auth.Register(RegisterData);
Navigation.NavigateTo(RedirectAfterRegister, true);
}
private void ValidateForm(object sender, ValidationRequestedEventArgs e) {
_messages.Clear();
if (RegisterData.Password != RegisterData.RepeatedPassword) {
_messages.Add(() => RegisterData.RepeatedPassword, "Passwords doesn't mach");
}
if (RegisterData.Password.Length < 8) {
_messages.Add(() => RegisterData.Password, "Password needs to be at least 8 characters long");
}
if (!RegisterData.Email.Contains("@") || !RegisterData.Email.Contains(".") || RegisterData.Email.EndsWith(".")) {
_messages.Add(() => RegisterData.Email, "Please enter a valid email address");
}
}
public void Dispose() {
_context.OnValidationRequested -= ValidateForm;
}
}