PR feedback: add type hints, create new methods and save on extra api request

MAILPOET-4601
This commit is contained in:
Oluwaseun Olorunsola
2022-09-16 06:42:38 +01:00
committed by Aschepikov
parent 32a58301b0
commit a006701d78
5 changed files with 35 additions and 28 deletions

View File

@ -238,26 +238,28 @@ class Services extends APIEndpoint {
return $this->createBadRequest(__('MailPoet Sending Service is not active.', 'mailpoet')); return $this->createBadRequest(__('MailPoet Sending Service is not active.', 'mailpoet'));
} }
$authorizedEmails = $this->bridge->getAuthorizedEmailAddresses();
$verifiedDomains = $this->senderDomainController->getVerifiedSenderDomains(true);
if (!$authorizedEmails && !$verifiedDomains) {
return $this->createBadRequest(__('No FROM email addresses are authorized.', 'mailpoet'));
}
$fromEmail = $this->settings->get('sender.address'); $fromEmail = $this->settings->get('sender.address');
if (!$fromEmail) { if (!$fromEmail) {
return $this->createBadRequest(__('Sender email address is not set.', 'mailpoet')); return $this->createBadRequest(__('Sender email address is not set.', 'mailpoet'));
} }
$arrayOfItems = explode('@', $fromEmail); $verifiedDomains = $this->senderDomainController->getVerifiedSenderDomainsIgnoringCache();
$emailDomain = array_pop($arrayOfItems);
if (!$this->isItemInArray($fromEmail, $authorizedEmails) && !$this->isItemInArray($emailDomain, $verifiedDomains)) { $arrayOfItems = explode('@', trim($fromEmail));
$emailDomain = strtolower(array_pop($arrayOfItems));
if (!$this->isItemInArray($emailDomain, $verifiedDomains)) {
$authorizedEmails = $this->bridge->getAuthorizedEmailAddresses();
if (!$authorizedEmails) {
return $this->createBadRequest(__('No FROM email addresses are authorized.', 'mailpoet'));
}
if (!$this->isItemInArray($fromEmail, $authorizedEmails)) {
// translators: %s is the email address, which is not authorized. // translators: %s is the email address, which is not authorized.
return $this->createBadRequest(sprintf(__("Sender email address '%s' is not authorized.", 'mailpoet'), $fromEmail)); return $this->createBadRequest(sprintf(__("Sender email address '%s' is not authorized.", 'mailpoet'), $fromEmail));
} }
}
try { try {
// congratulatory email is sent to the current FROM address (authorized at this point) // congratulatory email is sent to the current FROM address (authorized at this point)

View File

@ -51,7 +51,7 @@ class AuthorizedEmailsController {
public function setFromEmailAddress(string $address) { public function setFromEmailAddress(string $address) {
$authorizedEmails = $this->bridge->getAuthorizedEmailAddresses() ?: []; $authorizedEmails = $this->bridge->getAuthorizedEmailAddresses() ?: [];
$verifiedDomains = $this->senderDomainController->getVerifiedSenderDomains(true); $verifiedDomains = $this->senderDomainController->getVerifiedSenderDomainsIgnoringCache();
$isAuthorized = $this->validateAuthorizedEmail($authorizedEmails, $address); $isAuthorized = $this->validateAuthorizedEmail($authorizedEmails, $address);
$emailDomainIsVerified = $this->validateEmailDomainIsVerified($verifiedDomains, $address); $emailDomainIsVerified = $this->validateEmailDomainIsVerified($verifiedDomains, $address);
@ -122,7 +122,7 @@ class AuthorizedEmailsController {
} }
$authorizedEmails = array_map('strtolower', $authorizedEmails); $authorizedEmails = array_map('strtolower', $authorizedEmails);
$verifiedDomains = $this->senderDomainController->getVerifiedSenderDomains(true); $verifiedDomains = $this->senderDomainController->getVerifiedSenderDomainsIgnoringCache();
$result = []; $result = [];
$result = $this->validateAddressesInSettings($authorizedEmails, $verifiedDomains, $result); $result = $this->validateAddressesInSettings($authorizedEmails, $verifiedDomains, $result);
@ -213,7 +213,7 @@ class AuthorizedEmailsController {
return in_array(strtolower($email), $lowercaseAuthorizedEmails, true); return in_array(strtolower($email), $lowercaseAuthorizedEmails, true);
} }
private function validateEmailDomainIsVerified($verifiedDomains = [], $email = ''): bool { private function validateEmailDomainIsVerified(array $verifiedDomains = [], string $email = ''): bool {
$lowercaseVerifiedDomains = array_map('strtolower', $verifiedDomains); $lowercaseVerifiedDomains = array_map('strtolower', $verifiedDomains);
$arrayOfItems = explode('@', $email); $arrayOfItems = explode('@', $email);
$emailDomain = array_pop($arrayOfItems); $emailDomain = array_pop($arrayOfItems);

View File

@ -46,23 +46,27 @@ class AuthorizedSenderDomainController {
* *
* Note: This includes both verified and unverified domains * Note: This includes both verified and unverified domains
*/ */
public function getAllSenderDomains(bool $skipCache = false): array { public function getAllSenderDomains(): array {
if ($skipCache) {
$this->currentRecords = null;
}
return $this->returnAllDomains($this->getAllRecords()); return $this->returnAllDomains($this->getAllRecords());
} }
public function getAllSenderDomainsIgnoringCache(): array {
$this->currentRecords = null;
return $this->getAllSenderDomains();
}
/** /**
* Get all Verified Sender Domains * Get all Verified Sender Domains
*/ */
public function getVerifiedSenderDomains(bool $skipCache = false): array { public function getVerifiedSenderDomains(): array {
if ($skipCache) {
$this->currentRecords = null;
}
return $this->returnVerifiedDomains($this->getAllRecords()); return $this->returnVerifiedDomains($this->getAllRecords());
} }
public function getVerifiedSenderDomainsIgnoringCache(): array {
$this->currentRecords = null;
return $this->getVerifiedSenderDomains();
}
/** /**
* Create new Sender Domain * Create new Sender Domain
* *

View File

@ -479,6 +479,7 @@ class ServicesTest extends \MailPoetTest {
public function testCongratulatoryEmailRespondsWithErrorWhenNoEmailAuthorized() { public function testCongratulatoryEmailRespondsWithErrorWhenNoEmailAuthorized() {
$this->settings->set(Mailer::MAILER_CONFIG_SETTING_NAME, ['method' => Mailer::METHOD_MAILPOET]); $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, [ $bridge = $this->make(Bridge::class, [
'getAuthorizedEmailAddresses' => [], 'getAuthorizedEmailAddresses' => [],
]); ]);
@ -497,7 +498,7 @@ class ServicesTest extends \MailPoetTest {
$verifiedDomains = ['email.com']; $verifiedDomains = ['email.com'];
$senderDomainMock = $this->make(AuthorizedSenderDomainController::class, [ $senderDomainMock = $this->make(AuthorizedSenderDomainController::class, [
'getVerifiedSenderDomains' => Expected::once($verifiedDomains), 'getVerifiedSenderDomainsIgnoringCache' => $verifiedDomains,
]); ]);
$servicesEndpoint = $this->createServicesEndpointWithMocks([ $servicesEndpoint = $this->createServicesEndpointWithMocks([

View File

@ -78,7 +78,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
$verifiedDomains = ['email.com']; $verifiedDomains = ['email.com'];
$senderDomainMock = $this->make(AuthorizedSenderDomainController::class, [ $senderDomainMock = $this->make(AuthorizedSenderDomainController::class, [
'getVerifiedSenderDomains' => Expected::once($verifiedDomains), 'getVerifiedSenderDomainsIgnoringCache' => Expected::once($verifiedDomains),
]); ]);
$mocks = [ $mocks = [
@ -150,7 +150,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
$verifiedDomains = ['email.com']; $verifiedDomains = ['email.com'];
$senderDomainMock = $this->make(AuthorizedSenderDomainController::class, [ $senderDomainMock = $this->make(AuthorizedSenderDomainController::class, [
'getVerifiedSenderDomains' => Expected::once($verifiedDomains), 'getVerifiedSenderDomainsIgnoringCache' => Expected::once($verifiedDomains),
]); ]);
$mocks = [ $mocks = [
@ -227,7 +227,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
$verifiedDomains = ['email.com']; $verifiedDomains = ['email.com'];
$senderDomainMock = $this->make(AuthorizedSenderDomainController::class, [ $senderDomainMock = $this->make(AuthorizedSenderDomainController::class, [
'getVerifiedSenderDomains' => Expected::once($verifiedDomains), 'getVerifiedSenderDomainsIgnoringCache' => Expected::once($verifiedDomains),
]); ]);
$mocks = [ $mocks = [