Completed
Branch develop (37f7b7)
by
unknown
24:41
created
htdocs/includes/swiftmailer/lib/classes/Swift/Filterable.php 1 patch
Indentation   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -15,17 +15,17 @@
 block discarded – undo
15 15
  */
16 16
 interface Swift_Filterable
17 17
 {
18
-    /**
19
-     * Add a new StreamFilter, referenced by $key.
20
-     *
21
-     * @param string $key
22
-     */
23
-    public function addFilter(Swift_StreamFilter $filter, $key);
18
+	/**
19
+	 * Add a new StreamFilter, referenced by $key.
20
+	 *
21
+	 * @param string $key
22
+	 */
23
+	public function addFilter(Swift_StreamFilter $filter, $key);
24 24
 
25
-    /**
26
-     * Remove an existing filter using $key.
27
-     *
28
-     * @param string $key
29
-     */
30
-    public function removeFilter($key);
25
+	/**
26
+	 * Remove an existing filter using $key.
27
+	 *
28
+	 * @param string $key
29
+	 */
30
+	public function removeFilter($key);
31 31
 }
Please login to merge, or discard this patch.
htdocs/includes/swiftmailer/lib/classes/Swift/Message.php 1 patch
Indentation   +261 added lines, -261 removed lines patch added patch discarded remove patch
@@ -15,265 +15,265 @@
 block discarded – undo
15 15
  */
16 16
 class Swift_Message extends Swift_Mime_SimpleMessage
17 17
 {
18
-    /**
19
-     * @var Swift_Signers_HeaderSigner[]
20
-     */
21
-    private $headerSigners = [];
22
-
23
-    /**
24
-     * @var Swift_Signers_BodySigner[]
25
-     */
26
-    private $bodySigners = [];
27
-
28
-    /**
29
-     * @var array
30
-     */
31
-    private $savedMessage = [];
32
-
33
-    /**
34
-     * Create a new Message.
35
-     *
36
-     * Details may be optionally passed into the constructor.
37
-     *
38
-     * @param string $subject
39
-     * @param string $body
40
-     * @param string $contentType
41
-     * @param string $charset
42
-     */
43
-    public function __construct($subject = null, $body = null, $contentType = null, $charset = null)
44
-    {
45
-        \call_user_func_array(
46
-            [$this, 'Swift_Mime_SimpleMessage::__construct'],
47
-            Swift_DependencyContainer::getInstance()
48
-                ->createDependenciesFor('mime.message')
49
-            );
50
-
51
-        if (!isset($charset)) {
52
-            $charset = Swift_DependencyContainer::getInstance()
53
-                ->lookup('properties.charset');
54
-        }
55
-        $this->setSubject($subject);
56
-        $this->setBody($body);
57
-        $this->setCharset($charset);
58
-        if ($contentType) {
59
-            $this->setContentType($contentType);
60
-        }
61
-    }
62
-
63
-    /**
64
-     * Add a MimePart to this Message.
65
-     *
66
-     * @param string|Swift_OutputByteStream $body
67
-     * @param string                        $contentType
68
-     * @param string                        $charset
69
-     *
70
-     * @return $this
71
-     */
72
-    public function addPart($body, $contentType = null, $charset = null)
73
-    {
74
-        return $this->attach((new Swift_MimePart($body, $contentType, $charset))->setEncoder($this->getEncoder()));
75
-    }
76
-
77
-    /**
78
-     * Attach a new signature handler to the message.
79
-     *
80
-     * @return $this
81
-     */
82
-    public function attachSigner(Swift_Signer $signer)
83
-    {
84
-        if ($signer instanceof Swift_Signers_HeaderSigner) {
85
-            $this->headerSigners[] = $signer;
86
-        } elseif ($signer instanceof Swift_Signers_BodySigner) {
87
-            $this->bodySigners[] = $signer;
88
-        }
89
-
90
-        return $this;
91
-    }
92
-
93
-    /**
94
-     * Detach a signature handler from a message.
95
-     *
96
-     * @return $this
97
-     */
98
-    public function detachSigner(Swift_Signer $signer)
99
-    {
100
-        if ($signer instanceof Swift_Signers_HeaderSigner) {
101
-            foreach ($this->headerSigners as $k => $headerSigner) {
102
-                if ($headerSigner === $signer) {
103
-                    unset($this->headerSigners[$k]);
104
-
105
-                    return $this;
106
-                }
107
-            }
108
-        } elseif ($signer instanceof Swift_Signers_BodySigner) {
109
-            foreach ($this->bodySigners as $k => $bodySigner) {
110
-                if ($bodySigner === $signer) {
111
-                    unset($this->bodySigners[$k]);
112
-
113
-                    return $this;
114
-                }
115
-            }
116
-        }
117
-
118
-        return $this;
119
-    }
120
-
121
-    /**
122
-     * Clear all signature handlers attached to the message.
123
-     *
124
-     * @return $this
125
-     */
126
-    public function clearSigners()
127
-    {
128
-        $this->headerSigners = [];
129
-        $this->bodySigners = [];
130
-
131
-        return $this;
132
-    }
133
-
134
-    /**
135
-     * Get this message as a complete string.
136
-     *
137
-     * @return string
138
-     */
139
-    public function toString()
140
-    {
141
-        if (empty($this->headerSigners) && empty($this->bodySigners)) {
142
-            return parent::toString();
143
-        }
144
-
145
-        $this->saveMessage();
146
-
147
-        $this->doSign();
148
-
149
-        $string = parent::toString();
150
-
151
-        $this->restoreMessage();
152
-
153
-        return $string;
154
-    }
155
-
156
-    /**
157
-     * Write this message to a {@link Swift_InputByteStream}.
158
-     */
159
-    public function toByteStream(Swift_InputByteStream $is)
160
-    {
161
-        if (empty($this->headerSigners) && empty($this->bodySigners)) {
162
-            parent::toByteStream($is);
163
-
164
-            return;
165
-        }
166
-
167
-        $this->saveMessage();
168
-
169
-        $this->doSign();
170
-
171
-        parent::toByteStream($is);
172
-
173
-        $this->restoreMessage();
174
-    }
175
-
176
-    public function __wakeup()
177
-    {
178
-        Swift_DependencyContainer::getInstance()->createDependenciesFor('mime.message');
179
-    }
180
-
181
-    /**
182
-     * loops through signers and apply the signatures.
183
-     */
184
-    protected function doSign()
185
-    {
186
-        foreach ($this->bodySigners as $signer) {
187
-            $altered = $signer->getAlteredHeaders();
188
-            $this->saveHeaders($altered);
189
-            $signer->signMessage($this);
190
-        }
191
-
192
-        foreach ($this->headerSigners as $signer) {
193
-            $altered = $signer->getAlteredHeaders();
194
-            $this->saveHeaders($altered);
195
-            $signer->reset();
196
-
197
-            $signer->setHeaders($this->getHeaders());
198
-
199
-            $signer->startBody();
200
-            $this->bodyToByteStream($signer);
201
-            $signer->endBody();
202
-
203
-            $signer->addSignature($this->getHeaders());
204
-        }
205
-    }
206
-
207
-    /**
208
-     * save the message before any signature is applied.
209
-     */
210
-    protected function saveMessage()
211
-    {
212
-        $this->savedMessage = ['headers' => []];
213
-        $this->savedMessage['body'] = $this->getBody();
214
-        $this->savedMessage['children'] = $this->getChildren();
215
-        if (\count($this->savedMessage['children']) > 0 && '' != $this->getBody()) {
216
-            $this->setChildren(array_merge([$this->becomeMimePart()], $this->savedMessage['children']));
217
-            $this->setBody('');
218
-        }
219
-    }
220
-
221
-    /**
222
-     * save the original headers.
223
-     */
224
-    protected function saveHeaders(array $altered)
225
-    {
226
-        foreach ($altered as $head) {
227
-            $lc = strtolower($head ?? '');
228
-
229
-            if (!isset($this->savedMessage['headers'][$lc])) {
230
-                $this->savedMessage['headers'][$lc] = $this->getHeaders()->getAll($head);
231
-            }
232
-        }
233
-    }
234
-
235
-    /**
236
-     * Remove or restore altered headers.
237
-     */
238
-    protected function restoreHeaders()
239
-    {
240
-        foreach ($this->savedMessage['headers'] as $name => $savedValue) {
241
-            $headers = $this->getHeaders()->getAll($name);
242
-
243
-            foreach ($headers as $key => $value) {
244
-                if (!isset($savedValue[$key])) {
245
-                    $this->getHeaders()->remove($name, $key);
246
-                }
247
-            }
248
-        }
249
-    }
250
-
251
-    /**
252
-     * Restore message body.
253
-     */
254
-    protected function restoreMessage()
255
-    {
256
-        $this->setBody($this->savedMessage['body']);
257
-        $this->setChildren($this->savedMessage['children']);
258
-
259
-        $this->restoreHeaders();
260
-        $this->savedMessage = [];
261
-    }
262
-
263
-    /**
264
-     * Clone Message Signers.
265
-     *
266
-     * @see Swift_Mime_SimpleMimeEntity::__clone()
267
-     */
268
-    public function __clone()
269
-    {
270
-        parent::__clone();
271
-        foreach ($this->bodySigners as $key => $bodySigner) {
272
-            $this->bodySigners[$key] = clone $bodySigner;
273
-        }
274
-
275
-        foreach ($this->headerSigners as $key => $headerSigner) {
276
-            $this->headerSigners[$key] = clone $headerSigner;
277
-        }
278
-    }
18
+	/**
19
+	 * @var Swift_Signers_HeaderSigner[]
20
+	 */
21
+	private $headerSigners = [];
22
+
23
+	/**
24
+	 * @var Swift_Signers_BodySigner[]
25
+	 */
26
+	private $bodySigners = [];
27
+
28
+	/**
29
+	 * @var array
30
+	 */
31
+	private $savedMessage = [];
32
+
33
+	/**
34
+	 * Create a new Message.
35
+	 *
36
+	 * Details may be optionally passed into the constructor.
37
+	 *
38
+	 * @param string $subject
39
+	 * @param string $body
40
+	 * @param string $contentType
41
+	 * @param string $charset
42
+	 */
43
+	public function __construct($subject = null, $body = null, $contentType = null, $charset = null)
44
+	{
45
+		\call_user_func_array(
46
+			[$this, 'Swift_Mime_SimpleMessage::__construct'],
47
+			Swift_DependencyContainer::getInstance()
48
+				->createDependenciesFor('mime.message')
49
+			);
50
+
51
+		if (!isset($charset)) {
52
+			$charset = Swift_DependencyContainer::getInstance()
53
+				->lookup('properties.charset');
54
+		}
55
+		$this->setSubject($subject);
56
+		$this->setBody($body);
57
+		$this->setCharset($charset);
58
+		if ($contentType) {
59
+			$this->setContentType($contentType);
60
+		}
61
+	}
62
+
63
+	/**
64
+	 * Add a MimePart to this Message.
65
+	 *
66
+	 * @param string|Swift_OutputByteStream $body
67
+	 * @param string                        $contentType
68
+	 * @param string                        $charset
69
+	 *
70
+	 * @return $this
71
+	 */
72
+	public function addPart($body, $contentType = null, $charset = null)
73
+	{
74
+		return $this->attach((new Swift_MimePart($body, $contentType, $charset))->setEncoder($this->getEncoder()));
75
+	}
76
+
77
+	/**
78
+	 * Attach a new signature handler to the message.
79
+	 *
80
+	 * @return $this
81
+	 */
82
+	public function attachSigner(Swift_Signer $signer)
83
+	{
84
+		if ($signer instanceof Swift_Signers_HeaderSigner) {
85
+			$this->headerSigners[] = $signer;
86
+		} elseif ($signer instanceof Swift_Signers_BodySigner) {
87
+			$this->bodySigners[] = $signer;
88
+		}
89
+
90
+		return $this;
91
+	}
92
+
93
+	/**
94
+	 * Detach a signature handler from a message.
95
+	 *
96
+	 * @return $this
97
+	 */
98
+	public function detachSigner(Swift_Signer $signer)
99
+	{
100
+		if ($signer instanceof Swift_Signers_HeaderSigner) {
101
+			foreach ($this->headerSigners as $k => $headerSigner) {
102
+				if ($headerSigner === $signer) {
103
+					unset($this->headerSigners[$k]);
104
+
105
+					return $this;
106
+				}
107
+			}
108
+		} elseif ($signer instanceof Swift_Signers_BodySigner) {
109
+			foreach ($this->bodySigners as $k => $bodySigner) {
110
+				if ($bodySigner === $signer) {
111
+					unset($this->bodySigners[$k]);
112
+
113
+					return $this;
114
+				}
115
+			}
116
+		}
117
+
118
+		return $this;
119
+	}
120
+
121
+	/**
122
+	 * Clear all signature handlers attached to the message.
123
+	 *
124
+	 * @return $this
125
+	 */
126
+	public function clearSigners()
127
+	{
128
+		$this->headerSigners = [];
129
+		$this->bodySigners = [];
130
+
131
+		return $this;
132
+	}
133
+
134
+	/**
135
+	 * Get this message as a complete string.
136
+	 *
137
+	 * @return string
138
+	 */
139
+	public function toString()
140
+	{
141
+		if (empty($this->headerSigners) && empty($this->bodySigners)) {
142
+			return parent::toString();
143
+		}
144
+
145
+		$this->saveMessage();
146
+
147
+		$this->doSign();
148
+
149
+		$string = parent::toString();
150
+
151
+		$this->restoreMessage();
152
+
153
+		return $string;
154
+	}
155
+
156
+	/**
157
+	 * Write this message to a {@link Swift_InputByteStream}.
158
+	 */
159
+	public function toByteStream(Swift_InputByteStream $is)
160
+	{
161
+		if (empty($this->headerSigners) && empty($this->bodySigners)) {
162
+			parent::toByteStream($is);
163
+
164
+			return;
165
+		}
166
+
167
+		$this->saveMessage();
168
+
169
+		$this->doSign();
170
+
171
+		parent::toByteStream($is);
172
+
173
+		$this->restoreMessage();
174
+	}
175
+
176
+	public function __wakeup()
177
+	{
178
+		Swift_DependencyContainer::getInstance()->createDependenciesFor('mime.message');
179
+	}
180
+
181
+	/**
182
+	 * loops through signers and apply the signatures.
183
+	 */
184
+	protected function doSign()
185
+	{
186
+		foreach ($this->bodySigners as $signer) {
187
+			$altered = $signer->getAlteredHeaders();
188
+			$this->saveHeaders($altered);
189
+			$signer->signMessage($this);
190
+		}
191
+
192
+		foreach ($this->headerSigners as $signer) {
193
+			$altered = $signer->getAlteredHeaders();
194
+			$this->saveHeaders($altered);
195
+			$signer->reset();
196
+
197
+			$signer->setHeaders($this->getHeaders());
198
+
199
+			$signer->startBody();
200
+			$this->bodyToByteStream($signer);
201
+			$signer->endBody();
202
+
203
+			$signer->addSignature($this->getHeaders());
204
+		}
205
+	}
206
+
207
+	/**
208
+	 * save the message before any signature is applied.
209
+	 */
210
+	protected function saveMessage()
211
+	{
212
+		$this->savedMessage = ['headers' => []];
213
+		$this->savedMessage['body'] = $this->getBody();
214
+		$this->savedMessage['children'] = $this->getChildren();
215
+		if (\count($this->savedMessage['children']) > 0 && '' != $this->getBody()) {
216
+			$this->setChildren(array_merge([$this->becomeMimePart()], $this->savedMessage['children']));
217
+			$this->setBody('');
218
+		}
219
+	}
220
+
221
+	/**
222
+	 * save the original headers.
223
+	 */
224
+	protected function saveHeaders(array $altered)
225
+	{
226
+		foreach ($altered as $head) {
227
+			$lc = strtolower($head ?? '');
228
+
229
+			if (!isset($this->savedMessage['headers'][$lc])) {
230
+				$this->savedMessage['headers'][$lc] = $this->getHeaders()->getAll($head);
231
+			}
232
+		}
233
+	}
234
+
235
+	/**
236
+	 * Remove or restore altered headers.
237
+	 */
238
+	protected function restoreHeaders()
239
+	{
240
+		foreach ($this->savedMessage['headers'] as $name => $savedValue) {
241
+			$headers = $this->getHeaders()->getAll($name);
242
+
243
+			foreach ($headers as $key => $value) {
244
+				if (!isset($savedValue[$key])) {
245
+					$this->getHeaders()->remove($name, $key);
246
+				}
247
+			}
248
+		}
249
+	}
250
+
251
+	/**
252
+	 * Restore message body.
253
+	 */
254
+	protected function restoreMessage()
255
+	{
256
+		$this->setBody($this->savedMessage['body']);
257
+		$this->setChildren($this->savedMessage['children']);
258
+
259
+		$this->restoreHeaders();
260
+		$this->savedMessage = [];
261
+	}
262
+
263
+	/**
264
+	 * Clone Message Signers.
265
+	 *
266
+	 * @see Swift_Mime_SimpleMimeEntity::__clone()
267
+	 */
268
+	public function __clone()
269
+	{
270
+		parent::__clone();
271
+		foreach ($this->bodySigners as $key => $bodySigner) {
272
+			$this->bodySigners[$key] = clone $bodySigner;
273
+		}
274
+
275
+		foreach ($this->headerSigners as $key => $headerSigner) {
276
+			$this->headerSigners[$key] = clone $headerSigner;
277
+		}
278
+	}
279 279
 }
