diff options
author | Marcel Klehr <mklehr@gmx.net> | 2024-06-25 15:48:38 +0200 |
---|---|---|
committer | Marcel Klehr <mklehr@gmx.net> | 2024-06-26 07:27:40 +0200 |
commit | 0bdecb96f3ab822339b838563b979b09bb19c0dd (patch) | |
tree | f9b4688172e838d24528b876c9a0068f050c83f7 /apps | |
parent | eed6216d55ca69784b78214de00286d6055be704 (diff) | |
download | nextcloud-server-0bdecb96f3ab822339b838563b979b09bb19c0dd.tar.gz nextcloud-server-0bdecb96f3ab822339b838563b979b09bb19c0dd.zip |
feat(WebhooksController): Allow querying listeners by URI
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
Diffstat (limited to 'apps')
4 files changed, 49 insertions, 2 deletions
diff --git a/apps/webhook_listeners/lib/Controller/WebhooksController.php b/apps/webhook_listeners/lib/Controller/WebhooksController.php index 1c4306eabb8..5b097c84a3c 100644 --- a/apps/webhook_listeners/lib/Controller/WebhooksController.php +++ b/apps/webhook_listeners/lib/Controller/WebhooksController.php @@ -48,6 +48,7 @@ class WebhooksController extends OCSController { /** * List registered webhooks * + * @param string|null $uri The callback URI to filter by * @return DataResponse<Http::STATUS_OK, WebhookListenersWebhookInfo[], array{}> * @throws OCSException Other internal error * @@ -55,9 +56,13 @@ class WebhooksController extends OCSController { */ #[ApiRoute(verb: 'GET', url: '/api/v1/webhooks')] #[AuthorizedAdminSetting(settings:Admin::class)] - public function index(): DataResponse { + public function index(?string $uri = null): DataResponse { try { - $webhookListeners = $this->mapper->getAll(); + if ($uri !== null) { + $webhookListeners = $this->mapper->getByUri($uri); + } else { + $webhookListeners = $this->mapper->getAll(); + } return new DataResponse( array_map( diff --git a/apps/webhook_listeners/lib/Db/WebhookListenerMapper.php b/apps/webhook_listeners/lib/Db/WebhookListenerMapper.php index 97e01062f2f..a1fe4ceee8d 100644 --- a/apps/webhook_listeners/lib/Db/WebhookListenerMapper.php +++ b/apps/webhook_listeners/lib/Db/WebhookListenerMapper.php @@ -204,4 +204,17 @@ class WebhookListenerMapper extends QBMapper { return $this->findEntities($qb); } + + /** + * @throws Exception + */ + public function getByUri(string $uri): array { + $qb = $this->db->getQueryBuilder(); + + $qb->select('*') + ->from($this->getTableName()) + ->where($qb->expr()->eq('uri', $qb->createNamedParameter($uri, IQueryBuilder::PARAM_STR))); + + return $this->findEntities($qb); + } } diff --git a/apps/webhook_listeners/openapi.json b/apps/webhook_listeners/openapi.json index 8488ce8e117..3d1e9cf7a30 100644 --- a/apps/webhook_listeners/openapi.json +++ b/apps/webhook_listeners/openapi.json @@ -113,6 +113,15 @@ ], "parameters": [ { + "name": "uri", + "in": "query", + "description": "The callback URI to filter by", + "schema": { + "type": "string", + "nullable": true + } + }, + { "name": "OCS-APIRequest", "in": "header", "description": "Required to be true for the API request to pass", diff --git a/apps/webhook_listeners/tests/Db/WebhookListenerMapperTest.php b/apps/webhook_listeners/tests/Db/WebhookListenerMapperTest.php index b385cff1228..fc42a0a9597 100644 --- a/apps/webhook_listeners/tests/Db/WebhookListenerMapperTest.php +++ b/apps/webhook_listeners/tests/Db/WebhookListenerMapperTest.php @@ -82,6 +82,26 @@ class WebhookListenerMapperTest extends TestCase { $this->assertEquals($listener1, $listener2); } + public function testInsertListenerAndGetItByUri() { + $uri = 'https://webhook.example.com/endpoint'; + $listener1 = $this->mapper->addWebhookListener( + null, + 'bob', + 'POST', + $uri, + NodeWrittenEvent::class, + null, + null, + AuthMethod::None, + null, + ); + + $listeners = $this->mapper->getByUri($uri); + + $listener1->resetUpdatedFields(); + $this->assertContains($listener1->getId(), array_map(fn ($listener) => $listener->getId(), $listeners)); + } + public function testInsertListenerAndGetItWithAuthData() { $listener1 = $this->mapper->addWebhookListener( null, |