PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.19.0
GiveWP – Donation Plugin and Fundraising Platform v3.19.0
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 / paypal / paypalhttp / lib / PayPalHttp / Serializer / Multipart.php
give / vendor / paypal / paypalhttp / lib / PayPalHttp / Serializer Last commit date
Form.php 5 years ago FormPart.php 5 years ago Json.php 5 years ago Multipart.php 5 years ago Text.php 5 years ago
Multipart.php
135 lines
1 <?php
2
3 namespace PayPalHttp\Serializer;
4
5 use finfo;
6 use PayPalHttp\HttpRequest;
7 use PayPalHttp\Serializer;
8 use PayPalHttp\Encoder;
9 use PayPalHttp\Serializer\FormPart;
10
11 /**
12 * Class Multipart
13 * @package PayPalHttp\Serializer
14 *
15 * Serializer for multipart.
16 */
17 class Multipart implements Serializer
18 {
19 const LINEFEED = "\r\n";
20
21 public function contentType()
22 {
23 return "/^multipart\/.*$/";
24 }
25
26 public function encode(HttpRequest $request)
27 {
28 if (!is_array($request->body) || !$this->isAssociative($request->body))
29 {
30 throw new \Exception("HttpRequest body must be an associative array when Content-Type is: " . $request->headers["content-type"]);
31 }
32 $boundary = "---------------------" . md5(mt_rand() . microtime());
33 $contentTypeHeader = $request->headers["content-type"];
34 $request->headers["content-type"] = "{$contentTypeHeader}; boundary={$boundary}";
35
36 $value_params = [];
37 $file_params = [];
38
39 $disallow = ["\0", "\"", "\r", "\n"];
40
41 $body = [];
42
43 foreach ($request->body as $k => $v) {
44 $k = str_replace($disallow, "_", $k);
45 if (is_resource($v)) {
46 $file_params[] = $this->prepareFilePart($k, $v, $boundary);
47 } else if ($v instanceof FormPart) {
48 $value_params[] = $this->prepareFormPart($k, $v, $boundary);
49 } else {
50 $value_params[] = $this->prepareFormField($k, $v, $boundary);
51 }
52 }
53
54 $body = array_merge($value_params, $file_params);
55
56 // add boundary for each parameters
57 array_walk($body, function (&$part) use ($boundary) {
58 $part = "--{$boundary}" . self::LINEFEED . "{$part}";
59 });
60
61 // add final boundary
62 $body[] = "--{$boundary}--";
63 $body[] = "";
64
65 return implode(self::LINEFEED, $body);
66 }
67
68 public function decode($data)
69 {
70 throw new \Exception("Multipart does not support deserialization");
71 }
72
73 private function isAssociative(array $array)
74 {
75 return array_values($array) !== $array;
76 }
77
78 private function prepareFormField($partName, $value, $boundary)
79 {
80 return implode(self::LINEFEED, [
81 "Content-Disposition: form-data; name=\"{$partName}\"",
82 "",
83 filter_var($value),
84 ]);
85 }
86
87 private function prepareFilePart($partName, $file, $boundary)
88 {
89 $fileInfo = new finfo(FILEINFO_MIME_TYPE);
90 $filePath = stream_get_meta_data($file)['uri'];
91 $data = file_get_contents($filePath);
92 $mimeType = $fileInfo->buffer($data);
93
94 $splitFilePath = explode(DIRECTORY_SEPARATOR, $filePath);
95 $filePath = end($splitFilePath);
96 $disallow = ["\0", "\"", "\r", "\n"];
97 $filePath = str_replace($disallow, "_", $filePath);
98 return implode(self::LINEFEED, [
99 "Content-Disposition: form-data; name=\"{$partName}\"; filename=\"{$filePath}\"",
100 "Content-Type: {$mimeType}",
101 "",
102 $data,
103 ]);
104 }
105
106 private function prepareFormPart($partName, $formPart, $boundary)
107 {
108 $contentDisposition = "Content-Disposition: form-data; name=\"{$partName}\"";
109
110 $partHeaders = $formPart->getHeaders();
111 $formattedheaders = array_change_key_case($partHeaders);
112 if (array_key_exists("content-type", $formattedheaders)) {
113 if ($formattedheaders["content-type"] === "application/json") {
114 $contentDisposition .= "; filename=\"{$partName}.json\"";
115 }
116 $tempRequest = new HttpRequest('/', 'POST');
117 $tempRequest->headers = $formattedheaders;
118 $tempRequest->body = $formPart->getValue();
119 $encoder = new Encoder();
120 $partValue = $encoder->serializeRequest($tempRequest);
121 } else {
122 $partValue = $formPart->getValue();
123 }
124
125 $finalPartHeaders = [];
126 foreach ($partHeaders as $k => $v) {
127 $finalPartHeaders[] = "{$k}: {$v}";
128 }
129
130 $body = array_merge([$contentDisposition], $finalPartHeaders, [""], [$partValue]);
131
132 return implode(self::LINEFEED, $body);
133 }
134 }
135