switch from url to secret to detect hook
This commit is contained in:
parent
cad2441716
commit
6ba277aa3e
|
@ -52,7 +52,7 @@ func init() {
|
||||||
|
|
||||||
ok := false
|
ok := false
|
||||||
for _, hook := range hooks {
|
for _, hook := range hooks {
|
||||||
if request.Payload.VCSURL != hook.URL {
|
if request.Payload.VCSURL != hook.Secret {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
logger.Infof("run hook")
|
logger.Infof("run hook")
|
||||||
|
|
|
@ -9,5 +9,5 @@ startup_notify_user = ["geno@fireorbit.de"]
|
||||||
startup_notify_muc = []
|
startup_notify_muc = []
|
||||||
|
|
||||||
[[hooks.git]]
|
[[hooks.git]]
|
||||||
|
secret = "github-FreifunkBremen-yanic-notShared-Secret"
|
||||||
notify_user = ["geno@fireorbit.de"]
|
notify_user = ["geno@fireorbit.de"]
|
||||||
url = "https://github.com/FreifunkBremen/yanic"
|
|
||||||
|
|
26
git/main.go
26
git/main.go
|
@ -13,7 +13,11 @@ import (
|
||||||
"dev.sum7.eu/genofire/hook2xmpp/runtime"
|
"dev.sum7.eu/genofire/hook2xmpp/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
var eventHeader = []string{"X-GitHub-Event", "X-Gogs-Event", "X-Gitlab-Event"}
|
var eventHeader = map[string]string{
|
||||||
|
"X-GitHub-Event": "X-Hub-Signature",
|
||||||
|
"X-Gogs-Event": "X-Gogs-Delivery",
|
||||||
|
"X-Gitlab-Event": "X-Gitlab-Token",
|
||||||
|
}
|
||||||
|
|
||||||
const hookType = "git"
|
const hookType = "git"
|
||||||
|
|
||||||
|
@ -24,21 +28,29 @@ func init() {
|
||||||
logger := log.WithField("type", hookType)
|
logger := log.WithField("type", hookType)
|
||||||
|
|
||||||
event := ""
|
event := ""
|
||||||
for _, head := range eventHeader {
|
secret := ""
|
||||||
|
for head, headSecret := range eventHeader {
|
||||||
event = r.Header.Get(head)
|
event = r.Header.Get(head)
|
||||||
|
|
||||||
if event != "" {
|
if event != "" {
|
||||||
|
secret = r.Header.Get(headSecret)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if event == "" || event == "status" {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var body map[string]interface{}
|
var body map[string]interface{}
|
||||||
libHTTP.Read(r, &body)
|
libHTTP.Read(r, &body)
|
||||||
|
|
||||||
|
if s, ok := body["secret"]; ok && secret == "" {
|
||||||
|
secret = s
|
||||||
|
}
|
||||||
|
|
||||||
|
if event == "" || secret == "" {
|
||||||
|
logger.Warnf("no secret or event found")
|
||||||
|
http.Error(w, fmt.Sprintf("no secret or event found"), http.StatusNotFound)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
var request requestBody
|
var request requestBody
|
||||||
if err := mapstructure.Decode(body, &request); err != nil {
|
if err := mapstructure.Decode(body, &request); err != nil {
|
||||||
logger.Errorf("no readable payload: %s", err)
|
logger.Errorf("no readable payload: %s", err)
|
||||||
|
@ -52,7 +64,7 @@ func init() {
|
||||||
|
|
||||||
ok := false
|
ok := false
|
||||||
for _, hook := range hooks {
|
for _, hook := range hooks {
|
||||||
if request.Repository.URL != hook.URL {
|
if secret != hook.Secret {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
logger.Infof("run hook")
|
logger.Infof("run hook")
|
||||||
|
|
|
@ -46,6 +46,13 @@ func init() {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
logger := log.WithField("type", hookType)
|
logger := log.WithField("type", hookType)
|
||||||
|
|
||||||
|
_, secret, ok := r.BasicAuth()
|
||||||
|
if ok {
|
||||||
|
logger.Errorf("no secret found")
|
||||||
|
http.Error(w, fmt.Sprintf("no secret found (basic-auth password)"), http.StatusNotFound)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
var body interface{}
|
var body interface{}
|
||||||
libHTTP.Read(r, &body)
|
libHTTP.Read(r, &body)
|
||||||
|
|
||||||
|
@ -70,7 +77,7 @@ func init() {
|
||||||
|
|
||||||
ok := false
|
ok := false
|
||||||
for _, hook := range hooks {
|
for _, hook := range hooks {
|
||||||
if ruleURL.Hostname() != hook.URL {
|
if secret != hook.Secret {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ type Config struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Hook struct {
|
type Hook struct {
|
||||||
URL string `toml:"url"`
|
Secret string `toml:"secret"`
|
||||||
NotifyUser []string `toml:"notify_user"`
|
NotifyUser []string `toml:"notify_user"`
|
||||||
NotifyMuc []string `toml:"notify_muc"`
|
NotifyMuc []string `toml:"notify_muc"`
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue