@@ -362,20 +362,27 @@ public function getPermissions(string $path): int {
362362 $ ocsPermissions = $ response ['{http://open-collaboration-services.org/ns}share-permissions ' ] ?? null ;
363363 $ ocmPermissions = $ response ['{http://open-cloud-mesh.org/ns}share-permissions ' ] ?? null ;
364364 $ ocPermissions = $ response ['{http://owncloud.org/ns}permissions ' ] ?? null ;
365+
365366 // old federated sharing permissions
366367 if ($ ocsPermissions !== null ) {
367- $ permissions = (int )$ ocsPermissions ;
368- } elseif ($ ocmPermissions !== null ) {
368+ $ permission = (int )$ ocsPermissions ;
369+ if ($ permission < 0 || $ permission > Constants::PERMISSION_ALL ) {
370+ throw new \RuntimeException ('Got invalid permissions: ' . $ ocsPermissions );
371+ }
372+ return $ permission ;
373+ }
374+
375+ if ($ ocmPermissions !== null ) {
369376 // permissions provided by the OCM API
370- $ permissions = $ this ->ocmPermissions2ncPermissions ($ ocmPermissions , $ path );
371- } elseif ($ ocPermissions !== null ) {
377+ return $ this ->ocmPermissions2ncPermissions ($ ocmPermissions , $ path );
378+ }
379+
380+ if ($ ocPermissions !== null ) {
372381 return $ this ->parsePermissions ($ ocPermissions );
373- } else {
374- // use default permission if remote server doesn't provide the share permissions
375- $ permissions = $ this ->getDefaultPermissions ($ path );
376382 }
377383
378- return $ permissions ;
384+ // use default permission if remote server doesn't provide the share permissions
385+ return $ this ->getDefaultPermissions ($ path );
379386 }
380387
381388 #[\Override]
@@ -388,36 +395,30 @@ public function needsPartFile(): bool {
388395 *
389396 * @param string $ocmPermissions json encoded OCM permissions
390397 * @param string $path path to file
391- * @return int
398+ * @return int-mask-of<Constants::PERMISSION_*>
392399 */
393400 protected function ocmPermissions2ncPermissions (string $ ocmPermissions , string $ path ): int {
394401 try {
395- $ ocmPermissions = json_decode ($ ocmPermissions );
402+ $ ocmPermissions = json_decode ($ ocmPermissions, flags: JSON_THROW_ON_ERROR );
396403 $ ncPermissions = 0 ;
397404 foreach ($ ocmPermissions as $ permission ) {
398- switch (strtolower ($ permission )) {
399- case 'read ' :
400- $ ncPermissions += Constants::PERMISSION_READ ;
401- break ;
402- case 'write ' :
403- $ ncPermissions += Constants::PERMISSION_CREATE + Constants::PERMISSION_UPDATE ;
404- break ;
405- case 'share ' :
406- $ ncPermissions += Constants::PERMISSION_SHARE ;
407- break ;
408- default :
409- throw new \Exception ();
410- }
405+ $ ncPermissions |= match (strtolower ($ permission )) {
406+ 'read ' => Constants::PERMISSION_READ ,
407+ 'write ' => Constants::PERMISSION_CREATE | Constants::PERMISSION_UPDATE ,
408+ 'share ' => Constants::PERMISSION_SHARE ,
409+ default => throw new \Exception (),
410+ };
411411 }
412- } catch (\Exception $ e ) {
413- $ ncPermissions = $ this ->getDefaultPermissions ($ path );
412+ /** @var int-mask-of<Constants::PERMISSION_*> $ncPermissions */
413+ return $ ncPermissions ;
414+ } catch (\Exception ) {
415+ return $ this ->getDefaultPermissions ($ path );
414416 }
415-
416- return $ ncPermissions ;
417417 }
418418
419419 /**
420420 * Calculate the default permissions in case no permissions are provided
421+ * @return int-mask-of<Constants::PERMISSION_*>
421422 */
422423 protected function getDefaultPermissions (string $ path ): int {
423424 if ($ this ->is_dir ($ path )) {
0 commit comments