mirror of
https://github.com/adnanh/webhook.git
synced 2025-10-04 13:41:03 +00:00
feat: add ability to listen on unix socket/named pipe
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.
This commit is contained in:
parent
b6f24d00a5
commit
596cc5e70c
38 changed files with 4299 additions and 7 deletions
23
platform_windows.go
Normal file
23
platform_windows.go
Normal file
|
@ -0,0 +1,23 @@
|
|||
//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
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue