mirror of
https://github.com/nextcloud/server.git
synced 2026-06-12 10:10:49 -04:00
Merge pull request #414 from nextcloud/files_sharing_event_dispatcher
Files sharing event dispatcher
This commit is contained in:
commit
f7d26e4aa5
4 changed files with 55 additions and 36 deletions
|
|
@ -59,7 +59,8 @@ class Application extends App {
|
|||
$server->getSession(),
|
||||
$server->getPreviewManager(),
|
||||
$server->getRootFolder(),
|
||||
$federatedSharingApp->getFederatedShareProvider()
|
||||
$federatedSharingApp->getFederatedShareProvider(),
|
||||
$server->getEventDispatcher()
|
||||
);
|
||||
});
|
||||
$container->registerService('ExternalSharesController', function (SimpleContainer $c) {
|
||||
|
|
|
|||
|
|
@ -31,11 +31,9 @@
|
|||
|
||||
namespace OCA\Files_Sharing\Controllers;
|
||||
|
||||
use OC;
|
||||
use OC_Files;
|
||||
use OC_Util;
|
||||
use OCA\FederatedFileSharing\FederatedShareProvider;
|
||||
use OCP;
|
||||
use OCP\Template;
|
||||
use OCP\Share;
|
||||
use OCP\AppFramework\Controller;
|
||||
|
|
@ -54,6 +52,7 @@ use OCA\Files_Sharing\Activity;
|
|||
use \OCP\Files\NotFoundException;
|
||||
use OCP\Files\IRootFolder;
|
||||
use OCP\Share\Exceptions\ShareNotFound;
|
||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||
|
||||
/**
|
||||
* Class ShareController
|
||||
|
|
@ -70,9 +69,9 @@ class ShareController extends Controller {
|
|||
protected $userManager;
|
||||
/** @var ILogger */
|
||||
protected $logger;
|
||||
/** @var OCP\Activity\IManager */
|
||||
/** @var \OCP\Activity\IManager */
|
||||
protected $activityManager;
|
||||
/** @var OCP\Share\IManager */
|
||||
/** @var \OCP\Share\IManager */
|
||||
protected $shareManager;
|
||||
/** @var ISession */
|
||||
protected $session;
|
||||
|
|
@ -82,6 +81,8 @@ class ShareController extends Controller {
|
|||
protected $rootFolder;
|
||||
/** @var FederatedShareProvider */
|
||||
protected $federatedShareProvider;
|
||||
/** @var EventDispatcherInterface */
|
||||
protected $eventDispatcher;
|
||||
|
||||
/**
|
||||
* @param string $appName
|
||||
|
|
@ -90,12 +91,13 @@ class ShareController extends Controller {
|
|||
* @param IURLGenerator $urlGenerator
|
||||
* @param IUserManager $userManager
|
||||
* @param ILogger $logger
|
||||
* @param OCP\Activity\IManager $activityManager
|
||||
* @param \OCP\Activity\IManager $activityManager
|
||||
* @param \OCP\Share\IManager $shareManager
|
||||
* @param ISession $session
|
||||
* @param IPreview $previewManager
|
||||
* @param IRootFolder $rootFolder
|
||||
* @param FederatedShareProvider $federatedShareProvider
|
||||
* @param EventDispatcherInterface $eventDispatcher
|
||||
*/
|
||||
public function __construct($appName,
|
||||
IRequest $request,
|
||||
|
|
@ -108,7 +110,8 @@ class ShareController extends Controller {
|
|||
ISession $session,
|
||||
IPreview $previewManager,
|
||||
IRootFolder $rootFolder,
|
||||
FederatedShareProvider $federatedShareProvider) {
|
||||
FederatedShareProvider $federatedShareProvider,
|
||||
EventDispatcherInterface $eventDispatcher) {
|
||||
parent::__construct($appName, $request);
|
||||
|
||||
$this->config = $config;
|
||||
|
|
@ -121,6 +124,7 @@ class ShareController extends Controller {
|
|||
$this->previewManager = $previewManager;
|
||||
$this->rootFolder = $rootFolder;
|
||||
$this->federatedShareProvider = $federatedShareProvider;
|
||||
$this->eventDispatcher = $eventDispatcher;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -147,7 +151,7 @@ class ShareController extends Controller {
|
|||
* Authenticates against password-protected shares
|
||||
* @param string $token
|
||||
* @param string $password
|
||||
* @return RedirectResponse|TemplateResponse
|
||||
* @return RedirectResponse|TemplateResponse|NotFoundResponse
|
||||
*/
|
||||
public function authenticate($token, $password = '') {
|
||||
|
||||
|
|
@ -203,8 +207,8 @@ class ShareController extends Controller {
|
|||
* otherwise token
|
||||
* @param int $errorCode
|
||||
* @param string $errorMessage
|
||||
* @throws OC\HintException
|
||||
* @throws OC\ServerNotAvailableException
|
||||
* @throws \OC\HintException
|
||||
* @throws \OC\ServerNotAvailableException
|
||||
*/
|
||||
protected function emitAccessShareHook($share, $errorCode = 200, $errorMessage = '') {
|
||||
$itemType = $itemSource = $uidOwner = '';
|
||||
|
|
@ -250,7 +254,7 @@ class ShareController extends Controller {
|
|||
*
|
||||
* @param string $token
|
||||
* @param string $path
|
||||
* @return TemplateResponse|RedirectResponse
|
||||
* @return TemplateResponse|RedirectResponse|NotFoundResponse
|
||||
* @throws NotFoundException
|
||||
* @throws \Exception
|
||||
*/
|
||||
|
|
@ -337,7 +341,7 @@ class ShareController extends Controller {
|
|||
$folder->assign('hideFileList', $hideFileList);
|
||||
$folder->assign('publicUploadEnabled', 'no');
|
||||
$folder->assign('uploadMaxFilesize', $maxUploadFilesize);
|
||||
$folder->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize));
|
||||
$folder->assign('uploadMaxHumanFilesize', \OCP\Util::humanFileSize($maxUploadFilesize));
|
||||
$folder->assign('freeSpace', $freeSpace);
|
||||
$folder->assign('uploadLimit', $uploadLimit); // PHP upload limit
|
||||
$folder->assign('usedSpacePercent', 0);
|
||||
|
|
@ -353,7 +357,32 @@ class ShareController extends Controller {
|
|||
$shareTmpl['previewMaxX'] = $this->config->getSystemValue('preview_max_x', 1024);
|
||||
$shareTmpl['previewMaxY'] = $this->config->getSystemValue('preview_max_y', 1024);
|
||||
|
||||
$csp = new OCP\AppFramework\Http\ContentSecurityPolicy();
|
||||
// Load files we need
|
||||
\OCP\Util::addScript('files', 'file-upload');
|
||||
\OCP\Util::addStyle('files_sharing', 'public');
|
||||
\OCP\Util::addStyle('files_sharing', 'mobile');
|
||||
\OCP\Util::addScript('files_sharing', 'public');
|
||||
\OCP\Util::addScript('files', 'fileactions');
|
||||
\OCP\Util::addScript('files', 'fileactionsmenu');
|
||||
\OCP\Util::addScript('files', 'jquery.fileupload');
|
||||
\OCP\Util::addScript('files_sharing', 'files_drop');
|
||||
|
||||
if (isset($shareTmpl['folder'])) {
|
||||
// JS required for folders
|
||||
\OCP\Util::addStyle('files', 'files');
|
||||
\OCP\Util::addStyle('files', 'upload');
|
||||
\OCP\Util::addScript('files', 'filesummary');
|
||||
\OCP\Util::addScript('files', 'breadcrumb');
|
||||
\OCP\Util::addScript('files', 'fileinfomodel');
|
||||
\OCP\Util::addScript('files', 'newfilemenu');
|
||||
\OCP\Util::addScript('files', 'files');
|
||||
\OCP\Util::addScript('files', 'filelist');
|
||||
\OCP\Util::addScript('files', 'keyboardshortcuts');
|
||||
}
|
||||
|
||||
$this->eventDispatcher->dispatch('OCA\Files_Sharing::loadAdditionalScripts');
|
||||
|
||||
$csp = new \OCP\AppFramework\Http\ContentSecurityPolicy();
|
||||
$csp->addAllowedFrameDomain('\'self\'');
|
||||
$response = new TemplateResponse($this->appName, 'public', $shareTmpl, 'base');
|
||||
$response->setContentSecurityPolicy($csp);
|
||||
|
|
@ -371,7 +400,7 @@ class ShareController extends Controller {
|
|||
* @param string $files
|
||||
* @param string $path
|
||||
* @param string $downloadStartSecret
|
||||
* @return void|OCP\AppFramework\Http\Response
|
||||
* @return void|\OCP\AppFramework\Http\Response
|
||||
* @throws NotFoundException
|
||||
*/
|
||||
public function downloadShare($token, $files = null, $path = '', $downloadStartSecret = '') {
|
||||
|
|
@ -380,7 +409,7 @@ class ShareController extends Controller {
|
|||
$share = $this->shareManager->getShareByToken($token);
|
||||
|
||||
if(!($share->getPermissions() & \OCP\Constants::PERMISSION_READ)) {
|
||||
return new OCP\AppFramework\Http\DataResponse('Share is read-only');
|
||||
return new \OCP\AppFramework\Http\DataResponse('Share is read-only');
|
||||
}
|
||||
|
||||
// Share is password protected - check whether the user is permitted to access the share
|
||||
|
|
|
|||
|
|
@ -1,26 +1,6 @@
|
|||
<?php
|
||||
/** @var $l OC_L10N */
|
||||
/** @var $_ array */
|
||||
|
||||
OCP\Util::addScript('files', 'file-upload');
|
||||
OCP\Util::addStyle('files_sharing', 'public');
|
||||
OCP\Util::addStyle('files_sharing', 'mobile');
|
||||
OCP\Util::addScript('files_sharing', 'public');
|
||||
OCP\Util::addScript('files', 'fileactions');
|
||||
OCP\Util::addScript('files', 'fileactionsmenu');
|
||||
OCP\Util::addScript('files', 'jquery.fileupload');
|
||||
OCP\Util::addScript('files_sharing', 'files_drop');
|
||||
|
||||
// JS required for folders
|
||||
OCP\Util::addStyle('files', 'files');
|
||||
OCP\Util::addStyle('files', 'upload');
|
||||
OCP\Util::addScript('files', 'filesummary');
|
||||
OCP\Util::addScript('files', 'breadcrumb');
|
||||
OCP\Util::addScript('files', 'fileinfomodel');
|
||||
OCP\Util::addScript('files', 'newfilemenu');
|
||||
OCP\Util::addScript('files', 'files');
|
||||
OCP\Util::addScript('files', 'filelist');
|
||||
OCP\Util::addscript('files', 'keyboardshortcuts');
|
||||
?>
|
||||
|
||||
<?php if ($_['previewSupported']): /* This enables preview images for links (e.g. on Facebook, Google+, ...)*/?>
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ use OCP\ISession;
|
|||
use OCP\IUserManager;
|
||||
use OCP\Security\ISecureRandom;
|
||||
use OCP\IURLGenerator;
|
||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||
|
||||
/**
|
||||
* @group DB
|
||||
|
|
@ -72,6 +73,8 @@ class ShareControllerTest extends \Test\TestCase {
|
|||
private $userManager;
|
||||
/** @var FederatedShareProvider | \PHPUnit_Framework_MockObject_MockObject */
|
||||
private $federatedShareProvider;
|
||||
/** @var EventDispatcherInterface | \PHPUnit_Framework_MockObject_MockObject */
|
||||
private $eventDispatcher;
|
||||
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
|
@ -89,6 +92,7 @@ class ShareControllerTest extends \Test\TestCase {
|
|||
->method('isOutgoingServer2serverShareEnabled')->willReturn(true);
|
||||
$this->federatedShareProvider->expects($this->any())
|
||||
->method('isIncomingServer2serverShareEnabled')->willReturn(true);
|
||||
$this->eventDispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcherInterface')->getMock();
|
||||
|
||||
$this->shareController = new \OCA\Files_Sharing\Controllers\ShareController(
|
||||
$this->appName,
|
||||
|
|
@ -102,7 +106,8 @@ class ShareControllerTest extends \Test\TestCase {
|
|||
$this->session,
|
||||
$this->previewManager,
|
||||
$this->getMockBuilder('\OCP\Files\IRootFolder')->getMock(),
|
||||
$this->federatedShareProvider
|
||||
$this->federatedShareProvider,
|
||||
$this->eventDispatcher
|
||||
);
|
||||
|
||||
|
||||
|
|
@ -353,6 +358,10 @@ class ShareControllerTest extends \Test\TestCase {
|
|||
|
||||
$this->userManager->method('get')->with('ownerUID')->willReturn($owner);
|
||||
|
||||
$this->eventDispatcher->expects($this->once())
|
||||
->method('dispatch')
|
||||
->with('OCA\Files_Sharing::loadAdditionalScripts');
|
||||
|
||||
$response = $this->shareController->showShare('token');
|
||||
$sharedTmplParams = array(
|
||||
'displayName' => 'ownerDisplay',
|
||||
|
|
|
|||
Loading…
Reference in a new issue