@page "/register" @using Iceshrimp.Frontend.Core.Miscellaneous @using Iceshrimp.Frontend.Core.Schemas @using Iceshrimp.Frontend.Core.Services @using Iceshrimp.Shared.Schemas.Web @using Microsoft.Extensions.Localization @layout UnauthLayout @inject IStringLocalizer Loc; @inject MetadataService Metadata; @inject ApiService Api; @inject SessionService SessionService; @inject NavigationManager Navigation; @if (State is State.Loaded) {

@Loc["Register on {0}", Name ?? "this Iceshrimp.NET Instance."]

@if (RegistrationAvailability is not Registrations.Closed) {
@if (RegistrationAvailability is Registrations.Invite) { }
@if (Result is RegistrationResult.Failure) {
@Loc[RegistrationError ?? string.Empty]
} } @if (RegistrationAvailability is Registrations.Closed) {
@Loc["Registrations for this instance are closed."]
}
} @code { private string? Username { get; set; } private string? Password { get; set; } private string? Invite { get; set; } private bool Loading { get; set; } private RegistrationResult Result { get; set; } private Registrations RegistrationAvailability { get; set; } private State State { get; set; } = State.Loading; private string? RegistrationError { get; set; } private string? Name { get; set; } private async Task Submit() { Loading = true; StateHasChanged(); if (Username is null || Password is null) { Result = RegistrationResult.Failure; RegistrationError = "Please fill out all fields"; Loading = false; return; } var registration = new RegistrationRequest { Username = Username, Password = Password, Invite = Invite, }; try { var res = await Api.Auth.RegisterAsync(registration); if (res.Status is AuthStatusEnum.Authenticated) { SessionService.AddUser(new StoredUser { // Token nor user will ever be null on an authenticated response Id = res.User!.Id, Username = res.User.Username, DisplayName = res.User.DisplayName, AvatarUrl = res.User.AvatarUrl, BannerUrl = res.User.BannerUrl, InstanceName = res.User.InstanceName, InstanceIconUrl = res.User.InstanceIconUrl, Token = res.Token!, Host = res.User.Host, IsAdmin = res.IsAdmin ?? false, Emojis = res.User.Emojis, MovedTo = res.User.MovedTo }); SessionService.SetSession(res.User.Id); Navigation.NavigateTo("/"); } Loading = false; } catch (ApiException e) { RegistrationError = e.Response.Message; Result = RegistrationResult.Failure; Loading = false; StateHasChanged(); } } private enum RegistrationResult { Incomplete, Success, Failure } protected override async Task OnInitializedAsync() { var metadata = await Metadata.Instance.Value; RegistrationAvailability = metadata.Registration; State = State.Loaded; Name = metadata.Name; } }