diff --git a/vendor/magento/module-customer/Model/ForgotPasswordToken/GetCustomerByToken.php b/vendor/magento/module-customer/Model/ForgotPasswordToken/GetCustomerByToken.php
index 994bf7b40deb5..e91bab987e906 100644
--- a/vendor/magento/module-customer/Model/ForgotPasswordToken/GetCustomerByToken.php
+++ b/vendor/magento/module-customer/Model/ForgotPasswordToken/GetCustomerByToken.php
@@ -9,15 +9,19 @@
use Magento\Customer\Api\CustomerRepositoryInterface;
use Magento\Customer\Api\Data\CustomerInterface;
+use Magento\Customer\Model\ResourceModel\Customer\CollectionFactory;
use Magento\Framework\Api\SearchCriteriaBuilder;
+use Magento\Framework\App\ObjectManager;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Exception\State\ExpiredException;
use Magento\Framework\Phrase;
/**
* Get Customer By reset password token
+ *
* @SuppressWarnings(PHPMD.LongVariable)
* @deprecated Rp Tokens cannot be looked up directly
+ * @see not used anymore
*/
class GetCustomerByToken
{
@@ -32,17 +36,24 @@ class GetCustomerByToken
private $searchCriteriaBuilder;
/**
- * ForgotPassword constructor.
- *
+ * @var CollectionFactory
+ */
+ private $collectionFactory;
+
+ /**
* @param \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository
* @param \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder
+ * @param CollectionFactory|null $collectionFactory
*/
public function __construct(
CustomerRepositoryInterface $customerRepository,
- SearchCriteriaBuilder $searchCriteriaBuilder
+ SearchCriteriaBuilder $searchCriteriaBuilder,
+ ?CollectionFactory $collectionFactory = null
) {
$this->customerRepository = $customerRepository;
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
+ $this->collectionFactory = $collectionFactory
+ ?? ObjectManager::getInstance()->get(CollectionFactory::class);
}
/**
@@ -53,38 +64,27 @@ public function __construct(
* @return \Magento\Customer\Api\Data\CustomerInterface
* @throws ExpiredException
* @throws NoSuchEntityException
- * @throws \Magento\Framework\Exception\LocalizedException
*/
public function execute(string $resetPasswordToken): CustomerInterface
{
- $this->searchCriteriaBuilder->addFilter(
- 'rp_token',
- $resetPasswordToken
- );
- $this->searchCriteriaBuilder->setPageSize(1);
- $found = $this->customerRepository->getList(
- $this->searchCriteriaBuilder->create()
- );
+ $collection = $this->collectionFactory->create();
+ $collection->addAttributeToFilter('rp_token', $resetPasswordToken);
+ $size = $collection->getSize();
- if ($found->getTotalCount() > 1) {
- //Failed to generated unique RP token
+ if ($size > 1) {
throw new ExpiredException(
new Phrase('Reset password token expired.')
);
}
- if ($found->getTotalCount() === 0) {
- //Customer with such token not found.
+ if ($size === 0) {
throw new NoSuchEntityException(
new Phrase(
'No such entity with rp_token = %value',
- [
- 'value' => $resetPasswordToken
- ]
+ ['value' => $resetPasswordToken]
)
);
}
- //Unique customer found.
- return $found->getItems()[0];
+ return $collection->getFirstItem();
}
}
diff --git a/vendor/magento/module-customer/Model/Plugin/CustomerRepository/RestrictedFieldsPlugin.php b/vendor/magento/module-customer/Model/Plugin/CustomerRepository/RestrictedFieldsPlugin.php
new file mode 100644
index 0000000000000..764dc50b76add
--- /dev/null
+++ b/vendor/magento/module-customer/Model/Plugin/CustomerRepository/RestrictedFieldsPlugin.php
@@ -0,0 +1,69 @@
+getFilterGroups() as $filterGroup) {
+ foreach ($filterGroup->getFilters() as $filter) {
+ if ($this->isRestricted($filter->getField())) {
+ throw new InputException(
+ __('The search criteria filter field is invalid.')
+ );
+ }
+ }
+ }
+ foreach ($searchCriteria->getSortOrders() ?? [] as $sortOrder) {
+ if ($this->isRestricted($sortOrder->getField())) {
+ throw new InputException(
+ __('The search criteria sort field is invalid.')
+ );
+ }
+ }
+ return [$searchCriteria];
+ }
+
+ /**
+ * Check if the given field name matches a restricted field
+ *
+ * @param string|null $field
+ * @return bool
+ */
+ private function isRestricted(?string $field): bool
+ {
+ return $field !== null && in_array(strtolower($field), $this->restrictedFields, true);
+ }
+}
diff --git a/vendor/magento/module-customer/etc/di.xml b/vendor/magento/module-customer/etc/di.xml
index 96fd4b86be702..411c688d55f07 100644
--- a/vendor/magento/module-customer/etc/di.xml
+++ b/vendor/magento/module-customer/etc/di.xml
@@ -85,6 +85,15 @@
SessionValidator
+
+
+
+ - password_hash
+ - rp_token
+ - confirmation
+
+
+
Magento\Customer\Model\Address\Config\Proxy
diff --git a/vendor/magento/module-customer/etc/graphql/di.xml b/vendor/magento/module-customer/etc/graphql/di.xml
index e5ed4078b4a04..89095704f51e8 100644
--- a/vendor/magento/module-customer/etc/graphql/di.xml
+++ b/vendor/magento/module-customer/etc/graphql/di.xml
@@ -16,4 +16,7 @@
+
+
+
diff --git a/vendor/magento/module-customer/etc/webapi_rest/di.xml b/vendor/magento/module-customer/etc/webapi_rest/di.xml
index 18627b68320ed..f649cb6732b94 100644
--- a/vendor/magento/module-customer/etc/webapi_rest/di.xml
+++ b/vendor/magento/module-customer/etc/webapi_rest/di.xml
@@ -21,6 +21,7 @@
+
diff --git a/vendor/magento/module-customer/etc/webapi_soap/di.xml b/vendor/magento/module-customer/etc/webapi_soap/di.xml
index cb0b1ce58a594..2f9c0cc786995 100644
--- a/vendor/magento/module-customer/etc/webapi_soap/di.xml
+++ b/vendor/magento/module-customer/etc/webapi_soap/di.xml
@@ -18,6 +18,9 @@
+
+
+
diff --git a/vendor/magento/module-customer/i18n/en_US.csv b/vendor/magento/module-customer/i18n/en_US.csv
index 095e41ae851a1..fb103bc3441b6 100644
--- a/vendor/magento/module-customer/i18n/en_US.csv
+++ b/vendor/magento/module-customer/i18n/en_US.csv
@@ -548,4 +548,6 @@ Addresses,Addresses
"Full Match","Full Match"
"Prefix Match","Prefix Match"
"Something went wrong while logging out customer.","Something went wrong while logging out customer."
+"The search criteria filter field is invalid.","The search criteria filter field is invalid."
+"The search criteria sort field is invalid.","The search criteria sort field is invalid."
"Address not found.","Address not found."