From 90a302f5580f32635d20e5d13aba5f0c74c5643e Mon Sep 17 00:00:00 2001
From: Garet Halliday <me@garet.holiday>
Date: Sun, 1 Oct 2023 22:13:08 -0500
Subject: [PATCH] better

---
 entrypoint.sh                    |  6 +-----
 lib/gat/gatcaddyfile/handler.go  | 12 +++++++++++
 lib/gat/handlers/error/module.go | 36 ++++++++++++++++++++++++++++++++
 lib/gat/standard/standard.go     |  1 +
 presets/default.Caddyfile        |  3 +++
 5 files changed, 53 insertions(+), 5 deletions(-)
 create mode 100644 lib/gat/handlers/error/module.go
 create mode 100644 presets/default.Caddyfile

diff --git a/entrypoint.sh b/entrypoint.sh
index 560b199c..20dddc10 100755
--- a/entrypoint.sh
+++ b/entrypoint.sh
@@ -4,9 +4,5 @@ set -e
 EXEC_BIN_PATH=${PGGAT_BIN_PATH:=/usr/bin/pggat}
 
 pggat() {
-    if [[ ! -v "${PGGAT_RUN_MODE}" ]]; then
-      exec $EXEC_BIN_PATH run
-    else
-      exec $EXEC_BIN_PATH run --adapter="caddyfile" --config="/presets/${PGGAT_RUN_MODE}.Caddyfile"
-    fi
+    exec $EXEC_BIN_PATH run --adapter="caddyfile" --config="/presets/${PGGAT_RUN_MODE:-default}.Caddyfile"
 }
diff --git a/lib/gat/gatcaddyfile/handler.go b/lib/gat/gatcaddyfile/handler.go
index cc8d4255..c98074c1 100644
--- a/lib/gat/gatcaddyfile/handler.go
+++ b/lib/gat/gatcaddyfile/handler.go
@@ -1,6 +1,7 @@
 package gatcaddyfile
 
 import (
+	error_handler "gfx.cafe/gfx/pggat/lib/gat/handlers/error"
 	"gfx.cafe/gfx/pggat/lib/gat/handlers/pgbouncer_spilo"
 	"strconv"
 	"strings"
@@ -106,6 +107,17 @@ func init() {
 			Value: value,
 		}, nil
 	})
+	RegisterDirective(Handler, "error", func(d *caddyfile.Dispenser, _ *[]caddyconfig.Warning) (caddy.Module, error) {
+		if !d.NextArg() {
+			return nil, d.ArgErr()
+		}
+
+		message := d.Val()
+
+		return &error_handler.Module{
+			Message: message,
+		}, nil
+	})
 	RegisterDirective(Handler, "pgbouncer", func(d *caddyfile.Dispenser, _ *[]caddyconfig.Warning) (caddy.Module, error) {
 		var config = "pgbouncer.ini"
 		if d.NextArg() {
diff --git a/lib/gat/handlers/error/module.go b/lib/gat/handlers/error/module.go
new file mode 100644
index 00000000..b8eedbf7
--- /dev/null
+++ b/lib/gat/handlers/error/module.go
@@ -0,0 +1,36 @@
+package error_handler
+
+import (
+	"gfx.cafe/gfx/pggat/lib/fed"
+	"gfx.cafe/gfx/pggat/lib/gat"
+	"gfx.cafe/gfx/pggat/lib/perror"
+	"github.com/caddyserver/caddy/v2"
+)
+
+func init() {
+	caddy.RegisterModule((*Module)(nil))
+}
+
+type Module struct {
+	Message string `json:"message"`
+}
+
+func (T *Module) CaddyModule() caddy.ModuleInfo {
+	return caddy.ModuleInfo{
+		ID: "pggat.handlers.error",
+		New: func() caddy.Module {
+			return new(Module)
+		},
+	}
+}
+
+func (T *Module) Handle(_ *fed.Conn) error {
+	return perror.New(
+		perror.FATAL,
+		perror.InternalError,
+		T.Message,
+	)
+}
+
+var _ gat.Handler = (*Module)(nil)
+var _ caddy.Module = (*Module)(nil)
diff --git a/lib/gat/standard/standard.go b/lib/gat/standard/standard.go
index fd5bce70..a010bc7a 100644
--- a/lib/gat/standard/standard.go
+++ b/lib/gat/standard/standard.go
@@ -16,6 +16,7 @@ import (
 
 	// middlewares
 	_ "gfx.cafe/gfx/pggat/lib/gat/handlers/allowed_startup_parameters"
+	_ "gfx.cafe/gfx/pggat/lib/gat/handlers/error"
 	_ "gfx.cafe/gfx/pggat/lib/gat/handlers/require_ssl"
 	_ "gfx.cafe/gfx/pggat/lib/gat/handlers/rewrite_database"
 	_ "gfx.cafe/gfx/pggat/lib/gat/handlers/rewrite_parameter"
diff --git a/presets/default.Caddyfile b/presets/default.Caddyfile
new file mode 100644
index 00000000..f0e4d676
--- /dev/null
+++ b/presets/default.Caddyfile
@@ -0,0 +1,3 @@
+:5432 {
+    error "server is not configured"
+}
-- 
GitLab