Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
2f55914
Accept OCM to groups
michielbdejong Apr 18, 2023
5eeb437
Accept OCM to groups
michielbdejong Apr 18, 2023
0485d0f
fix the broken tests
navid-shokri Apr 20, 2023
c2d3c6b
Fix code style
phil-davis Apr 21, 2023
783fe0c
Update ProviderFactory.php
navid-shokri Jun 26, 2023
049b9a8
Merge pull request #16 from pondersource/Fix#19-ocm
navid-shokri Jun 27, 2023
53b2921
improve logics
shokri-navid Jul 14, 2023
36b625d
adjust code format
shokri-navid Jul 14, 2023
263ceaa
remove extra space
shokri-navid Jul 14, 2023
2bea3c6
remove extra space
shokri-navid Jul 14, 2023
98d1200
Merge pull request #17 from pondersource/fix/review-comments
navid-shokri Jul 14, 2023
ab60172
add logger to RemoteOcsController
shokri-navid Jul 14, 2023
9f59310
resolve RemotOcsControllerTest error
shokri-navid Jul 14, 2023
7331f71
Resolve PR review conversations
shokri-navid Jul 14, 2023
d1d9d5e
Merge remote-tracking branch 'refs/remotes/origin/accept-ocm-to-group…
shokri-navid Jul 14, 2023
2d51f5d
check if shareType is undefined
soltanireza65 Jul 14, 2023
05f14c1
add comment to apps/files_sharing/api/v1 body `shareType`
soltanireza65 Jul 14, 2023
169637c
convert string share type to int
shokri-navid Jul 15, 2023
b2bc981
improve logics
shokri-navid Jul 14, 2023
85bb598
remove extra space
shokri-navid Jul 14, 2023
6ee6aa1
code style fix
shokri-navid Jul 16, 2023
e0fabef
add missing logger parameter in RemoteOcsController
shokri-navid Jul 16, 2023
78fbce0
Merge branch 'master' into accept-to-ocm-group-2
navid-shokri Jul 21, 2023
4964faa
throw share not found exception on wrong share link
shokri-navid Jul 27, 2023
3a99fac
Rename group manager to avoid confusion
MahdiBaghbani Aug 10, 2023
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