mirror of
https://github.com/adnanh/webhook.git
synced 2025-05-31 09:42:28 +00:00
Add support for slashes in hook IDs
When matching variables in routes, gorilla/mux uses a default pattern of "[^/]+", thereby prohibiting slashes in variable matching. Override the default pattern to remove this restriction. See https://github.com/gorilla/mux/blob/v1.8.0/regexp.go#L50 Fixes #421
This commit is contained in:
parent
3e18a060ae
commit
c2ffd465c4
4 changed files with 71 additions and 9 deletions
29
webhook.go
29
webhook.go
|
@ -262,7 +262,7 @@ func main() {
|
|||
// Clean up input
|
||||
*httpMethods = strings.ToUpper(strings.ReplaceAll(*httpMethods, " ", ""))
|
||||
|
||||
hooksURL := makeURL(hooksURLPrefix)
|
||||
hooksURL := makeRoutePattern(hooksURLPrefix)
|
||||
|
||||
r.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
|
||||
fmt.Fprint(w, "OK")
|
||||
|
@ -278,7 +278,7 @@ func main() {
|
|||
|
||||
// Serve HTTP
|
||||
if !*secure {
|
||||
log.Printf("serving hooks on http://%s%s", addr, hooksURL)
|
||||
log.Printf("serving hooks on http://%s%s", addr, makeHumanPattern(hooksURLPrefix))
|
||||
log.Print(svr.Serve(ln))
|
||||
|
||||
return
|
||||
|
@ -293,7 +293,7 @@ func main() {
|
|||
}
|
||||
svr.TLSNextProto = make(map[string]func(*http.Server, *tls.Conn, http.Handler)) // disable http/2
|
||||
|
||||
log.Printf("serving hooks on https://%s%s", addr, hooksURL)
|
||||
log.Printf("serving hooks on https://%s%s", addr, makeHumanPattern(hooksURLPrefix))
|
||||
log.Print(svr.ServeTLS(ln, *cert, *key))
|
||||
}
|
||||
|
||||
|
@ -763,10 +763,21 @@ func valuesToMap(values map[string][]string) map[string]interface{} {
|
|||
return ret
|
||||
}
|
||||
|
||||
// makeURL builds a hook URL with or without a prefix.
|
||||
func makeURL(prefix *string) string {
|
||||
if prefix == nil || *prefix == "" {
|
||||
return "/{id}"
|
||||
}
|
||||
return "/" + *prefix + "/{id}"
|
||||
// makeRoutePattern builds a pattern matching URL for the mux.
|
||||
func makeRoutePattern(prefix *string) string {
|
||||
return makeBaseURL(prefix) + "/{id:.*}"
|
||||
}
|
||||
|
||||
// makeHumanPattern builds a human-friendly URL for display.
|
||||
func makeHumanPattern(prefix *string) string {
|
||||
return makeBaseURL(prefix) + "/{id}"
|
||||
}
|
||||
|
||||
// makeBaseURL creates the base URL before any mux pattern matching.
|
||||
func makeBaseURL(prefix *string) string {
|
||||
if prefix == nil || *prefix == "" {
|
||||
return ""
|
||||
}
|
||||
|
||||
return "/" + *prefix
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue