From 9470ddbbd546611a7dfdde2bc6a0763920835226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Mon, 9 Sep 2024 14:41:20 +0200 Subject: [PATCH] feat(webhook_listeners): Add API endpoint to remove all registrations from an AppAPI app MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Côme Chilliet --- .../lib/Controller/WebhooksController.php | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/apps/webhook_listeners/lib/Controller/WebhooksController.php b/apps/webhook_listeners/lib/Controller/WebhooksController.php index eeb26b57030..1d5e37cb373 100644 --- a/apps/webhook_listeners/lib/Controller/WebhooksController.php +++ b/apps/webhook_listeners/lib/Controller/WebhooksController.php @@ -247,7 +247,7 @@ class WebhooksController extends OCSController { * * @return DataResponse * - * 200: Boolean returned whether something was deleted FIXME + * 200: Boolean returned whether something was deleted * * @throws OCSBadRequestException Bad request * @throws OCSForbiddenException Insufficient permissions @@ -269,4 +269,34 @@ class WebhooksController extends OCSController { throw new OCSException('An internal error occurred', Http::STATUS_INTERNAL_SERVER_ERROR, $e); } } + + /** + * Remove all existing webhook registration mapped to an AppAPI app id + * + * @param string $appid id of the app, as in the EX-APP-ID for creation + * + * @return DataResponse + * + * 200: Integer number of registrations deleted + * + * @throws OCSBadRequestException Bad request + * @throws OCSForbiddenException Insufficient permissions + * @throws OCSException Other error + */ + #[ApiRoute(verb: 'DELETE', url: '/api/v1/webhooks/byappid/{appid}')] + #[AuthorizedAdminSetting(settings:Admin::class)] + #[AppApiAdminAccessWithoutUser] + public function deleteByAppId(string $appid): DataResponse { + try { + $deletedCount = $this->mapper->deleteByAppId($appid); + return new DataResponse($deletedCount); + } catch (\UnexpectedValueException $e) { + throw new OCSBadRequestException($e->getMessage(), $e); + } catch (\DomainException $e) { + throw new OCSForbiddenException($e->getMessage(), $e); + } catch (\Exception $e) { + $this->logger->error('Error when deleting flows for app id ' . $appid, ['exception' => $e]); + throw new OCSException('An internal error occurred', Http::STATUS_INTERNAL_SERVER_ERROR, $e); + } + } }