diff --git a/src/AliasVault.Api/Config.cs b/src/AliasVault.Api/Config.cs
index a724e4d95..8055c551e 100644
--- a/src/AliasVault.Api/Config.cs
+++ b/src/AliasVault.Api/Config.cs
@@ -16,4 +16,9 @@ public class Config
/// Gets or sets a value indicating whether public registration is enabled.
///
public bool PublicRegistrationEnabled { get; set; }
+
+ ///
+ /// Gets or sets the list of private email domains that are available.
+ ///
+ public List PrivateEmailDomains { get; set; } = [];
}
diff --git a/src/AliasVault.Api/Controllers/VaultController.cs b/src/AliasVault.Api/Controllers/VaultController.cs
index fe175e4a0..c6309f69e 100644
--- a/src/AliasVault.Api/Controllers/VaultController.cs
+++ b/src/AliasVault.Api/Controllers/VaultController.cs
@@ -35,8 +35,9 @@ using Microsoft.Extensions.Caching.Memory;
/// ITimeProvider instance.
/// AuthLoggingService instance.
/// IMemoryCache instance.
+/// Config instance.
[ApiVersion("1")]
-public class VaultController(ILogger logger, IAliasServerDbContextFactory dbContextFactory, UserManager userManager, ITimeProvider timeProvider, AuthLoggingService authLoggingService, IMemoryCache cache) : AuthenticatedRequestController(userManager)
+public class VaultController(ILogger logger, IAliasServerDbContextFactory dbContextFactory, UserManager userManager, ITimeProvider timeProvider, AuthLoggingService authLoggingService, IMemoryCache cache, Config config) : AuthenticatedRequestController(userManager)
{
///
/// Error message for providing an invalid current password (during password change).
@@ -95,7 +96,9 @@ public class VaultController(ILogger logger, IAliasServerDbCont
CurrentRevisionNumber = 0,
EncryptionPublicKey = string.Empty,
CredentialsCount = 0,
- EmailAddressList = new List(),
+ EmailAddressList = [],
+ PrivateEmailDomainList = [],
+ PublicEmailDomainList = [],
CreatedAt = DateTime.MinValue,
UpdatedAt = DateTime.MinValue,
},
@@ -117,6 +120,13 @@ public class VaultController(ILogger logger, IAliasServerDbCont
});
}
+ // Get dynamic list of private email domains from config.
+ var privateEmailDomainList = config.PrivateEmailDomains;
+
+ // Hardcoded list of public (SpamOK) email domains that are available to the client.
+ var publicEmailDomainList = new List(["spamok.com", "solarflarecorp.com", "spamok.nl", "3060.nl",
+ "landmail.nl", "asdasd.nl", "spamok.de", "spamok.com.ua", "spamok.es", "spamok.fr"]);
+
return Ok(new Shared.Models.WebApi.Vault.VaultGetResponse
{
Status = VaultStatus.Ok,
@@ -129,6 +139,8 @@ public class VaultController(ILogger logger, IAliasServerDbCont
EncryptionPublicKey = string.Empty,
CredentialsCount = 0,
EmailAddressList = [],
+ PrivateEmailDomainList = privateEmailDomainList,
+ PublicEmailDomainList = publicEmailDomainList,
CreatedAt = vault.CreatedAt,
UpdatedAt = vault.UpdatedAt,
},
@@ -168,6 +180,8 @@ public class VaultController(ILogger logger, IAliasServerDbCont
EncryptionPublicKey = string.Empty,
CredentialsCount = 0,
EmailAddressList = [],
+ PrivateEmailDomainList = [],
+ PublicEmailDomainList = [],
CreatedAt = x.CreatedAt,
UpdatedAt = x.UpdatedAt,
}).ToList(),
diff --git a/src/AliasVault.Api/Program.cs b/src/AliasVault.Api/Program.cs
index 4189faa7d..21e935294 100644
--- a/src/AliasVault.Api/Program.cs
+++ b/src/AliasVault.Api/Program.cs
@@ -31,6 +31,9 @@ var config = new Config();
var publicRegistrationEnabled = Environment.GetEnvironmentVariable("PUBLIC_REGISTRATION_ENABLED") ?? "false";
config.PublicRegistrationEnabled = bool.Parse(publicRegistrationEnabled);
+var privateEmailDomains = Environment.GetEnvironmentVariable("PRIVATE_EMAIL_DOMAINS")?.Split(",").Select(d => d.Trim());
+config.PrivateEmailDomains = privateEmailDomains?.ToList() ?? new List();
+
builder.Services.AddSingleton(config);
builder.Services.ConfigureLogging(builder.Configuration, Assembly.GetExecutingAssembly().GetName().Name!, "../../logs");
diff --git a/src/AliasVault.Api/Properties/launchSettings.json b/src/AliasVault.Api/Properties/launchSettings.json
index 687660e87..17b943c09 100644
--- a/src/AliasVault.Api/Properties/launchSettings.json
+++ b/src/AliasVault.Api/Properties/launchSettings.json
@@ -8,7 +8,8 @@
"ASPNETCORE_ENVIRONMENT": "Development",
"JWT_KEY": "12345678901234567890123456789012",
"DATA_PROTECTION_CERT_PASS": "Development",
- "PUBLIC_REGISTRATION_ENABLED": "true"
+ "PUBLIC_REGISTRATION_ENABLED": "true",
+ "PRIVATE_EMAIL_DOMAINS": "example.tld,example2.tld"
},
"dotnetRunMessages": true,
"applicationUrl": "http://0.0.0.0:5092"
@@ -21,7 +22,8 @@
"ASPNETCORE_ENVIRONMENT": "Development",
"JWT_KEY": "12345678901234567890123456789012",
"DATA_PROTECTION_CERT_PASS": "Development",
- "PUBLIC_REGISTRATION_ENABLED": "true"
+ "PUBLIC_REGISTRATION_ENABLED": "true",
+ "PRIVATE_EMAIL_DOMAINS": "example.tld,example2.tld"
},
"dotnetRunMessages": true,
"applicationUrl": "https://0.0.0.0:7223"
diff --git a/src/Shared/AliasVault.Shared/Models/WebApi/Vault/Vault.cs b/src/Shared/AliasVault.Shared/Models/WebApi/Vault/Vault.cs
index dcaab5134..24fe505ed 100644
--- a/src/Shared/AliasVault.Shared/Models/WebApi/Vault/Vault.cs
+++ b/src/Shared/AliasVault.Shared/Models/WebApi/Vault/Vault.cs
@@ -50,6 +50,16 @@ public class Vault
///
public required List EmailAddressList { get; set; }
+ ///
+ /// Gets or sets the list of private email domains that are available.
+ ///
+ public required List PrivateEmailDomainList { get; set; }
+
+ ///
+ /// Gets or sets the list of public email domains that are available.
+ ///
+ public required List PublicEmailDomainList { get; set; }
+
///
/// Gets or sets the date and time of creation.
///