From 2b2997ce49e5db0eed964c444f63de0c6d3a520e Mon Sep 17 00:00:00 2001 From: soulteary Date: Mon, 9 Jan 2023 23:14:52 +0800 Subject: [PATCH] refactor: add platform --- .../platform/droppriv_nope.go | 4 ++-- .../platform/droppriv_unix.go | 4 ++-- signals.go => internal/platform/signals.go | 14 ++++++++------ .../platform/signals_windows.go | 4 ++-- webhook.go | 5 +++-- 5 files changed, 17 insertions(+), 14 deletions(-) rename droppriv_nope.go => internal/platform/droppriv_nope.go (73%) rename droppriv_unix.go => internal/platform/droppriv_unix.go (78%) rename signals.go => internal/platform/signals.go (72%) rename signals_windows.go => internal/platform/signals_windows.go (73%) diff --git a/droppriv_nope.go b/internal/platform/droppriv_nope.go similarity index 73% rename from droppriv_nope.go rename to internal/platform/droppriv_nope.go index f274e96..aaf73f2 100644 --- a/droppriv_nope.go +++ b/internal/platform/droppriv_nope.go @@ -1,13 +1,13 @@ //go:build linux || windows // +build linux windows -package main +package platform import ( "errors" "runtime" ) -func dropPrivileges(uid, gid int) error { +func DropPrivileges(uid, gid int) error { return errors.New("setuid and setgid not supported on " + runtime.GOOS) } diff --git a/droppriv_unix.go b/internal/platform/droppriv_unix.go similarity index 78% rename from droppriv_unix.go rename to internal/platform/droppriv_unix.go index ff5533c..ed88bb5 100644 --- a/droppriv_unix.go +++ b/internal/platform/droppriv_unix.go @@ -1,13 +1,13 @@ //go:build !windows && !linux // +build !windows,!linux -package main +package platform import ( "syscall" ) -func dropPrivileges(uid, gid int) error { +func DropPrivileges(uid, gid int) error { err := syscall.Setgid(gid) if err != nil { return err diff --git a/signals.go b/internal/platform/signals.go similarity index 72% rename from signals.go rename to internal/platform/signals.go index d6c0c96..f6fbec7 100644 --- a/signals.go +++ b/internal/platform/signals.go @@ -1,16 +1,18 @@ //go:build !windows // +build !windows -package main +package platform import ( "log" "os" "os/signal" "syscall" + + "github.com/adnanh/webhook/internal/pidfile" ) -func setupSignals() { +func SetupSignals(signals chan os.Signal, reloadFn func(), pidFile *pidfile.PIDFile) { log.Printf("setting up os signal watcher\n") signals = make(chan os.Signal, 1) @@ -19,10 +21,10 @@ func setupSignals() { signal.Notify(signals, syscall.SIGTERM) signal.Notify(signals, os.Interrupt) - go watchForSignals() + go watchForSignals(signals, reloadFn, pidFile) } -func watchForSignals() { +func watchForSignals(signals chan os.Signal, reloadFn func(), pidFile *pidfile.PIDFile) { log.Println("os signal watcher ready") for { @@ -30,11 +32,11 @@ func watchForSignals() { switch sig { case syscall.SIGUSR1: log.Println("caught USR1 signal") - reloadAllHooks() + reloadFn() case syscall.SIGHUP: log.Println("caught HUP signal") - reloadAllHooks() + reloadFn() case os.Interrupt, syscall.SIGTERM: log.Printf("caught %s signal; exiting\n", sig) diff --git a/signals_windows.go b/internal/platform/signals_windows.go similarity index 73% rename from signals_windows.go rename to internal/platform/signals_windows.go index 5418700..e5b1633 100644 --- a/signals_windows.go +++ b/internal/platform/signals_windows.go @@ -1,8 +1,8 @@ //go:build windows // +build windows -package main +package platform -func setupSignals() { +func SetupSignals() { // NOOP: Windows doesn't have signals equivalent to the Unix world. } diff --git a/webhook.go b/webhook.go index d4969e7..011a18b 100644 --- a/webhook.go +++ b/webhook.go @@ -19,6 +19,7 @@ import ( "github.com/adnanh/webhook/internal/hook" "github.com/adnanh/webhook/internal/middleware" "github.com/adnanh/webhook/internal/pidfile" + "github.com/adnanh/webhook/internal/platform" chimiddleware "github.com/go-chi/chi/middleware" "github.com/gorilla/mux" @@ -144,7 +145,7 @@ func main() { } if *setUID != 0 { - err := dropPrivileges(*setUID, *setGID) + err := platform.DropPrivileges(*setUID, *setGID) if err != nil { logQueue = append(logQueue, fmt.Sprintf("error dropping privileges: %s", err)) // we'll bail out below @@ -197,7 +198,7 @@ func main() { log.Println("version " + version + " starting") // set os signal watcher - setupSignals() + platform.SetupSignals(signals, reloadAllHooks, pidFile) // load and parse hooks for _, hooksFilePath := range hooksFiles {