Use controller over service to get authorized emails
A preliminary step to enable caching authorized emails data from the API
This commit is contained in:
committed by
Aschepikov
parent
32cd4c36dd
commit
73e8ad717d
@@ -92,7 +92,7 @@ class Mailer extends APIEndpoint {
|
||||
}
|
||||
|
||||
public function getAuthorizedEmailAddresses() {
|
||||
$authorizedEmails = $this->bridge->getAuthorizedEmailAddresses();
|
||||
$authorizedEmails = $this->authorizedEmailsController->getAuthorizedEmailAddresses();
|
||||
return $this->successResponse($authorizedEmails);
|
||||
}
|
||||
|
||||
|
@@ -12,6 +12,7 @@ use MailPoet\Config\ServicesChecker;
|
||||
use MailPoet\Cron\Workers\KeyCheck\PremiumKeyCheck;
|
||||
use MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck;
|
||||
use MailPoet\Mailer\MailerLog;
|
||||
use MailPoet\Services\AuthorizedEmailsController;
|
||||
use MailPoet\Services\AuthorizedSenderDomainController;
|
||||
use MailPoet\Services\Bridge;
|
||||
use MailPoet\Services\CongratulatoryMssEmailController;
|
||||
@@ -52,6 +53,9 @@ class Services extends APIEndpoint {
|
||||
/** @var AuthorizedSenderDomainController */
|
||||
private $senderDomainController;
|
||||
|
||||
/** @var AuthorizedEmailsController */
|
||||
private $authorizedEmailsController;
|
||||
|
||||
/** @var SubscribersCountReporter */
|
||||
private $subscribersCountReporter;
|
||||
|
||||
@@ -70,7 +74,8 @@ class Services extends APIEndpoint {
|
||||
SubscribersCountReporter $subscribersCountReporter,
|
||||
CongratulatoryMssEmailController $congratulatoryMssEmailController,
|
||||
WPFunctions $wp,
|
||||
AuthorizedSenderDomainController $senderDomainController
|
||||
AuthorizedSenderDomainController $senderDomainController,
|
||||
AuthorizedEmailsController $authorizedEmailsController
|
||||
) {
|
||||
$this->bridge = $bridge;
|
||||
$this->settings = $settings;
|
||||
@@ -83,6 +88,7 @@ class Services extends APIEndpoint {
|
||||
$this->congratulatoryMssEmailController = $congratulatoryMssEmailController;
|
||||
$this->wp = $wp;
|
||||
$this->senderDomainController = $senderDomainController;
|
||||
$this->authorizedEmailsController = $authorizedEmailsController;
|
||||
}
|
||||
|
||||
public function checkMSSKey($data = []) {
|
||||
@@ -266,7 +272,7 @@ class Services extends APIEndpoint {
|
||||
$emailDomain = Helpers::extractEmailDomain($fromEmail);
|
||||
|
||||
if (!$this->isItemInArray($emailDomain, $verifiedDomains)) {
|
||||
$authorizedEmails = $this->bridge->getAuthorizedEmailAddresses();
|
||||
$authorizedEmails = $this->authorizedEmailsController->getAuthorizedEmailAddresses();
|
||||
|
||||
if (!$authorizedEmails) {
|
||||
return $this->createBadRequest(__('No FROM email addresses are authorized.', 'mailpoet'));
|
||||
|
@@ -13,6 +13,7 @@ use MailPoet\Newsletter\NewslettersRepository;
|
||||
use MailPoet\NewsletterTemplates\NewsletterTemplatesRepository;
|
||||
use MailPoet\Segments\SegmentsSimpleListRepository;
|
||||
use MailPoet\Segments\WooCommerce;
|
||||
use MailPoet\Services\AuthorizedEmailsController;
|
||||
use MailPoet\Services\AuthorizedSenderDomainController;
|
||||
use MailPoet\Services\Bridge;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
@@ -46,6 +47,8 @@ class Newsletters {
|
||||
|
||||
private AuthorizedSenderDomainController $senderDomainController;
|
||||
|
||||
private AuthorizedEmailsController $authorizedEmailsController;
|
||||
|
||||
private UserFlagsController $userFlagsController;
|
||||
|
||||
private WooCommerce $wooCommerceSegment;
|
||||
@@ -64,6 +67,7 @@ class Newsletters {
|
||||
NewslettersRepository $newslettersRepository,
|
||||
Bridge $bridge,
|
||||
AuthorizedSenderDomainController $senderDomainController,
|
||||
AuthorizedEmailsController $authorizedEmailsController,
|
||||
UserFlagsController $userFlagsController,
|
||||
WooCommerce $wooCommerceSegment,
|
||||
CapabilitiesManager $capabilitiesManager
|
||||
@@ -79,6 +83,7 @@ class Newsletters {
|
||||
$this->newslettersRepository = $newslettersRepository;
|
||||
$this->bridge = $bridge;
|
||||
$this->senderDomainController = $senderDomainController;
|
||||
$this->authorizedEmailsController = $authorizedEmailsController;
|
||||
$this->userFlagsController = $userFlagsController;
|
||||
$this->wooCommerceSegment = $wooCommerceSegment;
|
||||
$this->capabilitiesManager = $capabilitiesManager;
|
||||
@@ -136,7 +141,7 @@ class Newsletters {
|
||||
$data['sender_restrictions'] = [];
|
||||
|
||||
if ($this->bridge->isMailpoetSendingServiceEnabled()) {
|
||||
$data['authorized_emails'] = $this->bridge->getAuthorizedEmailAddresses();
|
||||
$data['authorized_emails'] = $this->authorizedEmailsController->getAuthorizedEmailAddresses();
|
||||
$data['verified_sender_domains'] = $this->senderDomainController->getFullyVerifiedSenderDomains(true);
|
||||
$data['partially_verified_sender_domains'] = $this->senderDomainController->getPartiallyVerifiedSenderDomains(true);
|
||||
$data['all_sender_domains'] = $this->senderDomainController->getAllSenderDomains();
|
||||
|
@@ -7,6 +7,7 @@ use MailPoet\AdminPages\PageRenderer;
|
||||
use MailPoet\Config\Installer;
|
||||
use MailPoet\Config\ServicesChecker;
|
||||
use MailPoet\Segments\SegmentsSimpleListRepository;
|
||||
use MailPoet\Services\AuthorizedEmailsController;
|
||||
use MailPoet\Services\AuthorizedSenderDomainController;
|
||||
use MailPoet\Services\Bridge;
|
||||
use MailPoet\Settings\Hosts;
|
||||
@@ -41,6 +42,9 @@ class Settings {
|
||||
/** @var AuthorizedSenderDomainController */
|
||||
private $senderDomainController;
|
||||
|
||||
/** @var AuthorizedEmailsController */
|
||||
private $authorizedEmailsController;
|
||||
|
||||
/** @var AssetsController */
|
||||
private $assetsController;
|
||||
|
||||
@@ -53,7 +57,8 @@ class Settings {
|
||||
CaptchaRenderer $captchaRenderer,
|
||||
SegmentsSimpleListRepository $segmentsListRepository,
|
||||
Bridge $bridge,
|
||||
AuthorizedSenderDomainController $senderDomainController
|
||||
AuthorizedSenderDomainController $senderDomainController,
|
||||
AuthorizedEmailsController $authorizedEmailsController
|
||||
) {
|
||||
$this->assetsController = $assetsController;
|
||||
$this->pageRenderer = $pageRenderer;
|
||||
@@ -64,6 +69,7 @@ class Settings {
|
||||
$this->segmentsListRepository = $segmentsListRepository;
|
||||
$this->bridge = $bridge;
|
||||
$this->senderDomainController = $senderDomainController;
|
||||
$this->authorizedEmailsController = $authorizedEmailsController;
|
||||
}
|
||||
|
||||
public function render() {
|
||||
@@ -100,7 +106,7 @@ class Settings {
|
||||
$data['sender_restrictions'] = [];
|
||||
|
||||
if ($this->bridge->isMailpoetSendingServiceEnabled()) {
|
||||
$data['authorized_emails'] = $this->bridge->getAuthorizedEmailAddresses();
|
||||
$data['authorized_emails'] = $this->authorizedEmailsController->getAuthorizedEmailAddresses();
|
||||
$data['verified_sender_domains'] = $this->senderDomainController->getFullyVerifiedSenderDomains(true);
|
||||
$data['partially_verified_sender_domains'] = $this->senderDomainController->getPartiallyVerifiedSenderDomains(true);
|
||||
$data['all_sender_domains'] = $this->senderDomainController->getAllSenderDomains();
|
||||
|
@@ -4,6 +4,7 @@ namespace MailPoet\Automation\Integrations\MailPoet;
|
||||
|
||||
use MailPoet\Config\ServicesChecker;
|
||||
use MailPoet\Segments\SegmentsRepository;
|
||||
use MailPoet\Services\AuthorizedEmailsController;
|
||||
use MailPoet\Services\AuthorizedSenderDomainController;
|
||||
use MailPoet\Services\Bridge;
|
||||
|
||||
@@ -20,16 +21,21 @@ class ContextFactory {
|
||||
/** @var AuthorizedSenderDomainController */
|
||||
private $authorizedSenderDomainController;
|
||||
|
||||
/** @var AuthorizedEmailsController */
|
||||
private $authorizedEmailsController;
|
||||
|
||||
public function __construct(
|
||||
SegmentsRepository $segmentsRepository,
|
||||
Bridge $bridge,
|
||||
ServicesChecker $servicesChecker,
|
||||
AuthorizedSenderDomainController $authorizedSenderDomainController
|
||||
AuthorizedSenderDomainController $authorizedSenderDomainController,
|
||||
AuthorizedEmailsController $authorizedEmailsController
|
||||
) {
|
||||
$this->segmentsRepository = $segmentsRepository;
|
||||
$this->servicesChecker = $servicesChecker;
|
||||
$this->bridge = $bridge;
|
||||
$this->authorizedSenderDomainController = $authorizedSenderDomainController;
|
||||
$this->authorizedEmailsController = $authorizedEmailsController;
|
||||
}
|
||||
|
||||
/** @return mixed[] */
|
||||
@@ -48,7 +54,7 @@ class ContextFactory {
|
||||
|
||||
private function getSenderDomainsConfig(): array {
|
||||
$senderDomainsConfig = $this->authorizedSenderDomainController->getContextDataForAutomations();
|
||||
$senderDomainsConfig['authorizedEmails'] = $this->bridge->getAuthorizedEmailAddresses();
|
||||
$senderDomainsConfig['authorizedEmails'] = $this->authorizedEmailsController->getAuthorizedEmailAddresses();
|
||||
return $senderDomainsConfig;
|
||||
}
|
||||
|
||||
|
@@ -12,6 +12,7 @@ use MailPoet\Cron\Workers\KeyCheck\PremiumKeyCheck;
|
||||
use MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck;
|
||||
use MailPoet\Mailer\Mailer;
|
||||
use MailPoet\Mailer\MailerLog;
|
||||
use MailPoet\Services\AuthorizedEmailsController;
|
||||
use MailPoet\Services\AuthorizedSenderDomainController;
|
||||
use MailPoet\Services\Bridge;
|
||||
use MailPoet\Services\CongratulatoryMssEmailController;
|
||||
@@ -460,7 +461,7 @@ class ServicesTest extends \MailPoetTest {
|
||||
public function testCongratulatoryEmailIsSent() {
|
||||
$this->settings->set(Mailer::MAILER_CONFIG_SETTING_NAME, ['method' => Mailer::METHOD_MAILPOET]);
|
||||
$this->settings->set('sender.address', 'authorized@email.com');
|
||||
$bridge = $this->make(Bridge::class, [
|
||||
$authorizedEmailsController = $this->make(AuthorizedEmailsController::class, [
|
||||
'getAuthorizedEmailAddresses' => ['authorized@email.com'],
|
||||
]);
|
||||
|
||||
@@ -469,7 +470,7 @@ class ServicesTest extends \MailPoetTest {
|
||||
]);
|
||||
|
||||
$servicesEndpoint = $this->createServicesEndpointWithMocks([
|
||||
'bridge' => $bridge,
|
||||
'authorizedEmailsController' => $authorizedEmailsController,
|
||||
'congratulatoryEmailController' => $congratulatoryEmailController,
|
||||
]);
|
||||
$response = $servicesEndpoint->sendCongratulatoryMssEmail();
|
||||
@@ -488,11 +489,11 @@ class ServicesTest extends \MailPoetTest {
|
||||
public function testCongratulatoryEmailRespondsWithErrorWhenNoEmailAuthorized() {
|
||||
$this->settings->set(Mailer::MAILER_CONFIG_SETTING_NAME, ['method' => Mailer::METHOD_MAILPOET]);
|
||||
$this->settings->set('sender.address', 'unauthorized@email.com');
|
||||
$bridge = $this->make(Bridge::class, [
|
||||
$authorizedEmailsController = $this->make(AuthorizedEmailsController::class, [
|
||||
'getAuthorizedEmailAddresses' => [],
|
||||
]);
|
||||
|
||||
$servicesEndpoint = $this->createServicesEndpointWithMocks(['bridge' => $bridge]);
|
||||
$servicesEndpoint = $this->createServicesEndpointWithMocks(['authorizedEmailsController' => $authorizedEmailsController]);
|
||||
$response = $servicesEndpoint->sendCongratulatoryMssEmail();
|
||||
verify($response->status)->equals(APIResponse::STATUS_BAD_REQUEST);
|
||||
verify($response->errors[0]['message'])->equals('No FROM email addresses are authorized.');
|
||||
@@ -500,7 +501,7 @@ class ServicesTest extends \MailPoetTest {
|
||||
|
||||
public function testCongratulatoryEmailRespondsWithDifferentErrorWhenNoEmailAuthorizedButDomainIsVerified() {
|
||||
$this->settings->set(Mailer::MAILER_CONFIG_SETTING_NAME, ['method' => Mailer::METHOD_MAILPOET]);
|
||||
$bridge = $this->make(Bridge::class, [
|
||||
$authorizedEmailsController = $this->make(AuthorizedEmailsController::class, [
|
||||
'getAuthorizedEmailAddresses' => [],
|
||||
]);
|
||||
|
||||
@@ -510,7 +511,7 @@ class ServicesTest extends \MailPoetTest {
|
||||
]);
|
||||
|
||||
$servicesEndpoint = $this->createServicesEndpointWithMocks([
|
||||
'bridge' => $bridge,
|
||||
'authorizedEmailsController' => $authorizedEmailsController,
|
||||
'senderDomain' => $senderDomainMock,
|
||||
]);
|
||||
$response = $servicesEndpoint->sendCongratulatoryMssEmail();
|
||||
@@ -523,11 +524,11 @@ class ServicesTest extends \MailPoetTest {
|
||||
public function testCongratulatoryEmailRespondsWithErrorWhenNoSenderSet() {
|
||||
$this->settings->set(Mailer::MAILER_CONFIG_SETTING_NAME, ['method' => Mailer::METHOD_MAILPOET]);
|
||||
$this->settings->set('sender.address', null);
|
||||
$bridge = $this->make(Bridge::class, [
|
||||
$authorizedEmailsController = $this->make(AuthorizedEmailsController::class, [
|
||||
'getAuthorizedEmailAddresses' => ['authorized@email.com'],
|
||||
]);
|
||||
|
||||
$servicesEndpoint = $this->createServicesEndpointWithMocks(['bridge' => $bridge]);
|
||||
$servicesEndpoint = $this->createServicesEndpointWithMocks(['authorizedEmailsController' => $authorizedEmailsController]);
|
||||
$response = $servicesEndpoint->sendCongratulatoryMssEmail();
|
||||
verify($response->status)->equals(APIResponse::STATUS_BAD_REQUEST);
|
||||
verify($response->errors[0]['message'])->equals('Sender email address is not set.');
|
||||
@@ -536,11 +537,11 @@ class ServicesTest extends \MailPoetTest {
|
||||
public function testCongratulatoryEmailRespondsWithErrorWhenSenderNotAuthorized() {
|
||||
$this->settings->set(Mailer::MAILER_CONFIG_SETTING_NAME, ['method' => Mailer::METHOD_MAILPOET]);
|
||||
$this->settings->set('sender.address', 'unauthorized@email.com');
|
||||
$bridge = $this->make(Bridge::class, [
|
||||
$authorizedEmailsController = $this->make(AuthorizedEmailsController::class, [
|
||||
'getAuthorizedEmailAddresses' => ['authorized@email.com'],
|
||||
]);
|
||||
|
||||
$servicesEndpoint = $this->createServicesEndpointWithMocks(['bridge' => $bridge]);
|
||||
$servicesEndpoint = $this->createServicesEndpointWithMocks(['authorizedEmailsController' => $authorizedEmailsController]);
|
||||
$response = $servicesEndpoint->sendCongratulatoryMssEmail();
|
||||
verify($response->status)->equals(APIResponse::STATUS_BAD_REQUEST);
|
||||
verify($response->errors[0]['message'])->equals("Sender email address 'unauthorized@email.com' is not authorized.");
|
||||
@@ -549,7 +550,7 @@ class ServicesTest extends \MailPoetTest {
|
||||
public function testCongratulatoryEmailRespondsWithSuccessWhenSenderNotAuthorizedButDomainIsVerified() {
|
||||
$this->settings->set(Mailer::MAILER_CONFIG_SETTING_NAME, ['method' => Mailer::METHOD_MAILPOET]);
|
||||
$this->settings->set('sender.address', 'unauthorized@email.com');
|
||||
$bridge = $this->make(Bridge::class, [
|
||||
$authorizedEmailsController = $this->make(AuthorizedEmailsController::class, [
|
||||
'getAuthorizedEmailAddresses' => ['authorized@email.com'],
|
||||
]);
|
||||
|
||||
@@ -563,7 +564,7 @@ class ServicesTest extends \MailPoetTest {
|
||||
]);
|
||||
|
||||
$servicesEndpoint = $this->createServicesEndpointWithMocks([
|
||||
'bridge' => $bridge,
|
||||
'authorizedEmailsController' => $authorizedEmailsController,
|
||||
'congratulatoryEmailController' => $congratulatoryEmailController,
|
||||
'senderDomain' => $senderDomainMock,
|
||||
]);
|
||||
@@ -576,7 +577,7 @@ class ServicesTest extends \MailPoetTest {
|
||||
public function testCongratulatoryEmailRespondsWithErrorWhenSendingFails() {
|
||||
$this->settings->set(Mailer::MAILER_CONFIG_SETTING_NAME, ['method' => Mailer::METHOD_MAILPOET]);
|
||||
$this->settings->set('sender.address', 'authorized@email.com');
|
||||
$bridge = $this->make(Bridge::class, [
|
||||
$authorizedEmailsController = $this->make(AuthorizedEmailsController::class, [
|
||||
'getAuthorizedEmailAddresses' => ['authorized@email.com'],
|
||||
]);
|
||||
|
||||
@@ -587,7 +588,7 @@ class ServicesTest extends \MailPoetTest {
|
||||
]);
|
||||
|
||||
$servicesEndpoint = $this->createServicesEndpointWithMocks([
|
||||
'bridge' => $bridge,
|
||||
'authorizedEmailsController' => $authorizedEmailsController,
|
||||
'congratulatoryEmailController' => $congratulatoryEmailController,
|
||||
]);
|
||||
$response = $servicesEndpoint->sendCongratulatoryMssEmail();
|
||||
@@ -674,7 +675,8 @@ class ServicesTest extends \MailPoetTest {
|
||||
$this->diContainer->get(SubscribersCountReporter::class),
|
||||
$mocks['congratulatoryEmailController'] ?? $this->diContainer->get(CongratulatoryMssEmailController::class),
|
||||
$this->diContainer->get(WPFunctions::class),
|
||||
$mocks['senderDomain'] ?? $this->diContainer->get(AuthorizedSenderDomainController::class)
|
||||
$mocks['senderDomain'] ?? $this->diContainer->get(AuthorizedSenderDomainController::class),
|
||||
$mocks['authorizedEmailsController'] ?? $this->diContainer->get(AuthorizedEmailsController::class)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -30,6 +30,7 @@ use MailPoet\Statistics\StatisticsOpensRepository;
|
||||
use MailPoet\Subscribers\ConfirmationEmailCustomizer;
|
||||
use MailPoet\Subscribers\SubscribersCountsController;
|
||||
use MailPoet\WooCommerce\TransactionalEmails;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
use MailPoetVendor\Carbon\Carbon;
|
||||
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
||||
|
||||
@@ -133,10 +134,11 @@ class SettingsTest extends \MailPoetTest {
|
||||
public function testItSetsAuthorizedFromAddressAndResumesSending() {
|
||||
$bridgeMock = $this->make(Bridge::class, ['getAuthorizedEmailAddresses' => Expected::once(['authorized' => ['authorized@email.com']])]);
|
||||
$senderDomainController = $this->diContainer->get(AuthorizedSenderDomainController::class);
|
||||
$wp = $this->diContainer->get(WPFunctions::class);
|
||||
$this->endpoint = new Settings(
|
||||
$this->settings,
|
||||
$bridgeMock,
|
||||
new AuthorizedEmailsController($this->settings, $bridgeMock, $this->diContainer->get(NewslettersRepository::class), $senderDomainController),
|
||||
new AuthorizedEmailsController($this->settings, $bridgeMock, $this->diContainer->get(NewslettersRepository::class), $senderDomainController, $wp),
|
||||
$this->diContainer->get(AuthorizedSenderDomainController::class),
|
||||
$this->make(TransactionalEmails::class),
|
||||
$this->diContainer->get(EntityManager::class),
|
||||
@@ -164,10 +166,11 @@ class SettingsTest extends \MailPoetTest {
|
||||
$this->settings->set(Mailer::MAILER_CONFIG_SETTING_NAME, ['method' => Mailer::METHOD_MAILPOET]);
|
||||
$bridgeMock = $this->make(Bridge::class, ['getAuthorizedEmailAddresses' => Expected::once(['authorized' => ['authorized@email.com']])]);
|
||||
$senderDomainController = $this->diContainer->get(AuthorizedSenderDomainController::class);
|
||||
$wp = $this->diContainer->get(WPFunctions::class);
|
||||
$this->endpoint = new Settings(
|
||||
$this->settings,
|
||||
$bridgeMock,
|
||||
new AuthorizedEmailsController($this->settings, $bridgeMock, $this->diContainer->get(NewslettersRepository::class), $senderDomainController),
|
||||
new AuthorizedEmailsController($this->settings, $bridgeMock, $this->diContainer->get(NewslettersRepository::class), $senderDomainController, $wp),
|
||||
$this->diContainer->get(AuthorizedSenderDomainController::class),
|
||||
$this->make(TransactionalEmails::class),
|
||||
$this->diContainer->get(EntityManager::class),
|
||||
@@ -197,10 +200,11 @@ class SettingsTest extends \MailPoetTest {
|
||||
public function testItRejectsUnauthorizedFromAddress() {
|
||||
$bridgeMock = $this->make(Bridge::class, ['getAuthorizedEmailAddresses' => Expected::once(['authorized' => ['authorized@email.com']])]);
|
||||
$senderDomainController = $this->diContainer->get(AuthorizedSenderDomainController::class);
|
||||
$wp = $this->diContainer->get(WPFunctions::class);
|
||||
$this->endpoint = new Settings(
|
||||
$this->settings,
|
||||
$bridgeMock,
|
||||
new AuthorizedEmailsController($this->settings, $bridgeMock, $this->diContainer->get(NewslettersRepository::class), $senderDomainController),
|
||||
new AuthorizedEmailsController($this->settings, $bridgeMock, $this->diContainer->get(NewslettersRepository::class), $senderDomainController, $wp),
|
||||
$this->diContainer->get(AuthorizedSenderDomainController::class),
|
||||
$this->make(TransactionalEmails::class),
|
||||
$this->diContainer->get(EntityManager::class),
|
||||
|
Reference in New Issue
Block a user