PluginProbe
The Innovative Form Builder – IvyForms / 1.5.1
The Innovative Form Builder – IvyForms v1.5.1
1.5.1 1.5 1.4.1 1.4 trunk 0.1.2 0.2 0.2.1 0.3 0.3.1 0.4 0.5 0.6 0.6.1 0.6.1-backup 0.6.1.1 0.7 0.8 0.8.1 0.8.2 0.9 0.9.1 1.0 1.1 1.1.1 All 27 releases
← All changes | backend/src/Services/Security/SecurityService.php +56 -42 0.3 → 1.5.1 View file →
@@ -1,22 +1,20 @@
1 1 <?php
2 2
3 3 /**
4 - * @copyright © TMS-Plugins. All rights reserved.
4 + * @copyright © Melograno Venture Studio. All rights reserved.
5 5 * @licence See COPYING.md for license details.
6 6 */
7 7
8 8 namespace IvyForms\Services\Security;
9 9
10 -// phpcs:disable PSR1.Files.SideEffects
11 -if (!defined('ABSPATH')) {
12 - exit; // Exit if accessed directly
13 -}
14 -
15 10 use IvyForms\Common\Exceptions\ForbiddenException;
16 11 use IvyForms\Factory\Security\SecurityServiceFactory;
17 12 use IvyForms\Factory\Security\CaptchaProviderResolver;
18 -use IvyForms\Services\Security\CaptchaServiceInterface;
13 +use IvyForms\Services\Security\Common\CaptchaServiceInterface;
14 +use IvyForms\Services\Security\Recaptcha\RecaptchaConfigProvider;
15 +use IvyForms\Services\Security\Turnstile\TurnstileConfigProvider;
16 +use IvyForms\Services\Security\HCaptcha\HCaptchaConfigProvider;
19 17
20 18 /**
21 19 * Class SecurityService
22 20 *
@@ -32,11 +30,29 @@
32 30 * @var SecurityServiceFactory
33 31 */
34 32 private SecurityServiceFactory $securityServiceFactory;
35 33
34 + /**
35 + * @var RecaptchaConfigProvider
36 + */
37 + private RecaptchaConfigProvider $recaptchaConfigProvider;
38 +
39 + /**
40 + * @var TurnstileConfigProvider
41 + */
42 + private TurnstileConfigProvider $turnstileConfigProvider;
43 +
44 + /**
45 + * @var HCaptchaConfigProvider
46 + */
47 + private HCaptchaConfigProvider $hcaptchaConfigProvider;
48 +
36 49 public function __construct(SecurityServiceFactory $securityServiceFactory)
37 50 {
38 51 $this->securityServiceFactory = $securityServiceFactory;
52 + $this->recaptchaConfigProvider = new RecaptchaConfigProvider();
53 + $this->turnstileConfigProvider = new TurnstileConfigProvider();
54 + $this->hcaptchaConfigProvider = new HCaptchaConfigProvider();
39 55 }
40 56
41 57 /**
42 58 * Get the currently active CAPTCHA provider
@@ -85,50 +101,48 @@
85 101 {
86 102 $provider = $this->getCaptchaProviderForForm($formFields);
87 103
88 104 if ($provider === CaptchaProviderResolver::PROVIDER_NONE) {
89 - return [
90 - 'captcha' => [
91 - 'enabled' => false,
92 - 'provider' => CaptchaProviderResolver::PROVIDER_NONE
93 - ]
94 - ];
105 + return $this->buildDisabledConfig();
95 106 }
96 107
97 - $config = [
108 + return $this->buildProviderConfig($provider, $formFields);
109 + }
110 +
111 + /**
112 + * Build configuration for disabled CAPTCHA
113 + *
114 + * @return array<string, mixed>
115 + */
116 + private function buildDisabledConfig(): array
117 + {
118 + return [
98 119 'captcha' => [
99 - 'enabled' => true,
100 - 'provider' => $provider
120 + 'enabled' => false,
121 + 'provider' => CaptchaProviderResolver::PROVIDER_NONE
101 122 ]
102 123 ];
124 + }
103 125
104 - // Add provider-specific configuration
105 - switch ($provider) {
106 - case CaptchaProviderResolver::PROVIDER_RECAPTCHA:
107 - $service = $this->securityServiceFactory->createActiveCaptchaService($formFields);
108 - $config['captcha']['recaptcha'] = [
109 - 'configured' => false,
110 - 'type' => 'v2',
111 - 'siteKey' => '',
112 - 'scriptUrl' => '',
113 - 'size' => 'normal'
114 - ];
115 - if ($service && $service->isConfigured()) {
116 - $recaptchaConfig = $service->getFrontendConfig(
117 - $service->getType(),
118 - $service->getSiteKey()
119 - );
120 - // Add the configured flag that frontend expects
121 - $recaptchaConfig['configured'] = true;
122 - $config['captcha']['recaptcha'] = $recaptchaConfig;
123 - }
124 - break;
126 + /**
127 + * Build provider configuration
128 + *
129 + * @param string $provider
130 + * @param array<object> $formFields
131 + * @return array<string, mixed>
132 + */
133 + private function buildProviderConfig(string $provider, array $formFields): array
134 + {
135 + $service = $this->securityServiceFactory->createActiveCaptchaService($formFields);
125 136
126 - // Future providers can be added here
127 - case CaptchaProviderResolver::PROVIDER_HCAPTCHA:
128 - case CaptchaProviderResolver::PROVIDER_TURNSTILE:
129 - // To be implemented
130 - break;
137 + $config = ['captcha' => ['enabled' => true, 'provider' => $provider]];
138 +
139 + if ($provider === CaptchaProviderResolver::PROVIDER_RECAPTCHA) {
140 + $config['captcha']['recaptcha'] = $this->recaptchaConfigProvider->getConfig($service);
141 + } elseif ($provider === CaptchaProviderResolver::PROVIDER_TURNSTILE) {
142 + $config['captcha']['turnstile'] = $this->turnstileConfigProvider->getConfig($service);
143 + } elseif ($provider === CaptchaProviderResolver::PROVIDER_HCAPTCHA) {
144 + $config['captcha']['hcaptcha'] = $this->hcaptchaConfigProvider->getConfig($service);
131 145 }
132 146
133 147 return $config;
134 148 }