Use getToken()
[MAILPOET-2340]
This commit is contained in:
committed by
Jack Kitterhing
parent
ab63bde9ed
commit
692ff1ed22
@ -9,6 +9,7 @@ use MailPoet\Models\Subscriber;
|
|||||||
use MailPoet\Router\Endpoints\Track;
|
use MailPoet\Router\Endpoints\Track;
|
||||||
use MailPoet\Newsletter\Links\Links as NewsletterLinks;
|
use MailPoet\Newsletter\Links\Links as NewsletterLinks;
|
||||||
use MailPoet\Models\NewsletterLink as NewsletterLinkModel;
|
use MailPoet\Models\NewsletterLink as NewsletterLinkModel;
|
||||||
|
use MailPoet\Subscribers\LinkTokens;
|
||||||
|
|
||||||
class Links {
|
class Links {
|
||||||
static function process($rendered_newsletter, $newsletter, $queue) {
|
static function process($rendered_newsletter, $newsletter, $queue) {
|
||||||
@ -45,9 +46,10 @@ class Links {
|
|||||||
if (!$link_hash instanceof NewsletterLinkModel) {
|
if (!$link_hash instanceof NewsletterLinkModel) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
$link_tokens = new LinkTokens;
|
||||||
$data = NewsletterLinks::createUrlDataObject(
|
$data = NewsletterLinks::createUrlDataObject(
|
||||||
$subscriber->id,
|
$subscriber->id,
|
||||||
$subscriber->getLinkToken(),
|
$link_tokens->getToken($subscriber),
|
||||||
$queue->id,
|
$queue->id,
|
||||||
$link_hash->hash,
|
$link_hash->hash,
|
||||||
false
|
false
|
||||||
|
@ -3,6 +3,7 @@ namespace MailPoet\Models;
|
|||||||
|
|
||||||
use MailPoet\DI\ContainerWrapper;
|
use MailPoet\DI\ContainerWrapper;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
|
use MailPoet\Subscribers\LinkTokens;
|
||||||
use MailPoet\Util\Helpers;
|
use MailPoet\Util\Helpers;
|
||||||
use function MailPoet\Util\array_column;
|
use function MailPoet\Util\array_column;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
@ -106,15 +107,6 @@ class Subscriber extends Model {
|
|||||||
return (bool)$this->is_woocommerce_user;
|
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() {
|
static function getCurrentWPUser() {
|
||||||
$wp_user = WPFunctions::get()->wpGetCurrentUser();
|
$wp_user = WPFunctions::get()->wpGetCurrentUser();
|
||||||
if (empty($wp_user->ID)) {
|
if (empty($wp_user->ID)) {
|
||||||
@ -138,7 +130,7 @@ class Subscriber extends Model {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function verifyToken($token) {
|
function verifyToken($token) {
|
||||||
$database_token = $this->getLinkToken();
|
$database_token = (new LinkTokens)->getToken($this);
|
||||||
$request_token = substr($token, 0, strlen($database_token));
|
$request_token = substr($token, 0, strlen($database_token));
|
||||||
return call_user_func(
|
return call_user_func(
|
||||||
'hash_equals',
|
'hash_equals',
|
||||||
|
@ -7,6 +7,7 @@ use MailPoet\Newsletter\Shortcodes\Categories\Link;
|
|||||||
use MailPoet\Newsletter\Shortcodes\Shortcodes;
|
use MailPoet\Newsletter\Shortcodes\Shortcodes;
|
||||||
use MailPoet\Router\Endpoints\Track as TrackEndpoint;
|
use MailPoet\Router\Endpoints\Track as TrackEndpoint;
|
||||||
use MailPoet\Router\Router;
|
use MailPoet\Router\Router;
|
||||||
|
use MailPoet\Subscribers\LinkTokens;
|
||||||
use MailPoet\Util\Helpers;
|
use MailPoet\Util\Helpers;
|
||||||
use MailPoet\Util\Security;
|
use MailPoet\Util\Security;
|
||||||
use MailPoet\Util\pQuery\pQuery as DomParser;
|
use MailPoet\Util\pQuery\pQuery as DomParser;
|
||||||
@ -134,9 +135,10 @@ class Links {
|
|||||||
if (preg_match('/-/', $match)) {
|
if (preg_match('/-/', $match)) {
|
||||||
list(, $hash) = explode('-', $match);
|
list(, $hash) = explode('-', $match);
|
||||||
}
|
}
|
||||||
|
$link_tokens = new LinkTokens;
|
||||||
$data = self::createUrlDataObject(
|
$data = self::createUrlDataObject(
|
||||||
$subscriber->id,
|
$subscriber->id,
|
||||||
$subscriber->getLinkToken(),
|
$link_tokens->getToken($subscriber),
|
||||||
$queue_id,
|
$queue_id,
|
||||||
$hash,
|
$hash,
|
||||||
$preview
|
$preview
|
||||||
|
@ -4,6 +4,7 @@ namespace MailPoet\Newsletter;
|
|||||||
use MailPoet\Router\Router;
|
use MailPoet\Router\Router;
|
||||||
use MailPoet\Router\Endpoints\ViewInBrowser as ViewInBrowserEndpoint;
|
use MailPoet\Router\Endpoints\ViewInBrowser as ViewInBrowserEndpoint;
|
||||||
use MailPoet\Models\Subscriber as SubscriberModel;
|
use MailPoet\Models\Subscriber as SubscriberModel;
|
||||||
|
use MailPoet\Subscribers\LinkTokens;
|
||||||
|
|
||||||
class Url {
|
class Url {
|
||||||
const TYPE_ARCHIVE = 'display_archive';
|
const TYPE_ARCHIVE = 'display_archive';
|
||||||
@ -16,8 +17,9 @@ class Url {
|
|||||||
$queue = false,
|
$queue = false,
|
||||||
$preview = false
|
$preview = false
|
||||||
) {
|
) {
|
||||||
|
$link_tokens = new LinkTokens;
|
||||||
if ($subscriber instanceof SubscriberModel) {
|
if ($subscriber instanceof SubscriberModel) {
|
||||||
$subscriber->token = $subscriber->getLinkToken();
|
$subscriber->token = $link_tokens->getToken($subscriber);
|
||||||
}
|
}
|
||||||
switch ($type) {
|
switch ($type) {
|
||||||
case self::TYPE_ARCHIVE:
|
case self::TYPE_ARCHIVE:
|
||||||
|
@ -18,7 +18,7 @@ class LinkTokens {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function verifyToken(Subscriber $subscriber, $token) {
|
function verifyToken(Subscriber $subscriber, $token) {
|
||||||
$database_token = $subscriber->getLinkToken();
|
$database_token = $this->getToken($subscriber);
|
||||||
$request_token = substr($token, 0, strlen($database_token));
|
$request_token = substr($token, 0, strlen($database_token));
|
||||||
return call_user_func(
|
return call_user_func(
|
||||||
'hash_equals',
|
'hash_equals',
|
||||||
|
@ -13,6 +13,7 @@ use MailPoet\Util\Helpers;
|
|||||||
use MailPoet\Util\Url as UrlHelper;
|
use MailPoet\Util\Url as UrlHelper;
|
||||||
use MailPoet\Form\Renderer as FormRenderer;
|
use MailPoet\Form\Renderer as FormRenderer;
|
||||||
use MailPoet\Form\Block\Date as FormBlockDate;
|
use MailPoet\Form\Block\Date as FormBlockDate;
|
||||||
|
use MailPoet\Subscribers\LinkTokens;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
class Pages {
|
class Pages {
|
||||||
@ -44,13 +45,17 @@ class Pages {
|
|||||||
/** @var WelcomeScheduler */
|
/** @var WelcomeScheduler */
|
||||||
private $welcome_scheduler;
|
private $welcome_scheduler;
|
||||||
|
|
||||||
|
/** @var LinkTokens */
|
||||||
|
private $link_tokens;
|
||||||
|
|
||||||
function __construct(
|
function __construct(
|
||||||
NewSubscriberNotificationMailer $new_subscriber_notification_sender,
|
NewSubscriberNotificationMailer $new_subscriber_notification_sender,
|
||||||
WPFunctions $wp,
|
WPFunctions $wp,
|
||||||
SettingsController $settings,
|
SettingsController $settings,
|
||||||
UrlHelper $url_helper,
|
UrlHelper $url_helper,
|
||||||
CaptchaRenderer $captcha_renderer,
|
CaptchaRenderer $captcha_renderer,
|
||||||
WelcomeScheduler $welcome_scheduler
|
WelcomeScheduler $welcome_scheduler,
|
||||||
|
LinkTokens $link_tokens
|
||||||
) {
|
) {
|
||||||
$this->wp = $wp;
|
$this->wp = $wp;
|
||||||
$this->new_subscriber_notification_sender = $new_subscriber_notification_sender;
|
$this->new_subscriber_notification_sender = $new_subscriber_notification_sender;
|
||||||
@ -58,6 +63,7 @@ class Pages {
|
|||||||
$this->url_helper = $url_helper;
|
$this->url_helper = $url_helper;
|
||||||
$this->captcha_renderer = $captcha_renderer;
|
$this->captcha_renderer = $captcha_renderer;
|
||||||
$this->welcome_scheduler = $welcome_scheduler;
|
$this->welcome_scheduler = $welcome_scheduler;
|
||||||
|
$this->link_tokens = $link_tokens;
|
||||||
}
|
}
|
||||||
|
|
||||||
function init($action = false, $data = [], $init_shortcodes = false, $init_page_filters = false) {
|
function init($action = false, $data = [], $init_shortcodes = false, $init_page_filters = false) {
|
||||||
@ -438,7 +444,7 @@ class Pages {
|
|||||||
$subscriber->email .
|
$subscriber->email .
|
||||||
'" />';
|
'" />';
|
||||||
$form_html .= '<input type="hidden" name="token" value="' .
|
$form_html .= '<input type="hidden" name="token" value="' .
|
||||||
$subscriber->getLinkToken() .
|
$this->link_tokens->getToken($subscriber) .
|
||||||
'" />';
|
'" />';
|
||||||
|
|
||||||
$form_html .= '<p class="mailpoet_paragraph">';
|
$form_html .= '<p class="mailpoet_paragraph">';
|
||||||
|
@ -6,6 +6,7 @@ use MailPoet\Router\Endpoints\Subscription as SubscriptionEndpoint;
|
|||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
use MailPoet\Settings\Pages as SettingsPages;
|
use MailPoet\Settings\Pages as SettingsPages;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
|
use MailPoet\Subscribers\LinkTokens;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
class Url {
|
class Url {
|
||||||
@ -43,10 +44,10 @@ class Url {
|
|||||||
if ($post === null || $action === null) return;
|
if ($post === null || $action === null) return;
|
||||||
|
|
||||||
$url = WPFunctions::get()->getPermalink($post);
|
$url = WPFunctions::get()->getPermalink($post);
|
||||||
|
$link_tokens = new LinkTokens;
|
||||||
if ($subscriber !== null) {
|
if ($subscriber !== null) {
|
||||||
$data = [
|
$data = [
|
||||||
'token' => $subscriber->getLinkToken(),
|
'token' => $link_tokens->getToken($subscriber),
|
||||||
'email' => $subscriber->email,
|
'email' => $subscriber->email,
|
||||||
];
|
];
|
||||||
} elseif (is_null($data)) {
|
} elseif (is_null($data)) {
|
||||||
|
@ -31,6 +31,7 @@ use MailPoet\Referrals\ReferralDetector;
|
|||||||
use MailPoet\Router\Endpoints\Track;
|
use MailPoet\Router\Endpoints\Track;
|
||||||
use MailPoet\Router\Router;
|
use MailPoet\Router\Router;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
|
use MailPoet\Subscribers\LinkTokens;
|
||||||
use MailPoet\Subscription\Captcha;
|
use MailPoet\Subscription\Captcha;
|
||||||
use MailPoet\Subscription\Url;
|
use MailPoet\Subscription\Url;
|
||||||
use MailPoet\Tasks\Sending as SendingTask;
|
use MailPoet\Tasks\Sending as SendingTask;
|
||||||
@ -100,9 +101,10 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function getTrackedUnsubscribeURL() {
|
private function getTrackedUnsubscribeURL() {
|
||||||
|
$link_tokens = new LinkTokens;
|
||||||
$data = Links::createUrlDataObject(
|
$data = Links::createUrlDataObject(
|
||||||
$this->subscriber->id,
|
$this->subscriber->id,
|
||||||
$this->subscriber->getLinkToken(),
|
$link_tokens->getToken($this->subscriber),
|
||||||
$this->queue->id,
|
$this->queue->id,
|
||||||
$this->newsletter_link->hash,
|
$this->newsletter_link->hash,
|
||||||
false
|
false
|
||||||
|
@ -12,6 +12,7 @@ use MailPoet\Router\Endpoints\Track;
|
|||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
use MailPoet\Statistics\Track\Clicks;
|
use MailPoet\Statistics\Track\Clicks;
|
||||||
use MailPoet\Statistics\Track\Opens;
|
use MailPoet\Statistics\Track\Opens;
|
||||||
|
use MailPoet\Subscribers\LinkTokens;
|
||||||
use MailPoet\Tasks\Sending as SendingTask;
|
use MailPoet\Tasks\Sending as SendingTask;
|
||||||
use MailPoet\Util\Cookies;
|
use MailPoet\Util\Cookies;
|
||||||
|
|
||||||
@ -41,12 +42,13 @@ class TrackTest extends \MailPoetTest {
|
|||||||
$link->newsletter_id = $newsletter->id;
|
$link->newsletter_id = $newsletter->id;
|
||||||
$link->queue_id = $queue->id;
|
$link->queue_id = $queue->id;
|
||||||
$this->link = $link->save();
|
$this->link = $link->save();
|
||||||
|
$link_tokens = new LinkTokens;
|
||||||
// build track data
|
// build track data
|
||||||
$this->track_data = [
|
$this->track_data = [
|
||||||
'queue_id' => $queue->id,
|
'queue_id' => $queue->id,
|
||||||
'subscriber_id' => $subscriber->id,
|
'subscriber_id' => $subscriber->id,
|
||||||
'newsletter_id' => $newsletter->id,
|
'newsletter_id' => $newsletter->id,
|
||||||
'subscriber_token' => $subscriber->getLinkToken(),
|
'subscriber_token' => $link_tokens->getToken($subscriber),
|
||||||
'link_hash' => $link->hash,
|
'link_hash' => $link->hash,
|
||||||
'preview' => false,
|
'preview' => false,
|
||||||
];
|
];
|
||||||
|
@ -11,6 +11,7 @@ use MailPoet\Models\SendingQueue;
|
|||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
use MailPoet\Router\Endpoints\ViewInBrowser;
|
use MailPoet\Router\Endpoints\ViewInBrowser;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
|
use MailPoet\Subscribers\LinkTokens;
|
||||||
use MailPoet\Tasks\Sending as SendingTask;
|
use MailPoet\Tasks\Sending as SendingTask;
|
||||||
use MailPoet\WP\Functions;
|
use MailPoet\WP\Functions;
|
||||||
|
|
||||||
@ -33,12 +34,13 @@ class ViewInBrowserTest extends \MailPoetTest {
|
|||||||
$queue->setSubscribers([$subscriber->id]);
|
$queue->setSubscribers([$subscriber->id]);
|
||||||
$queue->updateProcessedSubscribers([$subscriber->id]);
|
$queue->updateProcessedSubscribers([$subscriber->id]);
|
||||||
$this->queue = $queue->save();
|
$this->queue = $queue->save();
|
||||||
|
$link_tokens = new LinkTokens;
|
||||||
// build browser preview data
|
// build browser preview data
|
||||||
$this->browser_preview_data = [
|
$this->browser_preview_data = [
|
||||||
'queue_id' => $queue->id,
|
'queue_id' => $queue->id,
|
||||||
'subscriber_id' => $subscriber->id,
|
'subscriber_id' => $subscriber->id,
|
||||||
'newsletter_id' => $newsletter->id,
|
'newsletter_id' => $newsletter->id,
|
||||||
'subscriber_token' => $subscriber->getLinkToken(),
|
'subscriber_token' => $link_tokens->getToken($subscriber),
|
||||||
'preview' => false,
|
'preview' => false,
|
||||||
];
|
];
|
||||||
// instantiate class
|
// instantiate class
|
||||||
|
@ -12,6 +12,7 @@ use MailPoet\Models\StatisticsOpens;
|
|||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
use MailPoet\Statistics\Track\Clicks;
|
use MailPoet\Statistics\Track\Clicks;
|
||||||
|
use MailPoet\Subscribers\LinkTokens;
|
||||||
use MailPoet\Tasks\Sending as SendingTask;
|
use MailPoet\Tasks\Sending as SendingTask;
|
||||||
use MailPoet\Util\Cookies;
|
use MailPoet\Util\Cookies;
|
||||||
|
|
||||||
@ -48,12 +49,13 @@ class ClicksTest extends \MailPoetTest {
|
|||||||
$link->newsletter_id = $newsletter->id;
|
$link->newsletter_id = $newsletter->id;
|
||||||
$link->queue_id = $queue->id;
|
$link->queue_id = $queue->id;
|
||||||
$this->link = $link->save();
|
$this->link = $link->save();
|
||||||
|
$link_tokens = new LinkTokens;
|
||||||
// build track data
|
// build track data
|
||||||
$this->track_data = (object)[
|
$this->track_data = (object)[
|
||||||
'queue' => $queue,
|
'queue' => $queue,
|
||||||
'subscriber' => $subscriber,
|
'subscriber' => $subscriber,
|
||||||
'newsletter' => $newsletter,
|
'newsletter' => $newsletter,
|
||||||
'subscriber_token' => $subscriber->getLinkToken(),
|
'subscriber_token' => $link_tokens->getToken($subscriber),
|
||||||
'link' => $link,
|
'link' => $link,
|
||||||
'preview' => false,
|
'preview' => false,
|
||||||
];
|
];
|
||||||
|
@ -9,6 +9,7 @@ use MailPoet\Models\SendingQueue;
|
|||||||
use MailPoet\Models\StatisticsOpens;
|
use MailPoet\Models\StatisticsOpens;
|
||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
use MailPoet\Statistics\Track\Opens;
|
use MailPoet\Statistics\Track\Opens;
|
||||||
|
use MailPoet\Subscribers\LinkTokens;
|
||||||
use MailPoet\Tasks\Sending as SendingTask;
|
use MailPoet\Tasks\Sending as SendingTask;
|
||||||
|
|
||||||
class OpensTest extends \MailPoetTest {
|
class OpensTest extends \MailPoetTest {
|
||||||
@ -30,12 +31,13 @@ class OpensTest extends \MailPoetTest {
|
|||||||
$queue->setSubscribers([$subscriber->id]);
|
$queue->setSubscribers([$subscriber->id]);
|
||||||
$queue->updateProcessedSubscribers([$subscriber->id]);
|
$queue->updateProcessedSubscribers([$subscriber->id]);
|
||||||
$this->queue = $queue->save();
|
$this->queue = $queue->save();
|
||||||
|
$link_tokens = new LinkTokens;
|
||||||
// build track data
|
// build track data
|
||||||
$this->track_data = (object)[
|
$this->track_data = (object)[
|
||||||
'queue' => $queue,
|
'queue' => $queue,
|
||||||
'subscriber' => $subscriber,
|
'subscriber' => $subscriber,
|
||||||
'newsletter' => $newsletter,
|
'newsletter' => $newsletter,
|
||||||
'subscriber_token' => $subscriber->getLinkToken(),
|
'subscriber_token' => $link_tokens->getToken($subscriber),
|
||||||
'preview' => false,
|
'preview' => false,
|
||||||
];
|
];
|
||||||
// instantiate class
|
// instantiate class
|
||||||
|
@ -12,6 +12,7 @@ use MailPoet\Models\Segment;
|
|||||||
use MailPoet\Models\SendingQueue;
|
use MailPoet\Models\SendingQueue;
|
||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
use MailPoet\Models\SubscriberSegment;
|
use MailPoet\Models\SubscriberSegment;
|
||||||
|
use MailPoet\Subscribers\LinkTokens;
|
||||||
use MailPoet\Subscribers\NewSubscriberNotificationMailer;
|
use MailPoet\Subscribers\NewSubscriberNotificationMailer;
|
||||||
use MailPoet\Subscription\Pages;
|
use MailPoet\Subscription\Pages;
|
||||||
|
|
||||||
@ -28,9 +29,10 @@ class PagesTest extends \MailPoetTest {
|
|||||||
$this->subscriber->hydrate(Fixtures::get('subscriber_template'));
|
$this->subscriber->hydrate(Fixtures::get('subscriber_template'));
|
||||||
$this->subscriber->status = Subscriber::STATUS_UNCONFIRMED;
|
$this->subscriber->status = Subscriber::STATUS_UNCONFIRMED;
|
||||||
$this->subscriber->save();
|
$this->subscriber->save();
|
||||||
|
$link_tokens = new LinkTokens;
|
||||||
expect($this->subscriber->getErrors())->false();
|
expect($this->subscriber->getErrors())->false();
|
||||||
$this->test_data['email'] = $this->subscriber->email;
|
$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);
|
$this->pages = ContainerWrapper::getInstance()->get(Pages::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user