Akismet
1 week ago
Exceptions
1 year ago
EmailAddressWhiteList.php
1 week ago
ServiceProvider.php
1 week ago
EmailAddressWhiteList.php
47 lines
| 1 | <?php |
| 2 | |
| 3 | namespace Give\DonationSpam; |
| 4 | |
| 5 | /** |
| 6 | * @since 3.15.0 |
| 7 | */ |
| 8 | class EmailAddressWhiteList |
| 9 | { |
| 10 | /** |
| 11 | * @var string[] |
| 12 | */ |
| 13 | protected array $whitelistEmails; |
| 14 | |
| 15 | /** |
| 16 | * @since 4.16.0 Normalize whitelisted emails so comparisons are case- and whitespace-insensitive. |
| 17 | * @since 3.15.1 Add array type to enforce type. |
| 18 | * @since 3.15.0 |
| 19 | */ |
| 20 | public function __construct(array $whitelistEmails = []) |
| 21 | { |
| 22 | $this->whitelistEmails = array_map([$this, 'normalize'], $whitelistEmails); |
| 23 | } |
| 24 | |
| 25 | /** |
| 26 | * @since 4.16.0 Compare against the normalized whitelist so casing/whitespace don't cause a miss. |
| 27 | * @since 3.15.0 |
| 28 | */ |
| 29 | public function validate(string $email): bool |
| 30 | { |
| 31 | return in_array($this->normalize($email), $this->whitelistEmails, true); |
| 32 | } |
| 33 | |
| 34 | /** |
| 35 | * Whitelist entries originate from the give_akismet_whitelist_emails filter, so they aren't |
| 36 | * guaranteed to be strings — cast defensively before normalizing. |
| 37 | * |
| 38 | * @since 4.16.0 |
| 39 | * |
| 40 | * @param mixed $email |
| 41 | */ |
| 42 | private function normalize($email): string |
| 43 | { |
| 44 | return strtolower(trim((string)$email)); |
| 45 | } |
| 46 | } |
| 47 |