PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor-prefixed / symfony / validator / Constraints / UuidValidator.php
mailpoet / vendor-prefixed / symfony / validator / Constraints Last commit date
AbstractComparison.php 1 year ago AbstractComparisonValidator.php 1 year ago All.php 1 year ago AllValidator.php 4 years ago AtLeastOneOf.php 1 year ago AtLeastOneOfValidator.php 1 year ago Bic.php 1 year ago BicValidator.php 1 year ago Blank.php 1 year ago BlankValidator.php 4 years ago Callback.php 1 year ago CallbackValidator.php 4 years ago CardScheme.php 1 year ago CardSchemeValidator.php 1 year ago Cascade.php 1 year ago Choice.php 1 year ago ChoiceValidator.php 1 year ago Cidr.php 1 year ago CidrValidator.php 4 years ago Collection.php 1 year ago CollectionValidator.php 4 years ago Composite.php 1 year ago Compound.php 4 years ago CompoundValidator.php 4 years ago Count.php 1 year ago CountValidator.php 4 years ago Country.php 1 year ago CountryValidator.php 4 years ago CssColor.php 1 year ago CssColorValidator.php 1 year ago Currency.php 1 year ago CurrencyValidator.php 4 years ago Date.php 1 year ago DateTime.php 1 year ago DateTimeValidator.php 2 years ago DateValidator.php 1 year ago DisableAutoMapping.php 1 year ago DivisibleBy.php 4 years ago DivisibleByValidator.php 4 years ago Email.php 1 year ago EmailValidator.php 1 year ago EnableAutoMapping.php 1 year ago EqualTo.php 4 years ago EqualToValidator.php 4 years ago Existence.php 4 years ago Expression.php 1 year ago ExpressionLanguageSyntax.php 1 year ago ExpressionLanguageSyntaxValidator.php 1 year ago ExpressionValidator.php 1 year ago File.php 1 year ago FileValidator.php 4 years ago GreaterThan.php 4 years ago GreaterThanOrEqual.php 4 years ago GreaterThanOrEqualValidator.php 4 years ago GreaterThanValidator.php 4 years ago GroupSequence.php 4 years ago GroupSequenceProvider.php 4 years ago Hostname.php 1 year ago HostnameValidator.php 4 years ago Iban.php 1 year ago IbanValidator.php 1 year ago IdenticalTo.php 4 years ago IdenticalToValidator.php 4 years ago Image.php 1 year ago ImageValidator.php 4 years ago Ip.php 1 year ago IpValidator.php 4 years ago IsFalse.php 1 year ago IsFalseValidator.php 4 years ago IsNull.php 1 year ago IsNullValidator.php 4 years ago IsTrue.php 1 year ago IsTrueValidator.php 4 years ago Isbn.php 1 year ago IsbnValidator.php 1 year ago Isin.php 1 year ago IsinValidator.php 4 years ago Issn.php 1 year ago IssnValidator.php 4 years ago Json.php 1 year ago JsonValidator.php 1 year ago Language.php 1 year ago LanguageValidator.php 4 years ago Length.php 1 year ago LengthValidator.php 4 years ago LessThan.php 4 years ago LessThanOrEqual.php 4 years ago LessThanOrEqualValidator.php 4 years ago LessThanValidator.php 4 years ago Locale.php 1 year ago LocaleValidator.php 4 years ago Luhn.php 1 year ago LuhnValidator.php 4 years ago Negative.php 4 years ago NegativeOrZero.php 4 years ago NotBlank.php 1 year ago NotBlankValidator.php 4 years ago NotCompromisedPassword.php 1 year ago NotCompromisedPasswordValidator.php 1 year ago NotEqualTo.php 4 years ago NotEqualToValidator.php 4 years ago NotIdenticalTo.php 4 years ago NotIdenticalToValidator.php 4 years ago NotNull.php 1 year ago NotNullValidator.php 4 years ago NumberConstraintTrait.php 4 years ago Optional.php 4 years ago Positive.php 4 years ago PositiveOrZero.php 4 years ago Range.php 1 year ago RangeValidator.php 1 year ago Regex.php 1 year ago RegexValidator.php 4 years ago Required.php 4 years ago Sequentially.php 1 year ago SequentiallyValidator.php 4 years ago Time.php 1 year ago TimeValidator.php 1 year ago Timezone.php 1 year ago TimezoneValidator.php 1 year ago Traverse.php 4 years ago Type.php 1 year ago TypeValidator.php 4 years ago Ulid.php 1 year ago UlidValidator.php 2 years ago Unique.php 1 year ago UniqueValidator.php 1 year ago Url.php 1 year ago UrlValidator.php 1 year ago Uuid.php 1 year ago UuidValidator.php 4 years ago Valid.php 1 year ago ValidValidator.php 4 years ago ZeroComparisonConstraintTrait.php 1 year ago index.php 3 years ago
UuidValidator.php
157 lines
1 <?php
2 namespace MailPoetVendor\Symfony\Component\Validator\Constraints;
3 if (!defined('ABSPATH')) exit;
4 use MailPoetVendor\Symfony\Component\Validator\Constraint;
5 use MailPoetVendor\Symfony\Component\Validator\ConstraintValidator;
6 use MailPoetVendor\Symfony\Component\Validator\Exception\UnexpectedTypeException;
7 use MailPoetVendor\Symfony\Component\Validator\Exception\UnexpectedValueException;
8 class UuidValidator extends ConstraintValidator
9 {
10 // The strict pattern matches UUIDs like this:
11 // xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
12 // Roughly speaking:
13 // x = any hexadecimal character
14 // M = any allowed version {1..6}
15 // N = any allowed variant {8, 9, a, b}
16 public const STRICT_LENGTH = 36;
17 public const STRICT_FIRST_HYPHEN_POSITION = 8;
18 public const STRICT_LAST_HYPHEN_POSITION = 23;
19 public const STRICT_VERSION_POSITION = 14;
20 public const STRICT_VARIANT_POSITION = 19;
21 // The loose pattern validates similar yet non-compliant UUIDs.
22 // Hyphens are completely optional. If present, they should only appear
23 // between every fourth character:
24 // xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx
25 // xxxxxxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxx
26 // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
27 // The value can also be wrapped with characters like []{}:
28 // {xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx}
29 // Neither the version nor the variant is validated by this pattern.
30 public const LOOSE_MAX_LENGTH = 39;
31 public const LOOSE_FIRST_HYPHEN_POSITION = 4;
32 public function validate($value, Constraint $constraint)
33 {
34 if (!$constraint instanceof Uuid) {
35 throw new UnexpectedTypeException($constraint, Uuid::class);
36 }
37 if (null === $value || '' === $value) {
38 return;
39 }
40 if (!\is_scalar($value) && !(\is_object($value) && \method_exists($value, '__toString'))) {
41 throw new UnexpectedValueException($value, 'string');
42 }
43 $value = (string) $value;
44 if (null !== $constraint->normalizer) {
45 $value = ($constraint->normalizer)($value);
46 }
47 if ($constraint->strict) {
48 $this->validateStrict($value, $constraint);
49 return;
50 }
51 $this->validateLoose($value, $constraint);
52 }
53 private function validateLoose(string $value, Uuid $constraint)
54 {
55 // Error priority:
56 // 1. ERROR_INVALID_CHARACTERS
57 // 2. ERROR_INVALID_HYPHEN_PLACEMENT
58 // 3. ERROR_TOO_SHORT/ERROR_TOO_LONG
59 // Trim any wrapping characters like [] or {} used by some legacy systems
60 $trimmed = \trim($value, '[]{}');
61 // Position of the next expected hyphen
62 $h = self::LOOSE_FIRST_HYPHEN_POSITION;
63 // Expected length
64 $l = self::LOOSE_MAX_LENGTH;
65 for ($i = 0; $i < $l; ++$i) {
66 // Check length
67 if (!isset($trimmed[$i])) {
68 $this->context->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Uuid::TOO_SHORT_ERROR)->addViolation();
69 return;
70 }
71 // Hyphens must occur every fifth position
72 // xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx
73 // ^ ^ ^ ^ ^ ^ ^
74 if ('-' === $trimmed[$i]) {
75 if ($i !== $h) {
76 $this->context->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR)->addViolation();
77 return;
78 }
79 $h += 5;
80 continue;
81 }
82 // Missing hyphens are ignored
83 if ($i === $h) {
84 $h += 4;
85 --$l;
86 }
87 // Check characters
88 if (!\ctype_xdigit($trimmed[$i])) {
89 $this->context->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Uuid::INVALID_CHARACTERS_ERROR)->addViolation();
90 return;
91 }
92 }
93 // Check length again
94 if (isset($trimmed[$i])) {
95 $this->context->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Uuid::TOO_LONG_ERROR)->addViolation();
96 }
97 }
98 private function validateStrict(string $value, Uuid $constraint)
99 {
100 // Error priority:
101 // 1. ERROR_INVALID_CHARACTERS
102 // 2. ERROR_INVALID_HYPHEN_PLACEMENT
103 // 3. ERROR_TOO_SHORT/ERROR_TOO_LONG
104 // 4. ERROR_INVALID_VERSION
105 // 5. ERROR_INVALID_VARIANT
106 // Position of the next expected hyphen
107 $h = self::STRICT_FIRST_HYPHEN_POSITION;
108 for ($i = 0; $i < self::STRICT_LENGTH; ++$i) {
109 // Check length
110 if (!isset($value[$i])) {
111 $this->context->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Uuid::TOO_SHORT_ERROR)->addViolation();
112 return;
113 }
114 // Check hyphen placement
115 // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
116 // ^ ^ ^ ^
117 if ('-' === $value[$i]) {
118 if ($i !== $h) {
119 $this->context->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR)->addViolation();
120 return;
121 }
122 // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
123 // ^
124 if ($h < self::STRICT_LAST_HYPHEN_POSITION) {
125 $h += 5;
126 }
127 continue;
128 }
129 // Check characters
130 if (!\ctype_xdigit($value[$i])) {
131 $this->context->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Uuid::INVALID_CHARACTERS_ERROR)->addViolation();
132 return;
133 }
134 // Missing hyphen
135 if ($i === $h) {
136 $this->context->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Uuid::INVALID_HYPHEN_PLACEMENT_ERROR)->addViolation();
137 return;
138 }
139 }
140 // Check length again
141 if (isset($value[$i])) {
142 $this->context->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Uuid::TOO_LONG_ERROR)->addViolation();
143 }
144 // Check version
145 if (!\in_array($value[self::STRICT_VERSION_POSITION], $constraint->versions)) {
146 $this->context->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Uuid::INVALID_VERSION_ERROR)->addViolation();
147 }
148 // Check variant - first two bits must equal "10"
149 // 0b10xx
150 // & 0b1100 (12)
151 // = 0b1000 (8)
152 if (8 !== (\hexdec($value[self::STRICT_VARIANT_POSITION]) & 12)) {
153 $this->context->buildViolation($constraint->message)->setParameter('{{ value }}', $this->formatValue($value))->setCode(Uuid::INVALID_VARIANT_ERROR)->addViolation();
154 }
155 }
156 }
157