Skip to content

Commit

Permalink
Merge pull request #19386 from owncloud/ocs_shareapi_extenstion
Browse files Browse the repository at this point in the history
OCS endpoint to list remote shares
  • Loading branch information
DeepDiver1975 committed Oct 2, 2015
2 parents aaabe35 + c924b67 commit daf9a63
Show file tree
Hide file tree
Showing 3 changed files with 131 additions and 7 deletions.
101 changes: 99 additions & 2 deletions apps/files_sharing/api/remote.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@
class Remote {

/**
* Accept a remote share
* Get list of pending remote shares
*
* @param array $params contains the shareID 'id' which should be accepted
* @param array $params empty
* @return \OC_OCS_Result
*/
public static function getOpenShares($params) {
Expand Down Expand Up @@ -90,4 +90,101 @@ public static function declineShare($params) {

return new \OC_OCS_Result(null, 404, "wrong share ID, share doesn't exist.");
}

/**
* @param array $share Share with info from the share_external table
* @return enriched share info with data from the filecache
*/
private static function extendShareInfo($share) {
$view = new \OC\Files\View('/' . \OC_User::getUser() . '/files/');
$info = $view->getFileInfo($shares['mountpoint']);

$share['mimetype'] = $info->getMimetype();
$share['mtime'] = $info->getMtime();
$share['permissions'] = $info->getPermissions();
$share['type'] = $info->getType();
$share['file_id'] = $info->getId();

return $share;
}

/**
* List accepted remote shares
*
* @param array $params
* @return \OC_OCS_Result
*/
public static function getShares($params) {
$externalManager = new Manager(
\OC::$server->getDatabaseConnection(),
Filesystem::getMountManager(),
Filesystem::getLoader(),
\OC::$server->getHTTPHelper(),
\OC::$server->getNotificationManager(),
\OC_User::getUser()
);

$shares = $externalManager->getAcceptedShares();

$shares = array_map('self::extendShareInfo', $shares);

return new \OC_OCS_Result($shares);
}

/**
* Get info of a remote share
*
* @param array $params contains the shareID 'id'
* @return \OC_OCS_Result
*/
public static function getShare($params) {
$externalManager = new Manager(
\OC::$server->getDatabaseConnection(),
Filesystem::getMountManager(),
Filesystem::getLoader(),
\OC::$server->getHTTPHelper(),
\OC::$server->getNotificationManager(),
\OC_User::getUser()
);

$shareInfo = $externalManager->getShare($params['id']);

if ($shareInfo === false) {
return new \OC_OCS_Result(null, 404, 'share does not exist');
} else {
$shareInfo = self::extendShareInfo($shareInfo);
return new \OC_OCS_Result($shareInfo);
}
}

/**
* Unshare a remote share
*
* @param array $params contains the shareID 'id' which should be unshared
* @return \OC_OCS_Result
*/
public static function unshare($params) {
$externalManager = new Manager(
\OC::$server->getDatabaseConnection(),
Filesystem::getMountManager(),
Filesystem::getLoader(),
\OC::$server->getHTTPHelper(),
\OC::$server->getNotificationManager(),
\OC_User::getUser()
);

$shareInfo = $externalManager->getShare($params['id']);

if ($shareInfo === false) {
return new \OC_OCS_Result(null, 404, 'Share does not exist');
}

$mountPoint = '/' . \OC_User::getUser() . '/files' . $shareInfo['mountpoint'];

if ($externalManager->removeShare($mountPoint) === true) {
return new \OC_OCS_Result(null);
} else {
return new \OC_OCS_Result(null, 403, 'Could not unshare');
}
}
}
20 changes: 18 additions & 2 deletions apps/files_sharing/appinfo/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -89,19 +89,35 @@ function() {

API::register('get',
'/apps/files_sharing/api/v1/remote_shares',
array('\OCA\Files_Sharing\API\Remote', 'getShares'),
'files_sharing');

API::register('get',
'/apps/files_sharing/api/v1/remote_shares/pending',
array('\OCA\Files_Sharing\API\Remote', 'getOpenShares'),
'files_sharing');

API::register('post',
'/apps/files_sharing/api/v1/remote_shares/{id}',
'/apps/files_sharing/api/v1/remote_shares/pending/{id}',
array('\OCA\Files_Sharing\API\Remote', 'acceptShare'),
'files_sharing');

API::register('delete',
'/apps/files_sharing/api/v1/remote_shares/{id}',
'/apps/files_sharing/api/v1/remote_shares/pending/{id}',
array('\OCA\Files_Sharing\API\Remote', 'declineShare'),
'files_sharing');

API::register('get',
'/apps/files_sharing/api/v1/remote_shares/{id}',
array('\OCA\Files_Sharing\API\Remote', 'getShare'),
'files_sharing');

API::register('delete',
'/apps/files_sharing/api/v1/remote_shares/{id}',
array('\OCA\Files_Sharing\API\Remote', 'unshare'),
'files_sharing');


$sharees = new \OCA\Files_Sharing\API\Sharees(\OC::$server->getGroupManager(),
\OC::$server->getUserManager(),
\OC::$server->getContactsManager(),
Expand Down
17 changes: 14 additions & 3 deletions apps/files_sharing/lib/external/manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -180,9 +180,9 @@ private function setupMounts() {
* @param int $id share id
* @return mixed share of false
*/
private function getShare($id) {
public function getShare($id) {
$getShare = $this->connection->prepare('
SELECT `remote`, `remote_id`, `share_token`, `name`
SELECT `id`, `remote`, `remote_id`, `share_token`, `name`, `owner`, `user`, `mountpoint`, `accepted`
FROM `*PREFIX*share_external`
WHERE `id` = ? AND `user` = ?');
$result = $getShare->execute(array($id, $this->uid));
Expand Down Expand Up @@ -406,6 +406,15 @@ public function getOpenShares() {
return $this->getShares(false);
}

/**
* return a list of shares wich are accepted by the user
*
* @return array list of accepted server-to-server shares
*/
public function getAcceptedShares() {
return $this->getShares(true);
}

/**
* return a list of shares for the user
*
Expand All @@ -415,7 +424,9 @@ public function getOpenShares() {
* @return array list of open server-to-server shares
*/
private function getShares($accepted) {
$query = 'SELECT * FROM `*PREFIX*share_external` WHERE `user` = ?';
$query = 'SELECT `id`, `remote`, `remote_id`, `share_token`, `name`, `owner`, `user`, `mountpoint`, `accepted`
FROM `*PREFIX*share_external`
WHERE `user` = ?';
$parameters = [$this->uid];
if (!is_null($accepted)) {
$query .= ' AND `accepted` = ?';
Expand Down

0 comments on commit daf9a63

Please sign in to comment.