mirror of
https://github.com/adnanh/webhook.git
synced 2025-05-15 01:54:45 +00:00
Add a -socket option that configures the server to listen on a Unix-domain socket or Windows named pipe instead of a TCP port. This allows webhook to be used behind a reverse proxy on multi-tenant shared hosting without the need to choose (and the permission to bind to) a free port number. On Windows, -socket is expected to be a named pipe such as \\.\pipe\webhook, and the code uses https://github.com/microsoft/go-winio to bind the listening socket. On other platforms, -socket is the path to a Unix domain socket such as /tmp/webhook.sock, or an abstract socket name starting with @, bound using the regular net.Listen function with the "network" parameter set to "unix". Note: this pushes our minimum Go version up to 1.21 as that is what go-winio requires, but that is already the minimum version against which we are testing in the CI matrix.
23 lines
512 B
Go
23 lines
512 B
Go
//go:build windows
|
|
// +build windows
|
|
|
|
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"github.com/Microsoft/go-winio"
|
|
"net"
|
|
)
|
|
|
|
func platformFlags() {
|
|
flag.StringVar(&socket, "socket", "", "path to a Windows named pipe (e.g. \\\\.\\pipe\\webhook) to use instead of listening on an ip and port; if specified, the ip and port options are ignored")
|
|
}
|
|
|
|
func trySocketListener() (net.Listener, error) {
|
|
if socket != "" {
|
|
addr = fmt.Sprintf("{pipe:%s}", socket)
|
|
return winio.ListenPipe(socket, nil)
|
|
}
|
|
return nil, nil
|
|
}
|