Please login to merge, or discard this patch.
htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php 1 patch
Indentation   +252 added lines, -252 removed lines patch added patch discarded remove patch
@@ -17,284 +17,284 @@
 block discarded – undo
17 17
  */
18 18
 class Swift_Encoder_QpEncoder implements Swift_Encoder
19 19
 {
20
-    /**
21
-     * The CharacterStream used for reading characters (as opposed to bytes).
22
-     *
23
-     * @var Swift_CharacterStream
24
-     */
25
-    protected $charStream;
20
+	/**
21
+	 * The CharacterStream used for reading characters (as opposed to bytes).
22
+	 *
23
+	 * @var Swift_CharacterStream
24
+	 */
25
+	protected $charStream;
26 26
 
27
-    /**
28
-     * A filter used if input should be canonicalized.
29
-     *
30
-     * @var Swift_StreamFilter
31
-     */
32
-    protected $filter;
27
+	/**
28
+	 * A filter used if input should be canonicalized.
29
+	 *
30
+	 * @var Swift_StreamFilter
31
+	 */
32
+	protected $filter;
33 33
 
34
-    /**
35
-     * Pre-computed QP for HUGE optimization.
36
-     *
37
-     * @var string[]
38
-     */
39
-    protected static $qpMap = [
40
-        0 => '=00', 1 => '=01', 2 => '=02', 3 => '=03', 4 => '=04',
41
-        5 => '=05', 6 => '=06', 7 => '=07', 8 => '=08', 9 => '=09',
42
-        10 => '=0A', 11 => '=0B', 12 => '=0C', 13 => '=0D', 14 => '=0E',
43
-        15 => '=0F', 16 => '=10', 17 => '=11', 18 => '=12', 19 => '=13',
44
-        20 => '=14', 21 => '=15', 22 => '=16', 23 => '=17', 24 => '=18',
45
-        25 => '=19', 26 => '=1A', 27 => '=1B', 28 => '=1C', 29 => '=1D',
46
-        30 => '=1E', 31 => '=1F', 32 => '=20', 33 => '=21', 34 => '=22',
47
-        35 => '=23', 36 => '=24', 37 => '=25', 38 => '=26', 39 => '=27',
48
-        40 => '=28', 41 => '=29', 42 => '=2A', 43 => '=2B', 44 => '=2C',
49
-        45 => '=2D', 46 => '=2E', 47 => '=2F', 48 => '=30', 49 => '=31',
50
-        50 => '=32', 51 => '=33', 52 => '=34', 53 => '=35', 54 => '=36',
51
-        55 => '=37', 56 => '=38', 57 => '=39', 58 => '=3A', 59 => '=3B',
52
-        60 => '=3C', 61 => '=3D', 62 => '=3E', 63 => '=3F', 64 => '=40',
53
-        65 => '=41', 66 => '=42', 67 => '=43', 68 => '=44', 69 => '=45',
54
-        70 => '=46', 71 => '=47', 72 => '=48', 73 => '=49', 74 => '=4A',
55
-        75 => '=4B', 76 => '=4C', 77 => '=4D', 78 => '=4E', 79 => '=4F',
56
-        80 => '=50', 81 => '=51', 82 => '=52', 83 => '=53', 84 => '=54',
57
-        85 => '=55', 86 => '=56', 87 => '=57', 88 => '=58', 89 => '=59',
58
-        90 => '=5A', 91 => '=5B', 92 => '=5C', 93 => '=5D', 94 => '=5E',
59
-        95 => '=5F', 96 => '=60', 97 => '=61', 98 => '=62', 99 => '=63',
60
-        100 => '=64', 101 => '=65', 102 => '=66', 103 => '=67', 104 => '=68',
61
-        105 => '=69', 106 => '=6A', 107 => '=6B', 108 => '=6C', 109 => '=6D',
62
-        110 => '=6E', 111 => '=6F', 112 => '=70', 113 => '=71', 114 => '=72',
63
-        115 => '=73', 116 => '=74', 117 => '=75', 118 => '=76', 119 => '=77',
64
-        120 => '=78', 121 => '=79', 122 => '=7A', 123 => '=7B', 124 => '=7C',
65
-        125 => '=7D', 126 => '=7E', 127 => '=7F', 128 => '=80', 129 => '=81',
66
-        130 => '=82', 131 => '=83', 132 => '=84', 133 => '=85', 134 => '=86',
67
-        135 => '=87', 136 => '=88', 137 => '=89', 138 => '=8A', 139 => '=8B',
68
-        140 => '=8C', 141 => '=8D', 142 => '=8E', 143 => '=8F', 144 => '=90',
69
-        145 => '=91', 146 => '=92', 147 => '=93', 148 => '=94', 149 => '=95',
70
-        150 => '=96', 151 => '=97', 152 => '=98', 153 => '=99', 154 => '=9A',
71
-        155 => '=9B', 156 => '=9C', 157 => '=9D', 158 => '=9E', 159 => '=9F',
72
-        160 => '=A0', 161 => '=A1', 162 => '=A2', 163 => '=A3', 164 => '=A4',
73
-        165 => '=A5', 166 => '=A6', 167 => '=A7', 168 => '=A8', 169 => '=A9',
74
-        170 => '=AA', 171 => '=AB', 172 => '=AC', 173 => '=AD', 174 => '=AE',
75
-        175 => '=AF', 176 => '=B0', 177 => '=B1', 178 => '=B2', 179 => '=B3',
76
-        180 => '=B4', 181 => '=B5', 182 => '=B6', 183 => '=B7', 184 => '=B8',
77
-        185 => '=B9', 186 => '=BA', 187 => '=BB', 188 => '=BC', 189 => '=BD',
78
-        190 => '=BE', 191 => '=BF', 192 => '=C0', 193 => '=C1', 194 => '=C2',
79
-        195 => '=C3', 196 => '=C4', 197 => '=C5', 198 => '=C6', 199 => '=C7',
80
-        200 => '=C8', 201 => '=C9', 202 => '=CA', 203 => '=CB', 204 => '=CC',
81
-        205 => '=CD', 206 => '=CE', 207 => '=CF', 208 => '=D0', 209 => '=D1',
82
-        210 => '=D2', 211 => '=D3', 212 => '=D4', 213 => '=D5', 214 => '=D6',
83
-        215 => '=D7', 216 => '=D8', 217 => '=D9', 218 => '=DA', 219 => '=DB',
84
-        220 => '=DC', 221 => '=DD', 222 => '=DE', 223 => '=DF', 224 => '=E0',
85
-        225 => '=E1', 226 => '=E2', 227 => '=E3', 228 => '=E4', 229 => '=E5',
86
-        230 => '=E6', 231 => '=E7', 232 => '=E8', 233 => '=E9', 234 => '=EA',
87
-        235 => '=EB', 236 => '=EC', 237 => '=ED', 238 => '=EE', 239 => '=EF',
88
-        240 => '=F0', 241 => '=F1', 242 => '=F2', 243 => '=F3', 244 => '=F4',
89
-        245 => '=F5', 246 => '=F6', 247 => '=F7', 248 => '=F8', 249 => '=F9',
90
-        250 => '=FA', 251 => '=FB', 252 => '=FC', 253 => '=FD', 254 => '=FE',
91
-        255 => '=FF',
92
-        ];
34
+	/**
35
+	 * Pre-computed QP for HUGE optimization.
36
+	 *
37
+	 * @var string[]
38
+	 */
39
+	protected static $qpMap = [
40
+		0 => '=00', 1 => '=01', 2 => '=02', 3 => '=03', 4 => '=04',
41
+		5 => '=05', 6 => '=06', 7 => '=07', 8 => '=08', 9 => '=09',
42
+		10 => '=0A', 11 => '=0B', 12 => '=0C', 13 => '=0D', 14 => '=0E',
43
+		15 => '=0F', 16 => '=10', 17 => '=11', 18 => '=12', 19 => '=13',
44
+		20 => '=14', 21 => '=15', 22 => '=16', 23 => '=17', 24 => '=18',
45
+		25 => '=19', 26 => '=1A', 27 => '=1B', 28 => '=1C', 29 => '=1D',
46
+		30 => '=1E', 31 => '=1F', 32 => '=20', 33 => '=21', 34 => '=22',
47
+		35 => '=23', 36 => '=24', 37 => '=25', 38 => '=26', 39 => '=27',
48
+		40 => '=28', 41 => '=29', 42 => '=2A', 43 => '=2B', 44 => '=2C',
49
+		45 => '=2D', 46 => '=2E', 47 => '=2F', 48 => '=30', 49 => '=31',
50
+		50 => '=32', 51 => '=33', 52 => '=34', 53 => '=35', 54 => '=36',
51
+		55 => '=37', 56 => '=38', 57 => '=39', 58 => '=3A', 59 => '=3B',
52
+		60 => '=3C', 61 => '=3D', 62 => '=3E', 63 => '=3F', 64 => '=40',
53
+		65 => '=41', 66 => '=42', 67 => '=43', 68 => '=44', 69 => '=45',
54
+		70 => '=46', 71 => '=47', 72 => '=48', 73 => '=49', 74 => '=4A',
55
+		75 => '=4B', 76 => '=4C', 77 => '=4D', 78 => '=4E', 79 => '=4F',
56
+		80 => '=50', 81 => '=51', 82 => '=52', 83 => '=53', 84 => '=54',
57
+		85 => '=55', 86 => '=56', 87 => '=57', 88 => '=58', 89 => '=59',
58
+		90 => '=5A', 91 => '=5B', 92 => '=5C', 93 => '=5D', 94 => '=5E',
59
+		95 => '=5F', 96 => '=60', 97 => '=61', 98 => '=62', 99 => '=63',
60
+		100 => '=64', 101 => '=65', 102 => '=66', 103 => '=67', 104 => '=68',
61
+		105 => '=69', 106 => '=6A', 107 => '=6B', 108 => '=6C', 109 => '=6D',
62
+		110 => '=6E', 111 => '=6F', 112 => '=70', 113 => '=71', 114 => '=72',
63
+		115 => '=73', 116 => '=74', 117 => '=75', 118 => '=76', 119 => '=77',
64
+		120 => '=78', 121 => '=79', 122 => '=7A', 123 => '=7B', 124 => '=7C',
65
+		125 => '=7D', 126 => '=7E', 127 => '=7F', 128 => '=80', 129 => '=81',
66
+		130 => '=82', 131 => '=83', 132 => '=84', 133 => '=85', 134 => '=86',
67
+		135 => '=87', 136 => '=88', 137 => '=89', 138 => '=8A', 139 => '=8B',
68
+		140 => '=8C', 141 => '=8D', 142 => '=8E', 143 => '=8F', 144 => '=90',
69
+		145 => '=91', 146 => '=92', 147 => '=93', 148 => '=94', 149 => '=95',
70
+		150 => '=96', 151 => '=97', 152 => '=98', 153 => '=99', 154 => '=9A',
71
+		155 => '=9B', 156 => '=9C', 157 => '=9D', 158 => '=9E', 159 => '=9F',
72
+		160 => '=A0', 161 => '=A1', 162 => '=A2', 163 => '=A3', 164 => '=A4',
73
+		165 => '=A5', 166 => '=A6', 167 => '=A7', 168 => '=A8', 169 => '=A9',
74
+		170 => '=AA', 171 => '=AB', 172 => '=AC', 173 => '=AD', 174 => '=AE',
75
+		175 => '=AF', 176 => '=B0', 177 => '=B1', 178 => '=B2', 179 => '=B3',
76
+		180 => '=B4', 181 => '=B5', 182 => '=B6', 183 => '=B7', 184 => '=B8',
77
+		185 => '=B9', 186 => '=BA', 187 => '=BB', 188 => '=BC', 189 => '=BD',
78
+		190 => '=BE', 191 => '=BF', 192 => '=C0', 193 => '=C1', 194 => '=C2',
79
+		195 => '=C3', 196 => '=C4', 197 => '=C5', 198 => '=C6', 199 => '=C7',
80
+		200 => '=C8', 201 => '=C9', 202 => '=CA', 203 => '=CB', 204 => '=CC',
81
+		205 => '=CD', 206 => '=CE', 207 => '=CF', 208 => '=D0', 209 => '=D1',
82
+		210 => '=D2', 211 => '=D3', 212 => '=D4', 213 => '=D5', 214 => '=D6',
83
+		215 => '=D7', 216 => '=D8', 217 => '=D9', 218 => '=DA', 219 => '=DB',
84
+		220 => '=DC', 221 => '=DD', 222 => '=DE', 223 => '=DF', 224 => '=E0',
85
+		225 => '=E1', 226 => '=E2', 227 => '=E3', 228 => '=E4', 229 => '=E5',
86
+		230 => '=E6', 231 => '=E7', 232 => '=E8', 233 => '=E9', 234 => '=EA',
87
+		235 => '=EB', 236 => '=EC', 237 => '=ED', 238 => '=EE', 239 => '=EF',
88
+		240 => '=F0', 241 => '=F1', 242 => '=F2', 243 => '=F3', 244 => '=F4',
89
+		245 => '=F5', 246 => '=F6', 247 => '=F7', 248 => '=F8', 249 => '=F9',
90
+		250 => '=FA', 251 => '=FB', 252 => '=FC', 253 => '=FD', 254 => '=FE',
91
+		255 => '=FF',
92
+		];
93 93
 
94
-    protected static $safeMapShare = [];
94
+	protected static $safeMapShare = [];
95 95
 
96
-    /**
97
-     * A map of non-encoded ascii characters.
98
-     *
99
-     * @var string[]
100
-     */
101
-    protected $safeMap = [];
96
+	/**
97
+	 * A map of non-encoded ascii characters.
98
+	 *
99
+	 * @var string[]
100
+	 */
101
+	protected $safeMap = [];
102 102
 
103
-    /**
104
-     * Creates a new QpEncoder for the given CharacterStream.
105
-     *
106
-     * @param Swift_CharacterStream $charStream to use for reading characters
107
-     * @param Swift_StreamFilter    $filter     if input should be canonicalized
108
-     */
109
-    public function __construct(Swift_CharacterStream $charStream, Swift_StreamFilter $filter = null)
110
-    {
111
-        $this->charStream = $charStream;
112
-        if (!isset(self::$safeMapShare[$this->getSafeMapShareId()])) {
113
-            $this->initSafeMap();
114
-            self::$safeMapShare[$this->getSafeMapShareId()] = $this->safeMap;
115
-        } else {
116
-            $this->safeMap = self::$safeMapShare[$this->getSafeMapShareId()];
117
-        }
118
-        $this->filter = $filter;
119
-    }
103
+	/**
104
+	 * Creates a new QpEncoder for the given CharacterStream.
105
+	 *
106
+	 * @param Swift_CharacterStream $charStream to use for reading characters
107
+	 * @param Swift_StreamFilter    $filter     if input should be canonicalized
108
+	 */
109
+	public function __construct(Swift_CharacterStream $charStream, Swift_StreamFilter $filter = null)
110
+	{
111
+		$this->charStream = $charStream;
112
+		if (!isset(self::$safeMapShare[$this->getSafeMapShareId()])) {
113
+			$this->initSafeMap();
114
+			self::$safeMapShare[$this->getSafeMapShareId()] = $this->safeMap;
115
+		} else {
116
+			$this->safeMap = self::$safeMapShare[$this->getSafeMapShareId()];
117
+		}
118
+		$this->filter = $filter;
119
+	}
120 120
 
121
-    public function __sleep()
122
-    {
123
-        return ['charStream', 'filter'];
124
-    }
121
+	public function __sleep()
122
+	{
123
+		return ['charStream', 'filter'];
124
+	}
125 125
 
126
-    public function __wakeup()
127
-    {
128
-        if (!isset(self::$safeMapShare[$this->getSafeMapShareId()])) {
129
-            $this->initSafeMap();
130
-            self::$safeMapShare[$this->getSafeMapShareId()] = $this->safeMap;
131
-        } else {
132
-            $this->safeMap = self::$safeMapShare[$this->getSafeMapShareId()];
133
-        }
134
-    }
126
+	public function __wakeup()
127
+	{
128
+		if (!isset(self::$safeMapShare[$this->getSafeMapShareId()])) {
129
+			$this->initSafeMap();
130
+			self::$safeMapShare[$this->getSafeMapShareId()] = $this->safeMap;
131
+		} else {
132
+			$this->safeMap = self::$safeMapShare[$this->getSafeMapShareId()];
133
+		}
134
+	}
135 135
 
136
-    protected function getSafeMapShareId()
137
-    {
138
-        return static::class;
139
-    }
136
+	protected function getSafeMapShareId()
137
+	{
138
+		return static::class;
139
+	}
140 140
 
141
-    protected function initSafeMap()
142
-    {
143
-        foreach (array_merge(
144
-            [0x09, 0x20], range(0x21, 0x3C), range(0x3E, 0x7E)) as $byte) {
145
-            $this->safeMap[$byte] = \chr($byte);
146
-        }
147
-    }
141
+	protected function initSafeMap()
142
+	{
143
+		foreach (array_merge(
144
+			[0x09, 0x20], range(0x21, 0x3C), range(0x3E, 0x7E)) as $byte) {
145
+			$this->safeMap[$byte] = \chr($byte);
146
+		}
147
+	}
148 148
 
149
-    /**
150
-     * Takes an unencoded string and produces a QP encoded string from it.
151
-     *
152
-     * QP encoded strings have a maximum line length of 76 characters.
153
-     * If the first line needs to be shorter, indicate the difference with
154
-     * $firstLineOffset.
155
-     *
156
-     * @param string $string          to encode
157
-     * @param int    $firstLineOffset optional
158
-     * @param int    $maxLineLength   optional 0 indicates the default of 76 chars
159
-     *
160
-     * @return string
161
-     */
162
-    public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0)
163
-    {
164
-        if ($maxLineLength > 76 || $maxLineLength <= 0) {
165
-            $maxLineLength = 76;
166
-        }
149
+	/**
150
+	 * Takes an unencoded string and produces a QP encoded string from it.
151
+	 *
152
+	 * QP encoded strings have a maximum line length of 76 characters.
153
+	 * If the first line needs to be shorter, indicate the difference with
154
+	 * $firstLineOffset.
155
+	 *
156
+	 * @param string $string          to encode
157
+	 * @param int    $firstLineOffset optional
158
+	 * @param int    $maxLineLength   optional 0 indicates the default of 76 chars
159
+	 *
160
+	 * @return string
161
+	 */
162
+	public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0)
163
+	{
164
+		if ($maxLineLength > 76 || $maxLineLength <= 0) {
165
+			$maxLineLength = 76;
166
+		}
167 167
 
168
-        $thisLineLength = $maxLineLength - $firstLineOffset;
168
+		$thisLineLength = $maxLineLength - $firstLineOffset;
169 169
 
170
-        $lines = [];
171
-        $lNo = 0;
172
-        $lines[$lNo] = '';
173
-        $currentLine = &$lines[$lNo++];
174
-        $size = $lineLen = 0;
170
+		$lines = [];
171
+		$lNo = 0;
172
+		$lines[$lNo] = '';
173
+		$currentLine = &$lines[$lNo++];
174
+		$size = $lineLen = 0;
175 175
 
176
-        $this->charStream->flushContents();
177
-        $this->charStream->importString($string);
176
+		$this->charStream->flushContents();
177
+		$this->charStream->importString($string);
178 178
 
179
-        // Fetching more than 4 chars at one is slower, as is fetching fewer bytes
180
-        // Conveniently 4 chars is the UTF-8 safe number since UTF-8 has up to 6
181
-        // bytes per char and (6 * 4 * 3 = 72 chars per line) * =NN is 3 bytes
182
-        while (false !== $bytes = $this->nextSequence()) {
183
-            // If we're filtering the input
184
-            if (isset($this->filter)) {
185
-                // If we can't filter because we need more bytes
186
-                while ($this->filter->shouldBuffer($bytes)) {
187
-                    // Then collect bytes into the buffer
188
-                    if (false === $moreBytes = $this->nextSequence(1)) {
189
-                        break;
190
-                    }
179
+		// Fetching more than 4 chars at one is slower, as is fetching fewer bytes
180
+		// Conveniently 4 chars is the UTF-8 safe number since UTF-8 has up to 6
181
+		// bytes per char and (6 * 4 * 3 = 72 chars per line) * =NN is 3 bytes
182
+		while (false !== $bytes = $this->nextSequence()) {
183
+			// If we're filtering the input
184
+			if (isset($this->filter)) {
185
+				// If we can't filter because we need more bytes
186
+				while ($this->filter->shouldBuffer($bytes)) {
187
+					// Then collect bytes into the buffer
188
+					if (false === $moreBytes = $this->nextSequence(1)) {
189
+						break;
190
+					}
191 191
 
192
-                    foreach ($moreBytes as $b) {
193
-                        $bytes[] = $b;
194
-                    }
195
-                }
196
-                // And filter them
197
-                $bytes = $this->filter->filter($bytes);
198
-            }
192
+					foreach ($moreBytes as $b) {
193
+						$bytes[] = $b;
194
+					}
195
+				}
196
+				// And filter them
197
+				$bytes = $this->filter->filter($bytes);
198
+			}
199 199
 
200
-            $enc = $this->encodeByteSequence($bytes, $size);
200
+			$enc = $this->encodeByteSequence($bytes, $size);
201 201
 
202
-            $i = strpos($enc, '=0D=0A');
203
-            $newLineLength = $lineLen + (false === $i ? $size : $i);
202
+			$i = strpos($enc, '=0D=0A');
203
+			$newLineLength = $lineLen + (false === $i ? $size : $i);
204 204
 
205
-            if ($currentLine && $newLineLength >= $thisLineLength) {
206
-                $lines[$lNo] = '';
207
-                $currentLine = &$lines[$lNo++];
208
-                $thisLineLength = $maxLineLength;
209
-                $lineLen = 0;
210
-            }
205
+			if ($currentLine && $newLineLength >= $thisLineLength) {
206
+				$lines[$lNo] = '';
207
+				$currentLine = &$lines[$lNo++];
208
+				$thisLineLength = $maxLineLength;
209
+				$lineLen = 0;
210
+			}
211 211
 
212
-            $currentLine .= $enc;
212
+			$currentLine .= $enc;
213 213
 
214
-            if (false === $i) {
215
-                $lineLen += $size;
216
-            } else {
217
-                // 6 is the length of '=0D=0A'.
218
-                $lineLen = $size - strrpos($enc, '=0D=0A') - 6;
219
-            }
220
-        }
214
+			if (false === $i) {
215
+				$lineLen += $size;
216
+			} else {
217
+				// 6 is the length of '=0D=0A'.
218
+				$lineLen = $size - strrpos($enc, '=0D=0A') - 6;
219
+			}
220
+		}
221 221
 
222
-        return $this->standardize(implode("=\r\n", $lines));
223
-    }
222
+		return $this->standardize(implode("=\r\n", $lines));
223
+	}
224 224
 
225
-    /**
226
-     * Updates the charset used.
227
-     *
228
-     * @param string $charset
229
-     */
230
-    public function charsetChanged($charset)
231
-    {
232
-        $this->charStream->setCharacterSet($charset);
233
-    }
225
+	/**
226
+	 * Updates the charset used.
227
+	 *
228
+	 * @param string $charset
229
+	 */
230
+	public function charsetChanged($charset)
231
+	{
232
+		$this->charStream->setCharacterSet($charset);
233
+	}
234 234
 
235
-    /**
236
-     * Encode the given byte array into a verbatim QP form.
237
-     *
238
-     * @param int[] $bytes
239
-     * @param int   $size
240
-     *
241
-     * @return string
242
-     */
243
-    protected function encodeByteSequence(array $bytes, &$size)
244
-    {
245
-        $ret = '';
246
-        $size = 0;
247
-        foreach ($bytes as $b) {
248
-            if (isset($this->safeMap[$b])) {
249
-                $ret .= $this->safeMap[$b];
250
-                ++$size;
251
-            } else {
252
-                $ret .= self::$qpMap[$b];
253
-                $size += 3;
254
-            }
255
-        }
235
+	/**
236
+	 * Encode the given byte array into a verbatim QP form.
237
+	 *
238
+	 * @param int[] $bytes
239
+	 * @param int   $size
240
+	 *
241
+	 * @return string
242
+	 */
243
+	protected function encodeByteSequence(array $bytes, &$size)
244
+	{
245
+		$ret = '';
246
+		$size = 0;
247
+		foreach ($bytes as $b) {
248
+			if (isset($this->safeMap[$b])) {
249
+				$ret .= $this->safeMap[$b];
250
+				++$size;
251
+			} else {
252
+				$ret .= self::$qpMap[$b];
253
+				$size += 3;
254
+			}
255
+		}
256 256
 
257
-        return $ret;
258
-    }
257
+		return $ret;
258
+	}
259 259
 
