diff options
author | Côme Chilliet <come.chilliet@nextcloud.com> | 2024-09-09 14:41:20 +0200 |
---|---|---|
committer | Côme Chilliet <come.chilliet@nextcloud.com> | 2024-09-09 14:41:20 +0200 |
commit | 4459af41c92748bceb7d7c6ef5f55a568a7fff01 (patch) | |
tree | 78198f463566bc61a2161a0ca8183f41622d1dd8 | |
parent | 4fc8aa5a060675d65379db0abb50cbd9c93b4f5a (diff) | |
download | nextcloud-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.php | 32 |
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); + } + } } |