diff --git a/main.go b/main.go index 3f79f75..22fcea1 100644 --- a/main.go +++ b/main.go @@ -277,7 +277,7 @@ func (gloom *GLoom) RegisterPlugin(pluginPath string, name string, domains []str slog.Debug("Starting pluginHost", "pluginPath", pluginPath) processPath := path.Join(gloom.gloomDir, "pluginHost") - args := []string{pluginPath, socketPath} + args := []string{"--plugin-path", pluginPath, "--socket-path", socketPath} cmd := exec.Command(processPath, args...) stderrPipe, err := cmd.StderrPipe() diff --git a/pluginHost/main.go b/pluginHost/main.go index 63d4239..f904d92 100644 --- a/pluginHost/main.go +++ b/pluginHost/main.go @@ -1,6 +1,7 @@ package main import ( + "flag" "fmt" "io" "log" @@ -15,24 +16,12 @@ import ( var pluginPath string var socketPath string + +// Idk why I originally wrote this solution when stderr is literally just the best solution for me, but this +// makes the pluginHost more generally useful outside of GLoom, so I'm keeping it +// TODO: maybe make it a compiler flag, though I'm sure its not making the binary *that* much bigger var controlPath string -func init() { - if len(os.Args) < 3 { - fmt.Fprintf(os.Stderr, "Usage: pluginHost [controlPath]") - os.Exit(1) - } - - pluginPath = os.Args[1] - socketPath = os.Args[2] - // Idk why I originally wrote this solution when stderr is literally just the best solution for me, but this - // makes the pluginHost more generally useful outside of GLoom, so I'm keeping it - // TODO: maybe make it a compiler flag, though I'm sure its not making the binary *that* much bigger - if len(os.Args) > 3 { - controlPath = os.Args[3] - } -} - type Plugin interface { Init() (*fiber.Config, error) RegisterRoutes(app fiber.Router) @@ -73,6 +62,32 @@ func main() { os.Exit(0) }() + fs := flag.NewFlagSet("pluginHost", flag.ExitOnError) + fs.Usage = func() { + fmt.Fprintf(os.Stderr, "Usage: pluginHost [controlPath]") + } + + fs.StringVar(&pluginPath, "plugin-path", "", "Path to the plugin") + fs.StringVar(&socketPath, "socket-path", "", "Path to the socket") + fs.StringVar(&controlPath, "control-path", "", "Path to the control socket") + + err := fs.Parse(os.Args[1:]) + if err != nil { + fmt.Fprintf(os.Stderr, "Error parsing arguments: %v", err) + os.Exit(1) + } + os.Args = fs.Args() + + if pluginPath == "" { + fmt.Fprintf(os.Stderr, "Error: plugin path not specified") + os.Exit(1) + } + + if socketPath == "" { + fmt.Fprintf(os.Stderr, "Error: socket path not specified") + os.Exit(1) + } + var Print = func(format string, args ...any) { fmt.Fprintf(os.Stderr, format, args...) fmt.Fprintf(os.Stderr, "\n")