Skip to content

Commit b1d8892

Browse files
committed
clean code
1 parent 9767573 commit b1d8892

File tree

10 files changed

+234
-147
lines changed

10 files changed

+234
-147
lines changed

models/migrations/v1_25/v322.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99

1010
func AddWebhookPayloadOptimizationColumns(x *xorm.Engine) error {
1111
type Webhook struct {
12-
PayloadOptimization string `xorm:"payload_optimization TEXT"`
12+
MetaSettings string `xorm:"meta_settings TEXT"`
1313
}
1414
_, err := x.SyncWithOptions(
1515
xorm.SyncOptions{

models/webhook/webhook.go

Lines changed: 49 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ import (
2222
"xorm.io/builder"
2323
)
2424

25+
// MetaSettings represents the metadata settings for webhook
26+
type MetaSettings struct {
27+
PayloadOptimization *PayloadOptimizationConfig `json:"payload_optimization,omitempty"` // Payload optimization configuration
28+
}
29+
2530
// PayloadOptimizationConfig represents the configuration for webhook payload optimization
2631
type PayloadOptimizationConfig struct {
2732
Files *PayloadOptimizationItem `json:"files,omitempty"` // Files optimization config
@@ -34,6 +39,13 @@ type PayloadOptimizationItem struct {
3439
Limit int `json:"limit"` // 0: trim all (none kept), >0: keep N items (forward order), <0: keep N items (reverse order)
3540
}
3641

42+
// DefaultMetaSettings returns the default webhook meta settings
43+
func DefaultMetaSettings() *MetaSettings {
44+
return &MetaSettings{
45+
PayloadOptimization: DefaultPayloadOptimizationConfig(),
46+
}
47+
}
48+
3749
// DefaultPayloadOptimizationConfig returns the default payload optimization configuration
3850
func DefaultPayloadOptimizationConfig() *PayloadOptimizationConfig {
3951
return &PayloadOptimizationConfig{
@@ -159,8 +171,8 @@ type Webhook struct {
159171
// HeaderAuthorizationEncrypted should be accessed using HeaderAuthorization() and SetHeaderAuthorization()
160172
HeaderAuthorizationEncrypted string `xorm:"TEXT"`
161173

162-
// Payload size optimization options
163-
PayloadOptimization string `xorm:"payload_optimization TEXT"` // JSON: {"enable": bool, "limit": int}
174+
// Webhook metadata settings (JSON format)
175+
MetaSettings string `xorm:"meta_settings TEXT"` // JSON: webhook metadata configuration
164176

165177
CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
166178
UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"`
@@ -370,34 +382,54 @@ func DeleteWebhookByOwnerID(ctx context.Context, ownerID, id int64) error {
370382
return DeleteWebhookByID(ctx, id)
371383
}
372384

385+
// GetMetaSettings returns the webhook meta settings
386+
func (w *Webhook) GetMetaSettings() *MetaSettings {
387+
if w.MetaSettings == "" {
388+
return DefaultMetaSettings()
389+
}
390+
391+
var settings MetaSettings
392+
if err := json.Unmarshal([]byte(w.MetaSettings), &settings); err != nil {
393+
log.Error("Failed to unmarshal webhook meta settings: %v", err)
394+
return DefaultMetaSettings()
395+
}
396+
397+
// Ensure payload optimization config is initialized
398+
if settings.PayloadOptimization == nil {
399+
settings.PayloadOptimization = DefaultPayloadOptimizationConfig()
400+
}
401+
402+
return &settings
403+
}
404+
373405
// GetPayloadOptimizationConfig returns the payload optimization configuration
374406
func (w *Webhook) GetPayloadOptimizationConfig() *PayloadOptimizationConfig {
375-
if w.PayloadOptimization == "" {
376-
return DefaultPayloadOptimizationConfig()
407+
return w.GetMetaSettings().PayloadOptimization
408+
}
409+
410+
// SetMetaSettings sets the webhook meta settings
411+
func (w *Webhook) SetMetaSettings(settings *MetaSettings) error {
412+
if settings == nil {
413+
settings = DefaultMetaSettings()
377414
}
378415

379-
var config PayloadOptimizationConfig
380-
if err := json.Unmarshal([]byte(w.PayloadOptimization), &config); err != nil {
381-
log.Error("Failed to unmarshal payload optimization config: %v", err)
382-
return DefaultPayloadOptimizationConfig()
416+
data, err := json.Marshal(settings)
417+
if err != nil {
418+
return fmt.Errorf("failed to marshal webhook meta settings: %w", err)
383419
}
384420

385-
return &config
421+
w.MetaSettings = string(data)
422+
return nil
386423
}
387424

388425
// SetPayloadOptimizationConfig sets the payload optimization configuration
389426
func (w *Webhook) SetPayloadOptimizationConfig(config *PayloadOptimizationConfig) error {
427+
settings := w.GetMetaSettings()
390428
if config == nil {
391429
config = DefaultPayloadOptimizationConfig()
392430
}
393-
394-
data, err := json.Marshal(config)
395-
if err != nil {
396-
return fmt.Errorf("failed to marshal payload optimization config: %w", err)
397-
}
398-
399-
w.PayloadOptimization = string(data)
400-
return nil
431+
settings.PayloadOptimization = config
432+
return w.SetMetaSettings(settings)
401433
}
402434

403435
// IsPayloadOptimizationEnabled returns whether payload optimization is enabled

models/webhook/webhook_test.go

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -341,18 +341,20 @@ func TestWebhookPayloadOptimization(t *testing.T) {
341341
assert.False(t, config.Commits.Enable)
342342
assert.Equal(t, 0, config.Commits.Limit)
343343

344-
// Test setting configuration
345-
newConfig := &PayloadOptimizationConfig{
346-
Files: &PayloadOptimizationItem{
347-
Enable: true,
348-
Limit: 5,
349-
},
350-
Commits: &PayloadOptimizationItem{
351-
Enable: true,
352-
Limit: -3,
344+
// Test setting configuration via meta settings
345+
metaSettings := &MetaSettings{
346+
PayloadOptimization: &PayloadOptimizationConfig{
347+
Files: &PayloadOptimizationItem{
348+
Enable: true,
349+
Limit: 5,
350+
},
351+
Commits: &PayloadOptimizationItem{
352+
Enable: true,
353+
Limit: -3,
354+
},
353355
},
354356
}
355-
webhook.SetPayloadOptimizationConfig(newConfig)
357+
webhook.SetMetaSettings(metaSettings)
356358

357359
// Test getting configuration
358360
config = webhook.GetPayloadOptimizationConfig()
@@ -367,4 +369,24 @@ func TestWebhookPayloadOptimization(t *testing.T) {
367369
assert.True(t, webhook.IsCommitsOptimizationEnabled())
368370
assert.Equal(t, -3, webhook.GetCommitsOptimizationLimit())
369371
assert.True(t, webhook.IsPayloadOptimizationEnabled())
372+
373+
// Test backward compatibility with direct payload optimization config setting
374+
newConfig := &PayloadOptimizationConfig{
375+
Files: &PayloadOptimizationItem{
376+
Enable: false,
377+
Limit: 10,
378+
},
379+
Commits: &PayloadOptimizationItem{
380+
Enable: false,
381+
Limit: 20,
382+
},
383+
}
384+
webhook.SetPayloadOptimizationConfig(newConfig)
385+
386+
// Verify the config is properly set through meta settings
387+
config = webhook.GetPayloadOptimizationConfig()
388+
assert.False(t, config.Files.Enable)
389+
assert.Equal(t, 10, config.Files.Limit)
390+
assert.False(t, config.Commits.Enable)
391+
assert.Equal(t, 20, config.Commits.Limit)
370392
}

modules/structs/hook.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ type Hook struct {
2525
Events []string `json:"events"`
2626
AuthorizationHeader string `json:"authorization_header"`
2727
Active bool `json:"active"`
28-
// PayloadOptimization configuration for webhook payload optimization
29-
PayloadOptimization map[string]any `json:"payload_optimization"`
28+
// MetaSettings webhook metadata settings including payload optimization
29+
MetaSettings map[string]any `json:"meta_settings"`
3030
// swagger:strfmt date-time
3131
Updated time.Time `json:"updated_at"`
3232
// swagger:strfmt date-time
@@ -50,8 +50,8 @@ type CreateHookOption struct {
5050
Events []string `json:"events"`
5151
BranchFilter string `json:"branch_filter" binding:"GlobPattern"`
5252
AuthorizationHeader string `json:"authorization_header"`
53-
// Payload size optimization options
54-
PayloadOptimization map[string]any `json:"payload_optimization"` // {"enable": bool, "limit": int}
53+
// Webhook metadata settings including payload optimization
54+
MetaSettings map[string]any `json:"meta_settings"` // {"payload_optimization": {"files": {"enable": bool, "limit": int}, "commits": {"enable": bool, "limit": int}}}
5555
// default: false
5656
Active bool `json:"active"`
5757
}
@@ -62,9 +62,9 @@ type EditHookOption struct {
6262
Events []string `json:"events"`
6363
BranchFilter string `json:"branch_filter" binding:"GlobPattern"`
6464
AuthorizationHeader string `json:"authorization_header"`
65-
// Payload size optimization options
66-
PayloadOptimization *map[string]any `json:"payload_optimization"` // {"enable": bool, "limit": int}
67-
Active *bool `json:"active"`
65+
// Webhook metadata settings including payload optimization
66+
MetaSettings *map[string]any `json:"meta_settings"` // {"payload_optimization": {"files": {"enable": bool, "limit": int}, "commits": {"enable": bool, "limit": int}}}
67+
Active *bool `json:"active"`
6868
}
6969

7070
// Payloader payload is some part of one hook

routers/api/v1/utils/hook.go

Lines changed: 53 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -259,31 +259,38 @@ func addHook(ctx *context.APIContext, form *api.CreateHookOption, ownerID, repoI
259259
Type: form.Type,
260260
}
261261

262-
// Set payload optimization config
263-
if form.PayloadOptimization != nil {
264-
payloadOptConfig := &webhook.PayloadOptimizationConfig{}
265-
266-
// Parse files config
267-
if filesConfig, ok := form.PayloadOptimization["files"].(map[string]any); ok {
268-
payloadOptConfig.Files = &webhook.PayloadOptimizationItem{
269-
Enable: getBoolFromMap(filesConfig, false),
270-
Limit: getIntFromMap(filesConfig, 0),
262+
// Set webhook meta settings
263+
if form.MetaSettings != nil {
264+
metaSettings := &webhook.MetaSettings{}
265+
266+
// Parse payload optimization config
267+
if payloadOptMap, ok := form.MetaSettings["payload_optimization"].(map[string]any); ok {
268+
payloadOptConfig := &webhook.PayloadOptimizationConfig{}
269+
270+
// Parse files config
271+
if filesConfig, ok := payloadOptMap["files"].(map[string]any); ok {
272+
payloadOptConfig.Files = &webhook.PayloadOptimizationItem{
273+
Enable: getBoolFromMap(filesConfig, false),
274+
Limit: getIntFromMap(filesConfig, 0),
275+
}
276+
} else {
277+
payloadOptConfig.Files = &webhook.PayloadOptimizationItem{Enable: false, Limit: 0}
271278
}
272-
} else {
273-
payloadOptConfig.Files = &webhook.PayloadOptimizationItem{Enable: false, Limit: 0}
274-
}
275279

276-
// Parse commits config
277-
if commitsConfig, ok := form.PayloadOptimization["commits"].(map[string]any); ok {
278-
payloadOptConfig.Commits = &webhook.PayloadOptimizationItem{
279-
Enable: getBoolFromMap(commitsConfig, false),
280-
Limit: getIntFromMap(commitsConfig, 0),
280+
// Parse commits config
281+
if commitsConfig, ok := payloadOptMap["commits"].(map[string]any); ok {
282+
payloadOptConfig.Commits = &webhook.PayloadOptimizationItem{
283+
Enable: getBoolFromMap(commitsConfig, false),
284+
Limit: getIntFromMap(commitsConfig, 0),
285+
}
286+
} else {
287+
payloadOptConfig.Commits = &webhook.PayloadOptimizationItem{Enable: false, Limit: 0}
281288
}
282-
} else {
283-
payloadOptConfig.Commits = &webhook.PayloadOptimizationItem{Enable: false, Limit: 0}
289+
290+
metaSettings.PayloadOptimization = payloadOptConfig
284291
}
285292

286-
if err := w.SetPayloadOptimizationConfig(payloadOptConfig); err != nil {
293+
if err := w.SetMetaSettings(metaSettings); err != nil {
287294
ctx.APIErrorInternal(err)
288295
return nil, false
289296
}
@@ -453,31 +460,38 @@ func editHook(ctx *context.APIContext, form *api.EditHookOption, w *webhook.Webh
453460
w.IsActive = *form.Active
454461
}
455462

456-
// Update payload optimization config
457-
if form.PayloadOptimization != nil {
458-
payloadOptConfig := &webhook.PayloadOptimizationConfig{}
463+
// Update webhook meta settings
464+
if form.MetaSettings != nil {
465+
metaSettings := &webhook.MetaSettings{}
466+
467+
// Parse payload optimization config
468+
if payloadOptMap, ok := (*form.MetaSettings)["payload_optimization"].(map[string]any); ok {
469+
payloadOptConfig := &webhook.PayloadOptimizationConfig{}
459470

460-
// Parse files config
461-
if filesConfig, ok := (*form.PayloadOptimization)["files"].(map[string]any); ok {
462-
payloadOptConfig.Files = &webhook.PayloadOptimizationItem{
463-
Enable: getBoolFromMap(filesConfig, false),
464-
Limit: getIntFromMap(filesConfig, 0),
471+
// Parse files config
472+
if filesConfig, ok := payloadOptMap["files"].(map[string]any); ok {
473+
payloadOptConfig.Files = &webhook.PayloadOptimizationItem{
474+
Enable: getBoolFromMap(filesConfig, false),
475+
Limit: getIntFromMap(filesConfig, 0),
476+
}
477+
} else {
478+
payloadOptConfig.Files = &webhook.PayloadOptimizationItem{Enable: false, Limit: 0}
465479
}
466-
} else {
467-
payloadOptConfig.Files = &webhook.PayloadOptimizationItem{Enable: false, Limit: 0}
468-
}
469480

470-
// Parse commits config
471-
if commitsConfig, ok := (*form.PayloadOptimization)["commits"].(map[string]any); ok {
472-
payloadOptConfig.Commits = &webhook.PayloadOptimizationItem{
473-
Enable: getBoolFromMap(commitsConfig, false),
474-
Limit: getIntFromMap(commitsConfig, 0),
481+
// Parse commits config
482+
if commitsConfig, ok := payloadOptMap["commits"].(map[string]any); ok {
483+
payloadOptConfig.Commits = &webhook.PayloadOptimizationItem{
484+
Enable: getBoolFromMap(commitsConfig, false),
485+
Limit: getIntFromMap(commitsConfig, 0),
486+
}
487+
} else {
488+
payloadOptConfig.Commits = &webhook.PayloadOptimizationItem{Enable: false, Limit: 0}
475489
}
476-
} else {
477-
payloadOptConfig.Commits = &webhook.PayloadOptimizationItem{Enable: false, Limit: 0}
490+
491+
metaSettings.PayloadOptimization = payloadOptConfig
478492
}
479493

480-
if err := w.SetPayloadOptimizationConfig(payloadOptConfig); err != nil {
494+
if err := w.SetMetaSettings(metaSettings); err != nil {
481495
ctx.APIErrorInternal(err)
482496
return false
483497
}

routers/web/repo/setting/webhook.go

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -245,19 +245,21 @@ func createWebhook(ctx *context.Context, params webhookParams) {
245245
IsSystemWebhook: orCtx.IsSystemWebhook,
246246
}
247247

248-
// Set payload optimization config
249-
payloadOptConfig := &webhook.PayloadOptimizationConfig{
250-
Files: &webhook.PayloadOptimizationItem{
251-
Enable: params.WebhookForm.PayloadOptimizationFilesEnable,
252-
Limit: params.WebhookForm.PayloadOptimizationFilesLimit,
253-
},
254-
Commits: &webhook.PayloadOptimizationItem{
255-
Enable: params.WebhookForm.PayloadOptimizationCommitsEnable,
256-
Limit: params.WebhookForm.PayloadOptimizationCommitsLimit,
248+
// Set webhook meta settings with payload optimization config
249+
metaSettings := &webhook.MetaSettings{
250+
PayloadOptimization: &webhook.PayloadOptimizationConfig{
251+
Files: &webhook.PayloadOptimizationItem{
252+
Enable: params.WebhookForm.PayloadOptimizationFilesEnable,
253+
Limit: params.WebhookForm.PayloadOptimizationFilesLimit,
254+
},
255+
Commits: &webhook.PayloadOptimizationItem{
256+
Enable: params.WebhookForm.PayloadOptimizationCommitsEnable,
257+
Limit: params.WebhookForm.PayloadOptimizationCommitsLimit,
258+
},
257259
},
258260
}
259-
if err := w.SetPayloadOptimizationConfig(payloadOptConfig); err != nil {
260-
ctx.ServerError("SetPayloadOptimizationConfig", err)
261+
if err := w.SetMetaSettings(metaSettings); err != nil {
262+
ctx.ServerError("SetMetaSettings", err)
261263
return
262264
}
263265

@@ -312,19 +314,21 @@ func editWebhook(ctx *context.Context, params webhookParams) {
312314
w.HTTPMethod = params.HTTPMethod
313315
w.Meta = string(meta)
314316

315-
// Set payload optimization config
316-
payloadOptConfig := &webhook.PayloadOptimizationConfig{
317-
Files: &webhook.PayloadOptimizationItem{
318-
Enable: params.WebhookForm.PayloadOptimizationFilesEnable,
319-
Limit: params.WebhookForm.PayloadOptimizationFilesLimit,
320-
},
321-
Commits: &webhook.PayloadOptimizationItem{
322-
Enable: params.WebhookForm.PayloadOptimizationCommitsEnable,
323-
Limit: params.WebhookForm.PayloadOptimizationCommitsLimit,
317+
// Set webhook meta settings with payload optimization config
318+
metaSettings := &webhook.MetaSettings{
319+
PayloadOptimization: &webhook.PayloadOptimizationConfig{
320+
Files: &webhook.PayloadOptimizationItem{
321+
Enable: params.WebhookForm.PayloadOptimizationFilesEnable,
322+
Limit: params.WebhookForm.PayloadOptimizationFilesLimit,
323+
},
324+
Commits: &webhook.PayloadOptimizationItem{
325+
Enable: params.WebhookForm.PayloadOptimizationCommitsEnable,
326+
Limit: params.WebhookForm.PayloadOptimizationCommitsLimit,
327+
},
324328
},
325329
}
326-
if err := w.SetPayloadOptimizationConfig(payloadOptConfig); err != nil {
327-
ctx.ServerError("SetPayloadOptimizationConfig", err)
330+
if err := w.SetMetaSettings(metaSettings); err != nil {
331+
ctx.ServerError("SetMetaSettings", err)
328332
return
329333
}
330334

0 commit comments

Comments
 (0)