2020-11-05 05:18:59 +01:00
|
|
|
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()))
|
2020-11-05 21:57:28 +01:00
|
|
|
proxy.Write([]byte(newLine))
|
2020-11-05 05:18:59 +01:00
|
|
|
|
|
|
|
// Forward response
|
|
|
|
io.Copy(c, proxy)
|
|
|
|
|
|
|
|
if verbose {
|
|
|
|
log.Printf("< %s\n", original)
|
|
|
|
}
|
|
|
|
}
|