86 lines
2.2 KiB
C#
86 lines
2.2 KiB
C#
using TechHelper.Client.HttpRepository;
|
|
using Microsoft.AspNetCore.Components;
|
|
using System.Net;
|
|
using System.Net.Http.Headers;
|
|
using MudBlazor;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using System;
|
|
|
|
namespace BlazorProducts.Client.HttpInterceptor
|
|
{
|
|
public class HttpInterceptorHandlerService : DelegatingHandler
|
|
{
|
|
private readonly NavigationManager _navManager;
|
|
|
|
private readonly RefreshTokenService _refreshTokenService;
|
|
|
|
private readonly ISnackbar _serviceProvider;
|
|
private ISnackbar toastService = null;
|
|
|
|
public HttpInterceptorHandlerService(
|
|
NavigationManager navManager,
|
|
RefreshTokenService refreshTokenService,
|
|
ISnackbar serviceProvider)
|
|
{
|
|
_navManager = navManager;
|
|
_refreshTokenService = refreshTokenService;
|
|
_serviceProvider = serviceProvider;
|
|
}
|
|
|
|
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
|
|
{
|
|
var absolutePath = request.RequestUri?.AbsolutePath;
|
|
|
|
if (absolutePath != null && !absolutePath.Contains("token") && !absolutePath.Contains("account"))
|
|
{
|
|
var token = await _refreshTokenService.TryRefreshToken();
|
|
if (!string.IsNullOrEmpty(token))
|
|
{
|
|
request.Headers.Authorization =
|
|
new AuthenticationHeaderValue("bearer", token);
|
|
}
|
|
}
|
|
|
|
var response = await base.SendAsync(request, cancellationToken);
|
|
|
|
HandleResponse(response);
|
|
|
|
return response;
|
|
}
|
|
|
|
private void HandleResponse(HttpResponseMessage response)
|
|
{
|
|
if (response is null)
|
|
{
|
|
_navManager.NavigateTo("/error");
|
|
throw new HttpResponseException("Server not available.");
|
|
}
|
|
|
|
var message = "";
|
|
|
|
if (!response.IsSuccessStatusCode)
|
|
{
|
|
switch (response.StatusCode)
|
|
{
|
|
case HttpStatusCode.NotFound:
|
|
_navManager.NavigateTo("/404");
|
|
message = "Resource not found.";
|
|
break;
|
|
case HttpStatusCode.BadRequest:
|
|
message = "Invalid request. Please try again.";
|
|
break;
|
|
case HttpStatusCode.Unauthorized:
|
|
_navManager.NavigateTo("/unauthorized");
|
|
message = "Unauthorized access";
|
|
break;
|
|
default:
|
|
_navManager.NavigateTo("/error");
|
|
message = "Something went wrong. Please contact the administrator.";
|
|
break;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|