mirror of
https://github.com/tobychui/zoraxy.git
synced 2025-08-05 20:58:28 +02:00

- Removed Go HTTP client UA - Added optional bypass of websocket origin check #107 - Added basic forward proxy for debug - Fixed UI error in network utils tab
57 lines
1.7 KiB
Go
57 lines
1.7 KiB
Go
package cproxy
|
|
|
|
import "net/http"
|
|
|
|
type defaultHandler struct {
|
|
filter Filter
|
|
clientConnector clientConnector
|
|
serverConnector serverConnector
|
|
meter monitor
|
|
}
|
|
|
|
func newHandler(filter Filter, clientConnector clientConnector, serverConnector serverConnector, meter monitor) *defaultHandler {
|
|
return &defaultHandler{
|
|
filter: filter,
|
|
clientConnector: clientConnector,
|
|
serverConnector: serverConnector,
|
|
meter: meter,
|
|
}
|
|
}
|
|
|
|
func (this *defaultHandler) ServeHTTP(response http.ResponseWriter, request *http.Request) {
|
|
this.meter.Measure(MeasurementHTTPRequest)
|
|
|
|
if request.Method != "CONNECT" {
|
|
this.meter.Measure(MeasurementBadMethod)
|
|
writeResponseStatus(response, http.StatusMethodNotAllowed)
|
|
|
|
} else if !this.filter.IsAuthorized(response, request) {
|
|
this.meter.Measure(MeasurementUnauthorizedRequest)
|
|
//writeResponseStatus(response, http.StatusUnauthorized)
|
|
|
|
} else if client := this.clientConnector.Connect(response); client == nil {
|
|
this.meter.Measure(MeasurementClientConnectionFailed)
|
|
writeResponseStatus(response, http.StatusNotImplemented)
|
|
|
|
} else if connection := this.serverConnector.Connect(client, request.URL.Host); connection == nil {
|
|
this.meter.Measure(MeasurementServerConnectionFailed)
|
|
_, _ = client.Write(statusBadGateway)
|
|
_ = client.Close()
|
|
|
|
} else {
|
|
this.meter.Measure(MeasurementProxyReady)
|
|
_, _ = client.Write(statusReady)
|
|
connection.Proxy()
|
|
this.meter.Measure(MeasurementProxyComplete)
|
|
}
|
|
}
|
|
|
|
func writeResponseStatus(response http.ResponseWriter, statusCode int) {
|
|
http.Error(response, http.StatusText(statusCode), statusCode)
|
|
}
|
|
|
|
var (
|
|
statusBadGateway = []byte("HTTP/1.1 502 Bad Gateway\r\n\r\n")
|
|
statusReady = []byte("HTTP/1.1 200 OK\r\n\r\n")
|
|
)
|