mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-27 00:23:41 +09:00 
			
		
		
		
	This PR fixes inconsistencies between system and default webhooks in the Gitea API. (See also #26418) - A system webhook is a webhook that captures events for all repositories. - A default webhook is copied to a new repository when it is created. Before this PR `POST /api/v1/admin/hooks/` creates default webhooks (if not configured otherwise) and `GET /api/v1/admin/hooks/` returns system webhooks. The PR introduces an optional query parameter to `GET /api/v1/admin/hooks/` to enable selecting if either default, system or both kind of webhooks should be retrieved. By default the flag is set to return system webhooks keep current behaviour. ## Examples ### System Webhooks #### Create ``` POST /api/v1/admin/hooks/ { "type": "gitea", "active": false, "branch_filter": "*", "events": [ "create", "..." ], "config": { "url": "http://...", "content_type": "json", "secret": "secret", "is_system_webhook": true // <-- controls hook type } } ``` #### List ``` GET/api/v1/admin/hooks?type=system //type argument is optional here since it's the default ``` #### Others The other relevant endpoints work as expected by referencing the hook by id ``` GET /api/v1/admin/hooks/:id PATCH /api/v1/admin/hooks/:id DELETE /api/v1/admin/hooks/:id ``` ### Default Webhooks #### Create ``` POST /api/v1/admin/hooks/ { "type": "gitea", "active": false, "branch_filter": "*", "events": [ "create", "..." ], "config": { "url": "http://...", "content_type": "json", "secret": "secret", "is_system_webhook": false // optional, as false is the default value } } ``` #### List ``` GET/api/v1/admin/hooks?type=default ``` #### Others The other relevant endpoints work as expected by referencing the hook by id ``` GET /api/v1/admin/hooks/:id PATCH /api/v1/admin/hooks/:id DELETE /api/v1/admin/hooks/:id ```
		
			
				
	
	
		
			38 lines
		
	
	
		
			973 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			973 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2017 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package webhook
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| 
 | |
| 	"code.gitea.io/gitea/models/db"
 | |
| 	"code.gitea.io/gitea/models/unittest"
 | |
| 	"code.gitea.io/gitea/modules/optional"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| )
 | |
| 
 | |
| func TestGetSystemOrDefaultWebhooks(t *testing.T) {
 | |
| 	assert.NoError(t, unittest.PrepareTestDatabase())
 | |
| 
 | |
| 	hooks, err := GetSystemOrDefaultWebhooks(db.DefaultContext, optional.None[bool]())
 | |
| 	assert.NoError(t, err)
 | |
| 	if assert.Len(t, hooks, 2) {
 | |
| 		assert.Equal(t, int64(5), hooks[0].ID)
 | |
| 		assert.Equal(t, int64(6), hooks[1].ID)
 | |
| 	}
 | |
| 
 | |
| 	hooks, err = GetSystemOrDefaultWebhooks(db.DefaultContext, optional.Some(true))
 | |
| 	assert.NoError(t, err)
 | |
| 	if assert.Len(t, hooks, 1) {
 | |
| 		assert.Equal(t, int64(5), hooks[0].ID)
 | |
| 	}
 | |
| 
 | |
| 	hooks, err = GetSystemOrDefaultWebhooks(db.DefaultContext, optional.Some(false))
 | |
| 	assert.NoError(t, err)
 | |
| 	if assert.Len(t, hooks, 1) {
 | |
| 		assert.Equal(t, int64(6), hooks[0].ID)
 | |
| 	}
 | |
| }
 |