securityServiceFactory = $securityServiceFactory; } /** * Get the currently active CAPTCHA provider * * @return string ('recaptcha', 'hcaptcha', 'turnstile', 'none') */ public function getActiveCaptchaProvider(): string { return $this->securityServiceFactory->getActiveCaptchaProvider(); } /** * Determine CAPTCHA provider based on form fields and current settings * * @param array $formFields Array of form field objects * @return string The CAPTCHA provider to use for this form */ public function getCaptchaProviderForForm(array $formFields): string { return $this->securityServiceFactory->getCaptchaProviderForForm($formFields); } /** * Validate CAPTCHA response for form submission * * This method automatically determines the appropriate CAPTCHA provider * based on the form fields and validates the submission accordingly. * * @param array $submissionData The form submission data * @param array $formFields The form field objects * @return bool * @throws ForbiddenException If CAPTCHA validation fails */ public function validateFormSubmission(array $submissionData, array $formFields): bool { return $this->securityServiceFactory->validateFormSubmission($submissionData, $formFields); } /** * Get security configuration for frontend * * @param array $formFields Array of form field objects to determine required config * @return array */ public function getFrontendSecurityConfig(array $formFields): array { $provider = $this->getCaptchaProviderForForm($formFields); if ($provider === CaptchaProviderResolver::PROVIDER_NONE) { return [ 'captcha' => [ 'enabled' => false, 'provider' => CaptchaProviderResolver::PROVIDER_NONE ] ]; } $config = [ 'captcha' => [ 'enabled' => true, 'provider' => $provider ] ]; // Add provider-specific configuration switch ($provider) { case CaptchaProviderResolver::PROVIDER_RECAPTCHA: $service = $this->securityServiceFactory->createActiveCaptchaService($formFields); $config['captcha']['recaptcha'] = [ 'configured' => false, 'type' => 'v2', 'siteKey' => '', 'scriptUrl' => '', 'size' => 'normal' ]; if ($service && $service->isConfigured()) { $recaptchaConfig = $service->getFrontendConfig( $service->getType(), $service->getSiteKey() ); // Add the configured flag that frontend expects $recaptchaConfig['configured'] = true; $config['captcha']['recaptcha'] = $recaptchaConfig; } break; // Future providers can be added here case CaptchaProviderResolver::PROVIDER_HCAPTCHA: case CaptchaProviderResolver::PROVIDER_TURNSTILE: // To be implemented break; } return $config; } }