Files
pgproxy/app/proxy/proxy.go
Björn Benouarets c6b269cf35 init: Initial commit
2025-12-15 14:13:43 +01:00

69 lines
1.4 KiB
Go

package proxy
import (
"fmt"
"net"
"git.secnex.io/secnex/masterlog"
"git.secnex.io/secnex/pgproxy/config"
)
// Proxy handles PostgreSQL connection proxying
type Proxy struct {
listener net.Listener
config *config.Config
mappings map[string]struct {
host string
port int
}
}
// NewProxy creates a new proxy instance
func NewProxy(config *config.Config) (*Proxy, error) {
addr := fmt.Sprintf("%s:%d", config.Listen.Address, config.Listen.Port)
listener, err := net.Listen("tcp", addr)
if err != nil {
return nil, err
}
// Build mappings map for quick lookup
mappings := make(map[string]struct {
host string
port int
})
for _, mapping := range config.Mappings {
port := mapping.Port
if port == 0 {
port = 5432 // Default PostgreSQL port
}
mappings[mapping.External] = struct {
host string
port int
}{
host: mapping.Internal,
port: port,
}
}
return &Proxy{
listener: listener,
config: config,
mappings: mappings,
}, nil
}
// Start starts the proxy server
func (p *Proxy) Start() error {
masterlog.Info("PostgreSQL proxy listening", map[string]interface{}{"address": p.config.Listen.Address, "port": p.config.Listen.Port})
for {
conn, err := p.listener.Accept()
if err != nil {
masterlog.Error("Error accepting connection", map[string]interface{}{"error": err})
continue
}
go p.handleConnection(conn)
}
}