diff --git a/lib/API/JSON/v1/Subscribers.php b/lib/API/JSON/v1/Subscribers.php index 4608b8663b..39b69590ee 100644 --- a/lib/API/JSON/v1/Subscribers.php +++ b/lib/API/JSON/v1/Subscribers.php @@ -68,6 +68,9 @@ class Subscribers extends APIEndpoint { /** @var SubscriptionUrlFactory */ private $subscriptionUrlFactory; + /** @var FieldNameObfuscator */ + private $fieldNameObfuscator; + public function __construct( Listing\BulkActionController $bulkActionController, SubscribersListings $subscribersListings, @@ -79,7 +82,8 @@ class Subscribers extends APIEndpoint { SettingsController $settings, CaptchaSession $captchaSession, ConfirmationEmailMailer $confirmationEmailMailer, - SubscriptionUrlFactory $subscriptionUrlFactory + SubscriptionUrlFactory $subscriptionUrlFactory, + FieldNameObfuscator $fieldNameObfuscator ) { $this->bulkActionController = $bulkActionController; $this->subscribersListings = $subscribersListings; @@ -92,6 +96,7 @@ class Subscribers extends APIEndpoint { $this->captchaSession = $captchaSession; $this->confirmationEmailMailer = $confirmationEmailMailer; $this->subscriptionUrlFactory = $subscriptionUrlFactory; + $this->fieldNameObfuscator = $fieldNameObfuscator; } public function get($data = []) { @@ -271,8 +276,7 @@ class Subscribers extends APIEndpoint { } private function deobfuscateFormPayload($data) { - $obfuscator = new FieldNameObfuscator(); - return $obfuscator->deobfuscateFormPayload($data); + return $this->fieldNameObfuscator->deobfuscateFormPayload($data); } private function validateCaptcha($captchaSettings, $data) { diff --git a/lib/Form/Util/FieldNameObfuscator.php b/lib/Form/Util/FieldNameObfuscator.php index dc7bb1a750..9862b15cc6 100644 --- a/lib/Form/Util/FieldNameObfuscator.php +++ b/lib/Form/Util/FieldNameObfuscator.php @@ -9,9 +9,16 @@ class FieldNameObfuscator { const OBFUSCATED_FIELD_PREFIX = 'form_field_'; const HASH_LENGTH = 12; + /** @var WPFunctions */ + private $wp; + + public function __construct(WPFunctions $wp) { + $this->wp = $wp; + } + public function obfuscate($name) { $authKey = defined('AUTH_KEY') ? AUTH_KEY : ''; - $hash = substr(md5($authKey . WPFunctions::get()->homeUrl() . $name), 0, self::HASH_LENGTH); + $hash = substr(md5($authKey . $this->wp->homeUrl() . $name), 0, self::HASH_LENGTH); return self::OBFUSCATED_FIELD_PREFIX . base64_encode($hash . '_' . $name); } diff --git a/tests/integration/API/JSON/v1/SubscribersTest.php b/tests/integration/API/JSON/v1/SubscribersTest.php index b8a8d71f41..984b76e3ce 100644 --- a/tests/integration/API/JSON/v1/SubscribersTest.php +++ b/tests/integration/API/JSON/v1/SubscribersTest.php @@ -60,6 +60,7 @@ class SubscribersTest extends \MailPoetTest { $settings = $container->get(SettingsController::class); $wp = $container->get(Functions::class); $this->captchaSession = new CaptchaSession($container->get(Functions::class)); + $obfuscator = new FieldNameObfuscator($wp); $this->endpoint = new Subscribers( $container->get(BulkActionController::class), $container->get(SubscribersListings::class), @@ -71,9 +72,9 @@ class SubscribersTest extends \MailPoetTest { $settings, $this->captchaSession, $container->get(ConfirmationEmailMailer::class), - new SubscriptionUrlFactory($wp, $settings, new LinkTokens) + new SubscriptionUrlFactory($wp, $settings, new LinkTokens), + $obfuscator ); - $obfuscator = new FieldNameObfuscator(); $this->obfuscatedEmail = $obfuscator->obfuscate('email'); $this->obfuscatedSegments = $obfuscator->obfuscate('segments'); $this->segment1 = Segment::createOrUpdate(['name' => 'Segment 1']); diff --git a/tests/integration/Subscription/FormTest.php b/tests/integration/Subscription/FormTest.php index 654a6a60c3..22295f484f 100644 --- a/tests/integration/Subscription/FormTest.php +++ b/tests/integration/Subscription/FormTest.php @@ -16,6 +16,7 @@ use MailPoet\Settings\SettingsRepository; use MailPoet\Subscription\Form; use MailPoet\Util\Security; use MailPoet\Util\Url as UrlHelper; +use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Idiorm\ORM; class FormTest extends \MailPoetTest { @@ -55,7 +56,7 @@ class FormTest extends \MailPoetTest { ], ] ); - $obfuscator = new FieldNameObfuscator(); + $obfuscator = new FieldNameObfuscator(WPFunctions::get()); $obfuscatedEmail = $obfuscator->obfuscate('email'); $this->requestData = [ 'action' => 'mailpoet_subscription_form', diff --git a/tests/unit/Form/Util/FieldNameObfuscatorTest.php b/tests/unit/Form/Util/FieldNameObfuscatorTest.php index 4f79d500b7..dcdf1c255a 100644 --- a/tests/unit/Form/Util/FieldNameObfuscatorTest.php +++ b/tests/unit/Form/Util/FieldNameObfuscatorTest.php @@ -2,46 +2,43 @@ namespace MailPoet\Form\Util; -use Codeception\Stub; use MailPoet\WP\Functions as WPFunctions; +use PHPUnit\Framework\MockObject\MockObject; class FieldNameObfuscatorTest extends \MailPoetUnitTest { + + /** @var MockObject | WPFunctions */ + private $wpMock; + + /** @var FieldNameObfuscator */ + private $obfuscator; + public function _before() { parent::_before(); - WPFunctions::set( - Stub::make(WPFunctions::class, [ - 'homeUrl' => 'http://example.com', - ]) - ); + $this->wpMock = $this->createMock(WPFunctions::class); + $this->wpMock->method('homeUrl')->willReturn('http://example.com'); + $this->obfuscator = new FieldNameObfuscator($this->wpMock); } public function testObfuscateWorks() { - $obfuscator = new FieldNameObfuscator(); - expect($obfuscator->obfuscate('email'))->notContains('email'); + expect($this->obfuscator->obfuscate('email'))->notContains('email'); } public function testObfuscateDeobfuscateWorks() { - $obfuscator = new FieldNameObfuscator(); - $obfuscated = $obfuscator->obfuscate('email'); - expect($obfuscator->deobfuscate($obfuscated))->equals('email'); + $obfuscated = $this->obfuscator->obfuscate('email'); + expect($this->obfuscator->deobfuscate($obfuscated))->equals('email'); } public function testObfuscatePayloadWorks() { - $obfuscator = new FieldNameObfuscator(); - $obfuscated = $obfuscator->obfuscate('email'); + $obfuscated = $this->obfuscator->obfuscate('email'); $data = [ 'regularField' => 'regularValue', $obfuscated => 'obfuscatedFieldValue', ]; - $deobfuscatedPayload = $obfuscator->deobfuscateFormPayload($data); + $deobfuscatedPayload = $this->obfuscator->deobfuscateFormPayload($data); expect($deobfuscatedPayload)->equals([ 'regularField' => 'regularValue', 'email' => 'obfuscatedFieldValue', ]); } - - public function _after() { - parent::_after(); - WPFunctions::set(new WPFunctions()); - } }