Refactor subscribers API to use updated captcha session

[MAILPOET-2343]
This commit is contained in:
Rostislav Wolny
2019-09-25 09:39:19 +02:00
committed by Jack Kitterhing
parent fa4c2c8b8f
commit de3c519fbf
2 changed files with 8 additions and 4 deletions

View File

@ -179,8 +179,9 @@ class Subscribers extends APIEndpoint {
if (!empty($captcha_settings['type']) if (!empty($captcha_settings['type'])
&& $captcha_settings['type'] === Captcha::TYPE_BUILTIN && $captcha_settings['type'] === Captcha::TYPE_BUILTIN
&& $this->captcha_session->isAvailable()
) { ) {
$captcha_session_id = isset($data['captcha_session_id']) ? $data['captcha_session_id'] : null;
$this->captcha_session->init($captcha_session_id);
if (!isset($data['captcha'])) { if (!isset($data['captcha'])) {
// Save form data to session // Save form data to session
$this->captcha_session->setFormData(array_merge($data, ['form_id' => $form_id])); $this->captcha_session->setFormData(array_merge($data, ['form_id' => $form_id]));
@ -239,7 +240,7 @@ class Subscribers extends APIEndpoint {
if ($errors !== false) { if ($errors !== false) {
return $this->badRequest($errors); return $this->badRequest($errors);
} else { } else {
if (!empty($captcha_settings['type']) && $captcha_settings['type'] === Captcha::TYPE_BUILTIN && $this->captcha_session->isAvailable()) { if (!empty($captcha_settings['type']) && $captcha_settings['type'] === Captcha::TYPE_BUILTIN) {
// Captcha has been verified, invalidate the session vars // Captcha has been verified, invalidate the session vars
$this->captcha_session->reset(); $this->captcha_session->reset();
} }
@ -280,11 +281,11 @@ class Subscribers extends APIEndpoint {
} }
$is_builtin_captcha_required = false; $is_builtin_captcha_required = false;
if ($captcha_settings['type'] === Captcha::TYPE_BUILTIN && $this->captcha_session->isAvailable()) { if ($captcha_settings['type'] === Captcha::TYPE_BUILTIN) {
$is_builtin_captcha_required = $this->subscription_captcha->isRequired(isset($data['email']) ? $data['email'] : ''); $is_builtin_captcha_required = $this->subscription_captcha->isRequired(isset($data['email']) ? $data['email'] : '');
if ($is_builtin_captcha_required && empty($data['captcha'])) { if ($is_builtin_captcha_required && empty($data['captcha'])) {
$meta = []; $meta = [];
$meta['redirect_url'] = $this->subscription_url_factory->getCaptchaUrl(); $meta['redirect_url'] = $this->subscription_url_factory->getCaptchaUrl($this->captcha_session->getId());
return $this->badRequest([ return $this->badRequest([
APIError::BAD_REQUEST => WPFunctions::get()->__('Please fill in the CAPTCHA.', 'mailpoet'), APIError::BAD_REQUEST => WPFunctions::get()->__('Please fill in the CAPTCHA.', 'mailpoet'),
], $meta); ], $meta);

View File

@ -552,10 +552,13 @@ class SubscribersTest extends \MailPoetTest {
$subscriber->count_confirmations = 1; $subscriber->count_confirmations = 1;
$subscriber->save(); $subscriber->save();
$captcha_value = 'ihg5w'; $captcha_value = 'ihg5w';
$captcha_session_id = 'abcdfgh';
$this->captcha_session->init($captcha_session_id);
$this->captcha_session->setCaptchaHash($captcha_value); $this->captcha_session->setCaptchaHash($captcha_value);
$response = $this->endpoint->subscribe([ $response = $this->endpoint->subscribe([
$this->obfuscatedEmail => $email, $this->obfuscatedEmail => $email,
'form_id' => $this->form->id, 'form_id' => $this->form->id,
'captcha_session_id' => $captcha_session_id,
$this->obfuscatedSegments => [$this->segment_1->id, $this->segment_2->id], $this->obfuscatedSegments => [$this->segment_1->id, $this->segment_2->id],
'captcha' => $captcha_value, 'captcha' => $captcha_value,
]); ]);