use uid provided by setupfs hook to mount server2server shares, otherwise mount will fail for public link shares
This commit is contained in:
parent
836b80919f
commit
66f0db30b2
5 changed files with 34 additions and 35 deletions
|
@ -34,8 +34,8 @@ $externalManager = new \OCA\Files_Sharing\External\Manager(
|
|||
\OC::$server->getDatabaseConnection(),
|
||||
\OC\Files\Filesystem::getMountManager(),
|
||||
\OC\Files\Filesystem::getLoader(),
|
||||
\OC::$server->getUserSession(),
|
||||
\OC::$server->getHTTPHelper()
|
||||
\OC::$server->getHTTPHelper(),
|
||||
\OC::$server->getUserSession()->getUser()->getUID()
|
||||
);
|
||||
|
||||
$name = OCP\Files::buildNotExistingFileName('/', $name);
|
||||
|
|
|
@ -60,8 +60,9 @@ class Server2Server {
|
|||
\OC::$server->getDatabaseConnection(),
|
||||
\OC\Files\Filesystem::getMountManager(),
|
||||
\OC\Files\Filesystem::getLoader(),
|
||||
\OC::$server->getUserSession(),
|
||||
\OC::$server->getHTTPHelper());
|
||||
\OC::$server->getHTTPHelper(),
|
||||
$shareWith
|
||||
);
|
||||
|
||||
$name = \OCP\Files::buildNotExistingFileName('/', $name);
|
||||
|
||||
|
|
|
@ -69,12 +69,14 @@ class Application extends App {
|
|||
return Helper::isIncomingServer2serverShareEnabled();
|
||||
});
|
||||
$container->registerService('ExternalManager', function(SimpleContainer $c) use ($server){
|
||||
$user = $server->getUserSession()->getUser();
|
||||
$uid = $user ? $user->getUID() : null;
|
||||
return new \OCA\Files_Sharing\External\Manager(
|
||||
$server->getDatabaseConnection(),
|
||||
\OC\Files\Filesystem::getMountManager(),
|
||||
\OC\Files\Filesystem::getLoader(),
|
||||
$server->getUserSession(),
|
||||
$server->getHTTPHelper()
|
||||
$server->getHTTPHelper(),
|
||||
$uid
|
||||
);
|
||||
});
|
||||
|
||||
|
|
|
@ -142,7 +142,6 @@ class ShareController extends Controller {
|
|||
return new TemplateResponse('core', '404', array(), 'guest');
|
||||
}
|
||||
|
||||
$linkItem = OCP\Share::getShareByToken($token, false);
|
||||
$shareOwner = $linkItem['uid_owner'];
|
||||
$originalSharePath = null;
|
||||
$rootLinkItem = OCP\Share::resolveReShare($linkItem);
|
||||
|
|
53
apps/files_sharing/lib/external/manager.php
vendored
53
apps/files_sharing/lib/external/manager.php
vendored
|
@ -13,6 +13,11 @@ use OC\Files\Filesystem;
|
|||
class Manager {
|
||||
const STORAGE = '\OCA\Files_Sharing\External\Storage';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $uid;
|
||||
|
||||
/**
|
||||
* @var \OCP\IDBConnection
|
||||
*/
|
||||
|
@ -28,11 +33,6 @@ class Manager {
|
|||
*/
|
||||
private $storageLoader;
|
||||
|
||||
/**
|
||||
* @var \OC\User\Session
|
||||
*/
|
||||
private $userSession;
|
||||
|
||||
/**
|
||||
* @var \OC\HTTPHelper
|
||||
*/
|
||||
|
@ -41,21 +41,21 @@ class Manager {
|
|||
/**
|
||||
* @param \OCP\IDBConnection $connection
|
||||
* @param \OC\Files\Mount\Manager $mountManager
|
||||
* @param \OC\User\Session $userSession
|
||||
* @param \OC\Files\Storage\StorageFactory $storageLoader
|
||||
* @param string $uid
|
||||
*/
|
||||
public function __construct(\OCP\IDBConnection $connection, \OC\Files\Mount\Manager $mountManager,
|
||||
\OC\Files\Storage\StorageFactory $storageLoader, \OC\User\Session $userSession, \OC\HTTPHelper $httpHelper) {
|
||||
\OC\Files\Storage\StorageFactory $storageLoader, \OC\HTTPHelper $httpHelper, $uid) {
|
||||
$this->connection = $connection;
|
||||
$this->mountManager = $mountManager;
|
||||
$this->userSession = $userSession;
|
||||
$this->storageLoader = $storageLoader;
|
||||
$this->httpHelper = $httpHelper;
|
||||
$this->uid = $uid;
|
||||
}
|
||||
|
||||
public function addShare($remote, $token, $password, $name, $owner, $accepted=false, $user = null, $remoteId = -1) {
|
||||
|
||||
$user = $user ? $user: $this->userSession->getUser()->getUID();
|
||||
$user = $user ? $user : $this->uid;
|
||||
$accepted = $accepted ? 1 : 0;
|
||||
|
||||
$mountPoint = Filesystem::normalizePath('/' . $name);
|
||||
|
@ -86,14 +86,13 @@ class Manager {
|
|||
return false;
|
||||
}
|
||||
|
||||
$user = $this->userSession->getUser();
|
||||
if ($user) {
|
||||
if (!is_null($this->uid)) {
|
||||
$query = $this->connection->prepare('
|
||||
SELECT `remote`, `share_token`, `password`, `mountpoint`, `owner`
|
||||
FROM `*PREFIX*share_external`
|
||||
WHERE `user` = ? AND `accepted` = ?
|
||||
');
|
||||
$query->execute(array($user->getUID(), 1));
|
||||
$query->execute(array($this->uid, 1));
|
||||
|
||||
while ($row = $query->fetch()) {
|
||||
$row['manager'] = $this;
|
||||
|
@ -114,7 +113,7 @@ class Manager {
|
|||
SELECT `remote`, `share_token`
|
||||
FROM `*PREFIX*share_external`
|
||||
WHERE `id` = ? AND `user` = ?');
|
||||
$result = $getShare->execute(array($id, $this->userSession->getUser()->getUID()));
|
||||
$result = $getShare->execute(array($id, $this->uid));
|
||||
|
||||
return $result ? $getShare->fetch() : false;
|
||||
}
|
||||
|
@ -133,7 +132,7 @@ class Manager {
|
|||
UPDATE `*PREFIX*share_external`
|
||||
SET `accepted` = ?
|
||||
WHERE `id` = ? AND `user` = ?');
|
||||
$acceptShare->execute(array(1, $id, $this->userSession->getUser()->getUID()));
|
||||
$acceptShare->execute(array(1, $id, $this->uid));
|
||||
$this->sendFeedbackToRemote($share['remote'], $share['share_token'], $id, 'accept');
|
||||
}
|
||||
}
|
||||
|
@ -150,7 +149,7 @@ class Manager {
|
|||
if ($share) {
|
||||
$removeShare = $this->connection->prepare('
|
||||
DELETE FROM `*PREFIX*share_external` WHERE `id` = ? AND `user` = ?');
|
||||
$removeShare->execute(array($id, $this->userSession->getUser()->getUID()));
|
||||
$removeShare->execute(array($id, $this->uid));
|
||||
$this->sendFeedbackToRemote($share['remote'], $share['share_token'], $id, 'decline');
|
||||
}
|
||||
}
|
||||
|
@ -175,19 +174,20 @@ class Manager {
|
|||
return ($result['success'] && $status['ocs']['meta']['statuscode'] === 100);
|
||||
}
|
||||
|
||||
public static function setup() {
|
||||
public static function setup($params) {
|
||||
$externalManager = new \OCA\Files_Sharing\External\Manager(
|
||||
\OC::$server->getDatabaseConnection(),
|
||||
\OC\Files\Filesystem::getMountManager(),
|
||||
\OC\Files\Filesystem::getLoader(),
|
||||
\OC::$server->getUserSession(),
|
||||
\OC::$server->getHTTPHelper()
|
||||
\OC::$server->getHTTPHelper(),
|
||||
$params['user']
|
||||
);
|
||||
|
||||
$externalManager->setupMounts();
|
||||
}
|
||||
|
||||
protected function stripPath($path) {
|
||||
$prefix = '/' . $this->userSession->getUser()->getUID() . '/files';
|
||||
$prefix = '/' . $this->uid . '/files';
|
||||
return rtrim(substr($path, strlen($prefix)), '/');
|
||||
}
|
||||
|
||||
|
@ -196,11 +196,10 @@ class Manager {
|
|||
* @return Mount
|
||||
*/
|
||||
protected function mountShare($data) {
|
||||
$user = $this->userSession->getUser();
|
||||
$data['manager'] = $this;
|
||||
$mountPoint = '/' . $user->getUID() . '/files' . $data['mountpoint'];
|
||||
$mountPoint = '/' . $this->uid . '/files' . $data['mountpoint'];
|
||||
$data['mountpoint'] = $mountPoint;
|
||||
$data['certificateManager'] = \OC::$server->getCertificateManager($user);
|
||||
$data['certificateManager'] = \OC::$server->getCertificateManager(\OC::$server->getUserSession()->getUser());
|
||||
$mount = new Mount(self::STORAGE, $mountPoint, $data, $this, $this->storageLoader);
|
||||
$this->mountManager->addMount($mount);
|
||||
return $mount;
|
||||
|
@ -219,7 +218,6 @@ class Manager {
|
|||
* @return bool
|
||||
*/
|
||||
public function setMountPoint($source, $target) {
|
||||
$user = $this->userSession->getUser();
|
||||
$source = $this->stripPath($source);
|
||||
$target = $this->stripPath($target);
|
||||
$sourceHash = md5($source);
|
||||
|
@ -231,13 +229,12 @@ class Manager {
|
|||
WHERE `mountpoint_hash` = ?
|
||||
AND `user` = ?
|
||||
');
|
||||
$result = (bool)$query->execute(array($target, $targetHash, $sourceHash, $user->getUID()));
|
||||
$result = (bool)$query->execute(array($target, $targetHash, $sourceHash, $this->uid));
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function removeShare($mountPoint) {
|
||||
$user = $this->userSession->getUser();
|
||||
$mountPoint = $this->stripPath($mountPoint);
|
||||
$hash = md5($mountPoint);
|
||||
|
||||
|
@ -245,7 +242,7 @@ class Manager {
|
|||
SELECT `remote`, `share_token`, `remote_id`
|
||||
FROM `*PREFIX*share_external`
|
||||
WHERE `mountpoint_hash` = ? AND `user` = ?');
|
||||
$result = $getShare->execute(array($hash, $user->getUID()));
|
||||
$result = $getShare->execute(array($hash, $this->uid));
|
||||
|
||||
if ($result) {
|
||||
$share = $getShare->fetch();
|
||||
|
@ -257,7 +254,7 @@ class Manager {
|
|||
WHERE `mountpoint_hash` = ?
|
||||
AND `user` = ?
|
||||
');
|
||||
return (bool)$query->execute(array($hash, $user->getUID()));
|
||||
return (bool)$query->execute(array($hash, $this->uid));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -294,7 +291,7 @@ class Manager {
|
|||
*/
|
||||
public function getOpenShares() {
|
||||
$openShares = $this->connection->prepare('SELECT * FROM `*PREFIX*share_external` WHERE `accepted` = ? AND `user` = ?');
|
||||
$result = $openShares->execute(array(0, $this->userSession->getUser()->getUID()));
|
||||
$result = $openShares->execute(array(0, $this->uid));
|
||||
|
||||
return $result ? $openShares->fetchAll() : array();
|
||||
|
||||
|
|
Loading…
Reference in a new issue