2022-01-23 14:46:30 +01:00
// Copyright 2022 The Gitea Authors. All rights reserved.
2022-11-27 13:20:29 -05:00
// SPDX-License-Identifier: MIT
2022-01-23 14:46:30 +01:00
package webhook
import (
2024-03-07 23:18:38 +01:00
"context"
"fmt"
"net/http"
2022-01-23 14:46:30 +01:00
webhook_model "code.gitea.io/gitea/models/webhook"
"code.gitea.io/gitea/modules/json"
"code.gitea.io/gitea/modules/log"
2024-03-20 15:44:01 +01:00
webhook_module "code.gitea.io/gitea/modules/webhook"
2022-01-23 14:46:30 +01:00
)
2024-03-20 15:44:01 +01:00
type packagistHandler struct { }
func ( packagistHandler ) Type ( ) webhook_module . HookType { return webhook_module . PACKAGIST }
2024-03-21 13:23:27 +01:00
func ( packagistHandler ) FormFields ( bind func ( any ) ) FormFields {
panic ( "TODO" )
}
2022-01-23 14:46:30 +01:00
type (
2024-03-13 09:26:56 +01:00
// PackagistPayload represents a packagist payload
// as expected by https://packagist.org/about
2022-01-23 14:46:30 +01:00
PackagistPayload struct {
PackagistRepository struct {
URL string ` json:"url" `
} ` json:"repository" `
}
2023-01-01 16:23:15 +01:00
// PackagistMeta contains the metadata for the webhook
2022-01-23 14:46:30 +01:00
PackagistMeta struct {
Username string ` json:"username" `
APIToken string ` json:"api_token" `
PackageURL string ` json:"package_url" `
}
)
2024-03-20 15:44:01 +01:00
// Metadata returns packagist metadata
func ( packagistHandler ) Metadata ( w * webhook_model . Webhook ) any {
2022-01-23 14:46:30 +01:00
s := & PackagistMeta { }
if err := json . Unmarshal ( [ ] byte ( w . Meta ) , s ) ; err != nil {
2024-03-20 15:44:01 +01:00
log . Error ( "packagistHandler.Metadata(%d): %v" , w . ID , err )
2022-01-23 14:46:30 +01:00
}
return s
}
2024-03-13 09:26:56 +01:00
// newPackagistRequest creates a request with the [PackagistPayload] for packagist (same payload for all events).
2024-03-20 15:44:01 +01:00
func ( packagistHandler ) NewRequest ( ctx context . Context , w * webhook_model . Webhook , t * webhook_model . HookTask ) ( * http . Request , [ ] byte , error ) {
2024-03-07 23:18:38 +01:00
meta := & PackagistMeta { }
if err := json . Unmarshal ( [ ] byte ( w . Meta ) , meta ) ; err != nil {
2024-03-20 15:44:01 +01:00
return nil , nil , fmt . Errorf ( "packagistHandler.NewRequest meta json: %w" , err )
2024-03-07 23:18:38 +01:00
}
2024-03-13 09:26:56 +01:00
payload := PackagistPayload {
PackagistRepository : struct {
URL string ` json:"url" `
} {
URL : meta . PackageURL ,
} ,
2022-01-23 14:46:30 +01:00
}
2024-03-13 09:26:56 +01:00
return newJSONRequestWithPayload ( payload , w , t , false )
2022-01-23 14:46:30 +01:00
}