Implement API endpoints

MAILPOET-4300
This commit is contained in:
Oluwaseun Olorunsola
2022-07-01 14:59:02 +01:00
committed by Veljko V
parent 502087e416
commit 1fda60bfea
4 changed files with 125 additions and 2 deletions

View File

@ -13,6 +13,12 @@ use MailPoet\Settings\SettingsController;
class AuthorizedEmailsController {
const AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING = 'authorized_emails_addresses_check';
const AUTHORIZED_EMAIL_ADDRESSES_API_TYPE_AUTHORIZED = 'authorized';
const AUTHORIZED_EMAIL_ADDRESSES_API_TYPE_PENDING = 'pending';
const AUTHORIZED_EMAIL_ADDRESSES_API_TYPE_ALL = 'all';
const AUTHORIZED_EMAIL_ERROR_ALREADY_AUTHORIZED = 'Email address is already authorized';
const AUTHORIZED_EMAIL_ERROR_PENDING_CONFIRMATION = 'Email address is pending confirmation';
/** @var Bridge */
private $bridge;
@ -58,6 +64,37 @@ class AuthorizedEmailsController {
$this->settings->set(self::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING, null);
}
public function getAllAuthorizedEmailAddress() {
return $this->bridge->getAuthorizedEmailAddresses(self::AUTHORIZED_EMAIL_ADDRESSES_API_TYPE_ALL);
}
public function createAuthorizedEmailAddress(string $email) {
$allEmails = $this->getAllAuthorizedEmailAddress();
$authorizedEmails = array_map('strtolower', $allEmails[self::AUTHORIZED_EMAIL_ADDRESSES_API_TYPE_AUTHORIZED]);
$isAuthorized = $this->validateAuthorizedEmail($authorizedEmails, $email);
if ($isAuthorized) {
throw new \InvalidArgumentException(self::AUTHORIZED_EMAIL_ERROR_ALREADY_AUTHORIZED);
}
$pendingEmails = array_map('strtolower', $allEmails[self::AUTHORIZED_EMAIL_ADDRESSES_API_TYPE_PENDING]);
$isPending = $this->validateAuthorizedEmail($pendingEmails, $email);
if ($isPending) {
throw new \InvalidArgumentException(self::AUTHORIZED_EMAIL_ERROR_PENDING_CONFIRMATION);
}
$finalData = $this->bridge->createAuthorizedEmailAddress($email);
return $finalData;
}
public function isEmailAddressAuthorized(string $email): bool {
$authorizedEmails = array_map('strtolower', $this->bridge->getAuthorizedEmailAddresses() ?: []);
return $this->validateAuthorizedEmail($authorizedEmails, $email);
}
public function checkAuthorizedEmailAddresses() {
if (!Bridge::isMPSendingServiceEnabled()) {
$this->settings->set(self::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING, null);