mirror of
https://github.com/nextcloud/server.git
synced 2024-08-29 05:55:50 +02:00
![Lukas Reschke](/assets/img/avatar_default.png)
This is public API and breaks the middlewares of existing apps. Since this also requires maintaining two different code paths for 12 and 13 I'm at the moment voting for reverting this change. Signed-off-by: Lukas Reschke <lukas@statuscode.ch>
66 lines
1.6 KiB
PHP
66 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace OCA\Provisioning_API\Middleware;
|
|
|
|
use OCA\Provisioning_API\Middleware\Exceptions\NotSubAdminException;
|
|
use OCP\AppFramework\Controller;
|
|
use OCP\AppFramework\Http\Response;
|
|
use OCP\AppFramework\Middleware;
|
|
use OCP\AppFramework\OCS\OCSException;
|
|
use OCP\AppFramework\Utility\IControllerMethodReflector;
|
|
|
|
class ProvisioningApiMiddleware extends Middleware {
|
|
|
|
/** @var IControllerMethodReflector */
|
|
private $reflector;
|
|
|
|
/** @var bool */
|
|
private $isAdmin;
|
|
|
|
/** @var bool */
|
|
private $isSubAdmin;
|
|
|
|
/**
|
|
* ProvisioningApiMiddleware constructor.
|
|
*
|
|
* @param IControllerMethodReflector $reflector
|
|
* @param bool $isAdmin
|
|
* @param bool $isSubAdmin
|
|
*/
|
|
public function __construct(
|
|
IControllerMethodReflector $reflector,
|
|
$isAdmin,
|
|
$isSubAdmin) {
|
|
$this->reflector = $reflector;
|
|
$this->isAdmin = $isAdmin;
|
|
$this->isSubAdmin = $isSubAdmin;
|
|
}
|
|
|
|
/**
|
|
* @param Controller $controller
|
|
* @param string $methodName
|
|
*
|
|
* @throws NotSubAdminException
|
|
*/
|
|
public function beforeController($controller, $methodName) {
|
|
if (!$this->isAdmin && !$this->reflector->hasAnnotation('NoSubAdminRequired') && !$this->isSubAdmin) {
|
|
throw new NotSubAdminException();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param Controller $controller
|
|
* @param string $methodName
|
|
* @param \Exception $exception
|
|
* @throws \Exception
|
|
* @return Response
|
|
*/
|
|
public function afterException($controller, $methodName, \Exception $exception) {
|
|
if ($exception instanceof NotSubAdminException) {
|
|
throw new OCSException($exception->getMessage(), \OCP\API::RESPOND_UNAUTHORISED);
|
|
}
|
|
|
|
throw $exception;
|
|
}
|
|
}
|