260
-    /**
261
-     * Get the next sequence of bytes to read from the char stream.
262
-     *
263
-     * @param int $size number of bytes to read
264
-     *
265
-     * @return int[]
266
-     */
267
-    protected function nextSequence($size = 4)
268
-    {
269
-        return $this->charStream->readBytes($size);
270
-    }
260
+	/**
261
+	 * Get the next sequence of bytes to read from the char stream.
262
+	 *
263
+	 * @param int $size number of bytes to read
264
+	 *
265
+	 * @return int[]
266
+	 */
267
+	protected function nextSequence($size = 4)
268
+	{
269
+		return $this->charStream->readBytes($size);
270
+	}
271 271
 
272
-    /**
273
-     * Make sure CRLF is correct and HT/SPACE are in valid places.
274
-     *
275
-     * @param string $string
276
-     *
277
-     * @return string
278
-     */
279
-    protected function standardize($string)
280
-    {
281
-        $string = str_replace(["\t=0D=0A", ' =0D=0A', '=0D=0A'],
282
-            ["=09\r\n", "=20\r\n", "\r\n"], $string
283
-            );
284
-        switch ($end = \ord(substr($string, -1))) {
285
-            case 0x09:
286
-            case 0x20:
287
-                $string = substr_replace($string, self::$qpMap[$end], -1);
288
-        }
272
+	/**
273
+	 * Make sure CRLF is correct and HT/SPACE are in valid places.
274
+	 *
275
+	 * @param string $string
276
+	 *
277
+	 * @return string
278
+	 */
279
+	protected function standardize($string)
280
+	{
281
+		$string = str_replace(["\t=0D=0A", ' =0D=0A', '=0D=0A'],
282
+			["=09\r\n", "=20\r\n", "\r\n"], $string
283
+			);
284
+		switch ($end = \ord(substr($string, -1))) {
285
+			case 0x09:
286
+			case 0x20:
287
+				$string = substr_replace($string, self::$qpMap[$end], -1);
288
+		}
289 289
 
290
-        return $string;
291
-    }
290
+		return $string;
291
+	}
292 292
 
293
-    /**
294
-     * Make a deep copy of object.
295
-     */
296
-    public function __clone()
297
-    {
298
-        $this->charStream = clone $this->charStream;
299
-    }
293
+	/**
294
+	 * Make a deep copy of object.
295
+	 */
296
+	public function __clone()
297
+	{
298
+		$this->charStream = clone $this->charStream;
299
+	}
300 300
 }
Please login to merge, or discard this patch.
htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php 1 patch
Indentation   +63 added lines, -63 removed lines patch added patch discarded remove patch
@@ -15,76 +15,76 @@
 block discarded – undo
15 15
  */
16 16
 class Swift_Encoder_Rfc2231Encoder implements Swift_Encoder
17 17
 {
18
-    /**
19
-     * A character stream to use when reading a string as characters instead of bytes.
20
-     *
21
-     * @var Swift_CharacterStream
22
-     */
23
-    private $charStream;
18
+	/**
19
+	 * A character stream to use when reading a string as characters instead of bytes.
20
+	 *
21
+	 * @var Swift_CharacterStream
22
+	 */
23
+	private $charStream;
24 24
 
25
-    /**
26
-     * Creates a new Rfc2231Encoder using the given character stream instance.
27
-     */
28
-    public function __construct(Swift_CharacterStream $charStream)
29
-    {
30
-        $this->charStream = $charStream;
31
-    }
25
+	/**
26
+	 * Creates a new Rfc2231Encoder using the given character stream instance.
27
+	 */
28
+	public function __construct(Swift_CharacterStream $charStream)
29
+	{
30
+		$this->charStream = $charStream;
31
+	}
32 32
 
33
-    /**
34
-     * Takes an unencoded string and produces a string encoded according to
35
-     * RFC 2231 from it.
36
-     *
37
-     * @param string $string
38
-     * @param int    $firstLineOffset
39
-     * @param int    $maxLineLength   optional, 0 indicates the default of 75 bytes
40
-     *
41
-     * @return string
42
-     */
43
-    public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0)
44
-    {
45
-        $lines = [];
46
-        $lineCount = 0;
47
-        $lines[] = '';
48
-        $currentLine = &$lines[$lineCount++];
33
+	/**
34
+	 * Takes an unencoded string and produces a string encoded according to
35
+	 * RFC 2231 from it.
36
+	 *
37
+	 * @param string $string
38
+	 * @param int    $firstLineOffset
39
+	 * @param int    $maxLineLength   optional, 0 indicates the default of 75 bytes
40
+	 *
41
+	 * @return string
42
+	 */
43
+	public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0)
44
+	{
45
+		$lines = [];
46
+		$lineCount = 0;
47
+		$lines[] = '';
48
+		$currentLine = &$lines[$lineCount++];
49 49
 
50
-        if (0 >= $maxLineLength) {
51
-            $maxLineLength = 75;
52
-        }
50
+		if (0 >= $maxLineLength) {
51
+			$maxLineLength = 75;
52
+		}
53 53
 
54
-        $this->charStream->flushContents();
55
-        $this->charStream->importString($string);
54
+		$this->charStream->flushContents();
55
+		$this->charStream->importString($string);
56 56
 
57
-        $thisLineLength = $maxLineLength - $firstLineOffset;
57
+		$thisLineLength = $maxLineLength - $firstLineOffset;
58 58
 
59
-        while (false !== $char = $this->charStream->read(4)) {
60
-            $encodedChar = rawurlencode($char);
61
-            if (0 != \strlen($currentLine)
62
-                && \strlen($currentLine.$encodedChar) > $thisLineLength) {
63
-                $lines[] = '';
64
-                $currentLine = &$lines[$lineCount++];
65
-                $thisLineLength = $maxLineLength;
66
-            }
67
-            $currentLine .= $encodedChar;
68
-        }
59
+		while (false !== $char = $this->charStream->read(4)) {
60
+			$encodedChar = rawurlencode($char);
61
+			if (0 != \strlen($currentLine)
62
+				&& \strlen($currentLine.$encodedChar) > $thisLineLength) {
63
+				$lines[] = '';
64
+				$currentLine = &$lines[$lineCount++];
65
+				$thisLineLength = $maxLineLength;
66
+			}
67
+			$currentLine .= $encodedChar;
68
+		}
69 69
 
70
-        return implode("\r\n", $lines);
71
-    }
70
+		return implode("\r\n", $lines);
71
+	}
72 72
 
73
-    /**
74
-     * Updates the charset used.
75
-     *
76
-     * @param string $charset
77
-     */
78
-    public function charsetChanged($charset)
79
-    {
80
-        $this->charStream->setCharacterSet($charset);
81
-    }
73
+	/**
74
+	 * Updates the charset used.
75
+	 *
76
+	 * @param string $charset
77
+	 */
78
+	public function charsetChanged($charset)
79
+	{
80
+		$this->charStream->setCharacterSet($charset);
81
+	}
82 82
 
