mirror of
https://github.com/tobychui/zoraxy.git
synced 2025-08-07 05:38:30 +02:00
3.0.1 init commit
- 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
This commit is contained in:
56
src/mod/forwardproxy/cproxy/default_handler.go
Normal file
56
src/mod/forwardproxy/cproxy/default_handler.go
Normal file
@@ -0,0 +1,56 @@
|
||||
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")
|
||||
)
|
Reference in New Issue
Block a user