Skip to content

Commit dcc84f6

Browse files
authored
Merge pull request #149 from /issues/148
security-package/issues/148: "Language code" does not work for reCAPTCHA v2 ("I am not a robot")
2 parents c088db0 + dac3ce9 commit dcc84f6

File tree

14 files changed

+235
-21
lines changed

14 files changed

+235
-21
lines changed

ReCaptchaFrontendUi/view/frontend/web/js/reCaptcha.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ define(
5656
element.async = true;
5757
element.src = 'https://www.google.com/recaptcha/api.js' +
5858
'?onload=globalOnRecaptchaOnLoadCallback&render=explicit' +
59-
(this.settings.lang ? '&hl=' + this.settings.lang : '');
59+
(this.settings.rendering.lang ? '&hl=' + this.settings.rendering.lang : '');
6060

6161
scriptTag.parentNode.insertBefore(element, scriptTag);
6262

ReCaptchaVersion2Checkbox/Model/Adminhtml/UiConfigProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ public function get(): array
4242
$config = [
4343
'rendering' => [
4444
'sitekey' => $this->getPublicKey(),
45-
'theme' => $this->getTheme(),
4645
'size' => $this->getSize(),
46+
'theme' => $this->getTheme(),
4747
'lang' => $this->getLanguageCode(),
4848
],
4949
'invisible' => false,

ReCaptchaVersion2Checkbox/Model/Frontend/UiConfigProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ public function get(): array
4343
$config = [
4444
'rendering' => [
4545
'sitekey' => $this->getPublicKey(),
46-
'theme' => $this->getTheme(),
4746
'size' => $this->getSize(),
47+
'theme' => $this->getTheme(),
4848
'lang' => $this->getLanguageCode(),
4949
],
5050
'invisible' => false,

ReCaptchaVersion2Checkbox/etc/adminhtml/system.xml

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@
1717
<backend_model>Magento\Config\Model\Config\Backend\Encrypted</backend_model>
1818
</field>
1919

20-
<field id="theme" translate="label" type="select" sortOrder="30" showInDefault="1" showInWebsite="0"
20+
<field id="size" translate="label" type="select" sortOrder="30" showInDefault="1" showInWebsite="0"
2121
showInStore="0" canRestore="1">
22-
<label>Theme</label>
23-
<source_model>Magento\ReCaptchaVersion2Checkbox\Model\OptionSource\Theme</source_model>
22+
<label>Size</label>
23+
<source_model>Magento\ReCaptchaVersion2Checkbox\Model\OptionSource\Size</source_model>
2424
</field>
2525

26-
<field id="size" translate="label" type="select" sortOrder="40" showInDefault="1" showInWebsite="0"
26+
<field id="theme" translate="label" type="select" sortOrder="40" showInDefault="1" showInWebsite="0"
2727
showInStore="0" canRestore="1">
28-
<label>Size</label>
29-
<source_model>Magento\ReCaptchaVersion2Checkbox\Model\OptionSource\Size</source_model>
28+
<label>Theme</label>
29+
<source_model>Magento\ReCaptchaVersion2Checkbox\Model\OptionSource\Theme</source_model>
3030
</field>
3131

3232
<field id="lang" translate="label comment" type="text" sortOrder="50" showInDefault="1" showInWebsite="0"
@@ -60,16 +60,16 @@
6060
<backend_model>Magento\Config\Model\Config\Backend\Encrypted</backend_model>
6161
</field>
6262

63-
<field id="theme" translate="label" type="select" sortOrder="30" showInDefault="1" showInWebsite="1"
63+
<field id="size" translate="label" type="select" sortOrder="30" showInDefault="1" showInWebsite="1"
6464
showInStore="0" canRestore="1">
65-
<label>Theme</label>
66-
<source_model>Magento\ReCaptchaVersion2Checkbox\Model\OptionSource\Theme</source_model>
65+
<label>Size</label>
66+
<source_model>Magento\ReCaptchaVersion2Checkbox\Model\OptionSource\Size</source_model>
6767
</field>
6868

69-
<field id="size" translate="label" type="select" sortOrder="40" showInDefault="1" showInWebsite="1"
69+
<field id="theme" translate="label" type="select" sortOrder="40" showInDefault="1" showInWebsite="1"
7070
showInStore="0" canRestore="1">
71-
<label>Size</label>
72-
<source_model>Magento\ReCaptchaVersion2Checkbox\Model\OptionSource\Size</source_model>
71+
<label>Theme</label>
72+
<source_model>Magento\ReCaptchaVersion2Checkbox\Model\OptionSource\Theme</source_model>
7373
</field>
7474

7575
<field id="lang" translate="label comment" type="text" sortOrder="50" showInDefault="1" showInWebsite="1"

ReCaptchaVersion2Invisible/Model/Adminhtml/UiConfigProvider.php

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ class UiConfigProvider implements UiConfigProviderInterface
1717
{
1818
private const XML_PATH_PUBLIC_KEY = 'recaptcha_backend/type_invisible/public_key';
1919
private const XML_PATH_POSITION = 'recaptcha_backend/type_invisible/position';
20+
private const XML_PATH_THEME = 'recaptcha_backend/type_invisible/theme';
21+
private const XML_PATH_LANGUAGE_CODE = 'recaptcha_backend/type_invisible/lang';
2022

2123
/**
2224
* @var ScopeConfigInterface
@@ -41,7 +43,9 @@ public function get(): array
4143
'rendering' => [
4244
'sitekey' => $this->getPublicKey(),
4345
'badge' => $this->getInvisibleBadgePosition(),
44-
'size' => 'invisible'
46+
'size' => 'invisible',
47+
'theme' => $this->getTheme(),
48+
'lang'=> $this->getLanguageCode()
4549
],
4650
'invisible' => true,
4751
];
@@ -69,4 +73,28 @@ private function getInvisibleBadgePosition(): string
6973
self::XML_PATH_POSITION
7074
);
7175
}
76+
77+
/**
78+
* Get theme
79+
*
80+
* @return string
81+
*/
82+
private function getTheme(): string
83+
{
84+
return (string)$this->scopeConfig->getValue(
85+
self::XML_PATH_THEME
86+
);
87+
}
88+
89+
/**
90+
* Get language code
91+
*
92+
* @return string
93+
*/
94+
private function getLanguageCode(): string
95+
{
96+
return (string)$this->scopeConfig->getValue(
97+
self::XML_PATH_LANGUAGE_CODE
98+
);
99+
}
72100
}

ReCaptchaVersion2Invisible/Model/Frontend/UiConfigProvider.php

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class UiConfigProvider implements UiConfigProviderInterface
1818
{
1919
private const XML_PATH_PUBLIC_KEY = 'recaptcha_frontend/type_invisible/public_key';
2020
private const XML_PATH_POSITION = 'recaptcha_frontend/type_invisible/position';
21+
private const XML_PATH_THEME = 'recaptcha_frontend/type_invisible/theme';
22+
private const XML_PATH_LANGUAGE_CODE = 'recaptcha_frontend/type_invisible/lang';
2123

2224
/**
2325
* @var ScopeConfigInterface
@@ -42,7 +44,9 @@ public function get(): array
4244
'rendering' => [
4345
'sitekey' => $this->getPublicKey(),
4446
'badge' => $this->getInvisibleBadgePosition(),
45-
'size' => 'invisible'
47+
'size' => 'invisible',
48+
'theme' => $this->getTheme(),
49+
'lang' => $this->getLanguageCode()
4650
],
4751
'invisible' => true,
4852
];
@@ -71,4 +75,30 @@ private function getInvisibleBadgePosition(): string
7175
ScopeInterface::SCOPE_WEBSITE
7276
);
7377
}
78+
79+
/**
80+
* Get theme
81+
*
82+
* @return string
83+
*/
84+
private function getTheme(): string
85+
{
86+
return (string)$this->scopeConfig->getValue(
87+
self::XML_PATH_THEME,
88+
ScopeInterface::SCOPE_WEBSITE
89+
);
90+
}
91+
92+
/**
93+
* Get language code
94+
*
95+
* @return string
96+
*/
97+
private function getLanguageCode(): string
98+
{
99+
return (string)$this->scopeConfig->getValue(
100+
self::XML_PATH_LANGUAGE_CODE,
101+
ScopeInterface::SCOPE_STORE
102+
);
103+
}
74104
}

ReCaptchaVersion2Invisible/etc/adminhtml/system.xml

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,22 @@
2323
<source_model>Magento\ReCaptchaVersion2Invisible\Model\OptionSource\Position</source_model>
2424
</field>
2525

26-
<field id="validation_failure_message" translate="label" type="textarea" sortOrder="40" showInDefault="1"
26+
<field id="theme" translate="label" type="select" sortOrder="40" showInDefault="1" showInWebsite="0"
27+
showInStore="0" canRestore="1">
28+
<label>Theme</label>
29+
<source_model>Magento\ReCaptchaVersion2Invisible\Model\OptionSource\Theme</source_model>
30+
</field>
31+
32+
<field id="lang" translate="label comment" type="text" sortOrder="50" showInDefault="1" showInWebsite="0"
33+
showInStore="0" canRestore="1">
34+
<label>Language Code</label>
35+
<comment><![CDATA[
36+
Optional. Forces the widget to render in a specific language. Auto-detects the user's language if unspecified. See
37+
<a target="_blank" href="https://developers.google.com/recaptcha/docs/language">supported Language Codes</a>.
38+
]]></comment>
39+
</field>
40+
41+
<field id="validation_failure_message" translate="label" type="textarea" sortOrder="60" showInDefault="1"
2742
showInWebsite="0" showInStore="0" canRestore="1">
2843
<label>reCAPTCHA Validation Failure Message</label>
2944
</field>
@@ -51,7 +66,22 @@
5166
<source_model>Magento\ReCaptchaVersion2Invisible\Model\OptionSource\Position</source_model>
5267
</field>
5368

54-
<field id="validation_failure_message" translate="label" type="textarea" sortOrder="40" showInDefault="1"
69+
<field id="theme" translate="label" type="select" sortOrder="40" showInDefault="1" showInWebsite="1"
70+
showInStore="0" canRestore="1">
71+
<label>Theme</label>
72+
<source_model>Magento\ReCaptchaVersion2Invisible\Model\OptionSource\Theme</source_model>
73+
</field>
74+
75+
<field id="lang" translate="label comment" type="text" sortOrder="50" showInDefault="1" showInWebsite="1"
76+
showInStore="1" canRestore="1">
77+
<label>Language Code</label>
78+
<comment><![CDATA[
79+
Optional. Forces the widget to render in a specific language. Auto-detects the user's language if unspecified. See
80+
<a target="_blank" href="https://developers.google.com/recaptcha/docs/language">supported Language Codes</a>.
81+
]]></comment>
82+
</field>
83+
84+
<field id="validation_failure_message" translate="label" type="textarea" sortOrder="60" showInDefault="1"
5585
showInWebsite="1" showInStore="1" canRestore="1">
5686
<label>reCAPTCHA Validation Failure Message</label>
5787
</field>

ReCaptchaVersion2Invisible/etc/config.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,17 @@
1212
<type_invisible>
1313
<private_key backend_model="Magento\Config\Model\Config\Backend\Encrypted"/>
1414
<position>inline</position>
15+
<theme>light</theme>
16+
<lang/>
1517
<validation_failure_message>reCAPTCHA verification failed</validation_failure_message>
1618
</type_invisible>
1719
</recaptcha_backend>
1820
<recaptcha_frontend>
1921
<type_invisible>
2022
<private_key backend_model="Magento\Config\Model\Config\Backend\Encrypted"/>
2123
<position>inline</position>
24+
<theme>light</theme>
25+
<lang/>
2226
<validation_failure_message>reCAPTCHA verification failed</validation_failure_message>
2327
</type_invisible>
2428
</recaptcha_frontend>

ReCaptchaVersion2Invisible/etc/di.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,19 @@
5252
</argument>
5353
</arguments>
5454
</virtualType>
55+
<virtualType name="Magento\ReCaptchaVersion2Invisible\Model\OptionSource\Theme"
56+
type="Magento\ReCaptchaAdminUi\Model\OptionSource">
57+
<arguments>
58+
<argument name="options" xsi:type="array">
59+
<item name="light" xsi:type="array">
60+
<item name="label" xsi:type="string" translate="true">Light Theme</item>
61+
<item name="value" xsi:type="string">light</item>
62+
</item>
63+
<item name="dark" xsi:type="array">
64+
<item name="label" xsi:type="string" translate="true">Dark Theme</item>
65+
<item name="value" xsi:type="string">dark</item>
66+
</item>
67+
</argument>
68+
</arguments>
69+
</virtualType>
5570
</config>

ReCaptchaVersion3Invisible/Model/Adminhtml/UiConfigProvider.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ class UiConfigProvider implements UiConfigProviderInterface
1717
{
1818
private const XML_PATH_PUBLIC_KEY = 'recaptcha_backend/type_recaptcha_v3/public_key';
1919
private const XML_PATH_POSITION = 'recaptcha_backend/type_recaptcha_v3/position';
20+
private const XML_PATH_THEME = 'recaptcha_backend/type_recaptcha_v3/theme';
21+
private const XML_PATH_LANGUAGE_CODE = 'recaptcha_backend/type_recaptcha_v3/lang';
2022

2123
/**
2224
* @var ScopeConfigInterface
@@ -42,6 +44,8 @@ public function get(): array
4244
'sitekey' => $this->getPublicKey(),
4345
'badge' => $this->getInvisibleBadgePosition(),
4446
'size' => 'invisible',
47+
'theme' => $this->getTheme(),
48+
'lang'=> $this->getLanguageCode()
4549
],
4650
'invisible' => true,
4751
];
@@ -69,4 +73,28 @@ private function getInvisibleBadgePosition(): string
6973
self::XML_PATH_POSITION
7074
);
7175
}
76+
77+
/**
78+
* Get theme
79+
*
80+
* @return string
81+
*/
82+
private function getTheme(): string
83+
{
84+
return (string)$this->scopeConfig->getValue(
85+
self::XML_PATH_THEME
86+
);
87+
}
88+
89+
/**
90+
* Get language code
91+
*
92+
* @return string
93+
*/
94+
private function getLanguageCode(): string
95+
{
96+
return (string)$this->scopeConfig->getValue(
97+
self::XML_PATH_LANGUAGE_CODE
98+
);
99+
}
72100
}

0 commit comments

Comments
 (0)