Skip to content

Commit 4d1757e

Browse files
committed
feat: add support for gitlab webhook secrets
1 parent cbdb1a9 commit 4d1757e

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

cmd/cmd_server.go

+11
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,24 @@ func errHandler(w http.ResponseWriter, code int, err error) {
4747
func Server(cCtx *cli.Context) error { //nolint:unparam
4848
mux := http.NewServeMux()
4949

50+
ourSecret := cCtx.String(FlagWebhookSecret)
51+
5052
// Initialize GitLab client
5153
client, err := gitlab.NewClient(cCtx.String(FlagAPIToken), cCtx.String(FlagSCMBaseURL))
5254
if err != nil {
5355
return err
5456
}
5557

5658
mux.HandleFunc("POST /gitlab", func(writer http.ResponseWriter, reader *http.Request) {
59+
if len(ourSecret) > 0 {
60+
theirSecret := reader.Header.Get("X-Gitlab-Token")
61+
if ourSecret != theirSecret {
62+
errHandler(writer, http.StatusForbidden, errors.New("Missing or invalid X-Gitlab-Token header"))
63+
64+
return
65+
}
66+
}
67+
5768
// Validate headers
5869
if reader.Header.Get("Content-Type") != "application/json" {
5970
errHandler(writer, http.StatusInternalServerError, errors.New("not json"))

cmd/conventions.go

+1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ const (
66
FlagSCMProject = "project"
77
FlagSCMBaseURL = "base-url"
88
FlagMergeRequestID = "id"
9+
FlagWebhookSecret = "webhook-secret"
910
)

main.go

+9
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,15 @@ func main() {
8686
Name: "server",
8787
Usage: "Start HTTP server for webhook event driven usage",
8888
Action: cmd.Server,
89+
Flags: []cli.Flag{
90+
&cli.StringFlag{
91+
Name: cmd.FlagWebhookSecret,
92+
Usage: "Used to validate received payloads. Sent with the request in the X-Gitlab-Token HTTP header",
93+
EnvVars: []string{
94+
"SCM_ENGINE_WEBHOOK_SECRET",
95+
},
96+
},
97+
},
8998
},
9099
},
91100
}

0 commit comments

Comments
 (0)