feat(webhook_listeners): Add API endpoint to remove all registrations from an AppAPI app

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
This commit is contained in:
Côme Chilliet 2024-09-09 14:41:20 +02:00 committed by backportbot[bot]
parent 6c1a6d17c2
commit 9470ddbbd5

View file

@ -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);
}
}
}