mirror of
https://github.com/nextcloud/server.git
synced 2026-03-25 03:43:45 -04:00
The sharing backend may throw another exception for example when the activity app encounters a problem. Previously this just triggered a 404 error page and the exception got not logged at all. With this change such exceptions get not intercepted and regularly handled as exceptions so that we have meaningful log data. Also the user will be shown a window informing him that an error happened. Helps to debug cases such as https://github.com/owncloud/core/issues/19465
114 lines
3 KiB
PHP
114 lines
3 KiB
PHP
<?php
|
|
/**
|
|
* @author Lukas Reschke <lukas@owncloud.com>
|
|
* @author Morris Jobke <hey@morrisjobke.de>
|
|
* @author Thomas Müller <thomas.mueller@tmit.eu>
|
|
*
|
|
* @copyright Copyright (c) 2015, ownCloud, Inc.
|
|
* @license AGPL-3.0
|
|
*
|
|
* This code is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License, version 3,
|
|
* as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License, version 3,
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
|
*
|
|
*/
|
|
|
|
namespace OCA\Files_Sharing\Middleware;
|
|
|
|
use OCP\App\IAppManager;
|
|
use OCP\AppFramework\Http\NotFoundResponse;
|
|
use OCP\AppFramework\Middleware;
|
|
use OCP\AppFramework\Http\TemplateResponse;
|
|
use OCP\Files\NotFoundException;
|
|
use OCP\IConfig;
|
|
|
|
/**
|
|
* Checks whether the "sharing check" is enabled
|
|
*
|
|
* @package OCA\Files_Sharing\Middleware
|
|
*/
|
|
class SharingCheckMiddleware extends Middleware {
|
|
|
|
/** @var string */
|
|
protected $appName;
|
|
/** @var IConfig */
|
|
protected $config;
|
|
/** @var IAppManager */
|
|
protected $appManager;
|
|
|
|
/***
|
|
* @param string $appName
|
|
* @param IConfig $config
|
|
* @param IAppManager $appManager
|
|
*/
|
|
public function __construct($appName,
|
|
IConfig $config,
|
|
IAppManager $appManager) {
|
|
$this->appName = $appName;
|
|
$this->config = $config;
|
|
$this->appManager = $appManager;
|
|
}
|
|
|
|
/**
|
|
* Check if sharing is enabled before the controllers is executed
|
|
*
|
|
* @param \OCP\AppFramework\Controller $controller
|
|
* @param string $methodName
|
|
* @throws NotFoundException
|
|
*/
|
|
public function beforeController($controller, $methodName) {
|
|
if(!$this->isSharingEnabled()) {
|
|
throw new NotFoundException('Sharing is disabled.');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Return 404 page in case of a not found exception
|
|
*
|
|
* @param \OCP\AppFramework\Controller $controller
|
|
* @param string $methodName
|
|
* @param \Exception $exception
|
|
* @return NotFoundResponse
|
|
* @throws \Exception
|
|
*/
|
|
public function afterException($controller, $methodName, \Exception $exception) {
|
|
if(is_a($exception, '\OCP\Files\NotFoundException')) {
|
|
return new NotFoundResponse();
|
|
}
|
|
|
|
throw $exception;
|
|
}
|
|
|
|
/**
|
|
* Check whether sharing is enabled
|
|
* @return bool
|
|
*/
|
|
private function isSharingEnabled() {
|
|
// FIXME: This check is done here since the route is globally defined and not inside the files_sharing app
|
|
// Check whether the sharing application is enabled
|
|
if(!$this->appManager->isEnabledForUser($this->appName)) {
|
|
return false;
|
|
}
|
|
|
|
// Check if the shareAPI is enabled
|
|
if ($this->config->getAppValue('core', 'shareapi_enabled', 'yes') !== 'yes') {
|
|
return false;
|
|
}
|
|
|
|
// Check whether public sharing is enabled
|
|
if($this->config->getAppValue('core', 'shareapi_allow_links', 'yes') !== 'yes') {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
}
|