From d9d731ab59f5931119a4ecf5dfd10537d8118c54 Mon Sep 17 00:00:00 2001 From: TekH Date: Sun, 31 May 2026 10:29:46 +0200 Subject: [PATCH] Add logout functionality for envelope sessions Introduced a "Logout" button in `ReportViewer.razor` that is displayed when an `EnvelopeKey` is present. The button includes a spinner to indicate progress during the logout process. Added the `LogoutAsync` method in `ReportViewer.razor` to handle the logout operation, preventing multiple attempts and navigating the user to the login page upon success. Implemented `LogoutEnvelopeReceiverAsync` in `AuthService` to send a POST request to remove the per-envelope receiver cookie. This ensures proper backend handling of the logout process. Improved user experience by providing a responsive and clear logout mechanism for envelope-based sessions. --- .../Pages/ReportViewer.razor | 22 +++++++++++++++++++ .../Services/AuthService.cs | 12 ++++++++++ 2 files changed, 34 insertions(+) diff --git a/EnvelopeGenerator.ReceiverUI/Pages/ReportViewer.razor b/EnvelopeGenerator.ReceiverUI/Pages/ReportViewer.razor index c09740c0..4ad0e86d 100644 --- a/EnvelopeGenerator.ReceiverUI/Pages/ReportViewer.razor +++ b/EnvelopeGenerator.ReceiverUI/Pages/ReportViewer.razor @@ -48,6 +48,19 @@ @(SignatureApplied ? "Unterschrift erneuern" : "Unterschrift hinzufuegen") + @if (!string.IsNullOrWhiteSpace(EnvelopeKey)) { + + } @@ -169,6 +182,15 @@ string SignerPosition = string.Empty; string SignaturePlace = string.Empty; int ViewerKey; + bool IsLoggingOut; + + async Task LogoutAsync() { + if (string.IsNullOrWhiteSpace(EnvelopeKey) || IsLoggingOut) return; + IsLoggingOut = true; + await InvokeAsync(StateHasChanged); + await AuthService.LogoutEnvelopeReceiverAsync(EnvelopeKey); + Navigation.NavigateTo($"/login/{Uri.EscapeDataString(EnvelopeKey)}", forceLoad: true); + } protected override async Task OnInitializedAsync() { diff --git a/EnvelopeGenerator.ReceiverUI/Services/AuthService.cs b/EnvelopeGenerator.ReceiverUI/Services/AuthService.cs index 5caf2e5c..b68097b3 100644 --- a/EnvelopeGenerator.ReceiverUI/Services/AuthService.cs +++ b/EnvelopeGenerator.ReceiverUI/Services/AuthService.cs @@ -42,4 +42,16 @@ public class AuthService(HttpClient http, IOptions apiOptions) _ => EnvelopeLoginResult.Error }; } + + /// + /// Removes the per-envelope receiver cookie for the given envelope key. + /// Calls POST /api/auth/logout/envelope/{envelopeKey}. + /// + public async Task LogoutEnvelopeReceiverAsync(string envelopeKey, CancellationToken cancel = default) + { + var response = await http.PostAsync( + $"{_api.BaseUrl}/api/auth/logout/envelope/{Uri.EscapeDataString(envelopeKey)}", + null, cancel); + return response.IsSuccessStatusCode; + } }