diff --git a/ReCaptchaAdminUi/composer.json b/ReCaptchaAdminUi/composer.json
index 602ce4b0..9aa52229 100644
--- a/ReCaptchaAdminUi/composer.json
+++ b/ReCaptchaAdminUi/composer.json
@@ -1,15 +1,16 @@
{
"name": "magento/module-re-captcha-admin-ui",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.1.2",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
"magento/module-config": "*",
- "magento/module-re-captcha-ui": "*",
+ "magento/module-re-captcha-ui": "1.1.*",
"magento/module-store": "*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -19,3 +20,4 @@
}
}
}
+
diff --git a/ReCaptchaCheckout/composer.json b/ReCaptchaCheckout/composer.json
index c2d67de0..fa74bab7 100644
--- a/ReCaptchaCheckout/composer.json
+++ b/ReCaptchaCheckout/composer.json
@@ -1,19 +1,20 @@
{
"name": "magento/module-re-captcha-checkout",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.1.2",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
"magento/module-checkout": "*",
- "magento/module-re-captcha-ui": "*",
- "magento/module-re-captcha-validation-api": "*",
- "magento/module-re-captcha-admin-ui": "*",
- "magento/module-re-captcha-frontend-ui": "*",
- "magento/module-re-captcha-webapi-api": "*",
- "magento/module-re-captcha-webapi-ui": "*"
+ "magento/module-re-captcha-ui": "1.1.*",
+ "magento/module-re-captcha-validation-api": "1.1.*",
+ "magento/module-re-captcha-admin-ui": "1.1.*",
+ "magento/module-re-captcha-frontend-ui": "1.1.*",
+ "magento/module-re-captcha-webapi-api": "1.0.*",
+ "magento/module-re-captcha-webapi-ui": "1.0.*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -23,3 +24,4 @@
}
}
}
+
diff --git a/ReCaptchaCheckoutSalesRule/composer.json b/ReCaptchaCheckoutSalesRule/composer.json
index fba933ad..7a7ac4d4 100644
--- a/ReCaptchaCheckoutSalesRule/composer.json
+++ b/ReCaptchaCheckoutSalesRule/composer.json
@@ -1,20 +1,21 @@
{
"name": "magento/module-re-captcha-checkout-sales-rule",
"description": "Google ReCaptcha integration for Magento2 coupons",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.1.0",
"require": {
"php": "~7.4.0||~8.0.0||~8.1.0",
"magento/framework": "*",
"magento/module-checkout": "*",
"magento/module-sales-rule": "*",
- "magento/module-re-captcha-ui": "*",
- "magento/module-re-captcha-validation-api": "*",
- "magento/module-re-captcha-admin-ui": "*",
- "magento/module-re-captcha-frontend-ui": "*",
- "magento/module-re-captcha-webapi-api": "*",
- "magento/module-re-captcha-webapi-ui": "*"
+ "magento/module-re-captcha-ui": "1.1.*",
+ "magento/module-re-captcha-validation-api": "1.1.*",
+ "magento/module-re-captcha-admin-ui": "1.1.*",
+ "magento/module-re-captcha-frontend-ui": "1.1.*",
+ "magento/module-re-captcha-webapi-api": "1.0.*",
+ "magento/module-re-captcha-webapi-ui": "1.0.*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -22,5 +23,6 @@
"psr-4": {
"Magento\\ReCaptchaCheckoutSalesRule\\": ""
}
- }
+ }
}
+
diff --git a/ReCaptchaContact/composer.json b/ReCaptchaContact/composer.json
index 5146c8df..2fe43461 100644
--- a/ReCaptchaContact/composer.json
+++ b/ReCaptchaContact/composer.json
@@ -1,13 +1,14 @@
{
"name": "magento/module-re-captcha-contact",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.1.1",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
- "magento/module-re-captcha-ui": "*"
+ "magento/module-re-captcha-ui": "1.1.*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -17,3 +18,4 @@
}
}
}
+
diff --git a/ReCaptchaCustomer/composer.json b/ReCaptchaCustomer/composer.json
index cdbed567..fb6dfce3 100644
--- a/ReCaptchaCustomer/composer.json
+++ b/ReCaptchaCustomer/composer.json
@@ -1,16 +1,17 @@
{
"name": "magento/module-re-captcha-customer",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.1.2",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
"magento/module-customer": "*",
- "magento/module-re-captcha-ui": "*",
- "magento/module-re-captcha-validation-api": "*",
- "magento/module-re-captcha-webapi-api": "*"
+ "magento/module-re-captcha-ui": "1.1.*",
+ "magento/module-re-captcha-validation-api": "1.1.*",
+ "magento/module-re-captcha-webapi-api": "1.0.*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -20,3 +21,4 @@
}
}
}
+
diff --git a/ReCaptchaFrontendUi/composer.json b/ReCaptchaFrontendUi/composer.json
index 42e28501..aed23c9b 100644
--- a/ReCaptchaFrontendUi/composer.json
+++ b/ReCaptchaFrontendUi/composer.json
@@ -1,14 +1,15 @@
{
"name": "magento/module-re-captcha-frontend-ui",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.1.2",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
"magento/module-store": "*",
- "magento/module-re-captcha-ui": "*"
+ "magento/module-re-captcha-ui": "1.1.*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -18,3 +19,4 @@
}
}
}
+
diff --git a/ReCaptchaMigration/composer.json b/ReCaptchaMigration/composer.json
index 6d823f30..9de0f73e 100644
--- a/ReCaptchaMigration/composer.json
+++ b/ReCaptchaMigration/composer.json
@@ -1,13 +1,14 @@
{
"name": "magento/module-re-captcha-migration",
"description": "Google reCAPTCHA config migration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.1.2",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
"magento/module-config": "*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -17,3 +18,4 @@
}
}
}
+
diff --git a/ReCaptchaNewsletter/composer.json b/ReCaptchaNewsletter/composer.json
index 3507d1da..1b11813d 100644
--- a/ReCaptchaNewsletter/composer.json
+++ b/ReCaptchaNewsletter/composer.json
@@ -1,15 +1,16 @@
{
"name": "magento/module-re-captcha-newsletter",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.1.2",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
- "magento/module-re-captcha-ui": "*",
- "magento/module-re-captcha-validation-api": "*",
- "magento/module-re-captcha-webapi-api": "*"
+ "magento/module-re-captcha-ui": "1.1.*",
+ "magento/module-re-captcha-validation-api": "1.1.*",
+ "magento/module-re-captcha-webapi-api": "1.0.*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -19,3 +20,4 @@
}
}
}
+
diff --git a/ReCaptchaPaypal/composer.json b/ReCaptchaPaypal/composer.json
index 983a5922..c9f8a438 100644
--- a/ReCaptchaPaypal/composer.json
+++ b/ReCaptchaPaypal/composer.json
@@ -1,16 +1,17 @@
{
"name": "magento/module-re-captcha-paypal",
"description": "Google reCaptcha integration for Magento2 PayPal PayflowPro payment form",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.1.2",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
- "magento/module-re-captcha-ui": "*",
- "magento/module-re-captcha-validation-api": "*",
+ "magento/module-re-captcha-ui": "1.1.*",
+ "magento/module-re-captcha-validation-api": "1.1.*",
"magento/module-checkout": "*",
- "magento/module-re-captcha-webapi-api": "*"
+ "magento/module-re-captcha-webapi-api": "1.0.*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -20,3 +21,4 @@
}
}
}
+
diff --git a/ReCaptchaReview/composer.json b/ReCaptchaReview/composer.json
index c4f0b517..6eadfd9d 100644
--- a/ReCaptchaReview/composer.json
+++ b/ReCaptchaReview/composer.json
@@ -1,15 +1,16 @@
{
"name": "magento/module-re-captcha-review",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.1.2",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
- "magento/module-re-captcha-ui": "*",
- "magento/module-re-captcha-validation-api": "*",
- "magento/module-re-captcha-webapi-api": "*"
+ "magento/module-re-captcha-ui": "1.1.*",
+ "magento/module-re-captcha-validation-api": "1.1.*",
+ "magento/module-re-captcha-webapi-api": "1.0.*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -19,3 +20,4 @@
}
}
}
+
diff --git a/ReCaptchaSendFriend/composer.json b/ReCaptchaSendFriend/composer.json
index 1d5ac164..e7bb3704 100644
--- a/ReCaptchaSendFriend/composer.json
+++ b/ReCaptchaSendFriend/composer.json
@@ -1,15 +1,16 @@
{
"name": "magento/module-re-captcha-send-friend",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.1.2",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
- "magento/module-re-captcha-ui": "*",
- "magento/module-re-captcha-validation-api": "*",
- "magento/module-re-captcha-webapi-api": "*"
+ "magento/module-re-captcha-ui": "1.1.*",
+ "magento/module-re-captcha-validation-api": "1.1.*",
+ "magento/module-re-captcha-webapi-api": "1.0.*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -19,3 +20,4 @@
}
}
}
+
diff --git a/ReCaptchaStorePickup/composer.json b/ReCaptchaStorePickup/composer.json
index 686dbfe1..476184be 100644
--- a/ReCaptchaStorePickup/composer.json
+++ b/ReCaptchaStorePickup/composer.json
@@ -1,17 +1,18 @@
{
"name": "magento/module-re-captcha-store-pickup",
"description": "Google reCaptcha integration for Magento2 Inventory Store Pickup shipping form",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.0.1",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
"magento/module-checkout": "*",
- "magento/module-re-captcha-ui": "*"
+ "magento/module-re-captcha-ui": "1.1.*"
},
"suggest": {
"magento/module-inventory-in-store-pickup-frontend": "*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -21,3 +22,4 @@
}
}
}
+
diff --git a/ReCaptchaUi/composer.json b/ReCaptchaUi/composer.json
index ef7438b6..1e387f69 100644
--- a/ReCaptchaUi/composer.json
+++ b/ReCaptchaUi/composer.json
@@ -1,19 +1,14 @@
{
"name": "magento/module-re-captcha-ui",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.1.2",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
- "magento/module-re-captcha-validation-api": "*"
+ "magento/module-re-captcha-validation-api": "1.1.*"
},
- "authors": [
- {
- "name": "Riccardo Tempesta",
- "email": "riccardo.tempesta@magespecialist.it"
- }
- ],
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -21,5 +16,12 @@
"psr-4": {
"Magento\\ReCaptchaUi\\": ""
}
- }
+ },
+ "authors": [
+ {
+ "email": "riccardo.tempesta@magespecialist.it",
+ "name": "Riccardo Tempesta"
+ }
+ ]
}
+
diff --git a/ReCaptchaUser/composer.json b/ReCaptchaUser/composer.json
index b2e0cc08..64eb66f7 100644
--- a/ReCaptchaUser/composer.json
+++ b/ReCaptchaUser/composer.json
@@ -1,14 +1,15 @@
{
"name": "magento/module-re-captcha-user",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.1.2",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
- "magento/module-re-captcha-ui": "*",
- "magento/module-re-captcha-validation-api": "*"
+ "magento/module-re-captcha-ui": "1.1.*",
+ "magento/module-re-captcha-validation-api": "1.1.*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -18,3 +19,4 @@
}
}
}
+
diff --git a/ReCaptchaValidation/composer.json b/ReCaptchaValidation/composer.json
index b1542885..fba02aa9 100644
--- a/ReCaptchaValidation/composer.json
+++ b/ReCaptchaValidation/composer.json
@@ -1,14 +1,15 @@
{
"name": "magento/module-re-captcha-validation",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.1.1",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
- "magento/module-re-captcha-validation-api": "*",
+ "magento/module-re-captcha-validation-api": "1.1.*",
"google/recaptcha": "^1.2"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -18,3 +19,4 @@
}
}
}
+
diff --git a/ReCaptchaValidationApi/composer.json b/ReCaptchaValidationApi/composer.json
index 2a6cc9aa..2066011c 100644
--- a/ReCaptchaValidationApi/composer.json
+++ b/ReCaptchaValidationApi/composer.json
@@ -1,12 +1,13 @@
{
"name": "magento/module-re-captcha-validation-api",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.1.1",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -16,3 +17,4 @@
}
}
}
+
diff --git a/ReCaptchaVersion2Checkbox/composer.json b/ReCaptchaVersion2Checkbox/composer.json
index d856134d..594c1e4f 100644
--- a/ReCaptchaVersion2Checkbox/composer.json
+++ b/ReCaptchaVersion2Checkbox/composer.json
@@ -1,19 +1,20 @@
{
"name": "magento/module-re-captcha-version-2-checkbox",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "2.0.2",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
"magento/module-store": "*",
- "magento/module-re-captcha-ui": "*",
- "magento/module-re-captcha-validation-api": "*"
+ "magento/module-re-captcha-ui": "1.1.*",
+ "magento/module-re-captcha-validation-api": "1.1.*"
},
"suggest": {
"magento/module-config": "*",
- "magento/module-re-captcha-admin-ui": "*"
+ "magento/module-re-captcha-admin-ui": "1.1.*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -23,3 +24,4 @@
}
}
}
+
diff --git a/ReCaptchaVersion2Invisible/composer.json b/ReCaptchaVersion2Invisible/composer.json
index cae5a5e8..1a111a1e 100644
--- a/ReCaptchaVersion2Invisible/composer.json
+++ b/ReCaptchaVersion2Invisible/composer.json
@@ -1,19 +1,20 @@
{
"name": "magento/module-re-captcha-version-2-invisible",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "2.0.2",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
"magento/module-store": "*",
- "magento/module-re-captcha-ui": "*",
- "magento/module-re-captcha-validation-api": "*"
+ "magento/module-re-captcha-ui": "1.1.*",
+ "magento/module-re-captcha-validation-api": "1.1.*"
},
"suggest": {
"magento/module-config": "*",
- "magento/module-re-captcha-admin-ui": "*"
+ "magento/module-re-captcha-admin-ui": "1.1.*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -23,3 +24,4 @@
}
}
}
+
diff --git a/ReCaptchaVersion3Invisible/composer.json b/ReCaptchaVersion3Invisible/composer.json
index f03262d4..fa5d61e0 100644
--- a/ReCaptchaVersion3Invisible/composer.json
+++ b/ReCaptchaVersion3Invisible/composer.json
@@ -1,19 +1,20 @@
{
"name": "magento/module-re-captcha-version-3-invisible",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "2.0.2",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
"magento/module-store": "*",
- "magento/module-re-captcha-ui": "*",
- "magento/module-re-captcha-validation-api": "*"
+ "magento/module-re-captcha-ui": "1.1.*",
+ "magento/module-re-captcha-validation-api": "1.1.*"
},
"suggest": {
"magento/module-config": "*",
- "magento/module-re-captcha-admin-ui": "*"
+ "magento/module-re-captcha-admin-ui": "1.1.*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -23,3 +24,4 @@
}
}
}
+
diff --git a/ReCaptchaWebapiApi/composer.json b/ReCaptchaWebapiApi/composer.json
index d2d3ae10..ebb63ec0 100644
--- a/ReCaptchaWebapiApi/composer.json
+++ b/ReCaptchaWebapiApi/composer.json
@@ -1,13 +1,14 @@
{
"name": "magento/module-re-captcha-webapi-api",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.0.1",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
- "magento/module-re-captcha-validation-api": "*"
+ "magento/module-re-captcha-validation-api": "1.1.*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -17,3 +18,4 @@
}
}
}
+
diff --git a/ReCaptchaWebapiGraphQl/composer.json b/ReCaptchaWebapiGraphQl/composer.json
index e857046e..4e36f312 100644
--- a/ReCaptchaWebapiGraphQl/composer.json
+++ b/ReCaptchaWebapiGraphQl/composer.json
@@ -1,15 +1,16 @@
{
"name": "magento/module-re-captcha-webapi-graph-ql",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.0.1",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
"magento/module-authorization": "*",
- "magento/module-re-captcha-validation-api": "*",
- "magento/module-re-captcha-webapi-api": "*"
+ "magento/module-re-captcha-validation-api": "1.1.*",
+ "magento/module-re-captcha-webapi-api": "1.0.*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -19,3 +20,4 @@
}
}
}
+
diff --git a/ReCaptchaWebapiRest/composer.json b/ReCaptchaWebapiRest/composer.json
index cf15d4c6..5a9d03b1 100644
--- a/ReCaptchaWebapiRest/composer.json
+++ b/ReCaptchaWebapiRest/composer.json
@@ -1,16 +1,17 @@
{
"name": "magento/module-re-captcha-webapi-rest",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.0.1",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
"magento/module-authorization": "*",
- "magento/module-re-captcha-validation-api": "*",
- "magento/module-re-captcha-webapi-api": "*",
+ "magento/module-re-captcha-validation-api": "1.1.*",
+ "magento/module-re-captcha-webapi-api": "1.0.*",
"magento/module-webapi": "*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -20,3 +21,4 @@
}
}
}
+
diff --git a/ReCaptchaWebapiUi/composer.json b/ReCaptchaWebapiUi/composer.json
index c17bbba6..8f07e510 100644
--- a/ReCaptchaWebapiUi/composer.json
+++ b/ReCaptchaWebapiUi/composer.json
@@ -1,13 +1,14 @@
{
"name": "magento/module-re-captcha-webapi-ui",
"description": "Google reCAPTCHA integration for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.0.1",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
- "magento/module-re-captcha-frontend-ui": "*"
+ "magento/module-re-captcha-frontend-ui": "1.1.*"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -17,3 +18,4 @@
}
}
}
+
diff --git a/Securitytxt/composer.json b/Securitytxt/composer.json
index 8f00f67f..f8295139 100644
--- a/Securitytxt/composer.json
+++ b/Securitytxt/composer.json
@@ -2,22 +2,17 @@
"name": "magento/module-securitytxt",
"description": "Security.txt file for Magento 2 websites",
"type": "magento2-module",
+ "license": [
+ "OSL-3.0",
+ "AFL-3.0"
+ ],
+ "version": "1.1.1",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
"magento/module-config": "*",
"magento/module-store": "*"
},
- "authors": [
- {
- "name": "Kalpesh Mehta",
- "email": "k@lpe.sh"
- }
- ],
- "license": [
- "OSL-3.0",
- "AFL-3.0"
- ],
"autoload": {
"files": [
"registration.php"
@@ -25,5 +20,12 @@
"psr-4": {
"Magento\\Securitytxt\\": ""
}
- }
+ },
+ "authors": [
+ {
+ "email": "k@lpe.sh",
+ "name": "Kalpesh Mehta"
+ }
+ ]
}
+
diff --git a/TwoFactorAuth/Controller/Adminhtml/Authy/Authpost.php b/TwoFactorAuth/Controller/Adminhtml/Authy/Authpost.php
old mode 100644
new mode 100755
index 1fd18f93..0a1d5674
--- a/TwoFactorAuth/Controller/Adminhtml/Authy/Authpost.php
+++ b/TwoFactorAuth/Controller/Adminhtml/Authy/Authpost.php
@@ -19,9 +19,13 @@
use Magento\TwoFactorAuth\Controller\Adminhtml\AbstractAction;
use Magento\TwoFactorAuth\Model\Provider\Engine\Authy;
use Magento\User\Model\User;
+use Magento\Framework\App\Config\ScopeConfigInterface;
+use Magento\User\Model\ResourceModel\User as UserResource;
+use Magento\Framework\App\ObjectManager;
/**
* @SuppressWarnings(PHPMD.CamelCaseMethodName)
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class Authpost extends AbstractAction implements HttpPostActionInterface
{
@@ -60,6 +64,26 @@ class Authpost extends AbstractAction implements HttpPostActionInterface
*/
private $alert;
+ /**
+ * Config path for the 2FA Attempts
+ */
+ private const XML_PATH_2FA_RETRY_ATTEMPTS = 'twofactorauth/general/twofactorauth_retry';
+
+ /**
+ * Config path for the 2FA Attempts
+ */
+ private const XML_PATH_2FA_LOCK_EXPIRE = 'twofactorauth/general/auth_lock_expire';
+
+ /**
+ * @var ScopeConfigInterface
+ */
+ private $scopeConfig;
+
+ /**
+ * @var UserResource
+ */
+ private $userResource;
+
/**
* @param Action\Context $context
* @param Session $session
@@ -69,6 +93,9 @@ class Authpost extends AbstractAction implements HttpPostActionInterface
* @param TfaInterface $tfa
* @param AlertInterface $alert
* @param DataObjectFactory $dataObjectFactory
+ * @param UserResource|null $userResource
+ * @param ScopeConfigInterface|null $scopeConfig
+ * @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/
public function __construct(
Action\Context $context,
@@ -78,7 +105,9 @@ public function __construct(
TfaSessionInterface $tfaSession,
TfaInterface $tfa,
AlertInterface $alert,
- DataObjectFactory $dataObjectFactory
+ DataObjectFactory $dataObjectFactory,
+ ?UserResource $userResource = null,
+ ?ScopeConfigInterface $scopeConfig = null
) {
parent::__construct($context);
$this->tfa = $tfa;
@@ -88,6 +117,8 @@ public function __construct(
$this->authy = $authy;
$this->dataObjectFactory = $dataObjectFactory;
$this->alert = $alert;
+ $this->scopeConfig = $scopeConfig ?? ObjectManager::getInstance()->get(ScopeConfigInterface::class);
+ $this->userResource = $userResource ?? ObjectManager::getInstance()->get(UserResource::class);
}
/**
@@ -109,6 +140,13 @@ public function execute()
$result = $this->jsonFactory->create();
try {
+ if (!$this->allowApiRetries()) { //locked the user
+ $lockThreshold = $this->scopeConfig->getValue(self::XML_PATH_2FA_LOCK_EXPIRE);
+ if ($this->userResource->lock((int)$user->getId(), 0, $lockThreshold)) {
+ $result->setData(['success' => false, 'message' => "Your account is temporarily disabled."]);
+ return $result;
+ }
+ }
$this->authy->verify($user, $this->dataObjectFactory->create([
'data' => $this->getRequest()->getParams(),
]));
@@ -141,4 +179,18 @@ protected function _isAllowed()
$this->tfa->getProviderIsAllowed((int) $user->getId(), Authy::CODE) &&
$this->tfa->getProvider(Authy::CODE)->isActive((int) $user->getId());
}
+
+ /**
+ * Check if retry attempt above threshold value
+ *
+ * @return bool
+ */
+ private function allowApiRetries() : bool
+ {
+ $maxRetries = $this->scopeConfig->getValue(self::XML_PATH_2FA_RETRY_ATTEMPTS);
+ $verifyAttempts = $this->session->getOtpAttempt();
+ $verifyAttempts = $verifyAttempts === null ? 1 : $verifyAttempts+1;
+ $this->session->setOtpAttempt($verifyAttempts);
+ return $maxRetries >= $verifyAttempts;
+ }
}
diff --git a/TwoFactorAuth/Controller/Adminhtml/Google/Authpost.php b/TwoFactorAuth/Controller/Adminhtml/Google/Authpost.php
old mode 100644
new mode 100755
index f0437f1d..14a70134
--- a/TwoFactorAuth/Controller/Adminhtml/Google/Authpost.php
+++ b/TwoFactorAuth/Controller/Adminhtml/Google/Authpost.php
@@ -19,6 +19,9 @@
use Magento\TwoFactorAuth\Controller\Adminhtml\AbstractAction;
use Magento\TwoFactorAuth\Model\Provider\Engine\Google;
use Magento\User\Model\User;
+use Magento\Framework\App\Config\ScopeConfigInterface;
+use Magento\User\Model\ResourceModel\User as UserResource;
+use Magento\Framework\App\ObjectManager;
/**
* Google authenticator post controller
@@ -61,6 +64,26 @@ class Authpost extends AbstractAction implements HttpPostActionInterface
*/
private $alert;
+ /**
+ * Config path for the 2FA Attempts
+ */
+ private const XML_PATH_2FA_RETRY_ATTEMPTS = 'twofactorauth/general/twofactorauth_retry';
+
+ /**
+ * Config path for the 2FA Attempts
+ */
+ private const XML_PATH_2FA_LOCK_EXPIRE = 'twofactorauth/general/auth_lock_expire';
+
+ /**
+ * @var ScopeConfigInterface
+ */
+ private $scopeConfig;
+
+ /**
+ * @var UserResource
+ */
+ private $userResource;
+
/**
* @param Action\Context $context
* @param Session $session
@@ -70,6 +93,9 @@ class Authpost extends AbstractAction implements HttpPostActionInterface
* @param TfaInterface $tfa
* @param AlertInterface $alert
* @param DataObjectFactory $dataObjectFactory
+ * @param UserResource|null $userResource
+ * @param ScopeConfigInterface|null $scopeConfig
+ * @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/
public function __construct(
Action\Context $context,
@@ -79,7 +105,9 @@ public function __construct(
TfaSessionInterface $tfaSession,
TfaInterface $tfa,
AlertInterface $alert,
- DataObjectFactory $dataObjectFactory
+ DataObjectFactory $dataObjectFactory,
+ ?UserResource $userResource = null,
+ ?ScopeConfigInterface $scopeConfig = null
) {
parent::__construct($context);
$this->tfa = $tfa;
@@ -89,6 +117,8 @@ public function __construct(
$this->tfaSession = $tfaSession;
$this->dataObjectFactory = $dataObjectFactory;
$this->alert = $alert;
+ $this->scopeConfig = $scopeConfig ?? ObjectManager::getInstance()->get(ScopeConfigInterface::class);
+ $this->userResource = $userResource ?? ObjectManager::getInstance()->get(UserResource::class);
}
/**
@@ -103,6 +133,14 @@ public function execute()
/** @var \Magento\Framework\DataObject $request */
$request = $this->dataObjectFactory->create(['data' => $this->getRequest()->getParams()]);
+ if (!$this->allowApiRetries()) { //locked the user
+ $lockThreshold = $this->scopeConfig->getValue(self::XML_PATH_2FA_LOCK_EXPIRE);
+ if ($this->userResource->lock((int)$user->getId(), 0, $lockThreshold)) {
+ $response->setData(['success' => false, 'message' => "Your account is temporarily disabled."]);
+ return $response;
+ }
+ }
+
if ($this->google->verify($user, $request)) {
$this->tfaSession->grantAccess();
$response->setData(['success' => true]);
@@ -133,4 +171,18 @@ protected function _isAllowed()
&& $this->tfa->getProviderIsAllowed((int)$user->getId(), Google::CODE)
&& $this->tfa->getProvider(Google::CODE)->isActive((int)$user->getId());
}
+
+ /**
+ * Check if retry attempt above threshold value
+ *
+ * @return bool
+ */
+ private function allowApiRetries() : bool
+ {
+ $maxRetries = $this->scopeConfig->getValue(self::XML_PATH_2FA_RETRY_ATTEMPTS);
+ $verifyAttempts = $this->session->getOtpAttempt();
+ $verifyAttempts = $verifyAttempts === null ? 1 : $verifyAttempts+1;
+ $this->session->setOtpAttempt($verifyAttempts);
+ return $maxRetries >= $verifyAttempts;
+ }
}
diff --git a/TwoFactorAuth/Controller/Adminhtml/Tfa/Reset.php b/TwoFactorAuth/Controller/Adminhtml/Tfa/Reset.php
index 6f2d3a9d..be0d1c33 100644
--- a/TwoFactorAuth/Controller/Adminhtml/Tfa/Reset.php
+++ b/TwoFactorAuth/Controller/Adminhtml/Tfa/Reset.php
@@ -10,11 +10,13 @@
use Magento\Backend\App\Action\Context;
use Magento\Framework\App\Action\HttpGetActionInterface;
use Magento\Framework\App\Action\HttpPostActionInterface;
+use Magento\Framework\App\ObjectManager;
use Magento\Framework\Exception\LocalizedException;
use Magento\User\Model\UserFactory;
use Magento\User\Model\ResourceModel\User as UserResourceModel;
use Magento\TwoFactorAuth\Api\TfaInterface;
use Magento\TwoFactorAuth\Controller\Adminhtml\AbstractAction;
+use Magento\Backend\Model\View\Result\Redirect;
/**
* Reset 2FA configuration controller
@@ -38,22 +40,30 @@ class Reset extends AbstractAction implements HttpGetActionInterface, HttpPostAc
*/
private $tfa;
+ /**
+ * @var Redirect
+ */
+ private $redirect;
+
/**
* @param Context $context
* @param UserResourceModel $userResourceModel
* @param TfaInterface $tfa
* @param UserFactory $userFactory
+ * @param Redirect $redirect
*/
public function __construct(
Context $context,
UserResourceModel $userResourceModel,
TfaInterface $tfa,
- UserFactory $userFactory
+ UserFactory $userFactory,
+ Redirect $redirect = null
) {
parent::__construct($context);
$this->userResourceModel = $userResourceModel;
$this->userInterfaceFactory = $userFactory;
$this->tfa = $tfa;
+ $this->redirect = $redirect ?: ObjectManager::getInstance()->get(Redirect::class);
}
/**
@@ -81,7 +91,7 @@ public function execute()
$provider->resetConfiguration((int) $user->getId());
$this->messageManager->addSuccessMessage(__('Configuration has been reset for this user'));
- return $this->_redirect('adminhtml/user/edit', ['user_id' => $userId]);
+ return $this->resultRedirectFactory->create()->setPath('adminhtml/user/edit', ['user_id' => $userId]);
}
/**
@@ -89,6 +99,7 @@ public function execute()
*/
protected function _isAllowed()
{
- return parent::_isAllowed() && $this->_authorization->isAllowed('Magento_TwoFactorAuth::tfa');
+ return parent::_isAllowed() && $this->_authorization->isAllowed('Magento_TwoFactorAuth::tfa')
+ && $this->_authorization->isAllowed('Magento_User::acl_users');
}
}
diff --git a/TwoFactorAuth/composer.json b/TwoFactorAuth/composer.json
index 78d1ab57..0b6dcc88 100644
--- a/TwoFactorAuth/composer.json
+++ b/TwoFactorAuth/composer.json
@@ -1,6 +1,9 @@
{
"name": "magento/module-two-factor-auth",
"description": "Two Factor Authentication module for Magento2",
+ "type": "magento2-module",
+ "license": "OSL-3.0",
+ "version": "1.1.3-p11",
"require": {
"php": "~7.4.0||~8.1.0",
"magento/framework": "*",
@@ -17,8 +20,6 @@
"endroid/qr-code": "^4.3.5",
"2tvenom/cborencode": "^1.0"
},
- "type": "magento2-module",
- "license": "OSL-3.0",
"autoload": {
"files": [
"registration.php"
@@ -28,3 +29,4 @@
}
}
}
+
diff --git a/TwoFactorAuth/etc/adminhtml/system.xml b/TwoFactorAuth/etc/adminhtml/system.xml
old mode 100644
new mode 100755
index 7086746b..9daf06c6
--- a/TwoFactorAuth/etc/adminhtml/system.xml
+++ b/TwoFactorAuth/etc/adminhtml/system.xml
@@ -35,6 +35,16 @@
This can be used to override the default email configuration link that is sent when using the Magento Web API's to authenticate. Use the placeholder :tfat to indicate where the token should be injected
+
+
+ Security configurations for TwoFactorAuth page.
+
+
+
+ TwoFactorAuth Configuration.
+
diff --git a/TwoFactorAuth/etc/config.xml b/TwoFactorAuth/etc/config.xml
index 515a4ae9..dffc3669 100644
--- a/TwoFactorAuth/etc/config.xml
+++ b/TwoFactorAuth/etc/config.xml
@@ -11,6 +11,8 @@
+ 10
+ 300
Login request to your Magento Admin
diff --git a/TwoFactorAuth/i18n/en_US.csv b/TwoFactorAuth/i18n/en_US.csv
new file mode 100755
index 00000000..667ec371
--- /dev/null
+++ b/TwoFactorAuth/i18n/en_US.csv
@@ -0,0 +1,5 @@
+"Configuration for TwoFactorAuth retry attempts","Configuration for TwoFactorAuth retry attempts"
+"Configuration for TwoFactorAuth lock expire time","Configuration for TwoFactorAuth lock expire time"
+"TwoFactorAuth Configuration","TwoFactorAuth Configuration"
+"Security configurations for TwoFactorAuth page","Security configurations for TwoFactorAuth page"
+"Your account is temporarily disabled.","Your account is temporarily disabled."
diff --git a/_metapackage/composer.json b/_metapackage/composer.json
index 23d52829..ea633186 100644
--- a/_metapackage/composer.json
+++ b/_metapackage/composer.json
@@ -2,32 +2,34 @@
"name": "magento/security-package",
"description": "Magento Security Package",
"type": "metapackage",
+ "version": "1.1.3-p11",
"require": {
- "magento/module-re-captcha-admin-ui": "*",
- "magento/module-re-captcha-checkout": "*",
- "magento/module-re-captcha-contact": "*",
- "magento/module-re-captcha-customer": "*",
- "magento/module-re-captcha-frontend-ui": "*",
- "magento/module-re-captcha-migration": "*",
- "magento/module-re-captcha-newsletter": "*",
- "magento/module-re-captcha-paypal": "*",
- "magento/module-re-captcha-review": "*",
- "magento/module-re-captcha-send-friend": "*",
- "magento/module-re-captcha-store-pickup": "*",
- "magento/module-re-captcha-ui": "*",
- "magento/module-re-captcha-user": "*",
- "magento/module-re-captcha-validation": "*",
- "magento/module-re-captcha-validation-api": "*",
- "magento/module-re-captcha-version-2-checkbox": "*",
- "magento/module-re-captcha-version-2-invisible": "*",
- "magento/module-re-captcha-version-3-invisible": "*",
- "magento/module-re-captcha-webapi-api": "*",
- "magento/module-re-captcha-webapi-rest": "*",
- "magento/module-re-captcha-webapi-graph-ql": "*",
- "magento/module-re-captcha-webapi-ui": "*",
- "magento/module-securitytxt": "*",
- "magento/module-two-factor-auth": "*",
+ "magento/module-re-captcha-admin-ui": "1.1.2",
+ "magento/module-re-captcha-checkout": "1.1.2",
+ "magento/module-re-captcha-contact": "1.1.1",
+ "magento/module-re-captcha-customer": "1.1.2",
+ "magento/module-re-captcha-frontend-ui": "1.1.2",
+ "magento/module-re-captcha-migration": "1.1.2",
+ "magento/module-re-captcha-newsletter": "1.1.2",
+ "magento/module-re-captcha-paypal": "1.1.2",
+ "magento/module-re-captcha-review": "1.1.2",
+ "magento/module-re-captcha-send-friend": "1.1.2",
+ "magento/module-re-captcha-store-pickup": "1.0.1",
+ "magento/module-re-captcha-ui": "1.1.2",
+ "magento/module-re-captcha-user": "1.1.2",
+ "magento/module-re-captcha-validation": "1.1.1",
+ "magento/module-re-captcha-validation-api": "1.1.1",
+ "magento/module-re-captcha-version-2-checkbox": "2.0.2",
+ "magento/module-re-captcha-version-2-invisible": "2.0.2",
+ "magento/module-re-captcha-version-3-invisible": "2.0.2",
+ "magento/module-re-captcha-webapi-api": "1.0.1",
+ "magento/module-re-captcha-webapi-rest": "1.0.1",
+ "magento/module-re-captcha-webapi-graph-ql": "1.0.1",
+ "magento/module-re-captcha-webapi-ui": "1.0.1",
+ "magento/module-securitytxt": "1.1.1",
+ "magento/module-two-factor-auth": "1.1.3-p11",
"google/recaptcha": "^1.2",
- "magento/module-re-captcha-checkout-sales-rule": "*"
+ "magento/module-re-captcha-checkout-sales-rule": "1.1.0"
}
}
+