Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion apps/dav/lib/Connector/Sabre/SharesPlugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,9 @@ private function getSharesForNodeIds($nodeIDs) {
\OCP\Share::SHARE_TYPE_USER,
\OCP\Share::SHARE_TYPE_GROUP,
\OCP\Share::SHARE_TYPE_LINK,
\OCP\Share::SHARE_TYPE_REMOTE
\OCP\Share::SHARE_TYPE_REMOTE,
\OCP\Share::SHARE_TYPE_REMOTE_GROUP

];

// Query DB for share types for specified node IDs
Expand Down
6 changes: 4 additions & 2 deletions apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,8 @@ public function testGetProperties($shareTypes) {
\OCP\Share::SHARE_TYPE_USER,
\OCP\Share::SHARE_TYPE_GROUP,
\OCP\Share::SHARE_TYPE_LINK,
\OCP\Share::SHARE_TYPE_REMOTE
\OCP\Share::SHARE_TYPE_REMOTE,
\OCP\Share::SHARE_TYPE_REMOTE_GROUP
];

$this->shareManager->expects($this->any())
Expand Down Expand Up @@ -172,7 +173,8 @@ public function testPreloadThenGetProperties($shareTypes) {
\OCP\Share::SHARE_TYPE_USER,
\OCP\Share::SHARE_TYPE_GROUP,
\OCP\Share::SHARE_TYPE_LINK,
\OCP\Share::SHARE_TYPE_REMOTE
\OCP\Share::SHARE_TYPE_REMOTE,
\OCP\Share::SHARE_TYPE_REMOTE_GROUP
];

$this->shareManager->expects($this->any())
Expand Down
3 changes: 2 additions & 1 deletion apps/federatedfilesharing/lib/AppInfo/Application.php
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,8 @@ function ($c) use ($server) {
$server->getUserManager(),
$c->query('AddressHandler'),
$c->query('FederatedShareManager'),
$server->getLogger()
$server->getLogger(),
$server->getConfig()
);
}
);
Expand Down
39 changes: 38 additions & 1 deletion apps/federatedfilesharing/lib/Controller/OcmController.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,12 @@
use OCA\FederatedFileSharing\Ocm\Exception\OcmException;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\IConfig;
use OCP\ILogger;
use OCP\IRequest;
use OCP\IURLGenerator;
use OCP\IUserManager;
use OCP\Share\Exceptions\ShareNotFound;

/**
* Class OcmController
Expand Down Expand Up @@ -75,6 +77,9 @@ class OcmController extends Controller {
*/
protected $logger;

/** @var IConfig */
private $config;

