staging #4
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user