PR feedback: add type hints, create new methods and save on extra api request
MAILPOET-4601
This commit is contained in:
committed by
Aschepikov
parent
32a58301b0
commit
a006701d78
@ -238,26 +238,28 @@ class Services extends APIEndpoint {
|
||||
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');
|
||||
if (!$fromEmail) {
|
||||
return $this->createBadRequest(__('Sender email address is not set.', 'mailpoet'));
|
||||
}
|
||||
|
||||
$arrayOfItems = explode('@', $fromEmail);
|
||||
$emailDomain = array_pop($arrayOfItems);
|
||||
$verifiedDomains = $this->senderDomainController->getVerifiedSenderDomainsIgnoringCache();
|
||||
|
||||
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.
|
||||
return $this->createBadRequest(sprintf(__("Sender email address '%s' is not authorized.", 'mailpoet'), $fromEmail));
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
// congratulatory email is sent to the current FROM address (authorized at this point)
|
||||
|
@ -51,7 +51,7 @@ class AuthorizedEmailsController {
|
||||
|
||||
public function setFromEmailAddress(string $address) {
|
||||
$authorizedEmails = $this->bridge->getAuthorizedEmailAddresses() ?: [];
|
||||
$verifiedDomains = $this->senderDomainController->getVerifiedSenderDomains(true);
|
||||
$verifiedDomains = $this->senderDomainController->getVerifiedSenderDomainsIgnoringCache();
|
||||
$isAuthorized = $this->validateAuthorizedEmail($authorizedEmails, $address);
|
||||
|
||||
$emailDomainIsVerified = $this->validateEmailDomainIsVerified($verifiedDomains, $address);
|
||||
@ -122,7 +122,7 @@ class AuthorizedEmailsController {
|
||||
}
|
||||
$authorizedEmails = array_map('strtolower', $authorizedEmails);
|
||||
|
||||
$verifiedDomains = $this->senderDomainController->getVerifiedSenderDomains(true);
|
||||
$verifiedDomains = $this->senderDomainController->getVerifiedSenderDomainsIgnoringCache();
|
||||
|
||||
$result = [];
|
||||
$result = $this->validateAddressesInSettings($authorizedEmails, $verifiedDomains, $result);
|
||||
@ -213,7 +213,7 @@ class AuthorizedEmailsController {
|
||||
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);
|
||||
$arrayOfItems = explode('@', $email);
|
||||
$emailDomain = array_pop($arrayOfItems);
|
||||
|
@ -46,23 +46,27 @@ class AuthorizedSenderDomainController {
|
||||
*
|
||||
* Note: This includes both verified and unverified domains
|
||||
*/
|
||||
public function getAllSenderDomains(bool $skipCache = false): array {
|
||||
if ($skipCache) {
|
||||
$this->currentRecords = null;
|
||||
}
|
||||
public function getAllSenderDomains(): array {
|
||||
return $this->returnAllDomains($this->getAllRecords());
|
||||
}
|
||||
|
||||
public function getAllSenderDomainsIgnoringCache(): array {
|
||||
$this->currentRecords = null;
|
||||
return $this->getAllSenderDomains();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all Verified Sender Domains
|
||||
*/
|
||||
public function getVerifiedSenderDomains(bool $skipCache = false): array {
|
||||
if ($skipCache) {
|
||||
$this->currentRecords = null;
|
||||
}
|
||||
public function getVerifiedSenderDomains(): array {
|
||||
return $this->returnVerifiedDomains($this->getAllRecords());
|
||||
}
|
||||
|
||||
public function getVerifiedSenderDomainsIgnoringCache(): array {
|
||||
$this->currentRecords = null;
|
||||
return $this->getVerifiedSenderDomains();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new Sender Domain
|
||||
*
|
||||
|
@ -479,6 +479,7 @@ 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, [
|
||||
'getAuthorizedEmailAddresses' => [],
|
||||
]);
|
||||
@ -497,7 +498,7 @@ class ServicesTest extends \MailPoetTest {
|
||||
|
||||
$verifiedDomains = ['email.com'];
|
||||
$senderDomainMock = $this->make(AuthorizedSenderDomainController::class, [
|
||||
'getVerifiedSenderDomains' => Expected::once($verifiedDomains),
|
||||
'getVerifiedSenderDomainsIgnoringCache' => $verifiedDomains,
|
||||
]);
|
||||
|
||||
$servicesEndpoint = $this->createServicesEndpointWithMocks([
|
||||
|
@ -78,7 +78,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
|
||||
|
||||
$verifiedDomains = ['email.com'];
|
||||
$senderDomainMock = $this->make(AuthorizedSenderDomainController::class, [
|
||||
'getVerifiedSenderDomains' => Expected::once($verifiedDomains),
|
||||
'getVerifiedSenderDomainsIgnoringCache' => Expected::once($verifiedDomains),
|
||||
]);
|
||||
|
||||
$mocks = [
|
||||
@ -150,7 +150,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
|
||||
|
||||
$verifiedDomains = ['email.com'];
|
||||
$senderDomainMock = $this->make(AuthorizedSenderDomainController::class, [
|
||||
'getVerifiedSenderDomains' => Expected::once($verifiedDomains),
|
||||
'getVerifiedSenderDomainsIgnoringCache' => Expected::once($verifiedDomains),
|
||||
]);
|
||||
|
||||
$mocks = [
|
||||
@ -227,7 +227,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
|
||||
|
||||
$verifiedDomains = ['email.com'];
|
||||
$senderDomainMock = $this->make(AuthorizedSenderDomainController::class, [
|
||||
'getVerifiedSenderDomains' => Expected::once($verifiedDomains),
|
||||
'getVerifiedSenderDomainsIgnoringCache' => Expected::once($verifiedDomains),
|
||||
]);
|
||||
|
||||
$mocks = [
|
||||
|
Reference in New Issue
Block a user