| | 1 | | using System.Net; |
| | 2 | | using Microsoft.JSInterop; |
| | 3 | | using Microsoft.AspNetCore.Components; |
| | 4 | | using Microsoft.AspNetCore.Components.WebAssembly.Http; |
| | 5 | |
|
| | 6 | | namespace Syki.Front.Auth; |
| | 7 | |
|
| 0 | 8 | | public class SykiDelegatingHandler(ILocalStorageService storage, SykiAuthStateProvider auth, NavigationManager nav) : De |
| | 9 | | { |
| | 10 | | protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellat |
| | 11 | | { |
| 0 | 12 | | request.SetBrowserRequestCredentials(BrowserRequestCredentials.Include); |
| | 13 | |
|
| 0 | 14 | | var response = await base.SendAsync(request, cancellationToken); |
| | 15 | |
|
| 0 | 16 | | if (response.StatusCode.IsIn(HttpStatusCode.Unauthorized, HttpStatusCode.Forbidden)) |
| | 17 | | { |
| 0 | 18 | | await storage.RemoveItemAsync("User"); |
| 0 | 19 | | auth.MarkUserAsLoggedOut(); |
| | 20 | |
|
| 0 | 21 | | if (!nav.Uri.Equals("/login")) |
| 0 | 22 | | nav.NavigateTo("/login", forceLoad: true); |
| | 23 | | } |
| | 24 | |
|
| 0 | 25 | | response.Headers.TryGetValues("X-CrossLogin", out var crossLogin); |
| 0 | 26 | | await storage.SetItemAsync("CrossLogin", crossLogin?.FirstOrDefault() ?? "False"); |
| | 27 | |
|
| 0 | 28 | | response.Headers.TryGetValues("X-DeployHash", out var deployHashHeader); |
| 0 | 29 | | var deployHash = deployHashHeader?.FirstOrDefault() ?? "0"; |
| 0 | 30 | | var storedDeployHash = await storage.GetItemAsync<string>("DeployHash"); |
| | 31 | |
|
| 0 | 32 | | if (deployHash != storedDeployHash) |
| | 33 | | { |
| 0 | 34 | | await storage.SetItemAsync("DeployHash", deployHash); |
| 0 | 35 | | nav.Refresh(true); |
| | 36 | | } |
| | 37 | |
|
| 0 | 38 | | return response; |
| 0 | 39 | | } |
| | 40 | |
|
| | 41 | | public SykiDelegatingHandler WithInnerHandler(HttpMessageHandler innerHandler) |
| | 42 | | { |
| 0 | 43 | | InnerHandler = innerHandler; |
| 0 | 44 | | return this; |
| | 45 | | } |
| | 46 | | } |