From cb20a905657508397ccb883a1529e6af78d355d6 Mon Sep 17 00:00:00 2001 From: Pierre Ozoux Date: Fri, 29 Apr 2022 18:04:24 +0200 Subject: [PATCH] Tries middleware to return json. --- lib/AppInfo/Application.php | 67 +++++++++++++++++++++++ lib/Middleware/SCIMApiMiddleware.php | 80 ++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+) create mode 100644 lib/AppInfo/Application.php create mode 100644 lib/Middleware/SCIMApiMiddleware.php diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php new file mode 100644 index 0000000..ced1f8f --- /dev/null +++ b/lib/AppInfo/Application.php @@ -0,0 +1,67 @@ + + * + * @author Christoph Wurst + * @author Daniel Kesselberg + * @author Joas Schilling + * @author Lukas Reschke + * @author Morris Jobke + * @author Roeland Jago Douma + * @author Vincent Petry + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see . + * + */ +namespace OCA\SCIMServiceProvider\AppInfo; + +use OC\Group\Manager as GroupManager; +use OCA\Provisioning_API\Capabilities; +use OCA\Provisioning_API\Listener\UserDeletedListener; +use OCA\SCIMServiceProvider\Middleware\SCIMApiMiddleware; +use OCA\Settings\Mailer\NewUserMailHelper; +use OCP\AppFramework\App; +use OCP\AppFramework\Bootstrap\IBootContext; +use OCP\AppFramework\Bootstrap\IBootstrap; +use OCP\AppFramework\Bootstrap\IRegistrationContext; +use OCP\AppFramework\Utility\IControllerMethodReflector; +use OCP\AppFramework\Utility\ITimeFactory; +use OCP\Defaults; +use OCP\IConfig; +use OCP\IGroupManager; +use OCP\IURLGenerator; +use OCP\IUser; +use OCP\IUserManager; +use OCP\L10N\IFactory; +use OCP\Mail\IMailer; +use OCP\Security\ICrypto; +use OCP\Security\ISecureRandom; +use OCP\User\Events\UserDeletedEvent; +use OCP\Util; +use Psr\Container\ContainerInterface; + +class Application extends App implements IBootstrap { + public function __construct(array $urlParams = []) { + parent::__construct('scimserviceprovider', $urlParams); + } + + public function register(IRegistrationContext $context): void { + $context->registerMiddleware(SCIMApiMiddleware::class); + } + + public function boot(IBootContext $context): void { + } +} diff --git a/lib/Middleware/SCIMApiMiddleware.php b/lib/Middleware/SCIMApiMiddleware.php new file mode 100644 index 0000000..f4d8bcc --- /dev/null +++ b/lib/Middleware/SCIMApiMiddleware.php @@ -0,0 +1,80 @@ + + * + * @author Joas Schilling + * @author Lukas Reschke + * @author Morris Jobke + * @author Roeland Jago Douma + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see . + * + */ +namespace OCA\SCIMServiceProvider\Middleware; + +use OCP\AppFramework\Controller; +use OCP\AppFramework\Http; +use OCP\AppFramework\Http\JSONResponse; +use OCP\AppFramework\Middleware; +use OCP\AppFramework\Utility\IControllerMethodReflector; +use OCA\SCIMServiceProvider\Responses\SCIMResourceResponse; + +class SCIMApiMiddleware 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, + bool $isAdmin, + bool $isSubAdmin) { + $this->reflector = $reflector; + $this->isAdmin = $isAdmin; + $this->isSubAdmin = $isSubAdmin; + } + + /** + * @param Controller $controller + * @param string $methodName + * @param \Exception $exception + * @throws \Exception + * @return SCIMResourceResponse + */ + public function afterException($controller, $methodName, \Exception $exception) { + if ($exception instanceof SCIMException) { + return SCIMResourceResponse($exception->getMessage(), 500); + } + return SCIMResourceResponse([ + "schema" => "error" + ],500); + } +}