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. ///