Add feature to open receiver envelope URLs
Introduce a new feature allowing users to open URLs for receiver envelopes directly from the sender page. This includes: - Injecting `EnvelopeReceiverService` in `SenderPage.razor`. - Adding a UI button to open receiver envelope URLs. - Implementing `OpenReceiverEnvelopeUrlAsync` for URL handling. - Extending `EnvelopeReceiverService` with methods for URL retrieval and feature check. - Updating `EnvelopeReceiverController` with new endpoints for URL access. - Introducing `SenderFeatureAccessOptions` for managing feature access. - Configuring feature access in `Program.cs` and `appsettings.json`. - Restricting feature usage to specified email addresses.
This commit is contained in:
@@ -15,6 +15,8 @@ namespace EnvelopeGenerator.Server.Client.Services;
|
||||
public class EnvelopeReceiverService(IHttpClientFactory httpClientFactory)
|
||||
{
|
||||
private static readonly JsonSerializerOptions _jsonOptions = new(JsonSerializerDefaults.Web);
|
||||
private sealed record ReceiverEnvelopeUrlResponse(string Url);
|
||||
private sealed record ReceiverEnvelopeUrlEnabledResponse(bool Enabled);
|
||||
|
||||
/// <summary>
|
||||
/// Fetches the envelope receiver data for the given envelope key from the API.
|
||||
@@ -63,4 +65,32 @@ public class EnvelopeReceiverService(IHttpClientFactory httpClientFactory)
|
||||
|
||||
return await response.Content.ReadFromJsonAsync<CreateEnvelopeReceiverResponse>(_jsonOptions, cancel);
|
||||
}
|
||||
|
||||
public async Task<string?> GetReceiverEnvelopeUrlAsync(string envelopeUuid, string receiverSignature, CancellationToken cancel = default)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(envelopeUuid) || string.IsNullOrWhiteSpace(receiverSignature))
|
||||
return null;
|
||||
|
||||
using var http = httpClientFactory.CreateClient("EnvelopeGenerator.Server");
|
||||
var url = $"/api/EnvelopeReceiver/receiver-envelope-url?envelopeUuid={Uri.EscapeDataString(envelopeUuid)}&receiverSignature={Uri.EscapeDataString(receiverSignature)}";
|
||||
var response = await http.GetAsync(url, cancel);
|
||||
|
||||
if (!response.IsSuccessStatusCode)
|
||||
return null;
|
||||
|
||||
var payload = await response.Content.ReadFromJsonAsync<ReceiverEnvelopeUrlResponse>(_jsonOptions, cancel);
|
||||
return payload?.Url;
|
||||
}
|
||||
|
||||
public async Task<bool> GetReceiverEnvelopeUrlFeatureEnabledAsync(CancellationToken cancel = default)
|
||||
{
|
||||
using var http = httpClientFactory.CreateClient("EnvelopeGenerator.Server");
|
||||
var response = await http.GetAsync("/api/EnvelopeReceiver/receiver-envelope-url/enabled", cancel);
|
||||
|
||||
if (!response.IsSuccessStatusCode)
|
||||
return false;
|
||||
|
||||
var payload = await response.Content.ReadFromJsonAsync<ReceiverEnvelopeUrlEnabledResponse>(_jsonOptions, cancel);
|
||||
return payload?.Enabled == true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user