Exemple #1
0
 /**
  * get system wide path and detect mount points
  *
  * @param string $path
  * @return string
  */
 protected function getPathToKeys($path)
 {
     list($owner, $relativePath) = $this->util->getUidAndFilename($path);
     $systemWideMountPoint = $this->util->isSystemWideMountPoint($relativePath, $owner);
     if ($systemWideMountPoint) {
         $systemPath = $this->keys_base_dir . $relativePath . '/';
     } else {
         $systemPath = '/' . $owner . $this->keys_base_dir . $relativePath . '/';
     }
     return $systemPath;
 }
Exemple #2
0
 /**
  * get list of users with access to the file
  *
  * @param string $path to the file
  * @return array  ['users' => $uniqueUserIds, 'public' => $public]
  */
 public function getAccessList($path)
 {
     // Make sure that a share key is generated for the owner too
     list($owner, $ownerPath) = $this->util->getUidAndFilename($path);
     // always add owner to the list of users with access to the file
     $userIds = array($owner);
     if (!$this->util->isFile($owner . '/' . $ownerPath)) {
         return array('users' => $userIds, 'public' => false);
     }
     $ownerPath = substr($ownerPath, strlen('/files'));
     $ownerPath = $this->util->stripPartialFileExtension($ownerPath);
     // first get the shares for the parent and cache the result so that we don't
     // need to check all parents for every file
     $parent = dirname($ownerPath);
     if (isset($this->cache[$parent])) {
         $resultForParents = $this->cache[$parent];
     } else {
         $resultForParents = \OCP\Share::getUsersSharingFile($parent, $owner);
         $this->cache[$parent] = $resultForParents;
     }
     $userIds = \array_merge($userIds, $resultForParents['users']);
     $public = $resultForParents['public'] || $resultForParents['remote'];
     // Find out who, if anyone, is sharing the file
     $resultForFile = \OCP\Share::getUsersSharingFile($ownerPath, $owner, false, false, false);
     $userIds = \array_merge($userIds, $resultForFile['users']);
     $public = $resultForFile['public'] || $resultForFile['remote'] || $public;
     // check if it is a group mount
     if (\OCP\App::isEnabled("files_external")) {
         $mounts = \OC_Mount_Config::getSystemMountPoints();
         foreach ($mounts as $mount) {
             if ($mount['mountpoint'] == substr($ownerPath, 1, strlen($mount['mountpoint']))) {
                 $mountedFor = $this->util->getUserWithAccessToMountPoint($mount['applicable']['users'], $mount['applicable']['groups']);
                 $userIds = array_merge($userIds, $mountedFor);
             }
         }
     }
     // Remove duplicate UIDs
     $uniqueUserIds = array_unique($userIds);
     return array('users' => $uniqueUserIds, 'public' => $public);
 }
Exemple #3
0
 /**
  * copy keys if a file was renamed
  *
  * @param string $source
  * @param string $target
  * @param string $owner
  * @param bool $systemWide
  */
 public function copyKeys($source, $target)
 {
     list($owner, $source) = $this->util->getUidAndFilename($source);
     list(, $target) = $this->util->getUidAndFilename($target);
     $systemWide = $this->util->isSystemWideMountPoint($target);
     if ($systemWide) {
         $sourcePath = $this->keys_base_dir . $source . '/';
         $targetPath = $this->keys_base_dir . $target . '/';
     } else {
         $sourcePath = '/' . $owner . $this->keys_base_dir . $source . '/';
         $targetPath = '/' . $owner . $this->keys_base_dir . $target . '/';
     }
     if ($this->view->file_exists($sourcePath)) {
         $this->keySetPreparation(dirname($targetPath));
         $this->view->copy($sourcePath, $targetPath);
     }
 }