83
-    /**
84
-     * Make a deep copy of object.
85
-     */
86
-    public function __clone()
87
-    {
88
-        $this->charStream = clone $this->charStream;
89
-    }
83
+	/**
84
+	 * Make a deep copy of object.
85
+	 */
86
+	public function __clone()
87
+	{
88
+		$this->charStream = clone $this->charStream;
89
+	}
90 90
 }
Please login to merge, or discard this patch.
htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php 1 patch
Indentation   +36 added lines, -36 removed lines patch added patch discarded remove patch
@@ -15,44 +15,44 @@
 block discarded – undo
15 15
  */
16 16
 class Swift_Encoder_Base64Encoder implements Swift_Encoder
17 17
 {
18
-    /**
19
-     * Takes an unencoded string and produces a Base64 encoded string from it.
20
-     *
21
-     * Base64 encoded strings have a maximum line length of 76 characters.
22
-     * If the first line needs to be shorter, indicate the difference with
23
-     * $firstLineOffset.
24
-     *
25
-     * @param string $string          to encode
26
-     * @param int    $firstLineOffset
27
-     * @param int    $maxLineLength   optional, 0 indicates the default of 76 bytes
28
-     *
29
-     * @return string
30
-     */
31
-    public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0)
32
-    {
33
-        if (0 >= $maxLineLength || 76 < $maxLineLength) {
34
-            $maxLineLength = 76;
35
-        }
18
+	/**
19
+	 * Takes an unencoded string and produces a Base64 encoded string from it.
20
+	 *
21
+	 * Base64 encoded strings have a maximum line length of 76 characters.
22
+	 * If the first line needs to be shorter, indicate the difference with
23
+	 * $firstLineOffset.
24
+	 *
25
+	 * @param string $string          to encode
26
+	 * @param int    $firstLineOffset
27
+	 * @param int    $maxLineLength   optional, 0 indicates the default of 76 bytes
28
+	 *
29
+	 * @return string
30
+	 */
31
+	public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0)
32
+	{
33
+		if (0 >= $maxLineLength || 76 < $maxLineLength) {
34
+			$maxLineLength = 76;
35
+		}
36 36
 
37
-        $encodedString = base64_encode($string ?? '');
38
-        $firstLine = '';
37
+		$encodedString = base64_encode($string ?? '');
38
+		$firstLine = '';
39 39
 
40
-        if (0 != $firstLineOffset) {
41
-            $firstLine = substr(
42
-                $encodedString, 0, $maxLineLength - $firstLineOffset
43
-                )."\r\n";
44
-            $encodedString = substr(
45
-                $encodedString, $maxLineLength - $firstLineOffset
46
-                );
47
-        }
40
+		if (0 != $firstLineOffset) {
41
+			$firstLine = substr(
42
+				$encodedString, 0, $maxLineLength - $firstLineOffset
43
+				)."\r\n";
44
+			$encodedString = substr(
45
+				$encodedString, $maxLineLength - $firstLineOffset
46
+				);
47
+		}
48 48
 
49
-        return $firstLine.trim(chunk_split($encodedString, $maxLineLength, "\r\n"));
50
-    }
49
+		return $firstLine.trim(chunk_split($encodedString, $maxLineLength, "\r\n"));
50
+	}
51 51
 
52
-    /**
53
-     * Does nothing.
54
-     */
55
-    public function charsetChanged($charset)
56
-    {
57
-    }
52
+	/**
53
+	 * Does nothing.
54
+	 */
55
+	public function charsetChanged($charset)
56
+	{
57
+	}
58 58
 }
Please login to merge, or discard this patch.
htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream.php 1 patch
Indentation   +57 added lines, -57 removed lines patch added patch discarded remove patch
@@ -19,69 +19,69 @@
 block discarded – undo
19 19
  */
20 20
 interface Swift_CharacterStream
21 21
 {
22
-    /**
23
-     * Set the character set used in this CharacterStream.
24
-     *
25
-     * @param string $charset
26
-     */
27
-    public function setCharacterSet($charset);
22
+	/**
23
+	 * Set the character set used in this CharacterStream.
24
+	 *
25
+	 * @param string $charset
26
+	 */
27
+	public function setCharacterSet($charset);
28 28
 
29
-    /**
30
-     * Set the CharacterReaderFactory for multi charset support.
31
-     */
32
-    public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory);
29
+	/**
30
+	 * Set the CharacterReaderFactory for multi charset support.
31
+	 */
32
+	public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory);
33 33
 
34
-    /**
35
-     * Overwrite this character stream using the byte sequence in the byte stream.
36
-     *
37
-     * @param Swift_OutputByteStream $os output stream to read from
38
-     */
39
-    public function importByteStream(Swift_OutputByteStream $os);
34
+	/**
35
+	 * Overwrite this character stream using the byte sequence in the byte stream.
36
+	 *
37
+	 * @param Swift_OutputByteStream $os output stream to read from
38
+	 */
39
+	public function importByteStream(Swift_OutputByteStream $os);
40 40
 
41
-    /**
42
-     * Import a string a bytes into this CharacterStream, overwriting any existing
43
-     * data in the stream.
44
-     *
45
-     * @param string $string
46
-     */
47
-    public function importString($string);
41
+	/**
42
+	 * Import a string a bytes into this CharacterStream, overwriting any existing
43
+	 * data in the stream.
44
+	 *
45
+	 * @param string $string
46
+	 */
47
+	public function importString($string);
48 48
 
49
-    /**
50
-     * Read $length characters from the stream and move the internal pointer
51
-     * $length further into the stream.
52
-     *
53
-     * @param int $length
54
-     *
55
-     * @return string
56
-     */
57
-    public function read($length);
49
+	/**
50
+	 * Read $length characters from the stream and move the internal pointer
51
+	 * $length further into the stream.
52
+	 *
53
+	 * @param int $length
54
+	 *
55
+	 * @return string
56
+	 */
57
+	public function read($length);
58 58
 
59
-    /**
60
-     * Read $length characters from the stream and return a 1-dimensional array
61
-     * containing there octet values.
62
-     *
63
-     * @param int $length
64
-     *
65
-     * @return int[]
66
-     */
67
-    public function readBytes($length);
59
+	/**
60
+	 * Read $length characters from the stream and return a 1-dimensional array
61
+	 * containing there octet values.
62
+	 *
63
+	 * @param int $length
64
+	 *
65
+	 * @return int[]
66
+	 */
67
+	public function readBytes($length);
68 68
 
69
-    /**
70
-     * Write $chars to the end of the stream.
71
-     *
72
-     * @param string $chars
73
-     */
74
-    public function write($chars);
69
+	/**
70
+	 * Write $chars to the end of the stream.
71
+	 *
72
+	 * @param string $chars
73
+	 */
74
+	public function write($chars);
75 75
 
76
-    /**
77
-     * Move the internal pointer to $charOffset in the stream.
78
-     *
79
-     * @param int $charOffset
80
-     */
81
-    public function setPointer($charOffset);
76
+	/**
77
+	 * Move the internal pointer to $charOffset in the stream.
78
+	 *
79
+	 * @param int $charOffset
80
+	 */
81
+	public function setPointer($charOffset);
82 82
 
83
-    /**
84
-     * Empty the stream and reset the internal pointer.
85
-     */
86
-    public function flushContents();
83
+	/**
84
+	 * Empty the stream and reset the internal pointer.
85
+	 */
86
+	public function flushContents();
87 87
 }
Please login to merge, or discard this patch.
htdocs/includes/swiftmailer/lib/classes/Swift/TransportException.php 1 patch
Indentation   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -15,14 +15,14 @@
 block discarded – undo
15 15
  */
16 16
 class Swift_TransportException extends Swift_IoException
17 17
 {
18
-    /**
19
-     * Create a new TransportException with $message.
20
-     *
21
-     * @param string $message
22
-     * @param int    $code
23
-     */
24
-    public function __construct($message, $code = 0, Exception $previous = null)
25
-    {
26
-        parent::__construct($message, $code, $previous);
27
-    }
18
+	/**
19
+	 * Create a new TransportException with $message.
20
+	 *
21
+	 * @param string $message
22
+	 * @param int    $code
23
+	 */
24
+	public function __construct($message, $code = 0, Exception $previous = null)
25
+	{
26
+		parent::__construct($message, $code, $previous);
27
+	}
28 28
 }
Please login to merge, or discard this patch.
htdocs/includes/swiftmailer/lib/classes/Swift/Image.php 1 patch
Indentation   +24 added lines, -24 removed lines patch added patch discarded remove patch
@@ -15,29 +15,29 @@
 block discarded – undo
15 15
  */
16 16
 class Swift_Image extends Swift_EmbeddedFile
17 17
 {
18
-    /**
19
-     * Create a new EmbeddedFile.
20
-     *
21
-     * Details may be optionally provided to the constructor.
22
-     *
23
-     * @param string|Swift_OutputByteStream $data
24
-     * @param string                        $filename
25
-     * @param string                        $contentType
26
-     */
27
-    public function __construct($data = null, $filename = null, $contentType = null)
28
-    {
29
-        parent::__construct($data, $filename, $contentType);
30
-    }
18
+	/**
19
+	 * Create a new EmbeddedFile.
20
+	 *
21
+	 * Details may be optionally provided to the constructor.
22
+	 *
23
+	 * @param string|Swift_OutputByteStream $data
24
+	 * @param string                        $filename
25
+	 * @param string                        $contentType
26
+	 */
27
+	public function __construct($data = null, $filename = null, $contentType = null)
28
+	{
29
+		parent::__construct($data, $filename, $contentType);
30
+	}
31 31
 
32
-    /**
33
-     * Create a new Image from a filesystem path.
34
-     *
35
-     * @param string $path
36
-     *
37
-     * @return self
38
-     */
39
-    public static function fromPath($path)
40
-    {
41
-        return (new self())->setFile(new Swift_ByteStream_FileByteStream($path));
42
-    }
32
+	/**
33
+	 * Create a new Image from a filesystem path.
34
+	 *
35
+	 * @param string $path
36
+	 *
37
+	 * @return self
38
+	 */
39
+	public static function fromPath($path)
40
+	{
41
+		return (new self())->setFile(new Swift_ByteStream_FileByteStream($path));
42
+	}
43 43
 }
Please login to merge, or discard this patch.
htdocs/includes/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php 1 patch
Indentation   +522 added lines, -522 removed lines patch added patch discarded remove patch
@@ -17,526 +17,526 @@
 block discarded – undo
17 17
  */
18 18
 class Swift_Signers_SMimeSigner implements Swift_Signers_BodySigner
