From 906e8a0ba28780e4132e27139fbe02095cac18f0 Mon Sep 17 00:00:00 2001 From: Pacerino Date: Tue, 4 Oct 2022 11:49:00 +0200 Subject: [PATCH] [Backend] Reload Caddy via dbus --- backend/go.mod | 2 ++ backend/go.sum | 5 ++++ backend/internal/caddy/exec.go | 44 +++++++++++----------------------- 3 files changed, 21 insertions(+), 30 deletions(-) diff --git a/backend/go.mod b/backend/go.mod index 414cf6a..89fe74d 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -35,9 +35,11 @@ require ( ) require ( + github.com/coreos/go-systemd/v22 v22.4.0 github.com/fatih/color v1.13.0 github.com/go-chi/chi/v5 v5.0.7 github.com/go-chi/cors v1.2.1 + github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/mattn/go-sqlite3 v1.14.15 // indirect github.com/qri-io/jsonschema v0.2.1 github.com/vrischmann/envconfig v1.3.0 diff --git a/backend/go.sum b/backend/go.sum index e78d0e9..e770b77 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -1,5 +1,7 @@ github.com/aymerick/raymond v2.0.2+incompatible h1:VEp3GpgdAnv9B2GFyTvqgcKvY+mfKMjPOA3SbKLtnU0= github.com/aymerick/raymond v2.0.2+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= +github.com/coreos/go-systemd/v22 v22.4.0 h1:y9YHcjnjynCd/DVbg5j9L/33jQM3MxJlbj/zWskzfGU= +github.com/coreos/go-systemd/v22 v22.4.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -26,6 +28,9 @@ github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJ github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/goccy/go-json v0.7.6 h1:H0wq4jppBQ+9222sk5+hPLL25abZQiRuQ6YPnjO9c+A= github.com/goccy/go-json v0.7.6/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= +github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= diff --git a/backend/internal/caddy/exec.go b/backend/internal/caddy/exec.go index d5cf3ce..136b537 100644 --- a/backend/internal/caddy/exec.go +++ b/backend/internal/caddy/exec.go @@ -1,44 +1,28 @@ package caddy import ( - "fmt" - "os/exec" + "context" + "time" - "github.com/Pacerino/CaddyProxyManager/internal/config" "github.com/Pacerino/CaddyProxyManager/internal/logger" + "github.com/coreos/go-systemd/v22/dbus" ) func ReloadCaddy() error { - _, err := shExec([]string{"reload", "--config", config.Configuration.CaddyFile}) - return err -} + ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) + defer cancel() -func getCaddyFilePath() (string, error) { - path, err := exec.LookPath("caddy") + conn, err := dbus.NewSystemdConnectionContext(ctx) if err != nil { - return path, fmt.Errorf("cannot find caddy execuatable script in PATH") + return err } - return path, nil -} - -// shExec executes caddy with arguments -func shExec(args []string) (string, error) { - ng, err := getCaddyFilePath() + defer conn.Close() + resChan := make(chan string) + _, err = conn.ReloadOrRestartUnitContext(ctx, "caddy.service", "replace", resChan) if err != nil { - logger.Error("CaddyError", err) - return "", err + logger.Error("", err) + return err } - - logger.Debug("CMD: %s %v", ng, args) - // nolint: gosec - c := exec.Command(ng, args...) - - b, e := c.Output() - - if e != nil { - logger.Error("CaddyError", fmt.Errorf("command error: %s -- %v\n%+v", ng, args, e)) - logger.Warn(string(b)) - } - - return string(b), e + <-resChan + return nil }