| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- <?php
- namespace MailPoet\Models;
- if (!defined('ABSPATH')) exit;
- use MailPoet\Util\Helpers;
- use MailPoet\WP\Functions as WPFunctions;
- class ModelValidator extends \MailPoetVendor\Sudzy\Engine {
- public $validators;
- const EMAIL_MIN_LENGTH = 6;
- const EMAIL_MAX_LENGTH = 150;
- const ROLE_EMAILS = [
- 'abuse',
- 'compliance',
- 'devnull',
- 'dns',
- 'ftp',
- 'hostmaster',
- 'inoc',
- 'ispfeedback',
- 'ispsupport',
- 'list-request',
- 'list',
- 'maildaemon',
- 'noc',
- 'no-reply',
- 'noreply',
- 'nospam',
- 'null',
- 'phish',
- 'phishing',
- 'postmaster',
- 'privacy',
- 'registrar',
- 'root',
- 'security',
- 'spam',
- 'sysadmin',
- 'undisclosed-recipients',
- 'unsubscribe',
- 'usenet',
- 'uucp',
- 'webmaster',
- 'www',
- ];
- public function __construct() {
- parent::__construct();
- $this->validators = [
- 'validEmail' => 'validateEmail',
- 'validRenderedNewsletterBody' => 'validateRenderedNewsletterBody',
- ];
- $this->setupValidators();
- }
- private function setupValidators() {
- $_this = $this;
- foreach ($this->validators as $validator => $action) {
- $this->addValidator($validator, function($params) use ($action, $_this) {
- $callback = [$_this, $action];
- if (is_callable($callback)) {
- return call_user_func($callback, $params);
- }
- });
- }
- }
- public function validateEmail($email) {
- $permittedLength = (strlen($email) >= self::EMAIL_MIN_LENGTH && strlen($email) <= self::EMAIL_MAX_LENGTH);
- $validEmail = WPFunctions::get()->isEmail($email) !== false && parent::_isEmail($email, null);
- return ($permittedLength && $validEmail);
- }
- public function validateNonRoleEmail($email) {
- if (!$this->validateEmail($email)) return false;
- $firstPart = strtolower(substr($email, 0, (int)strpos($email, '@')));
- return array_search($firstPart, self::ROLE_EMAILS) === false;
- }
- public function validateRenderedNewsletterBody($newsletterBody) {
- if (is_serialized($newsletterBody)) {
- $newsletterBody = unserialize($newsletterBody);
- } else if (Helpers::isJson($newsletterBody)) {
- $newsletterBody = json_decode($newsletterBody, true);
- }
- return (is_null($newsletterBody) || (is_array($newsletterBody) && !empty($newsletterBody['html']) && !empty($newsletterBody['text'])));
- }
- public function validateIPAddress(string $ip): bool {
- return (bool)filter_var($ip, FILTER_VALIDATE_IP);
- }
- }
|