PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.3.1
GiveWP – Donation Plugin and Fundraising Platform v3.3.1
4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / vendor / vendor-prefixed / symfony / http-foundation / JsonResponse.php
give / vendor / vendor-prefixed / symfony / http-foundation Last commit date
Exception 2 years ago File 2 years ago Session 2 years ago Tests 2 years ago AcceptHeader.php 2 years ago AcceptHeaderItem.php 2 years ago ApacheRequest.php 2 years ago BinaryFileResponse.php 2 years ago Cookie.php 2 years ago ExpressionRequestMatcher.php 2 years ago FileBag.php 2 years ago HeaderBag.php 2 years ago IpUtils.php 2 years ago JsonResponse.php 2 years ago LICENSE 2 years ago ParameterBag.php 2 years ago RedirectResponse.php 2 years ago Request.php 2 years ago RequestMatcher.php 2 years ago RequestMatcherInterface.php 2 years ago RequestStack.php 2 years ago Response.php 2 years ago ResponseHeaderBag.php 2 years ago ServerBag.php 2 years ago StreamedResponse.php 2 years ago
JsonResponse.php
239 lines
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 *
11 * Modified by impress-org on 23-January-2024 using Strauss.
12 * @see https://github.com/BrianHenryIE/strauss
13 */
14
15 namespace Give\Vendors\Symfony\Component\HttpFoundation;
16
17 /**
18 * Response represents an HTTP response in JSON format.
19 *
20 * Note that this class does not force the returned JSON content to be an
21 * object. It is however recommended that you do return an object as it
22 * protects yourself against XSSI and JSON-JavaScript Hijacking.
23 *
24 * @see https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/AJAX_Security_Cheat_Sheet.md#always-return-json-with-an-object-on-the-outside
25 *
26 * @author Igor Wiedler <igor@wiedler.ch>
27 */
28 class JsonResponse extends Response
29 {
30 protected $data;
31 protected $callback;
32
33 // Encode <, >, ', &, and " characters in the JSON, making it also safe to be embedded into HTML.
34 // 15 === JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT
35 const DEFAULT_ENCODING_OPTIONS = 15;
36
37 protected $encodingOptions = self::DEFAULT_ENCODING_OPTIONS;
38
39 /**
40 * @param mixed $data The response data
41 * @param int $status The response status code
42 * @param array $headers An array of response headers
43 * @param bool $json If the data is already a JSON string
44 */
45 public function __construct($data = null, $status = 200, $headers = [], $json = false)
46 {
47 parent::__construct('', $status, $headers);
48
49 if (null === $data) {
50 $data = new \ArrayObject();
51 }
52
53 $json ? $this->setJson($data) : $this->setData($data);
54 }
55
56 /**
57 * Factory method for chainability.
58 *
59 * Example:
60 *
61 * return JsonResponse::create(['key' => 'value'])
62 * ->setSharedMaxAge(300);
63 *
64 * @param mixed $data The JSON response data
65 * @param int $status The response status code
66 * @param array $headers An array of response headers
67 *
68 * @return static
69 */
70 public static function create($data = null, $status = 200, $headers = [])
71 {
72 return new static($data, $status, $headers);
73 }
74
75 /**
76 * Factory method for chainability.
77 *
78 * Example:
79 *
80 * return JsonResponse::fromJsonString('{"key": "value"}')
81 * ->setSharedMaxAge(300);
82 *
83 * @param string|null $data The JSON response string
84 * @param int $status The response status code
85 * @param array $headers An array of response headers
86 *
87 * @return static
88 */
89 public static function fromJsonString($data = null, $status = 200, $headers = [])
90 {
91 return new static($data, $status, $headers, true);
92 }
93
94 /**
95 * Sets the JSONP callback.
96 *
97 * @param string|null $callback The JSONP callback or null to use none
98 *
99 * @return $this
100 *
101 * @throws \InvalidArgumentException When the callback name is not valid
102 */
103 public function setCallback($callback = null)
104 {
105 if (null !== $callback) {
106 // partially taken from https://geekality.net/2011/08/03/valid-javascript-identifier/
107 // partially taken from https://github.com/willdurand/JsonpCallbackValidator
108 // JsonpCallbackValidator is released under the MIT License. See https://github.com/willdurand/JsonpCallbackValidator/blob/v1.1.0/LICENSE for details.
109 // (c) William Durand <william.durand1@gmail.com>
110 $pattern = '/^[$_\p{L}][$_\p{L}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\x{200C}\x{200D}]*(?:\[(?:"(?:\\\.|[^"\\\])*"|\'(?:\\\.|[^\'\\\])*\'|\d+)\])*?$/u';
111 $reserved = [
112 'break', 'do', 'instanceof', 'typeof', 'case', 'else', 'new', 'var', 'catch', 'finally', 'return', 'void', 'continue', 'for', 'switch', 'while',
113 'debugger', 'function', 'this', 'with', 'default', 'if', 'throw', 'delete', 'in', 'try', 'class', 'enum', 'extends', 'super', 'const', 'export',
114 'import', 'implements', 'let', 'private', 'public', 'yield', 'interface', 'package', 'protected', 'static', 'null', 'true', 'false',
115 ];
116 $parts = explode('.', $callback);
117 foreach ($parts as $part) {
118 if (!preg_match($pattern, $part) || \in_array($part, $reserved, true)) {
119 throw new \InvalidArgumentException('The callback name is not valid.');
120 }
121 }
122 }
123
124 $this->callback = $callback;
125
126 return $this->update();
127 }
128
129 /**
130 * Sets a raw string containing a JSON document to be sent.
131 *
132 * @param string $json
133 *
134 * @return $this
135 *
136 * @throws \InvalidArgumentException
137 */
138 public function setJson($json)
139 {
140 $this->data = $json;
141
142 return $this->update();
143 }
144
145 /**
146 * Sets the data to be sent as JSON.
147 *
148 * @param mixed $data
149 *
150 * @return $this
151 *
152 * @throws \InvalidArgumentException
153 */
154 public function setData($data = [])
155 {
156 if (\defined('HHVM_VERSION')) {
157 // HHVM does not trigger any warnings and let exceptions
158 // thrown from a JsonSerializable object pass through.
159 // If only PHP did the same...
160 $data = json_encode($data, $this->encodingOptions);
161 } else {
162 if (!interface_exists('JsonSerializable', false)) {
163 set_error_handler(function () { return false; });
164 try {
165 $data = @json_encode($data, $this->encodingOptions);
166 } finally {
167 restore_error_handler();
168 }
169 } else {
170 try {
171 $data = json_encode($data, $this->encodingOptions);
172 } catch (\Exception $e) {
173 if ('Exception' === \get_class($e) && 0 === strpos($e->getMessage(), 'Failed calling ')) {
174 throw $e->getPrevious() ?: $e;
175 }
176 throw $e;
177 }
178
179 if (\PHP_VERSION_ID >= 70300 && (\JSON_THROW_ON_ERROR & $this->encodingOptions)) {
180 return $this->setJson($data);
181 }
182 }
183 }
184
185 if (\JSON_ERROR_NONE !== json_last_error()) {
186 throw new \InvalidArgumentException(json_last_error_msg());
187 }
188
189 return $this->setJson($data);
190 }
191
192 /**
193 * Returns options used while encoding data to JSON.
194 *
195 * @return int
196 */
197 public function getEncodingOptions()
198 {
199 return $this->encodingOptions;
200 }
201
202 /**
203 * Sets options used while encoding data to JSON.
204 *
205 * @param int $encodingOptions
206 *
207 * @return $this
208 */
209 public function setEncodingOptions($encodingOptions)
210 {
211 $this->encodingOptions = (int) $encodingOptions;
212
213 return $this->setData(json_decode($this->data));
214 }
215
216 /**
217 * Updates the content and headers according to the JSON data and callback.
218 *
219 * @return $this
220 */
221 protected function update()
222 {
223 if (null !== $this->callback) {
224 // Not using application/javascript for compatibility reasons with older browsers.
225 $this->headers->set('Content-Type', 'text/javascript');
226
227 return $this->setContent(sprintf('/**/%s(%s);', $this->callback, $this->data));
228 }
229
230 // Only set the header when there is none or when it equals 'text/javascript' (from a previous update with callback)
231 // in order to not overwrite a custom definition.
232 if (!$this->headers->has('Content-Type') || 'text/javascript' === $this->headers->get('Content-Type')) {
233 $this->headers->set('Content-Type', 'application/json');
234 }
235
236 return $this->setContent($this->data);
237 }
238 }
239