aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCôme Chilliet <come.chilliet@nextcloud.com>2024-09-09 14:41:20 +0200
committerCôme Chilliet <come.chilliet@nextcloud.com>2024-09-09 14:41:20 +0200
commit4459af41c92748bceb7d7c6ef5f55a568a7fff01 (patch)
tree78198f463566bc61a2161a0ca8183f41622d1dd8
parent4fc8aa5a060675d65379db0abb50cbd9c93b4f5a (diff)
downloadnextcloud-server-4459af41c92748bceb7d7c6ef5f55a568a7fff01.tar.gz
nextcloud-server-4459af41c92748bceb7d7c6ef5f55a568a7fff01.zip
feat(webhook_listeners): Add API endpoint to remove all registrations from an AppAPI app
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
-rw-r--r--apps/webhook_listeners/lib/Controller/WebhooksController.php32
1 files changed, 31 insertions, 1 deletions
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<Http::STATUS_OK, bool, array{}>
*
- * 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<Http::STATUS_OK, int, array{}>
+ *
+ * 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);
+ }
+ }
}