/**
* OcmController constructor.
*
Expand All @@ -86,6 +91,7 @@ class OcmController extends Controller {
* @param AddressHandler $addressHandler
* @param FedShareManager $fedShareManager
* @param ILogger $logger
* @param IConfig $config
*/
public function __construct(
$appName,
Expand All @@ -95,7 +101,8 @@ public function __construct(
IUserManager $userManager,
AddressHandler $addressHandler,
FedShareManager $fedShareManager,
ILogger $logger
ILogger $logger,
IConfig $config
) {
parent::__construct($appName, $request);

Expand All @@ -105,6 +112,7 @@ public function __construct(
$this->addressHandler = $addressHandler;
$this->fedShareManager = $fedShareManager;
$this->logger = $logger;
$this->config = $config;
}

/**
Expand Down Expand Up @@ -177,6 +185,24 @@ public function createShare(
$resourceType,
$protocol
) {
// Allow other apps to overwrite the behaviour of this endpoint
$controllerClass = $this->config->getSystemValue('sharing.ocmController');
if (($controllerClass !== '') && ($controllerClass !== null)) {
$controller = \OC::$server->query($controllerClass);
return $controller->createShare(
$shareWith,
$name,
$description,
$providerId,
$owner,
$ownerDisplayName,
$sender,
$senderDisplayName,
$shareType,
$resourceType,
$protocol
);
}
try {
$this->ocmMiddleware->assertIncomingSharingEnabled();
$this->ocmMiddleware->assertNotNull(
Expand Down Expand Up @@ -284,6 +310,17 @@ public function processNotification(
$providerId,
$notification
) {
// Allow other apps to overwrite the behaviour of this endpoint
$controllerClass = $this->config->getSystemValue('sharing.ocmController');
if (($controllerClass !== '') && ($controllerClass !== null)) {
$controller = \OC::$server->query($controllerClass);
return $controller->processNotification(
$notificationType,
$resourceType,
$providerId,
$notification
);
}
try {
if (!\is_array($notification)) {
throw new BadRequestException(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
use OCA\FederatedFileSharing\Tests\TestCase;
use OCP\App\IAppManager;
use OCP\AppFramework\Http;
use OCP\IConfig;
use OCP\ILogger;
use OCP\IRequest;
use OCP\IURLGenerator;
Expand Down Expand Up @@ -86,6 +87,11 @@ class OcmControllerTest extends TestCase {
*/
private $logger;

/**
* @var IConfig | \PHPUnit\Framework\MockObject\MockObject
*/
private $config;

/**
* @var OcmController
*/
Expand All @@ -107,6 +113,7 @@ protected function setUp(): void {
$this->addressHandler = $this->createMock(AddressHandler::class);
$this->fedShareManager = $this->createMock(FedShareManager::class);
$this->logger = $this->createMock(ILogger::class);
$this->config = $this->createMock(IConfig::class);

$this->ocmController = new OcmController(
'federatedfilesharing',
Expand All @@ -116,7 +123,8 @@ protected function setUp(): void {
$this->userManager,
$this->addressHandler,
$this->fedShareManager,
$this->logger
$this->logger,
$this->config
);
}

Expand Down
8 changes: 5 additions & 3 deletions apps/files_sharing/js/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -209,18 +209,19 @@ OCA.Sharing.App = {
fileList.fileSummary.$el.find('.filesize').remove();
},

_setShareState: function(fileId, state, isRemote) {
_setShareState: function(fileId, state, isRemote, shareType) {
var method = 'POST';
if (state === OC.Share.STATE_REJECTED) {
method = 'DELETE';
}

var endPoint = isRemote === true ? 'remote_shares/pending/' : 'shares/pending/';
var xhr = $.ajax({
url: OC.linkToOCS('apps/files_sharing/api/v1') + endPoint + encodeURIComponent(fileId) + '?format=json',
contentType: 'application/json',
dataType: 'json',
type: method,
// be aware that `shareType` should not be an empty string
data: JSON.stringify((shareType !== undefined ? { shareType: shareType } : {})),
});
xhr.fail(function(response) {
var message = '';
Expand All @@ -236,6 +237,7 @@ OCA.Sharing.App = {
_shareStateActionHandler: function(context, newState) {
var targetFileData = context.fileList.elementToFile(context.$file);
var isRemote = targetFileData.shareLocationType === 'remote';
const shareType = targetFileData.shareType;
function responseCallback(response, status) {
if (status === 'success') {
var meta = response.ocs.meta;
Expand All @@ -252,7 +254,7 @@ OCA.Sharing.App = {
}

context.fileList.showFileBusyState(context.$file, true);
this._setShareState(context.fileInfoModel.get('shares')[0].id, newState, isRemote)
this._setShareState(context.fileInfoModel.get('shares')[0].id, newState, isRemote, shareType)
.then(responseCallback);
},

Expand Down
8 changes: 6 additions & 2 deletions apps/files_sharing/js/external.js
Original file line number Diff line number Diff line change
Expand Up @@ -142,16 +142,20 @@
shares[index],
false,
function(result, share) {
let shareType = "user";
if (share.hasOwnProperty('share_type') ){
shareType = share.share_type;
}
if (result) {
// Accept
$.post(OC.generateUrl('/apps/files_sharing/api/externalShares'), {id: share.id})
$.post(OC.generateUrl('/apps/files_sharing/api/externalShares'), {id: share.id, share_type: shareType })
.then(function() {
fileList.reload();
});
} else {
// Delete
$.ajax({
url: OC.generateUrl('/apps/files_sharing/api/externalShares/'+share.id),
url: OC.generateUrl('/apps/files_sharing/api/externalShares/'+share.id+"?share_type="+shareType),
type: 'DELETE'
});
}
Expand Down
2 changes: 2 additions & 0 deletions apps/files_sharing/js/share.js
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,8 @@
hasShares = true;
} else if (shareType === OC.Share.SHARE_TYPE_REMOTE) {
hasShares = true;
} else if (shareType === OC.Share.SHARE_TYPE_REMOTE_GROUP) {
hasShares = true;
}
});
OCA.Sharing.Util._updateFileActionIcon($tr, hasShares, hasLink);
Expand Down
7 changes: 5 additions & 2 deletions apps/files_sharing/js/sharedfilelist.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
$dateColumn.before($tr.children('td:first'));
$tr.find('td.filename input:checkbox').remove();
$tr.attr('data-share-location-type', fileData.shareLocationType);
$tr.attr('data-share-type', fileData.shareType);
$tr.attr('data-share-id', _.pluck(fileData.shares, 'id').join(','));
// add row with expiration date for link only shares - influenced by _createRow of filelist
if (this._linksOnly) {
Expand Down Expand Up @@ -309,7 +310,8 @@
}

fileInfo.shareState = parseInt($el.attr('data-share-state'), 10);
fileInfo.shareLocationType = $el.attr('data-share-location-type');
fileInfo.shareLocationType = $el.attr('data-share-location-type');
fileInfo.shareType = $el.attr('data-share-type') || "";
return fileInfo;
},

Expand Down Expand Up @@ -355,7 +357,8 @@
path: OC.dirname(share.mountpoint),
permissions: share.permissions,
tags: share.tags || [],
shareLocationType: 'remote'
shareLocationType: 'remote',
shareType: share.share_type || ''
};

file.shares = [{
Expand Down
5 changes: 4 additions & 1 deletion apps/files_sharing/lib/AppInfo/Application.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,8 @@ public function __construct(array $urlParams = []) {
$c->query('Request'),
$c->query('ExternalManager'),
$c->query('HttpClientService'),
$server->getEventDispatcher()
$server->getEventDispatcher(),
$server->getConfig()
);
});

Expand Down Expand Up @@ -119,6 +120,8 @@ public function __construct(array $urlParams = []) {
$server->getEventDispatcher(),
$uid
),
$server->getConfig(),
$server->getLogger(),
$uid
);
});
Expand Down
41 changes: 40 additions & 1 deletion apps/files_sharing/lib/Controller/RemoteOcsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
use OCP\Share;
use OCP\Files\StorageNotAvailableException;
use OCP\Files\StorageInvalidException;
use OCP\IConfig;
use OCP\ILogger;

class RemoteOcsController extends OCSController {
/** @var IRequest */
Expand All @@ -40,23 +42,39 @@ class RemoteOcsController extends OCSController {
/** @var string */
protected $uid;

/**
* @var IConfig
*/
protected $config;

/**
* @var ILogger
*/
protected $logger;

/**
* RemoteOcsController constructor.
*
* @param string $appName
* @param IRequest $request
* @param Manager $externalManager
* @param IConfig config
* @param ILogger $loggar
* @param string $uid
*/
public function __construct(
$appName,
IRequest $request,
Manager $externalManager,
IConfig $config,
ILogger $logger,
$uid
) {
parent::__construct($appName, $request);
$this->request = $request;
$this->externalManager = $externalManager;
$this->config = $config;
$this->logger = $logger;
$this->uid = $uid;
}

Expand Down Expand Up @@ -126,6 +144,8 @@ public function declineShare($id) {
*/
public function getShares($includingPending = false) {
$shares = [];
$groupExternalManager = null;

foreach ($this->externalManager->getAcceptedShares() as $shareInfo) {
try {
$shares[] = $this->extendShareInfo($shareInfo);
Expand All @@ -136,6 +156,22 @@ public function getShares($includingPending = false) {
}
}

// Allow the Federated Groups app to overwrite the behaviour of this endpoint
$managerClass = $this->config->getSystemValue('sharing.groupExternalManager');
if (!empty($managerClass)) {
$groupExternalManager = \OC::$server->query($managerClass);

foreach ($groupExternalManager->getAcceptedShares() as $shareInfo) {
try {
$shares[] = $this->extendShareInfo($shareInfo);
} catch (StorageNotAvailableException $e) {
$this->logger->logException($e, ['app' => 'files_sharing']);
} catch (StorageInvalidException $e) {
$this->logger->logException($e, ['app' => 'files_sharing']);
}
}
}

if ($includingPending === true) {
/**
* pending shares have mountpoint looking like
Expand All @@ -152,7 +188,10 @@ function ($share) {
$share['mountpoint'] = \rtrim($share['mountpoint'], '}');
return $share;
},
$this->externalManager->getOpenShares()
\array_merge(
$this->externalManager->getOpenShares(),
$groupExternalManager === null ? [] : $groupExternalManager->getOpenShares()
)
);
$shares = \array_merge($shares, $openShares);
}
Expand Down
Loading