staging #4

Merged
bagas merged 5 commits from staging into main 2025-09-11 12:07:38 +00:00
3 changed files with 38 additions and 15 deletions

View File

@ -59,9 +59,33 @@ func (w *connResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
} }
var redirectTLS = false var redirectTLS = false
var allowedCors = make(map[string]bool)
var isAllowedAllCors = false
func init() {
corsList := utils.Getenv("cors_list")
if corsList == "*" {
isAllowedAllCors = true
} else {
for _, allowedOrigin := range strings.Split(corsList, ",") {
allowedCors[allowedOrigin] = true
}
}
}
func NewHTTPServer() error { func NewHTTPServer() error {
upgrader.CheckOrigin = func(r *http.Request) bool { return true } upgrader.CheckOrigin = func(r *http.Request) bool {
if isAllowedAllCors {
return true
} else {
isAllowed, ok := allowedCors[r.Header.Get("Origin")]
if !ok || !isAllowed {
return false
}
return true
}
}
listener, err := net.Listen("tcp", ":80") listener, err := net.Listen("tcp", ":80")
if err != nil { if err != nil {
return errors.New("Error listening: " + err.Error()) return errors.New("Error listening: " + err.Error())
@ -97,16 +121,10 @@ func Handler(conn net.Conn) {
host := strings.Split(parseHostFromHeader(headers), ".") host := strings.Split(parseHostFromHeader(headers), ".")
if len(host) < 1 { if len(host) < 1 {
conn.Write([]byte("HTTP/1.1 400 Bad Request\r\n\r\n")) conn.Write([]byte("HTTP/1.1 400 Bad Request\r\n\r\n"))
log.Println("Bad Request")
conn.Close() conn.Close()
return return
} }
if len(host) < 1 {
conn.Write([]byte("HTTP/1.1 400 Bad Request\r\n\r\n"))
conn.Close()
return
}
slug := host[0] slug := host[0]
if redirectTLS { if redirectTLS {
@ -155,7 +173,11 @@ func Handler(conn net.Conn) {
sshSession, ok := session.Clients[slug] sshSession, ok := session.Clients[slug]
if !ok { if !ok {
conn.Write([]byte("HTTP/1.1 400 Bad Request\r\n\r\n")) conn.Write([]byte("HTTP/1.1 301 Moved Permanently\r\n" +
fmt.Sprintf("Location: https://tunnl.live/tunnel-not-found?slug=%s\r\n", slug) +
"Content-Length: 0\r\n" +
"Connection: close\r\n" +
"\r\n"))
conn.Close() conn.Close()
return return
} }

View File

@ -4,6 +4,7 @@ import (
"bufio" "bufio"
"crypto/tls" "crypto/tls"
"errors" "errors"
"fmt"
"log" "log"
"net" "net"
"net/http" "net/http"
@ -58,11 +59,6 @@ func HandlerTLS(conn net.Conn) {
return return
} }
if len(host) < 1 {
conn.Write([]byte("HTTP/1.1 400 Bad Request\r\n\r\n"))
conn.Close()
return
}
slug := host[0] slug := host[0]
if slug == "ping" { if slug == "ping" {
@ -101,7 +97,11 @@ func HandlerTLS(conn net.Conn) {
sshSession, ok := session.Clients[slug] sshSession, ok := session.Clients[slug]
if !ok { if !ok {
conn.Write([]byte("HTTP/1.1 400 Bad Request\r\n\r\n")) conn.Write([]byte("HTTP/1.1 301 Moved Permanently\r\n" +
fmt.Sprintf("Location: https://tunnl.live/tunnel-not-found?slug=%s\r\n", slug) +
"Content-Length: 0\r\n" +
"Connection: close\r\n" +
"\r\n"))
conn.Close() conn.Close()
return return
} }

View File

@ -1,13 +1,14 @@
package utils package utils
import ( import (
"github.com/joho/godotenv"
"log" "log"
"math/rand" "math/rand"
"os" "os"
"strings" "strings"
"sync" "sync"
"time" "time"
"github.com/joho/godotenv"
) )
type Env struct { type Env struct {