Auth and error handling components

This commit is contained in:
2024-09-01 19:30:28 +03:00
parent 65876be551
commit 1f050a6fd4
9 changed files with 174 additions and 60 deletions

View File

@@ -1,6 +1,10 @@
@page "/"
@using System.Net
@using BlazorWebAssemblyVisaApiClient.Components.Auth
@using VisaApiClient
@using BlazorWebAssemblyVisaApiClient.Components.FormComponents.Applicants
@using BlazorWebAssemblyVisaApiClient.Components
@inherits BlazorWebAssemblyVisaApiClient.Components.Base.VisaClientComponentBase
<PageTitle>Authentication</PageTitle>
@@ -13,30 +17,17 @@
<input class="btn-outline-primary rounded" type="submit" value="Login"/>
or
<NavLink href="register">Register</NavLink >
<p>@loginResult</p>
<Status><AuthComponent @ref="auth"/></Status>
</EditForm>
</div>
@code
{
private AuthData loginData = new();
private string loginResult = string.Empty;
[Inject] private Client Client { get; set; } = null!;
private AuthComponent auth = null!;
private async Task TryLogin()
{
loginResult = "Wait...";
StateHasChanged();
try
{
var token = await Client.LoginAsync(loginData.Email, loginData.Password);
Client.SetAuthToken(token);
loginResult = "Logged in successfully.";
}
catch (ApiException<ProblemDetails> e)
{
loginResult = e.Result.Detail!;
}
await auth.TryAuthorize(loginData);
}
}

View File

@@ -9,6 +9,8 @@
@using global::FluentValidation
@using Newtonsoft.Json
@using Newtonsoft.Json.Linq
@using BlazorWebAssemblyVisaApiClient.Components
@inherits BlazorWebAssemblyVisaApiClient.Components.Base.VisaClientComponentBase
<PageTitle>Registration</PageTitle>
@@ -122,17 +124,14 @@
</div><br/>
<input type="submit" class="btn-outline-primary" value="Register"/>
<p class="@requestResultClass">@((MarkupString)requestResult)</p>
<Status @ref="status"/>
</EditForm>
</div>
@code
{
private RegisterApplicantRequestModel requestModel = new();
private string requestResult = string.Empty;
private string requestResultClass = string.Empty;
[Inject] public Client Client { get; set; } = null!;
private Status status = null!;
[Inject] IValidator<RegisterApplicantRequestModel> RegisterApplicantRequestValidator { get; set; } = null!;
@@ -145,27 +144,6 @@
requestModel.BirthDate = DateTime.Now;
}
private void SetRequestResultMessage(string message)
{
requestResult = message;
requestResultClass = string.Empty;
StateHasChanged();
}
private void SetRequestResultSuccess(string message)
{
requestResult = message;
requestResultClass = "text-success";
StateHasChanged();
}
private void SetRequestResultError(string message)
{
requestResult = message;
requestResultClass = "validation-message";
StateHasChanged();
}
private string ErrorsToString(IEnumerable<string> errors)
{
var stringBuilder = new StringBuilder();
@@ -183,18 +161,18 @@
if (!validationResult.IsValid)
{
var errorsString = ErrorsToString(validationResult.Errors.Select(e => e.ErrorMessage));
SetRequestResultError(errorsString);
status.SetError(errorsString);
return;
}
SetRequestResultMessage("Wait...");
status.SetMessage("Wait...");
var request = Mapper.Map<RegisterApplicantRequest>(requestModel);
try
{
await Client.RegisterAsync(request);
SetRequestResultSuccess("Register successful. Now log in.");
status.SetSucces("Register successful. Now log in.");
}
catch (ApiException<ProblemDetails> e)
{
@@ -204,15 +182,21 @@
var errorsList = ((JArray)errors).ToObject<List<string>>();
if (errorsList is null)
{
throw new JsonException();
ErrorHandler.Handle(new JsonException("Can't convert validation errors to list"));
return;
}
SetRequestResultError(ErrorsToString(errorsList));
status.SetError(ErrorsToString(errorsList));
}
else
{
SetRequestResultError(e.Result.Detail!);
ErrorHandler.Handle(e);
}
}
catch (Exception e)
{
ErrorHandler.Handle(e);
}
}
}