init: Initial commit
This commit is contained in:
68
app/proxy/proxy.go
Normal file
68
app/proxy/proxy.go
Normal file
@@ -0,0 +1,68 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user