Beispiel #1
0
	/**
	 * see http://php.net/manual/en/function.copy.php
	 *
	 * @param string $path1
	 * @param string $path2
	 * @return bool
	 */
	public function copy($path1, $path2) {

		$source = $this->getFullPath($path1);
		$target = $this->getFullPath($path2);

		if ($this->util->isExcluded($source)) {
			return $this->storage->copy($path1, $path2);
		}

		$result = $this->storage->copy($path1, $path2);

		if ($result && $this->encryptionManager->isEnabled()) {
			$keysCopied = $this->copyKeys($source, $target);

			if ($keysCopied &&
				dirname($source) !== dirname($target) &&
				$this->util->isFile($target)
			) {
				$this->update->update($target);
			}

			$data = $this->getMetaData($path1);

			if (isset($data['encrypted'])) {
				$this->getCache()->put($path2, ['encrypted' => $data['encrypted']]);
			}
			if (isset($data['size'])) {
				$this->updateUnencryptedSize($target, $data['size']);
			}
		}

		return $result;
	}
Beispiel #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);
 }
Beispiel #3
0
 /**
  * @dataProvider dataTestIsFile
  */
 public function testIsFile($path, $expected)
 {
     $this->assertSame($expected, $this->util->isFile($path));
 }