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 / dependency-injection / EnvVarProcessor.php
mailpoet / vendor-prefixed / symfony / dependency-injection Last commit date
Argument 2 years ago Attribute 2 years ago Exception 2 years ago ParameterBag 3 years ago Alias.php 4 years ago ChildDefinition.php 4 years ago Container.php 2 years ago ContainerAwareInterface.php 2 years ago ContainerAwareTrait.php 2 years ago ContainerBuilder.php 2 years ago ContainerInterface.php 4 years ago Definition.php 2 years ago EnvVarLoaderInterface.php 4 years ago EnvVarProcessor.php 2 years ago EnvVarProcessorInterface.php 4 years ago ExpressionLanguage.php 2 years ago ExpressionLanguageProvider.php 2 years ago Parameter.php 4 years ago Reference.php 4 years ago ReverseContainer.php 2 years ago ServiceLocator.php 2 years ago TaggedContainerInterface.php 4 years ago TypedReference.php 2 years ago Variable.php 4 years ago index.php 3 years ago
EnvVarProcessor.php
219 lines
1 <?php
2 namespace MailPoetVendor\Symfony\Component\DependencyInjection;
3 if (!defined('ABSPATH')) exit;
4 use MailPoetVendor\Symfony\Component\DependencyInjection\Exception\EnvNotFoundException;
5 use MailPoetVendor\Symfony\Component\DependencyInjection\Exception\ParameterCircularReferenceException;
6 use MailPoetVendor\Symfony\Component\DependencyInjection\Exception\RuntimeException;
7 class EnvVarProcessor implements EnvVarProcessorInterface
8 {
9 private $container;
10 private $loaders;
11 private $loadedVars = [];
12 public function __construct(ContainerInterface $container, ?\Traversable $loaders = null)
13 {
14 $this->container = $container;
15 $this->loaders = $loaders ?? new \ArrayIterator();
16 }
17 public static function getProvidedTypes()
18 {
19 return ['base64' => 'string', 'bool' => 'bool', 'not' => 'bool', 'const' => 'bool|int|float|string|array', 'csv' => 'array', 'file' => 'string', 'float' => 'float', 'int' => 'int', 'json' => 'array', 'key' => 'bool|int|float|string|array', 'url' => 'array', 'query_string' => 'array', 'resolve' => 'string', 'default' => 'bool|int|float|string|array', 'string' => 'string', 'trim' => 'string', 'require' => 'bool|int|float|string|array'];
20 }
21 public function getEnv(string $prefix, string $name, \Closure $getEnv)
22 {
23 $i = \strpos($name, ':');
24 if ('key' === $prefix) {
25 if (\false === $i) {
26 throw new RuntimeException(\sprintf('Invalid env "key:%s": a key specifier should be provided.', $name));
27 }
28 $next = \substr($name, $i + 1);
29 $key = \substr($name, 0, $i);
30 $array = $getEnv($next);
31 if (!\is_array($array)) {
32 throw new RuntimeException(\sprintf('Resolved value of "%s" did not result in an array value.', $next));
33 }
34 if (!isset($array[$key]) && !\array_key_exists($key, $array)) {
35 throw new EnvNotFoundException(\sprintf('Key "%s" not found in %s (resolved from "%s").', $key, \json_encode($array), $next));
36 }
37 return $array[$key];
38 }
39 if ('default' === $prefix) {
40 if (\false === $i) {
41 throw new RuntimeException(\sprintf('Invalid env "default:%s": a fallback parameter should be provided.', $name));
42 }
43 $next = \substr($name, $i + 1);
44 $default = \substr($name, 0, $i);
45 if ('' !== $default && !$this->container->hasParameter($default)) {
46 throw new RuntimeException(\sprintf('Invalid env fallback in "default:%s": parameter "%s" not found.', $name, $default));
47 }
48 try {
49 $env = $getEnv($next);
50 if ('' !== $env && null !== $env) {
51 return $env;
52 }
53 } catch (EnvNotFoundException $e) {
54 // no-op
55 }
56 return '' === $default ? null : $this->container->getParameter($default);
57 }
58 if ('file' === $prefix || 'require' === $prefix) {
59 if (!\is_scalar($file = $getEnv($name))) {
60 throw new RuntimeException(\sprintf('Invalid file name: env var "%s" is non-scalar.', $name));
61 }
62 if (!\is_file($file)) {
63 throw new EnvNotFoundException(\sprintf('File "%s" not found (resolved from "%s").', $file, $name));
64 }
65 if ('file' === $prefix) {
66 return \file_get_contents($file);
67 } else {
68 return require $file;
69 }
70 }
71 $returnNull = \false;
72 if ('' === $prefix) {
73 $returnNull = \true;
74 $prefix = 'string';
75 }
76 if (\false !== $i || 'string' !== $prefix) {
77 $env = $getEnv($name);
78 } elseif (isset($_ENV[$name])) {
79 $env = $_ENV[$name];
80 } elseif (isset($_SERVER[$name]) && !\str_starts_with($name, 'HTTP_')) {
81 $env = $_SERVER[$name];
82 } elseif (\false === ($env = \getenv($name)) || null === $env) {
83 // null is a possible value because of thread safety issues
84 foreach ($this->loadedVars as $vars) {
85 if (\false !== ($env = $vars[$name] ?? \false)) {
86 break;
87 }
88 }
89 if (\false === $env || null === $env) {
90 $loaders = $this->loaders;
91 $this->loaders = new \ArrayIterator();
92 try {
93 $i = 0;
94 $ended = \true;
95 $count = $loaders instanceof \Countable ? $loaders->count() : 0;
96 foreach ($loaders as $loader) {
97 if (\count($this->loadedVars) > $i++) {
98 continue;
99 }
100 $this->loadedVars[] = $vars = $loader->loadEnvVars();
101 if (\false !== ($env = $vars[$name] ?? \false)) {
102 $ended = \false;
103 break;
104 }
105 }
106 if ($ended || $count === $i) {
107 $loaders = $this->loaders;
108 }
109 } catch (ParameterCircularReferenceException $e) {
110 // skip loaders that need an env var that is not defined
111 } finally {
112 $this->loaders = $loaders;
113 }
114 }
115 if (\false === $env || null === $env) {
116 if (!$this->container->hasParameter("env({$name})")) {
117 throw new EnvNotFoundException(\sprintf('Environment variable not found: "%s".', $name));
118 }
119 $env = $this->container->getParameter("env({$name})");
120 }
121 }
122 if (null === $env) {
123 if ($returnNull) {
124 return null;
125 }
126 if (!isset($this->getProvidedTypes()[$prefix])) {
127 throw new RuntimeException(\sprintf('Unsupported env var prefix "%s".', $prefix));
128 }
129 if (!\in_array($prefix, ['string', 'bool', 'not', 'int', 'float'], \true)) {
130 return null;
131 }
132 }
133 if (null !== $env && !\is_scalar($env)) {
134 throw new RuntimeException(\sprintf('Non-scalar env var "%s" cannot be cast to "%s".', $name, $prefix));
135 }
136 if ('string' === $prefix) {
137 return (string) $env;
138 }
139 if (\in_array($prefix, ['bool', 'not'], \true)) {
140 $env = (bool) ((\filter_var($env, \FILTER_VALIDATE_BOOLEAN) ?: \filter_var($env, \FILTER_VALIDATE_INT)) ?: \filter_var($env, \FILTER_VALIDATE_FLOAT));
141 return 'not' === $prefix ? !$env : $env;
142 }
143 if ('int' === $prefix) {
144 if (null !== $env && \false === ($env = \filter_var($env, \FILTER_VALIDATE_INT) ?: \filter_var($env, \FILTER_VALIDATE_FLOAT))) {
145 throw new RuntimeException(\sprintf('Non-numeric env var "%s" cannot be cast to int.', $name));
146 }
147 return (int) $env;
148 }
149 if ('float' === $prefix) {
150 if (null !== $env && \false === ($env = \filter_var($env, \FILTER_VALIDATE_FLOAT))) {
151 throw new RuntimeException(\sprintf('Non-numeric env var "%s" cannot be cast to float.', $name));
152 }
153 return (float) $env;
154 }
155 if ('const' === $prefix) {
156 if (!\defined($env)) {
157 throw new RuntimeException(\sprintf('Env var "%s" maps to undefined constant "%s".', $name, $env));
158 }
159 return \constant($env);
160 }
161 if ('base64' === $prefix) {
162 return \base64_decode(\strtr($env, '-_', '+/'));
163 }
164 if ('json' === $prefix) {
165 $env = \json_decode($env, \true);
166 if (\JSON_ERROR_NONE !== \json_last_error()) {
167 throw new RuntimeException(\sprintf('Invalid JSON in env var "%s": ', $name) . \json_last_error_msg());
168 }
169 if (null !== $env && !\is_array($env)) {
170 throw new RuntimeException(\sprintf('Invalid JSON env var "%s": array or null expected, "%s" given.', $name, \get_debug_type($env)));
171 }
172 return $env;
173 }
174 if ('url' === $prefix) {
175 $params = \parse_url($env);
176 if (\false === $params) {
177 throw new RuntimeException(\sprintf('Invalid URL in env var "%s".', $name));
178 }
179 if (!isset($params['scheme'], $params['host'])) {
180 throw new RuntimeException(\sprintf('Invalid URL env var "%s": schema and host expected, "%s" given.', $name, $env));
181 }
182 $params += ['port' => null, 'user' => null, 'pass' => null, 'path' => null, 'query' => null, 'fragment' => null];
183 $params['user'] = null !== $params['user'] ? \rawurldecode($params['user']) : null;
184 $params['pass'] = null !== $params['pass'] ? \rawurldecode($params['pass']) : null;
185 // remove the '/' separator
186 $params['path'] = '/' === ($params['path'] ?? '/') ? '' : \substr($params['path'], 1);
187 return $params;
188 }
189 if ('query_string' === $prefix) {
190 $queryString = \parse_url($env, \PHP_URL_QUERY) ?: $env;
191 \parse_str($queryString, $result);
192 return $result;
193 }
194 if ('resolve' === $prefix) {
195 return \preg_replace_callback('/%%|%([^%\\s]+)%/', function ($match) use($name, $getEnv) {
196 if (!isset($match[1])) {
197 return '%';
198 }
199 if (\str_starts_with($match[1], 'env(') && \str_ends_with($match[1], ')') && 'env()' !== $match[1]) {
200 $value = $getEnv(\substr($match[1], 4, -1));
201 } else {
202 $value = $this->container->getParameter($match[1]);
203 }
204 if (!\is_scalar($value)) {
205 throw new RuntimeException(\sprintf('Parameter "%s" found when resolving env var "%s" must be scalar, "%s" given.', $match[1], $name, \get_debug_type($value)));
206 }
207 return $value;
208 }, $env);
209 }
210 if ('csv' === $prefix) {
211 return \str_getcsv($env, ',', '"', \PHP_VERSION_ID >= 70400 ? '' : '\\');
212 }
213 if ('trim' === $prefix) {
214 return \trim($env);
215 }
216 throw new RuntimeException(\sprintf('Unsupported env var prefix "%s" for env name "%s".', $prefix, $name));
217 }
218 }
219