namespace Nuuru.Server.Services { /// /// Runtime resolver that delegates ICaptchaService.ValidateAsync to the correct /// provider based on the current "captcha.provider" site setting. /// public class CaptchaServiceResolver : ICaptchaService { private readonly ISiteSettingsService _siteSettings; private readonly IServiceProvider _serviceProvider; public CaptchaServiceResolver(ISiteSettingsService siteSettings, IServiceProvider serviceProvider) { _siteSettings = siteSettings; _serviceProvider = serviceProvider; } public async Task ValidateAsync(string token) { var provider = await _siteSettings.GetCaptchaProviderAsync(); ICaptchaService service = provider switch { "hcaptcha" => _serviceProvider.GetRequiredService(), "builtin" => _serviceProvider.GetRequiredService(), _ => _serviceProvider.GetRequiredService() }; return await service.ValidateAsync(token); } } }