summaryrefslogtreecommitdiffstats
path: root/apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php')
-rw-r--r--apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php64
1 files changed, 64 insertions, 0 deletions
diff --git a/apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php b/apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php
new file mode 100644
index 00000000000..d9afe596027
--- /dev/null
+++ b/apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php
@@ -0,0 +1,64 @@
+<?php
+
+namespace OCA\Provisioning_API\Middleware;
+
+use OCA\Provisioning_API\Middleware\Exceptions\NotSubAdminException;
+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 \OCP\AppFramework\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 \OCP\AppFramework\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;
+ }
+} \ No newline at end of file