mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
Fix view-only code after code review comments
Signed-off-by: Vincent Petry <vincent@nextcloud.com>
This commit is contained in:
parent
2fb7a1feeb
commit
2ee659e547
8 changed files with 28 additions and 21 deletions
|
|
@ -161,7 +161,7 @@ class ServerFactory {
|
|||
|
||||
// Allow view-only plugin for webdav requests
|
||||
$server->addPlugin(new ViewOnlyPlugin(
|
||||
\OC::$server->getLogger()
|
||||
$this->logger
|
||||
));
|
||||
|
||||
if ($this->userSession->isLoggedIn()) {
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ use OCA\DAV\Connector\Sabre\File as DavFile;
|
|||
use OCA\DAV\Meta\MetaFile;
|
||||
use OCP\Files\FileInfo;
|
||||
use OCP\Files\NotFoundException;
|
||||
use OCP\ILogger;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Sabre\DAV\Server;
|
||||
use Sabre\DAV\ServerPlugin;
|
||||
use Sabre\HTTP\RequestInterface;
|
||||
|
|
@ -40,13 +40,13 @@ class ViewOnlyPlugin extends ServerPlugin {
|
|||
/** @var Server $server */
|
||||
private $server;
|
||||
|
||||
/** @var ILogger $logger */
|
||||
/** @var LoggerInterface $logger */
|
||||
private $logger;
|
||||
|
||||
/**
|
||||
* @param ILogger $logger
|
||||
* @param LoggerInterface $logger
|
||||
*/
|
||||
public function __construct(ILogger $logger) {
|
||||
public function __construct(LoggerInterface $logger) {
|
||||
$this->logger = $logger;
|
||||
$this->server = null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -232,7 +232,7 @@ class Server {
|
|||
|
||||
// Allow view-only plugin for webdav requests
|
||||
$this->server->addPlugin(new ViewOnlyPlugin(
|
||||
\OC::$server->getLogger()
|
||||
$logger
|
||||
));
|
||||
|
||||
if (BrowserErrorPagePlugin::isBrowserRequest($request)) {
|
||||
|
|
|
|||
|
|
@ -25,9 +25,9 @@ use OCA\Files_Sharing\SharedStorage;
|
|||
use OCA\DAV\Connector\Sabre\File as DavFile;
|
||||
use OCP\Files\File;
|
||||
use OCP\Files\Storage\IStorage;
|
||||
use OCP\ILogger;
|
||||
use OCP\Share\IAttributes;
|
||||
use OCP\Share\IShare;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Sabre\DAV\Server;
|
||||
use Sabre\DAV\Tree;
|
||||
use Test\TestCase;
|
||||
|
|
@ -45,7 +45,7 @@ class ViewOnlyPluginTest extends TestCase {
|
|||
|
||||
public function setUp(): void {
|
||||
$this->plugin = new ViewOnlyPlugin(
|
||||
$this->createMock(ILogger::class)
|
||||
$this->createMock(LoggerInterface::class)
|
||||
);
|
||||
$this->request = $this->createMock(RequestInterface::class);
|
||||
$this->tree = $this->createMock(Tree::class);
|
||||
|
|
|
|||
|
|
@ -125,12 +125,12 @@ class Application extends App implements IBootstrap {
|
|||
}
|
||||
|
||||
|
||||
public function registerMountProviders(IMountProviderCollection $mountProviderCollection, MountProvider $mountProvider, ExternalMountProvider $externalMountProvider) {
|
||||
public function registerMountProviders(IMountProviderCollection $mountProviderCollection, MountProvider $mountProvider, ExternalMountProvider $externalMountProvider): void {
|
||||
$mountProviderCollection->registerProvider($mountProvider);
|
||||
$mountProviderCollection->registerProvider($externalMountProvider);
|
||||
}
|
||||
|
||||
public function registerEventsScripts(IEventDispatcher $dispatcher, EventDispatcherInterface $oldDispatcher) {
|
||||
public function registerEventsScripts(IEventDispatcher $dispatcher, EventDispatcherInterface $oldDispatcher): void {
|
||||
// sidebar and files scripts
|
||||
$dispatcher->addServiceListener(LoadAdditionalScriptsEvent::class, LoadAdditionalListener::class);
|
||||
$dispatcher->addServiceListener(BeforeTemplateRenderedEvent::class, LegacyBeforeTemplateRenderedListener::class);
|
||||
|
|
@ -159,12 +159,12 @@ class Application extends App implements IBootstrap {
|
|||
IEventDispatcher $dispatcher,
|
||||
?IUserSession $userSession,
|
||||
IRootFolder $rootFolder
|
||||
) {
|
||||
): void {
|
||||
|
||||
$dispatcher->addListener(
|
||||
'file.beforeGetDirect',
|
||||
function (GenericEvent $event) use ($userSession, $rootFolder) {
|
||||
$pathsToCheck[] = $event->getArgument('path');
|
||||
$pathsToCheck = [$event->getArgument('path')];
|
||||
|
||||
// Check only for user/group shares. Don't restrict e.g. share links
|
||||
if ($userSession && $userSession->isLoggedIn()) {
|
||||
|
|
@ -213,7 +213,7 @@ class Application extends App implements IBootstrap {
|
|||
);
|
||||
}
|
||||
|
||||
public function setupSharingMenus(IManager $shareManager, IFactory $l10nFactory, IUserSession $userSession) {
|
||||
public function setupSharingMenus(IManager $shareManager, IFactory $l10nFactory, IUserSession $userSession): void {
|
||||
if (!$shareManager->shareApiEnabled() || !class_exists('\OCA\Files\App')) {
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ class ViewOnly {
|
|||
* @param string[] $pathsToCheck
|
||||
* @return bool
|
||||
*/
|
||||
public function check($pathsToCheck) {
|
||||
public function check(array $pathsToCheck): bool {
|
||||
// If any of elements cannot be downloaded, prevent whole download
|
||||
foreach ($pathsToCheck as $file) {
|
||||
try {
|
||||
|
|
@ -70,7 +70,7 @@ class ViewOnly {
|
|||
* @return bool
|
||||
* @throws NotFoundException
|
||||
*/
|
||||
private function dirRecursiveCheck(Folder $dirInfo) {
|
||||
private function dirRecursiveCheck(Folder $dirInfo): bool {
|
||||
if (!$this->checkFileInfo($dirInfo)) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -94,7 +94,7 @@ class ViewOnly {
|
|||
* @return bool
|
||||
* @throws NotFoundException
|
||||
*/
|
||||
private function checkFileInfo(Node $fileInfo) {
|
||||
private function checkFileInfo(Node $fileInfo): bool {
|
||||
// Restrict view-only to nodes which are shared
|
||||
$storage = $fileInfo->getStorage();
|
||||
if (!$storage->instanceOfStorage(SharedStorage::class)) {
|
||||
|
|
@ -105,9 +105,14 @@ class ViewOnly {
|
|||
/** @var \OCA\Files_Sharing\SharedStorage $storage */
|
||||
$share = $storage->getShare();
|
||||
|
||||
// Check if read-only and on whether permission can download is both set and disabled.
|
||||
$canDownload = true;
|
||||
|
||||
// Check if read-only and on whether permission can download is both set and disabled.
|
||||
$attributes = $share->getAttributes();
|
||||
if ($attributes !== null) {
|
||||
$canDownload = $attributes->getAttribute('permissions', 'download');
|
||||
}
|
||||
|
||||
$canDownload = $share->getAttributes()->getAttribute('permissions', 'download');
|
||||
if ($canDownload !== null && !$canDownload) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -338,7 +338,7 @@ class Share implements IShare {
|
|||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function newAttributes() {
|
||||
public function newAttributes(): IAttributes {
|
||||
return new ShareAttributes();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,9 @@ use OCP\Files\NotFoundException;
|
|||
use OCP\Share\Exceptions\IllegalIDChangeException;
|
||||
|
||||
/**
|
||||
* Interface IShare
|
||||
* This interface allows to represent a share object.
|
||||
*
|
||||
* This interface must not be implemented in your application.
|
||||
*
|
||||
* @since 9.0.0
|
||||
*/
|
||||
|
|
@ -320,7 +322,7 @@ interface IShare {
|
|||
* @since 25.0.0
|
||||
* @return IAttributes
|
||||
*/
|
||||
public function newAttributes();
|
||||
public function newAttributes(): IAttributes;
|
||||
|
||||
/**
|
||||
* Set share attributes
|
||||
|
|
|
|||
Loading…
Reference in a new issue