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; + } }