aboutsummaryrefslogtreecommitdiff
path: root/lib/Emails.Transactional.Extensions
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Emails.Transactional.Extensions')
-rw-r--r--lib/Emails.Transactional.Extensions/src/TEmailConfig.cs37
1 files changed, 20 insertions, 17 deletions
diff --git a/lib/Emails.Transactional.Extensions/src/TEmailConfig.cs b/lib/Emails.Transactional.Extensions/src/TEmailConfig.cs
index 7905982..7642283 100644
--- a/lib/Emails.Transactional.Extensions/src/TEmailConfig.cs
+++ b/lib/Emails.Transactional.Extensions/src/TEmailConfig.cs
@@ -39,7 +39,7 @@ namespace Emails.Transactional.Client.Extensions
/// Provides transactional emails based on templates and variable complilation. Should be loaded as a singleton for a plugin
/// </summary>
[ConfigurationName(EMAIL_CONFIG_KEY)]
- public class TEmailConfig : TransactionalEmailConfig, IAsyncConfigurable, IDisposable
+ public class TEmailConfig : TransactionalEmailConfig, IDisposable
{
const string DEFAULT_USER_AGENT = "VN Transactional Email System";
@@ -58,17 +58,19 @@ namespace Emails.Transactional.Client.Extensions
/// <see cref="RestClient"/>
/// </summary>
public RestClientPool RestClientPool { get; }
+
/// <summary>
/// A global from email address name
/// </summary>
public string EmailFromName { get; }
+
/// <summary>
/// A global from email address
/// </summary>
public string EmailFromAddress { get; }
- private SecretResult? _clientId;
- private SecretResult? _clientSecret;
+ private readonly IAsyncLazy<string> _clientId;
+ private readonly IAsyncLazy<string> _clientSecret;
/// <summary>
@@ -116,22 +118,19 @@ namespace Emails.Transactional.Client.Extensions
//Init templates and service url
WithTemplates(templates)
.WithUrl(mailConfig.ServiceUri);
- }
- private Credential OAuthCredentialGet()
- {
- _ = _clientId ?? throw new InvalidOperationException("Oauth2 client id was not loaded");
- _ = _clientSecret ?? throw new InvalidOperationException("Oauth2 client secret was not loaded");
+ //Load oauth secrets
+ _clientId = plugin.GetSecretAsync("email_client_id")
+ .ToLazy(static s => s.Result.ToString());
- //Create new credential
- return Credential.Create(_clientId.Result, _clientSecret.Result);
+ _clientSecret = plugin.GetSecretAsync("email_client_secret")
+ .ToLazy(static s => s.Result.ToString());
}
- async Task IAsyncConfigurable.ConfigureServiceAsync(PluginBase plugin)
+ private Credential OAuthCredentialGet()
{
- //Load oauth secrets
- _clientId = await plugin.TryGetSecretAsync("email_client_id");
- _clientSecret = await plugin.TryGetSecretAsync("email_client_secret");
+ //Create new credential
+ return Credential.Create(_clientId.Value, _clientSecret.Value);
}
///<inheritdoc/>
@@ -141,12 +140,10 @@ namespace Emails.Transactional.Client.Extensions
{
if (disposing)
{
- _clientId?.Dispose();
- _clientSecret?.Dispose();
-
_authenticator.Dispose();
RestClientPool.Dispose();
}
+
disposedValue = true;
}
}
@@ -162,16 +159,22 @@ namespace Emails.Transactional.Client.Extensions
{
[JsonPropertyName("from_name")]
public string? EmailFromName { get; set; }
+
[JsonPropertyName("from_address")]
public string? EmailFromAddress { get; set; }
+
[JsonPropertyName("email_url")]
public string? ServiceUrl { get; set; }
+
[JsonPropertyName("auth_url")]
public string? AuthUrl { get; set; }
+
[JsonPropertyName("user_agent")]
public string UserAgent { get; set; } = DEFAULT_USER_AGENT;
+
[JsonPropertyName("timeout_ms")]
public int TimeoutMs { get; set; } = DEFAULT_CLIENT_TIMEOUT_MS;
+
[JsonPropertyName("max_clients")]
public int MaxClients { get; set; } = DEFAULT_MAX_CLIENTS;