19 19
 {
20
-    protected $signCertificate;
21
-    protected $signPrivateKey;
22
-    protected $encryptCert;
23
-    protected $signThenEncrypt = true;
24
-    protected $signLevel;
25
-    protected $encryptLevel;
26
-    protected $signOptions;
27
-    protected $encryptOptions;
28
-    protected $encryptCipher;
29
-    protected $extraCerts = null;
30
-    protected $wrapFullMessage = false;
31
-
32
-    /**
33
-     * @var Swift_StreamFilters_StringReplacementFilterFactory
34
-     */
35
-    protected $replacementFactory;
36
-
37
-    /**
38
-     * @var Swift_Mime_SimpleHeaderFactory
39
-     */
40
-    protected $headerFactory;
41
-
42
-    /**
43
-     * Constructor.
44
-     *
45
-     * @param string|null $signCertificate
46
-     * @param string|null $signPrivateKey
47
-     * @param string|null $encryptCertificate
48
-     */
49
-    public function __construct($signCertificate = null, $signPrivateKey = null, $encryptCertificate = null)
50
-    {
51
-        if (null !== $signPrivateKey) {
52
-            $this->setSignCertificate($signCertificate, $signPrivateKey);
53
-        }
54
-
55
-        if (null !== $encryptCertificate) {
56
-            $this->setEncryptCertificate($encryptCertificate);
57
-        }
58
-
59
-        $this->replacementFactory = Swift_DependencyContainer::getInstance()
60
-            ->lookup('transport.replacementfactory');
61
-
62
-        $this->signOptions = PKCS7_DETACHED;
63
-        $this->encryptCipher = OPENSSL_CIPHER_AES_128_CBC;
64
-    }
65
-
66
-    /**
67
-     * Set the certificate location to use for signing.
68
-     *
69
-     * @see https://secure.php.net/manual/en/openssl.pkcs7.flags.php
70
-     *
71
-     * @param string       $certificate
72
-     * @param string|array $privateKey  If the key needs an passphrase use array('file-location', 'passphrase') instead
73
-     * @param int          $signOptions Bitwise operator options for openssl_pkcs7_sign()
74
-     * @param string       $extraCerts  A file containing intermediate certificates needed by the signing certificate
75
-     *
76
-     * @return $this
77
-     */
78
-    public function setSignCertificate($certificate, $privateKey = null, $signOptions = PKCS7_DETACHED, $extraCerts = null)
79
-    {
80
-        $this->signCertificate = 'file://'.str_replace('\\', '/', realpath($certificate));
81
-
82
-        if (null !== $privateKey) {
83
-            if (\is_array($privateKey)) {
84
-                $this->signPrivateKey = $privateKey;
85
-                $this->signPrivateKey[0] = 'file://'.str_replace('\\', '/', realpath($privateKey[0]));
86
-            } else {
87
-                $this->signPrivateKey = 'file://'.str_replace('\\', '/', realpath($privateKey));
88
-            }
89
-        }
90
-
91
-        $this->signOptions = $signOptions;
92
-        $this->extraCerts = $extraCerts ? realpath($extraCerts) : null;
93
-
94
-        return $this;
95
-    }
96
-
97
-    /**
98
-     * Set the certificate location to use for encryption.
99
-     *
100
-     * @see https://secure.php.net/manual/en/openssl.pkcs7.flags.php
101
-     * @see https://secure.php.net/manual/en/openssl.ciphers.php
102
-     *
103
-     * @param string|array $recipientCerts Either an single X.509 certificate, or an assoc array of X.509 certificates.
104
-     * @param int          $cipher
105
-     *
106
-     * @return $this
107
-     */
108
-    public function setEncryptCertificate($recipientCerts, $cipher = null)
109
-    {
110
-        if (\is_array($recipientCerts)) {
111
-            $this->encryptCert = [];
112
-
113
-            foreach ($recipientCerts as $cert) {
114
-                $this->encryptCert[] = 'file://'.str_replace('\\', '/', realpath($cert));
115
-            }
116
-        } else {
117
-            $this->encryptCert = 'file://'.str_replace('\\', '/', realpath($recipientCerts));
118
-        }
119
-
120
-        if (null !== $cipher) {
121
-            $this->encryptCipher = $cipher;
122
-        }
123
-
124
-        return $this;
125
-    }
126
-
127
-    /**
128
-     * @return string
129
-     */
130
-    public function getSignCertificate()
131
-    {
132
-        return $this->signCertificate;
133
-    }
134
-
135
-    /**
136
-     * @return string
137
-     */
138
-    public function getSignPrivateKey()
139
-    {
140
-        return $this->signPrivateKey;
141
-    }
142
-
143
-    /**
144
-     * Set perform signing before encryption.
145
-     *
146
-     * The default is to first sign the message and then encrypt.
147
-     * But some older mail clients, namely Microsoft Outlook 2000 will work when the message first encrypted.
148
-     * As this goes against the official specs, its recommended to only use 'encryption -> signing' when specifically targeting these 'broken' clients.
149
-     *
150
-     * @param bool $signThenEncrypt
151
-     *
152
-     * @return $this
153
-     */
154
-    public function setSignThenEncrypt($signThenEncrypt = true)
155
-    {
156
-        $this->signThenEncrypt = $signThenEncrypt;
157
-
158
-        return $this;
159
-    }
160
-
161
-    /**
162
-     * @return bool
163
-     */
164
-    public function isSignThenEncrypt()
165
-    {
166
-        return $this->signThenEncrypt;
167
-    }
168
-
169
-    /**
170
-     * Resets internal states.
171
-     *
172
-     * @return $this
173
-     */
174
-    public function reset()
175
-    {
176
-        return $this;
177
-    }
178
-
179
-    /**
180
-     * Specify whether to wrap the entire MIME message in the S/MIME message.
181
-     *
182
-     * According to RFC5751 section 3.1:
183
-     * In order to protect outer, non-content-related message header fields
184
-     * (for instance, the "Subject", "To", "From", and "Cc" fields), the
185
-     * sending client MAY wrap a full MIME message in a message/rfc822
186
-     * wrapper in order to apply S/MIME security services to these header
187
-     * fields.  It is up to the receiving client to decide how to present
188
-     * this "inner" header along with the unprotected "outer" header.
189
-     *
190
-     * @param bool $wrap
191
-     *
192
-     * @return $this
193
-     */
194
-    public function setWrapFullMessage($wrap)
195
-    {
196
-        $this->wrapFullMessage = $wrap;
197
-    }
198
-
199
-    /**
200
-     * Change the Swift_Message to apply the signing.
201
-     *
202
-     * @return $this
203
-     */
204
-    public function signMessage(Swift_Message $message)
205
-    {
206
-        if (null === $this->signCertificate && null === $this->encryptCert) {
207
-            return $this;
208
-        }
209
-
210
-        if ($this->signThenEncrypt) {
211
-            $this->smimeSignMessage($message);
212
-            $this->smimeEncryptMessage($message);
213
-        } else {
214
-            $this->smimeEncryptMessage($message);
215
-            $this->smimeSignMessage($message);
216
-        }
217
-    }
218
-
219
-    /**
220
-     * Return the list of header a signer might tamper.
221
-     *
222
-     * @return array
223
-     */
224
-    public function getAlteredHeaders()
225
-    {
226
-        return ['Content-Type', 'Content-Transfer-Encoding', 'Content-Disposition'];
227
-    }
228
-
229
-    /**
230
-     * Sign a Swift message.
231
-     */
232
-    protected function smimeSignMessage(Swift_Message $message)
233
-    {
234
-        // If we don't have a certificate we can't sign the message
235
-        if (null === $this->signCertificate) {
236
-            return;
237
-        }
238
-
239
-        // Work on a clone of the original message
240
-        $signMessage = clone $message;
241
-        $signMessage->clearSigners();
242
-
243
-        if ($this->wrapFullMessage) {
244
-            // The original message essentially becomes the body of the new
245
-            // wrapped message
246
-            $signMessage = $this->wrapMimeMessage($signMessage);
247
-        } else {
248
-            // Only keep header needed to parse the body correctly
249
-            $this->clearAllHeaders($signMessage);
250
-            $this->copyHeaders(
251
-                $message,
252
-                $signMessage,
253
-                [
254
-                    'Content-Type',
255
-                    'Content-Transfer-Encoding',
256
-                    'Content-Disposition',
257
-                ]
258
-            );
259
-        }
260
-
261
-        // Copy the cloned message into a temporary file stream
262
-        $messageStream = new Swift_ByteStream_TemporaryFileByteStream();
263
-        $signMessage->toByteStream($messageStream);
264
-        $messageStream->commit();
265
-        $signedMessageStream = new Swift_ByteStream_TemporaryFileByteStream();
266
-
267
-        // Sign the message using openssl
268
-        if (!openssl_pkcs7_sign(
269
-                $messageStream->getPath(),
270
-                $signedMessageStream->getPath(),
271
-                $this->signCertificate,
272
-                $this->signPrivateKey,
273
-                [],
274
-                $this->signOptions,
275
-                $this->extraCerts
276
-            )
277
-        ) {
278
-            throw new Swift_IoException(sprintf('Failed to sign S/Mime message. Error: "%s".', openssl_error_string()));
279
-        }
280
-
281
-        // Parse the resulting signed message content back into the Swift message
282
-        // preserving the original headers
283
-        $this->parseSSLOutput($signedMessageStream, $message);
284
-    }
285
-
286
-    /**
287
-     * Encrypt a Swift message.
288
-     */
289
-    protected function smimeEncryptMessage(Swift_Message $message)
290
-    {
291
-        // If we don't have a certificate we can't encrypt the message
292
-        if (null === $this->encryptCert) {
293
-            return;
294
-        }
295
-
296
-        // Work on a clone of the original message
297
-        $encryptMessage = clone $message;
298
-        $encryptMessage->clearSigners();
299
-
300
-        if ($this->wrapFullMessage) {
301
-            // The original message essentially becomes the body of the new
302
-            // wrapped message
303
-            $encryptMessage = $this->wrapMimeMessage($encryptMessage);
304
-        } else {
305
-            // Only keep header needed to parse the body correctly
306
-            $this->clearAllHeaders($encryptMessage);
307
-            $this->copyHeaders(
308
-                $message,
309
-                $encryptMessage,
310
-                [
311
-                    'Content-Type',
312
-                    'Content-Transfer-Encoding',
313
-                    'Content-Disposition',
314
-                ]
315
-            );
316
-        }
317
-
318
-        // Convert the message content (including headers) to a string
319
-        // and place it in a temporary file
320
-        $messageStream = new Swift_ByteStream_TemporaryFileByteStream();
321
-        $encryptMessage->toByteStream($messageStream);
322
-        $messageStream->commit();
323
-        $encryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream();
324
-
325
-        // Encrypt the message
326
-        if (!openssl_pkcs7_encrypt(
327
-                $messageStream->getPath(),
328
-                $encryptedMessageStream->getPath(),
329
-                $this->encryptCert,
330
-                [],
331
-                0,
332
-                $this->encryptCipher
333
-            )
334
-        ) {
335
-            throw new Swift_IoException(sprintf('Failed to encrypt S/Mime message. Error: "%s".', openssl_error_string()));
336
-        }
337
-
338
-        // Parse the resulting signed message content back into the Swift message
339
-        // preserving the original headers
340
-        $this->parseSSLOutput($encryptedMessageStream, $message);
341
-    }
342
-
343
-    /**
344
-     * Copy named headers from one Swift message to another.
345
-     */
346
-    protected function copyHeaders(
347
-        Swift_Message $fromMessage,
348
-        Swift_Message $toMessage,
349
-        array $headers = []
350
-    ) {
351
-        foreach ($headers as $header) {
352
-            $this->copyHeader($fromMessage, $toMessage, $header);
353
-        }
354
-    }
355
-
356
-    /**
357
-     * Copy a single header from one Swift message to another.
358
-     *
359
-     * @param string $headerName
360
-     */
361
-    protected function copyHeader(Swift_Message $fromMessage, Swift_Message $toMessage, $headerName)
362
-    {
363
-        $header = $fromMessage->getHeaders()->get($headerName);
364
-        if (!$header) {
365
-            return;
366
-        }
367
-        $headers = $toMessage->getHeaders();
368
-        switch ($header->getFieldType()) {
369
-            case Swift_Mime_Header::TYPE_TEXT:
370
-                $headers->addTextHeader($header->getFieldName(), $header->getValue());
371
-                break;
372
-            case Swift_Mime_Header::TYPE_PARAMETERIZED:
373
-                $headers->addParameterizedHeader(
374
-                    $header->getFieldName(),
375
-                    $header->getValue(),
376
-                    $header->getParameters()
377
-                );
378
-                break;
379
-        }
380
-    }
381
-
382
-    /**
383
-     * Remove all headers from a Swift message.
384
-     */
385
-    protected function clearAllHeaders(Swift_Message $message)
386
-    {
387
-        $headers = $message->getHeaders();
388
-        foreach ($headers->listAll() as $header) {
389
-            $headers->removeAll($header);
390
-        }
391
-    }
392
-
393
-    /**
394
-     * Wraps a Swift_Message in a message/rfc822 MIME part.
395
-     *
396
-     * @return Swift_MimePart
397
-     */
398
-    protected function wrapMimeMessage(Swift_Message $message)
399
-    {
400
-        // Start by copying the original message into a message stream
401
-        $messageStream = new Swift_ByteStream_TemporaryFileByteStream();
402
-        $message->toByteStream($messageStream);
403
-        $messageStream->commit();
404
-
405
-        // Create a new MIME part that wraps the original stream
406
-        $wrappedMessage = new Swift_MimePart($messageStream, 'message/rfc822');
407
-        $wrappedMessage->setEncoder(new Swift_Mime_ContentEncoder_PlainContentEncoder('7bit'));
408
-
409
-        return $wrappedMessage;
410
-    }
411
-
412
-    protected function parseSSLOutput(Swift_InputByteStream $inputStream, Swift_Message $message)
413
-    {
414
-        $messageStream = new Swift_ByteStream_TemporaryFileByteStream();
415
-        $this->copyFromOpenSSLOutput($inputStream, $messageStream);
416
-
417
-        $this->streamToMime($messageStream, $message);
418
-    }
419
-
420
-    /**
421
-     * Merges an OutputByteStream from OpenSSL to a Swift_Message.
422
-     */
423
-    protected function streamToMime(Swift_OutputByteStream $fromStream, Swift_Message $message)
424
-    {
425
-        // Parse the stream into headers and body
426
-        list($headers, $messageStream) = $this->parseStream($fromStream);
427
-
428
-        // Get the original message headers
429
-        $messageHeaders = $message->getHeaders();
430
-
431
-        // Let the stream determine the headers describing the body content,
432
-        // since the body of the original message is overwritten by the body
433
-        // coming from the stream.
434
-        // These are all content-* headers.
435
-
436
-        // Default transfer encoding is 7bit if not set
437
-        $encoding = '';
438
-        // Remove all existing transfer encoding headers
439
-        $messageHeaders->removeAll('Content-Transfer-Encoding');
440
-        // See whether the stream sets the transfer encoding
441
-        if (isset($headers['content-transfer-encoding'])) {
442
-            $encoding = $headers['content-transfer-encoding'];
443
-        }
444
-
445
-        // We use the null content encoder, since the body is already encoded
446
-        // according to the transfer encoding specified in the stream
447
-        $message->setEncoder(new Swift_Mime_ContentEncoder_NullContentEncoder($encoding));
448
-
449
-        // Set the disposition, if present
450
-        if (isset($headers['content-disposition'])) {
451
-            $messageHeaders->addTextHeader('Content-Disposition', $headers['content-disposition']);
452
-        }
453
-
454
-        // Copy over the body from the stream using the content type dictated
455
-        // by the stream content
456
-        $message->setChildren([]);
457
-        $message->setBody($messageStream, $headers['content-type']);
458
-    }
459
-
460
-    /**
461
-     * This message will parse the headers of a MIME email byte stream
462
-     * and return an array that contains the headers as an associative
463
-     * array and the email body as a string.
464
-     *
465
-     * @return array
466
-     */
467
-    protected function parseStream(Swift_OutputByteStream $emailStream)
468
-    {
469
-        $bufferLength = 78;
470
-        $headerData = '';
471
-        $headerBodySeparator = "\r\n\r\n";
472
-
473
-        $emailStream->setReadPointer(0);
474
-
475
-        // Read out the headers section from the stream to a string
476
-        while (false !== ($buffer = $emailStream->read($bufferLength))) {
477
-            $headerData .= $buffer;
478
-
479
-            $headersPosEnd = strpos($headerData, $headerBodySeparator);
480
-
481
-            // Stop reading if we found the end of the headers
482
-            if (false !== $headersPosEnd) {
483
-                break;
484
-            }
485
-        }
486
-
487
-        // Split the header data into lines
488
-        $headerData = trim(substr($headerData, 0, $headersPosEnd));
489
-        $headerLines = explode("\r\n", $headerData);
490
-        unset($headerData);
491
-
492
-        $headers = [];
493
-        $currentHeaderName = '';
494
-
495
-        // Transform header lines into an associative array
496
-        foreach ($headerLines as $headerLine) {
497
-            // Handle headers that span multiple lines
498
-            if (false === strpos($headerLine, ':')) {
499
-                $headers[$currentHeaderName] .= ' '.trim($headerLine ?? '');
500
-                continue;
501
-            }
502
-
503
-            $header = explode(':', $headerLine, 2);
504
-            $currentHeaderName = strtolower($header[0] ?? '');
505
-            $headers[$currentHeaderName] = trim($header[1] ?? '');
506
-        }
507
-
508
-        // Read the entire email body into a byte stream
509
-        $bodyStream = new Swift_ByteStream_TemporaryFileByteStream();
510
-
511
-        // Skip the header and separator and point to the body
512
-        $emailStream->setReadPointer($headersPosEnd + \strlen($headerBodySeparator));
513
-
514
-        while (false !== ($buffer = $emailStream->read($bufferLength))) {
515
-            $bodyStream->write($buffer);
516
-        }
517
-
518
-        $bodyStream->commit();
519
-
520
-        return [$headers, $bodyStream];
521
-    }
522
-
523
-    protected function copyFromOpenSSLOutput(Swift_OutputByteStream $fromStream, Swift_InputByteStream $toStream)
524
-    {
525
-        $bufferLength = 4096;
526
-        $filteredStream = new Swift_ByteStream_TemporaryFileByteStream();
527
-        $filteredStream->addFilter($this->replacementFactory->createFilter("\r\n", "\n"), 'CRLF to LF');
528
-        $filteredStream->addFilter($this->replacementFactory->createFilter("\n", "\r\n"), 'LF to CRLF');
529
-
530
-        while (false !== ($buffer = $fromStream->read($bufferLength))) {
531
-            $filteredStream->write($buffer);
532
-        }
533
-
534
-        $filteredStream->flushBuffers();
535
-
536
-        while (false !== ($buffer = $filteredStream->read($bufferLength))) {
537
-            $toStream->write($buffer);
538
-        }
539
-
540
-        $toStream->commit();
541
-    }
20
+	protected $signCertificate;
21
+	protected $signPrivateKey;
22
+	protected $encryptCert;
23
+	protected $signThenEncrypt = true;
24
+	protected $signLevel;
25
+	protected $encryptLevel;
26
+	protected $signOptions;
27
+	protected $encryptOptions;
28
+	protected $encryptCipher;
29
+	protected $extraCerts = null;
30
+	protected $wrapFullMessage = false;
31
+
32
+	/**
33
+	 * @var Swift_StreamFilters_StringReplacementFilterFactory
34
+	 */
35
+	protected $replacementFactory;
36
+
37
+	/**
38
+	 * @var Swift_Mime_SimpleHeaderFactory
39
+	 */
40
+	protected $headerFactory;
41
+
42
+	/**
43
+	 * Constructor.
44
+	 *
45
+	 * @param string|null $signCertificate
46
+	 * @param string|null $signPrivateKey
47
+	 * @param string|null $encryptCertificate
48
+	 */
49
+	public function __construct($signCertificate = null, $signPrivateKey = null, $encryptCertificate = null)
50
+	{
51
+		if (null !== $signPrivateKey) {
52
+			$this->setSignCertificate($signCertificate, $signPrivateKey);
53
+		}
54
+
55
+		if (null !== $encryptCertificate) {
56
+			$this->setEncryptCertificate($encryptCertificate);
57
+		}
58
+
59
+		$this->replacementFactory = Swift_DependencyContainer::getInstance()
60
+			->lookup('transport.replacementfactory');
61
+
62
+		$this->signOptions = PKCS7_DETACHED;
63
+		$this->encryptCipher = OPENSSL_CIPHER_AES_128_CBC;
64
+	}
65
+
66
+	/**
67
+	 * Set the certificate location to use for signing.
68
+	 *
69
+	 * @see https://secure.php.net/manual/en/openssl.pkcs7.flags.php
70
+	 *
71
+	 * @param string       $certificate
72
+	 * @param string|array $privateKey  If the key needs an passphrase use array('file-location', 'passphrase') instead
73
+	 * @param int          $signOptions Bitwise operator options for openssl_pkcs7_sign()
74
+	 * @param string       $extraCerts  A file containing intermediate certificates needed by the signing certificate
75
+	 *
76
+	 * @return $this
77
+	 */
78
+	public function setSignCertificate($certificate, $privateKey = null, $signOptions = PKCS7_DETACHED, $extraCerts = null)
79
+	{
80
+		$this->signCertificate = 'file://'.str_replace('\\', '/', realpath($certificate));
81
+
82
+		if (null !== $privateKey) {
83
+			if (\is_array($privateKey)) {
84
+				$this->signPrivateKey = $privateKey;
85
+				$this->signPrivateKey[0] = 'file://'.str_replace('\\', '/', realpath($privateKey[0]));
86
+			} else {
87
+				$this->signPrivateKey = 'file://'.str_replace('\\', '/', realpath($privateKey));
88
+			}
89
+		}
90
+
91
+		$this->signOptions = $signOptions;
92
+		$this->extraCerts = $extraCerts ? realpath($extraCerts) : null;
93
+
94
+		return $this;
95
+	}
96
+
97
+	/**
98
+	 * Set the certificate location to use for encryption.
99
+	 *
100
+	 * @see https://secure.php.net/manual/en/openssl.pkcs7.flags.php
101
+	 * @see https://secure.php.net/manual/en/openssl.ciphers.php
102
+	 *
103
+	 * @param string|array $recipientCerts Either an single X.509 certificate, or an assoc array of X.509 certificates.
104
+	 * @param int          $cipher
105
+	 *
106
+	 * @return $this
107
+	 */
108
+	public function setEncryptCertificate($recipientCerts, $cipher = null)
109
+	{
110
+		if (\is_array($recipientCerts)) {
111
+			$this->encryptCert = [];
112
+
113
+			foreach ($recipientCerts as $cert) {
114
+				$this->encryptCert[] = 'file://'.str_replace('\\', '/', realpath($cert));
115
+			}
116
+		} else {
117
+			$this->encryptCert = 'file://'.str_replace('\\', '/', realpath($recipientCerts));
118
+		}
119
+
120
+		if (null !== $cipher) {
121
+			$this->encryptCipher = $cipher;
122
+		}
123
+
124
+		return $this;
125
+	}
126
+
127
+	/**
128
+	 * @return string
129
+	 */
130
+	public function getSignCertificate()
131
+	{
132
+		return $this->signCertificate;
133
+	}
134
+
135
+	/**
136
+	 * @return string
137
+	 */
138
+	public function getSignPrivateKey()
139
+	{
140
+		return $this->signPrivateKey;
141
+	}
142
+
143
+	/**
144
+	 * Set perform signing before encryption.
145
+	 *
146
+	 * The default is to first sign the message and then encrypt.
147
+	 * But some older mail clients, namely Microsoft Outlook 2000 will work when the message first encrypted.
148
+	 * As this goes against the official specs, its recommended to only use 'encryption -> signing' when specifically targeting these 'broken' clients.
149
+	 *
150
+	 * @param bool $signThenEncrypt
151
+	 *
152
+	 * @return $this
153
+	 */
154
+	public function setSignThenEncrypt($signThenEncrypt = true)
155
+	{
156
+		$this->signThenEncrypt = $signThenEncrypt;
157
+
158
+		return $this;
159
+	}
160
+
161
+	/**
162
+	 * @return bool
163
+	 */
164
+	public function isSignThenEncrypt()
165
+	{
166
+		return $this->signThenEncrypt;
167
+	}
168
+
169
+	/**
170
+	 * Resets internal states.
171
+	 *
172
+	 * @return $this
173
+	 */
174
+	public function reset()
175
+	{
176
+		return $this;
177
+	}
178
+
179
+	/**
180
+	 * Specify whether to wrap the entire MIME message in the S/MIME message.
181
+	 *
182
+	 * According to RFC5751 section 3.1:
183
+	 * In order to protect outer, non-content-related message header fields
184
+	 * (for instance, the "Subject", "To", "From", and "Cc" fields), the
185
+	 * sending client MAY wrap a full MIME message in a message/rfc822
186
+	 * wrapper in order to apply S/MIME security services to these header
187
+	 * fields.  It is up to the receiving client to decide how to present
188
+	 * this "inner" header along with the unprotected "outer" header.
189
+	 *
190
+	 * @param bool $wrap
191
+	 *
192
+	 * @return $this
193
+	 */
194
+	public function setWrapFullMessage($wrap)
195
+	{
196
+		$this->wrapFullMessage = $wrap;
197
+	}
198
+
199
+	/**
200
+	 * Change the Swift_Message to apply the signing.
201
+	 *
202
+	 * @return $this
203
+	 */
204
+	public function signMessage(Swift_Message $message)
205
+	{
206
+		if (null === $this->signCertificate && null === $this->encryptCert) {
207
+			return $this;
208
+		}
209
+
210
+		if ($this->signThenEncrypt) {
211
+			$this->smimeSignMessage($message);
212
+			$this->smimeEncryptMessage($message);
213
+		} else {
214
+			$this->smimeEncryptMessage($message);
215
+			$this->smimeSignMessage($message);
216
+		}
217
+	}
218
+
219
+	/**
220
+	 * Return the list of header a signer might tamper.
221
+	 *
222
+	 * @return array
223
+	 */
224
+	public function getAlteredHeaders()
225
+	{
226
+		return ['Content-Type', 'Content-Transfer-Encoding', 'Content-Disposition'];
227
+	}
228
+
229
+	/**
230
+	 * Sign a Swift message.
231
+	 */
232
+	protected function smimeSignMessage(Swift_Message $message)
233
+	{
234
+		// If we don't have a certificate we can't sign the message
235
+		if (null === $this->signCertificate) {
236
+			return;
237
+		}
238
+
239
+		// Work on a clone of the original message
240
+		$signMessage = clone $message;
241
+		$signMessage->clearSigners();
242
+
243
+		if ($this->wrapFullMessage) {
244
+			// The original message essentially becomes the body of the new
245
+			// wrapped message
246
+			$signMessage = $this->wrapMimeMessage($signMessage);
247
+		} else {
248
+			// Only keep header needed to parse the body correctly
249
+			$this->clearAllHeaders($signMessage);
250
+			$this->copyHeaders(
251
+				$message,
252
+				$signMessage,
253
+				[
254
+					'Content-Type',
255
+					'Content-Transfer-Encoding',
256
+					'Content-Disposition',
257
+				]
258
+			);
259
+		}
260
+
261
+		// Copy the cloned message into a temporary file stream
262
+		$messageStream = new Swift_ByteStream_TemporaryFileByteStream();
263
+		$signMessage->toByteStream($messageStream);
264
+		$messageStream->commit();
265
+		$signedMessageStream = new Swift_ByteStream_TemporaryFileByteStream();
266
+
267
+		// Sign the message using openssl
268
+		if (!openssl_pkcs7_sign(
269
+				$messageStream->getPath(),
270
+				$signedMessageStream->getPath(),
271
+				$this->signCertificate,
272
+				$this->signPrivateKey,
273
+				[],
274
+				$this->signOptions,
275
+				$this->extraCerts
276
+			)
277
+		) {
278
+			throw new Swift_IoException(sprintf('Failed to sign S/Mime message. Error: "%s".', openssl_error_string()));
279
+		}
280
+
281
+		// Parse the resulting signed message content back into the Swift message
282
+		// preserving the original headers
283
+		$this->parseSSLOutput($signedMessageStream, $message);
284
+	}
285
+
286
+	/**
287
+	 * Encrypt a Swift message.
288
+	 */
289
+	protected function smimeEncryptMessage(Swift_Message $message)
290
+	{
291
+		// If we don't have a certificate we can't encrypt the message
292
+		if (null === $this->encryptCert) {
293
+			return;
294
+		}
295
+
296
+		// Work on a clone of the original message
297
+		$encryptMessage = clone $message;
298
+		$encryptMessage->clearSigners();
299
+
300
+		if ($this->wrapFullMessage) {
301
+			// The original message essentially becomes the body of the new
302
+			// wrapped message
303
+			$encryptMessage = $this->wrapMimeMessage($encryptMessage);
304
+		} else {
305
+			// Only keep header needed to parse the body correctly
306
+			$this->clearAllHeaders($encryptMessage);
307
+			$this->copyHeaders(
308
+				$message,
309
+				$encryptMessage,
310
+				[
311
+					'Content-Type',
312
+					'Content-Transfer-Encoding',
313
+					'Content-Disposition',
314
+				]
315
+			);
316
+		}
317
+
318
+		// Convert the message content (including headers) to a string
319
+		// and place it in a temporary file
320
+		$messageStream = new Swift_ByteStream_TemporaryFileByteStream();
321
+		$encryptMessage->toByteStream($messageStream);
322
+		$messageStream->commit();
323
+		$encryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream();
324
+
325
+		// Encrypt the message
326
+		if (!openssl_pkcs7_encrypt(
327
+				$messageStream->getPath(),
328
+				$encryptedMessageStream->getPath(),
329
+				$this->encryptCert,
330
+				[],
331
+				0,
332
+				$this->encryptCipher
333
+			)
334
+		) {
335
+			throw new Swift_IoException(sprintf('Failed to encrypt S/Mime message. Error: "%s".', openssl_error_string()));
336
+		}
337
+
338
+		// Parse the resulting signed message content back into the Swift message
339
+		// preserving the original headers
340
+		$this->parseSSLOutput($encryptedMessageStream, $message);
341
+	}
342
+
343
+	/**
344
+	 * Copy named headers from one Swift message to another.
345
+	 */
346
+	protected function copyHeaders(
347
+		Swift_Message $fromMessage,
348
+		Swift_Message $toMessage,
349
+		array $headers = []
350
+	) {
351
+		foreach ($headers as $header) {
352
+			$this->copyHeader($fromMessage, $toMessage, $header);
353
+		}
354
+	}
355
+
356
+	/**
357
+	 * Copy a single header from one Swift message to another.
358
+	 *
359
+	 * @param string $headerName
360
+	 */
361
+	protected function copyHeader(Swift_Message $fromMessage, Swift_Message $toMessage, $headerName)
362
+	{
363
+		$header = $fromMessage->getHeaders()->get($headerName);
364
+		if (!$header) {
365
+			return;
366
+		}
367
+		$headers = $toMessage->getHeaders();
368
+		switch ($header->getFieldType()) {
369
+			case Swift_Mime_Header::TYPE_TEXT:
370
+				$headers->addTextHeader($header->getFieldName(), $header->getValue());
371
+				break;
372
+			case Swift_Mime_Header::TYPE_PARAMETERIZED:
373
+				$headers->addParameterizedHeader(
374
+					$header->getFieldName(),
375
+					$header->getValue(),
376
+					$header->getParameters()
377
+				);
378
+				break;
379
+		}
380
+	}
381
+
382
+	/**
383
+	 * Remove all headers from a Swift message.
384
+	 */
385
+	protected function clearAllHeaders(Swift_Message $message)
386
+	{
387
+		$headers = $message->getHeaders();
388
+		foreach ($headers->listAll() as $header) {
389
+			$headers->removeAll($header);
390
+		}
391
+	}
392
+
393
+	/**
394
+	 * Wraps a Swift_Message in a message/rfc822 MIME part.
395
+	 *
396
+	 * @return Swift_MimePart
397
+	 */
398
+	protected function wrapMimeMessage(Swift_Message $message)
399
+	{
400
+		// Start by copying the original message into a message stream
401
+		$messageStream = new Swift_ByteStream_TemporaryFileByteStream();
402
+		$message->toByteStream($messageStream);
403
+		$messageStream->commit();
404
+
405
+		// Create a new MIME part that wraps the original stream
406
+		$wrappedMessage = new Swift_MimePart($messageStream, 'message/rfc822');
407
+		$wrappedMessage->setEncoder(new Swift_Mime_ContentEncoder_PlainContentEncoder('7bit'));
408
+
409
+		return $wrappedMessage;
410
+	}
411
+
412
+	protected function parseSSLOutput(Swift_InputByteStream $inputStream, Swift_Message $message)
413
+	{
414
+		$messageStream = new Swift_ByteStream_TemporaryFileByteStream();
415
+		$this->copyFromOpenSSLOutput($inputStream, $messageStream);
416
+
417
+		$this->streamToMime($messageStream, $message);
418
+	}
419
+
420
+	/**
421
+	 * Merges an OutputByteStream from OpenSSL to a Swift_Message.
422
+	 */
423
+	protected function streamToMime(Swift_OutputByteStream $fromStream, Swift_Message $message)
424
+	{
425
+		// Parse the stream into headers and body
426
+		list($headers, $messageStream) = $this->parseStream($fromStream);
427
+
428
+		// Get the original message headers
429
+		$messageHeaders = $message->getHeaders();
430
+
431
+		// Let the stream determine the headers describing the body content,
432
+		// since the body of the original message is overwritten by the body
433
+		// coming from the stream.
434
+		// These are all content-* headers.
435
+
436
+		// Default transfer encoding is 7bit if not set
437
+		$encoding = '';
438
+		// Remove all existing transfer encoding headers
439
+		$messageHeaders->removeAll('Content-Transfer-Encoding');
440
+		// See whether the stream sets the transfer encoding
441
+		if (isset($headers['content-transfer-encoding'])) {
442
+			$encoding = $headers['content-transfer-encoding'];
443
+		}
444
+
445
+		// We use the null content encoder, since the body is already encoded
446
+		// according to the transfer encoding specified in the stream
447
+		$message->setEncoder(new Swift_Mime_ContentEncoder_NullContentEncoder($encoding));
448
+
449
+		// Set the disposition, if present
450
+		if (isset($headers['content-disposition'])) {
451
+			$messageHeaders->addTextHeader('Content-Disposition', $headers['content-disposition']);
452
+		}
453
+
454
+		// Copy over the body from the stream using the content type dictated
455
+		// by the stream content
456
+		$message->setChildren([]);
457
+		$message->setBody($messageStream, $headers['content-type']);
458
+	}
459
+
460
+	/**
461
+	 * This message will parse the headers of a MIME email byte stream
462
+	 * and return an array that contains the headers as an associative
463
+	 * array and the email body as a string.
464
+	 *
465
+	 * @return array
466
+	 */
467
+	protected function parseStream(Swift_OutputByteStream $emailStream)
468
+	{
469
+		$bufferLength = 78;
470
+		$headerData = '';
471
+		$headerBodySeparator = "\r\n\r\n";
472
+
473
+		$emailStream->setReadPointer(0);
474
+
475
+		// Read out the headers section from the stream to a string
476
+		while (false !== ($buffer = $emailStream->read($bufferLength))) {
477
+			$headerData .= $buffer;
478
+
479
+			$headersPosEnd = strpos($headerData, $headerBodySeparator);
480
+
481
+			// Stop reading if we found the end of the headers
482
+			if (false !== $headersPosEnd) {
483
+				break;
484
+			}
485
+		}
486
+
487
+		// Split the header data into lines
488
+		$headerData = trim(substr($headerData, 0, $headersPosEnd));
489
+		$headerLines = explode("\r\n", $headerData);
490
+		unset($headerData);
491
+
492
+		$headers = [];
493
+		$currentHeaderName = '';
494
+
495
+		// Transform header lines into an associative array
496
+		foreach ($headerLines as $headerLine) {
497
+			// Handle headers that span multiple lines
498
+			if (false === strpos($headerLine, ':')) {
499
+				$headers[$currentHeaderName] .= ' '.trim($headerLine ?? '');
500
+				continue;
501
+			}
502
+
503
+			$header = explode(':', $headerLine, 2);
504
+			$currentHeaderName = strtolower($header[0] ?? '');
505
+			$headers[$currentHeaderName] = trim($header[1] ?? '');
506
+		}
507
+
508
+		// Read the entire email body into a byte stream
509
+		$bodyStream = new Swift_ByteStream_TemporaryFileByteStream();
510
+
511
+		// Skip the header and separator and point to the body
512
+		$emailStream->setReadPointer($headersPosEnd + \strlen($headerBodySeparator));
513
+
514
+		while (false !== ($buffer = $emailStream->read($bufferLength))) {
515
+			$bodyStream->write($buffer);
516
+		}
517
+
518
+		$bodyStream->commit();
519
+
520
+		return [$headers, $bodyStream];
521
+	}
522
+
523
+	protected function copyFromOpenSSLOutput(Swift_OutputByteStream $fromStream, Swift_InputByteStream $toStream)
524
+	{
525
+		$bufferLength = 4096;
526
+		$filteredStream = new Swift_ByteStream_TemporaryFileByteStream();
527
+		$filteredStream->addFilter($this->replacementFactory->createFilter("\r\n", "\n"), 'CRLF to LF');
528
+		$filteredStream->addFilter($this->replacementFactory->createFilter("\n", "\r\n"), 'LF to CRLF');
529
+
530
+		while (false !== ($buffer = $fromStream->read($bufferLength))) {
531
+			$filteredStream->write($buffer);
532
+		}
533
+
534
+		$filteredStream->flushBuffers();
535
+
536
+		while (false !== ($buffer = $filteredStream->read($bufferLength))) {
537
+			$toStream->write($buffer);
538
+		}
539
+
540
+		$toStream->commit();
541
+	}
542 542
 }
Please login to merge, or discard this patch.