mirror of
https://code.rocketnine.space/tslocum/twins.git
synced 2024-11-27 13:58:15 +01:00
40 lines
722 B
Go
40 lines
722 B
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"crypto/tls"
|
||
|
"io"
|
||
|
"log"
|
||
|
"net"
|
||
|
"net/url"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
func serveProxy(c net.Conn, request *url.URL, proxyURL string) {
|
||
|
original := proxyURL
|
||
|
|
||
|
tlsConfig := &tls.Config{}
|
||
|
if strings.HasPrefix(proxyURL, "gemini://") {
|
||
|
proxyURL = proxyURL[9:]
|
||
|
} else if strings.HasPrefix(proxyURL, "gemini-insecure://") {
|
||
|
proxyURL = proxyURL[18:]
|
||
|
tlsConfig.InsecureSkipVerify = true
|
||
|
}
|
||
|
proxy, err := tls.Dial("tcp", proxyURL, tlsConfig)
|
||
|
if err != nil {
|
||
|
writeStatus(c, statusProxyError)
|
||
|
return
|
||
|
}
|
||
|
defer proxy.Close()
|
||
|
|
||
|
// Forward request
|
||
|
proxy.Write([]byte(request.String()))
|
||
|
proxy.Write([]byte("\r\n"))
|
||
|
|
||
|
// Forward response
|
||
|
io.Copy(c, proxy)
|
||
|
|
||
|
if verbose {
|
||
|
log.Printf("< %s\n", original)
|
||
|
}
|
||
|
}
|