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