aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorMarcel Klehr <mklehr@gmx.net>2024-06-25 15:48:38 +0200
committerMarcel Klehr <mklehr@gmx.net>2024-06-26 07:27:40 +0200
commit0bdecb96f3ab822339b838563b979b09bb19c0dd (patch)
treef9b4688172e838d24528b876c9a0068f050c83f7 /apps
parenteed6216d55ca69784b78214de00286d6055be704 (diff)
downloadnextcloud-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')
-rw-r--r--apps/webhook_listeners/lib/Controller/WebhooksController.php9
-rw-r--r--apps/webhook_listeners/lib/Db/WebhookListenerMapper.php13
-rw-r--r--apps/webhook_listeners/openapi.json9
-rw-r--r--apps/webhook_listeners/tests/Db/WebhookListenerMapperTest.php20
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,