From 368cc0b3e30a0c39542f9c91721f02e4a4e7ff53 Mon Sep 17 00:00:00 2001 From: bagas Date: Sat, 6 Dec 2025 00:01:25 +0700 Subject: [PATCH] fix: resolve nil pointer dereference in interaction on TLS request --- docker-compose.yaml | 23 +++++++++++++++++++++++ server/http.go | 10 ++++++---- server/https.go | 2 +- server/middleware.go | 7 ++++--- 4 files changed, 34 insertions(+), 8 deletions(-) create mode 100644 docker-compose.yaml diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..a626556 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,23 @@ +services: + tunnlpls: + image: git.fossy.my.id/bagas/tunnl_please:staging + ports: + - 80:80 + - 2200:2200 + volumes: + - ./certs:/certs +# - /etc/letsencrypt/live/sgp.tunnl.live/fullchain.pem:/certs/fullchain.pem +# - /etc/letsencrypt/live/sgp.tunnl.live/privkey.pem:/certs/privkey.pem + labels: + - "com.centurylinklabs.watchtower.enable=true" + environment: + domain: sgp.tunnl.live + port: 2200 + tls_enabled: true + tls_redirect: true + cert_loc: /certs/localhost.direct.SS.crt + key_loc: /certs/localhost.direct.SS.key + ssh_private_key: /certs/id_rsa + cors_list: https://tunnl.live + ALLOWED_PORTS: 10000-50000 + restart: always diff --git a/server/http.go b/server/http.go index 18bbf38..0960932 100644 --- a/server/http.go +++ b/server/http.go @@ -11,11 +11,13 @@ import ( "regexp" "strings" "tunnel_pls/session" - "tunnel_pls/session/interaction" "tunnel_pls/types" "tunnel_pls/utils" ) +type Interaction interface { + SendMessage(message string) +} type CustomWriter struct { RemoteAddr net.Addr writer io.Writer @@ -24,13 +26,13 @@ type CustomWriter struct { buf []byte respHeader *ResponseHeaderFactory reqHeader *RequestHeaderFactory - interaction interaction.Controller + interaction Interaction respMW []ResponseMiddleware reqStartMW []RequestMiddleware reqEndMW []RequestMiddleware } -func (cw *CustomWriter) SetInteraction(interaction interaction.Controller) { +func (cw *CustomWriter) SetInteraction(interaction Interaction) { cw.interaction = interaction } @@ -176,7 +178,7 @@ func (cw *CustomWriter) Write(p []byte) (int, error) { return n, nil } -func (cw *CustomWriter) AddInteraction(interaction *interaction.Interaction) { +func (cw *CustomWriter) AddInteraction(interaction Interaction) { cw.interaction = interaction } diff --git a/server/https.go b/server/https.go index f4ecf99..cbe7c86 100644 --- a/server/https.go +++ b/server/https.go @@ -112,7 +112,7 @@ func HandlerTLS(conn net.Conn) { return } cw := NewCustomWriter(conn, dstReader, conn.RemoteAddr()) - + cw.SetInteraction(sshSession.Interaction) forwardRequest(cw, reqhf, sshSession) return } diff --git a/server/middleware.go b/server/middleware.go index ad8c546..a28bdab 100644 --- a/server/middleware.go +++ b/server/middleware.go @@ -4,7 +4,6 @@ import ( "fmt" "net" "time" - "tunnel_pls/session/interaction" ) type RequestMiddleware interface { @@ -29,20 +28,22 @@ func (h *TunnelFingerprint) HandleResponse(header *ResponseHeaderFactory, body [ } type RequestLogger struct { - interaction interaction.Controller + interaction Interaction remoteAddr net.Addr } -func NewRequestLogger(interaction interaction.Controller, remoteAddr net.Addr) *RequestLogger { +func NewRequestLogger(interaction Interaction, remoteAddr net.Addr) *RequestLogger { return &RequestLogger{ interaction: interaction, remoteAddr: remoteAddr, } } + func (rl *RequestLogger) HandleRequest(header *RequestHeaderFactory) error { rl.interaction.SendMessage(fmt.Sprintf("\033[32m%s %s -> %s %s \033[0m\r\n", time.Now().UTC().Format(time.RFC3339), rl.remoteAddr.String(), header.Method, header.Path)) return nil } + func (rl *RequestLogger) HandleResponse(header *ResponseHeaderFactory, body []byte) error { return nil } //TODO: Implement caching atau enggak