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);
}
}
}