|
30 | 30 | use OCP\Files\SimpleFS\ISimpleFolder; |
31 | 31 | use Sabre\CardDAV\Card; |
32 | 32 | use Sabre\VObject\Property\Binary; |
| 33 | +use Sabre\VObject\Property\Uri; |
33 | 34 | use Sabre\VObject\Reader; |
34 | 35 |
|
35 | 36 | class PhotoCache { |
@@ -193,19 +194,23 @@ private function getPhoto(Card $node) { |
193 | 194 | } |
194 | 195 |
|
195 | 196 | $photo = $vObject->PHOTO; |
196 | | - $type = $this->getType($photo); |
197 | | - |
198 | 197 | $val = $photo->getValue(); |
| 198 | + |
| 199 | + // handle data URI. e.g PHOTO;VALUE=URI:data:image/jpeg;base64,/9j/4AAQSkZJRgABAQE |
199 | 200 | if ($photo->getValueType() === 'URI') { |
200 | 201 | $parsed = \Sabre\URI\parse($val); |
201 | | - //only allow data:// |
| 202 | + |
| 203 | + // only allow data:// |
202 | 204 | if ($parsed['scheme'] !== 'data') { |
203 | 205 | return false; |
204 | 206 | } |
205 | 207 | if (substr_count($parsed['path'], ';') === 1) { |
206 | 208 | list($type,) = explode(';', $parsed['path']); |
207 | 209 | } |
208 | 210 | $val = file_get_contents($val); |
| 211 | + } else { |
| 212 | + // get type if binary data |
| 213 | + $type = $this->getBinaryType($photo); |
209 | 214 | } |
210 | 215 |
|
211 | 216 | $allowedContentTypes = [ |
@@ -240,7 +245,7 @@ private function readCard($cardData) { |
240 | 245 | * @param Binary $photo |
241 | 246 | * @return string |
242 | 247 | */ |
243 | | - private function getType(Binary $photo) { |
| 248 | + private function getBinaryType(Binary $photo) { |
244 | 249 | $params = $photo->parameters(); |
245 | 250 | if (isset($params['TYPE']) || isset($params['MEDIATYPE'])) { |
246 | 251 | /** @var Parameter $typeParam */ |
|
0 commit comments