@@ -2,24 +2,18 @@ package main
22
33import (
44 "context"
5- "crypto/rand"
6- "crypto/rsa"
75 "crypto/tls"
8- "crypto/x509"
9- "crypto/x509/pkix"
10- "encoding/pem"
116 "log"
12- "math/big"
137 "net"
148 "os"
15- "time"
169
1710 "github.com/hasirciogluhq/xdatabase-proxy/cmd/proxy/internal/api"
1811 "github.com/hasirciogluhq/xdatabase-proxy/cmd/proxy/internal/core"
1912 "github.com/hasirciogluhq/xdatabase-proxy/cmd/proxy/internal/discovery/kubernetes"
2013 "github.com/hasirciogluhq/xdatabase-proxy/cmd/proxy/internal/discovery/memory"
2114 "github.com/hasirciogluhq/xdatabase-proxy/cmd/proxy/internal/protocol/postgresql"
2215 "github.com/hasirciogluhq/xdatabase-proxy/cmd/proxy/internal/storage/filesystem"
16+ "github.com/hasirciogluhq/xdatabase-proxy/cmd/proxy/internal/utils"
2317
2418 k8s "k8s.io/client-go/kubernetes"
2519 "k8s.io/client-go/tools/clientcmd"
@@ -115,13 +109,21 @@ func main() {
115109 log .Printf ("Using Kubernetes TLS provider (secret: %s/%s)" , namespace , secretName )
116110 tlsProvider = kubernetes .NewK8sTLSProvider (clientset , namespace , secretName )
117111 } else {
118- // Priority 3: Self-Signed (Development/Default)
119- log .Println ("Using Self-Signed Memory TLS provider (Development Mode)" )
120- cert , err := generateSelfSignedCert ()
112+ log .Println ("Using Memory TLS provider (Default)" )
113+ tlsProvider = memory .NewMemoryTLSProvider ()
114+ }
115+
116+ // Check if we should generate and store a self-signed certificate
117+ if os .Getenv ("TLS_ENABLE_SELF_SIGNED" ) == "true" {
118+ log .Println ("TLS_ENABLE_SELF_SIGNED is true. Generating and storing self-signed certificate..." )
119+ certPEM , keyPEM , err := utils .GenerateSelfSignedCert ()
121120 if err != nil {
122121 log .Fatalf ("Failed to generate self-signed cert: %v" , err )
123122 }
124- tlsProvider = & memoryTLSProvider {cert : & cert }
123+
124+ if err := tlsProvider .Store (context .Background (), certPEM , keyPEM ); err != nil {
125+ log .Fatalf ("Failed to store self-signed cert: %v" , err )
126+ }
125127 }
126128
127129 // Load initial certificate
@@ -162,42 +164,3 @@ func main() {
162164 log .Fatalf ("Server error: %v" , err )
163165 }
164166}
165-
166- // memoryTLSProvider is a simple in-memory implementation for development
167- type memoryTLSProvider struct {
168- cert * tls.Certificate
169- }
170-
171- func (p * memoryTLSProvider ) GetCertificate (ctx context.Context ) (* tls.Certificate , error ) {
172- return p .cert , nil
173- }
174-
175- func generateSelfSignedCert () (tls.Certificate , error ) {
176- priv , err := rsa .GenerateKey (rand .Reader , 2048 )
177- if err != nil {
178- return tls.Certificate {}, err
179- }
180-
181- template := x509.Certificate {
182- SerialNumber : big .NewInt (1 ),
183- Subject : pkix.Name {
184- Organization : []string {"xdatabase-proxy" },
185- },
186- NotBefore : time .Now (),
187- NotAfter : time .Now ().Add (time .Hour * 24 * 365 ),
188-
189- KeyUsage : x509 .KeyUsageKeyEncipherment | x509 .KeyUsageDigitalSignature ,
190- ExtKeyUsage : []x509.ExtKeyUsage {x509 .ExtKeyUsageServerAuth },
191- BasicConstraintsValid : true ,
192- }
193-
194- derBytes , err := x509 .CreateCertificate (rand .Reader , & template , & template , & priv .PublicKey , priv )
195- if err != nil {
196- return tls.Certificate {}, err
197- }
198-
199- certPEM := pem .EncodeToMemory (& pem.Block {Type : "CERTIFICATE" , Bytes : derBytes })
200- keyPEM := pem .EncodeToMemory (& pem.Block {Type : "RSA PRIVATE KEY" , Bytes : x509 .MarshalPKCS1PrivateKey (priv )})
201-
202- return tls .X509KeyPair (certPEM , keyPEM )
203- }
0 commit comments