From 03ef1800718b86ad07a2e42d058b790523cc37c6 Mon Sep 17 00:00:00 2001
From: Garet Halliday <me@garet.holiday>
Date: Fri, 15 Sep 2023 19:48:57 -0500
Subject: [PATCH] certs in DO mode

---
 .../modes/digitalocean_discovery/config.go    | 28 +++++++++++++++++--
 1 file changed, 25 insertions(+), 3 deletions(-)

diff --git a/lib/gat/modes/digitalocean_discovery/config.go b/lib/gat/modes/digitalocean_discovery/config.go
index 39883b5e..05839877 100644
--- a/lib/gat/modes/digitalocean_discovery/config.go
+++ b/lib/gat/modes/digitalocean_discovery/config.go
@@ -28,9 +28,11 @@ import (
 )
 
 type Config struct {
-	APIKey   string `env:"PGGAT_DO_API_KEY"`
-	Private  string `env:"PGGAT_DO_PRIVATE"`
-	PoolMode string `env:"PGGAT_POOL_MODE"`
+	APIKey     string `env:"PGGAT_DO_API_KEY"`
+	Private    string `env:"PGGAT_DO_PRIVATE"`
+	PoolMode   string `env:"PGGAT_POOL_MODE"`
+	TLSCrtFile string `env:"PGGAT_TLS_CRT_FILE" default:"/etc/ssl/certs/pgbouncer.crt"`
+	TLSKeyFile string `env:"PGGAT_TLS_KEY_FILE" default:"/etc/ssl/certs/pgbouncer.key"`
 }
 
 func Load() (Config, error) {
@@ -44,6 +46,25 @@ func Load() (Config, error) {
 }
 
 func (T *Config) ListenAndServe() error {
+	// load certificate
+	var sslConfig *tls.Config
+	certificate, err := tls.LoadX509KeyPair(T.TLSCrtFile, T.TLSKeyFile)
+	if err == nil {
+		sslConfig = &tls.Config{
+			Certificates: []tls.Certificate{
+				certificate,
+			},
+		}
+		return err
+	} else {
+		log.Printf("failed to load certificate, ssl is disabled")
+	}
+	sslConfig = &tls.Config{
+		Certificates: []tls.Certificate{
+			certificate,
+		},
+	}
+
 	client := godo.NewFromToken(T.APIKey)
 	clusters, _, err := client.Databases.List(context.Background(), nil)
 
@@ -169,6 +190,7 @@ func (T *Config) ListenAndServe() error {
 	b.Queue(func() error {
 		log.Print("listening on :5432")
 		return gat.ListenAndServe("tcp", ":5432", frontends.AcceptOptions{
+			SSLConfig: sslConfig,
 			AllowedStartupOptions: []strutil.CIString{
 				strutil.MakeCIString("client_encoding"),
 				strutil.MakeCIString("datestyle"),
-- 
GitLab