garm/runner/pool/common.go
Gabriel Adrian Samfira fc77a4b735 Update go-github and garm-provider-common
We need to abstract away the tools struct and not have garm-provider-common
depend on go-github just for that one struct. It makes it hard to update
go-github without updating garm-provider-common first and then all the rest
of the providers.

Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2023-09-24 07:56:56 +00:00

63 lines
1.5 KiB
Go

package pool
import (
"net/url"
"strings"
runnerErrors "github.com/cloudbase/garm-provider-common/errors"
"github.com/cloudbase/garm/params"
"github.com/google/go-github/v55/github"
"github.com/pkg/errors"
)
func validateHookRequest(controllerID, baseURL string, allHooks []*github.Hook, req *github.Hook) error {
parsed, err := url.Parse(baseURL)
if err != nil {
return errors.Wrap(err, "parsing webhook url")
}
partialMatches := []string{}
for _, hook := range allHooks {
hookURL, ok := hook.Config["url"].(string)
if !ok {
continue
}
hookURL = strings.ToLower(hookURL)
if hook.Config["url"] == req.Config["url"] {
return runnerErrors.NewConflictError("hook already installed")
} else if strings.Contains(hookURL, controllerID) || strings.Contains(hookURL, parsed.Hostname()) {
partialMatches = append(partialMatches, hook.Config["url"].(string))
}
}
if len(partialMatches) > 0 {
return runnerErrors.NewConflictError("a webhook containing the controller ID or hostname of this contreoller is already installed on this repository")
}
return nil
}
func hookToParamsHookInfo(hook *github.Hook) params.HookInfo {
var hookURL string
url, ok := hook.Config["url"]
if ok {
hookURL = url.(string)
}
var insecureSSL bool
insecureSSLConfig, ok := hook.Config["insecure_ssl"]
if ok {
if insecureSSLConfig.(string) == "1" {
insecureSSL = true
}
}
return params.HookInfo{
ID: *hook.ID,
URL: hookURL,
Events: hook.Events,
Active: *hook.Active,
InsecureSSL: insecureSSL,
}
}