Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
  • Loading branch information
tobiasKaminsky committed Jul 23, 2019
1 parent b81fb18 commit efa0733
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 62 deletions.
4 changes: 0 additions & 4 deletions .htaccess
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,3 @@ Options -Indexes
<IfModule pagespeed_module>
ModPagespeed Off
</IfModule>
#### DO NOT CHANGE ANYTHING ABOVE THIS LINE ####

ErrorDocument 403 //
ErrorDocument 404 //
90 changes: 32 additions & 58 deletions apps/dav/lib/Connector/Sabre/SharesPlugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,9 @@
*/
namespace OCA\DAV\Connector\Sabre;

use OCA\DAV\Connector\Sabre\Exception\FileLocked;
use \Sabre\DAV\PropFind;
use OCP\IUserSession;
use OCP\Share\IShare;
use OCP\Files\NotFoundException;
use OCP\Lock\LockedException;
use \OCA\DAV\Connector\Sabre\Node;

/**
* Sabre Plugin to provide share-related properties
Expand Down Expand Up @@ -223,67 +219,45 @@ public function handleGetProperties(
});

$propFind->handle(self::SHAREES_PROPERTYNAME, function() use ($sabreNode) {
$test = $this->server->httpRequest->getRawServerValue('PHP_AUTH_USER');
return $this->getShareeFromShare($sabreNode, $test);
});
}

/**
* @param \Sabre\DAV\INode $sabreNode
* @param string $user
* @return string
* @throws FileLocked
* @throws NotFoundException
*/
public function getShareeFromShare(\Sabre\DAV\INode $sabreNode, $user) {
$sharees = [];
$user = $this->server->httpRequest->getRawServerValue('PHP_AUTH_USER');

if ($user == null) {
return $sharees;
}
$types = [
Share::SHARE_TYPE_USER,
Share::SHARE_TYPE_REMOTE,
Share::SHARE_TYPE_GROUP,
];

if ($sabreNode->getPath() === "/") {
return $sharees;
}
if ($user == null) {
return [];
}

$path = $this->getPath();
if ($sabreNode->getPath() === "/") {
return [];
}

if ($path !== null) {
$userFolder = \OC::$server->getRootFolder()->getUserFolder($user);
try {
$path = $userFolder->get($path);
$this->lock($path);
} catch (\OCP\Files\NotFoundException $e) {
throw new NotFoundException($this->l->t('Wrong path, file/folder doesn\'t exist'));
} catch (LockedException $e) {
throw new FileLocked($e->getMessage(), $e->getCode(), $e);
}
}
$path = $userFolder->get($sabreNode->getPath());

foreach ($types as $shareType) {
$shares = $this->shareManager->getSharesBy($user, $shareType, $path, false, -1, 0);
foreach ($shares as $share) {
if ($share->getSharedBy() === $user) {
$sharees[] = $share->getSharedWith();
if (isset($this->cachedShareTypes[$sabreNode->getId()])) {
$shareTypes = $this->cachedShareTypes[$sabreNode->getId()];
} else {
list($parentPath,) = \Sabre\Uri\split($sabreNode->getPath());
if ($parentPath === '') {
$parentPath = '/';
}
// if we already cached the folder this file is in we know there are no shares for this file
if (array_search($parentPath, $this->cachedFolders) === false) {
$node = $this->userFolder->get($sabreNode->getPath());
$shareTypes = $this->getShareTypes($node);
} else {
return [];
}
}
}
return implode(', ', $sharees);
}

/**
* Lock a Node
*
* @param \OCP\Files\Node $node
* @throws LockedException
*/
private function lock(\OCP\Files\Node $node) {
$node->lock(ILockingProvider::LOCK_SHARED);
$this->lockedNode = $node;
foreach ($shareTypes as $shareType) {
$shares = $this->shareManager->getSharesBy($user, $shareType, $path, false, -1, 0);

foreach ($shares as $share) {
if ($share->getSharedBy() === $user) {
$sharees[] = $share->getSharedWith();
}
}
}
return implode(', ', $sharees);
});
}
}

0 comments on commit efa0733

Please sign in to comment.