Use getToken()

[MAILPOET-2340]
This commit is contained in:
Amine Ben hammou
2019-09-19 16:57:34 +01:00
committed by Jack Kitterhing
parent ab63bde9ed
commit 692ff1ed22
13 changed files with 41 additions and 24 deletions

View File

@ -9,6 +9,7 @@ use MailPoet\Models\Subscriber;
use MailPoet\Router\Endpoints\Track;
use MailPoet\Newsletter\Links\Links as NewsletterLinks;
use MailPoet\Models\NewsletterLink as NewsletterLinkModel;
use MailPoet\Subscribers\LinkTokens;
class Links {
static function process($rendered_newsletter, $newsletter, $queue) {
@ -45,9 +46,10 @@ class Links {
if (!$link_hash instanceof NewsletterLinkModel) {
return '';
}
$link_tokens = new LinkTokens;
$data = NewsletterLinks::createUrlDataObject(
$subscriber->id,
$subscriber->getLinkToken(),
$link_tokens->getToken($subscriber),
$queue->id,
$link_hash->hash,
false

View File

@ -3,6 +3,7 @@ namespace MailPoet\Models;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\Util\Helpers;
use function MailPoet\Util\array_column;
use MailPoet\WP\Functions as WPFunctions;
@ -106,15 +107,6 @@ class Subscriber extends Model {
return (bool)$this->is_woocommerce_user;
}
function getLinkToken() {
if ($this->link_token === null) {
$this->link_token = self::generateToken($this->email);
// `$this->save()` fails if the subscriber has subscriptions, segments or custom fields
\ORM::rawExecute(sprintf('UPDATE %s SET link_token = ? WHERE email = ?', self::$_table), [$this->link_token, $this->email]);
}
return $this->link_token;
}
static function getCurrentWPUser() {
$wp_user = WPFunctions::get()->wpGetCurrentUser();
if (empty($wp_user->ID)) {
@ -138,7 +130,7 @@ class Subscriber extends Model {
}
function verifyToken($token) {
$database_token = $this->getLinkToken();
$database_token = (new LinkTokens)->getToken($this);
$request_token = substr($token, 0, strlen($database_token));
return call_user_func(
'hash_equals',

View File

@ -7,6 +7,7 @@ use MailPoet\Newsletter\Shortcodes\Categories\Link;
use MailPoet\Newsletter\Shortcodes\Shortcodes;
use MailPoet\Router\Endpoints\Track as TrackEndpoint;
use MailPoet\Router\Router;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\Util\Helpers;
use MailPoet\Util\Security;
use MailPoet\Util\pQuery\pQuery as DomParser;
@ -134,9 +135,10 @@ class Links {
if (preg_match('/-/', $match)) {
list(, $hash) = explode('-', $match);
}
$link_tokens = new LinkTokens;
$data = self::createUrlDataObject(
$subscriber->id,
$subscriber->getLinkToken(),
$link_tokens->getToken($subscriber),
$queue_id,
$hash,
$preview

View File

@ -4,6 +4,7 @@ namespace MailPoet\Newsletter;
use MailPoet\Router\Router;
use MailPoet\Router\Endpoints\ViewInBrowser as ViewInBrowserEndpoint;
use MailPoet\Models\Subscriber as SubscriberModel;
use MailPoet\Subscribers\LinkTokens;
class Url {
const TYPE_ARCHIVE = 'display_archive';
@ -16,8 +17,9 @@ class Url {
$queue = false,
$preview = false
) {
$link_tokens = new LinkTokens;
if ($subscriber instanceof SubscriberModel) {
$subscriber->token = $subscriber->getLinkToken();
$subscriber->token = $link_tokens->getToken($subscriber);
}
switch ($type) {
case self::TYPE_ARCHIVE:

View File

@ -18,7 +18,7 @@ class LinkTokens {
}
function verifyToken(Subscriber $subscriber, $token) {
$database_token = $subscriber->getLinkToken();
$database_token = $this->getToken($subscriber);
$request_token = substr($token, 0, strlen($database_token));
return call_user_func(
'hash_equals',

View File

@ -13,6 +13,7 @@ use MailPoet\Util\Helpers;
use MailPoet\Util\Url as UrlHelper;
use MailPoet\Form\Renderer as FormRenderer;
use MailPoet\Form\Block\Date as FormBlockDate;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\WP\Functions as WPFunctions;
class Pages {
@ -44,13 +45,17 @@ class Pages {
/** @var WelcomeScheduler */
private $welcome_scheduler;
/** @var LinkTokens */
private $link_tokens;
function __construct(
NewSubscriberNotificationMailer $new_subscriber_notification_sender,
WPFunctions $wp,
SettingsController $settings,
UrlHelper $url_helper,
CaptchaRenderer $captcha_renderer,
WelcomeScheduler $welcome_scheduler
WelcomeScheduler $welcome_scheduler,
LinkTokens $link_tokens
) {
$this->wp = $wp;
$this->new_subscriber_notification_sender = $new_subscriber_notification_sender;
@ -58,6 +63,7 @@ class Pages {
$this->url_helper = $url_helper;
$this->captcha_renderer = $captcha_renderer;
$this->welcome_scheduler = $welcome_scheduler;
$this->link_tokens = $link_tokens;
}
function init($action = false, $data = [], $init_shortcodes = false, $init_page_filters = false) {
@ -438,7 +444,7 @@ class Pages {
$subscriber->email .
'" />';
$form_html .= '<input type="hidden" name="token" value="' .
$subscriber->getLinkToken() .
$this->link_tokens->getToken($subscriber) .
'" />';
$form_html .= '<p class="mailpoet_paragraph">';

View File

@ -6,6 +6,7 @@ use MailPoet\Router\Endpoints\Subscription as SubscriptionEndpoint;
use MailPoet\Models\Subscriber;
use MailPoet\Settings\Pages as SettingsPages;
use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\WP\Functions as WPFunctions;
class Url {
@ -43,10 +44,10 @@ class Url {
if ($post === null || $action === null) return;
$url = WPFunctions::get()->getPermalink($post);
$link_tokens = new LinkTokens;
if ($subscriber !== null) {
$data = [
'token' => $subscriber->getLinkToken(),
'token' => $link_tokens->getToken($subscriber),
'email' => $subscriber->email,
];
} elseif (is_null($data)) {

View File

@ -31,6 +31,7 @@ use MailPoet\Referrals\ReferralDetector;
use MailPoet\Router\Endpoints\Track;
use MailPoet\Router\Router;
use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\Subscription\Captcha;
use MailPoet\Subscription\Url;
use MailPoet\Tasks\Sending as SendingTask;
@ -100,9 +101,10 @@ class SendingQueueTest extends \MailPoetTest {
}
private function getTrackedUnsubscribeURL() {
$link_tokens = new LinkTokens;
$data = Links::createUrlDataObject(
$this->subscriber->id,
$this->subscriber->getLinkToken(),
$link_tokens->getToken($this->subscriber),
$this->queue->id,
$this->newsletter_link->hash,
false

View File

@ -12,6 +12,7 @@ use MailPoet\Router\Endpoints\Track;
use MailPoet\Settings\SettingsController;
use MailPoet\Statistics\Track\Clicks;
use MailPoet\Statistics\Track\Opens;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\Util\Cookies;
@ -41,12 +42,13 @@ class TrackTest extends \MailPoetTest {
$link->newsletter_id = $newsletter->id;
$link->queue_id = $queue->id;
$this->link = $link->save();
$link_tokens = new LinkTokens;
// build track data
$this->track_data = [
'queue_id' => $queue->id,
'subscriber_id' => $subscriber->id,
'newsletter_id' => $newsletter->id,
'subscriber_token' => $subscriber->getLinkToken(),
'subscriber_token' => $link_tokens->getToken($subscriber),
'link_hash' => $link->hash,
'preview' => false,
];

View File

@ -11,6 +11,7 @@ use MailPoet\Models\SendingQueue;
use MailPoet\Models\Subscriber;
use MailPoet\Router\Endpoints\ViewInBrowser;
use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\WP\Functions;
@ -33,12 +34,13 @@ class ViewInBrowserTest extends \MailPoetTest {
$queue->setSubscribers([$subscriber->id]);
$queue->updateProcessedSubscribers([$subscriber->id]);
$this->queue = $queue->save();
$link_tokens = new LinkTokens;
// build browser preview data
$this->browser_preview_data = [
'queue_id' => $queue->id,
'subscriber_id' => $subscriber->id,
'newsletter_id' => $newsletter->id,
'subscriber_token' => $subscriber->getLinkToken(),
'subscriber_token' => $link_tokens->getToken($subscriber),
'preview' => false,
];
// instantiate class

View File

@ -12,6 +12,7 @@ use MailPoet\Models\StatisticsOpens;
use MailPoet\Models\Subscriber;
use MailPoet\Settings\SettingsController;
use MailPoet\Statistics\Track\Clicks;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\Util\Cookies;
@ -48,12 +49,13 @@ class ClicksTest extends \MailPoetTest {
$link->newsletter_id = $newsletter->id;
$link->queue_id = $queue->id;
$this->link = $link->save();
$link_tokens = new LinkTokens;
// build track data
$this->track_data = (object)[
'queue' => $queue,
'subscriber' => $subscriber,
'newsletter' => $newsletter,
'subscriber_token' => $subscriber->getLinkToken(),
'subscriber_token' => $link_tokens->getToken($subscriber),
'link' => $link,
'preview' => false,
];

View File

@ -9,6 +9,7 @@ use MailPoet\Models\SendingQueue;
use MailPoet\Models\StatisticsOpens;
use MailPoet\Models\Subscriber;
use MailPoet\Statistics\Track\Opens;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\Tasks\Sending as SendingTask;
class OpensTest extends \MailPoetTest {
@ -30,12 +31,13 @@ class OpensTest extends \MailPoetTest {
$queue->setSubscribers([$subscriber->id]);
$queue->updateProcessedSubscribers([$subscriber->id]);
$this->queue = $queue->save();
$link_tokens = new LinkTokens;
// build track data
$this->track_data = (object)[
'queue' => $queue,
'subscriber' => $subscriber,
'newsletter' => $newsletter,
'subscriber_token' => $subscriber->getLinkToken(),
'subscriber_token' => $link_tokens->getToken($subscriber),
'preview' => false,
];
// instantiate class

View File

@ -12,6 +12,7 @@ use MailPoet\Models\Segment;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberSegment;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\Subscribers\NewSubscriberNotificationMailer;
use MailPoet\Subscription\Pages;
@ -28,9 +29,10 @@ class PagesTest extends \MailPoetTest {
$this->subscriber->hydrate(Fixtures::get('subscriber_template'));
$this->subscriber->status = Subscriber::STATUS_UNCONFIRMED;
$this->subscriber->save();
$link_tokens = new LinkTokens;
expect($this->subscriber->getErrors())->false();
$this->test_data['email'] = $this->subscriber->email;
$this->test_data['token'] = $this->subscriber->getLinkToken();
$this->test_data['token'] = $link_tokens->getToken($this->subscriber);
$this->pages = ContainerWrapper::getInstance()->get(Pages::class);
}