2020-03-03 04:45:16 -06:00
|
|
|
package proxyutil
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net"
|
|
|
|
"net/http"
|
|
|
|
)
|
|
|
|
|
|
|
|
// PrepareProxyRequest prepares a request for being proxied.
|
|
|
|
// Removes X-Forwarded-Host, X-Forwarded-Port, X-Forwarded-Proto headers.
|
|
|
|
// Set X-Forwarded-For headers.
|
|
|
|
func PrepareProxyRequest(req *http.Request) {
|
|
|
|
req.Header.Del("X-Forwarded-Host")
|
|
|
|
req.Header.Del("X-Forwarded-Port")
|
|
|
|
req.Header.Del("X-Forwarded-Proto")
|
|
|
|
|
|
|
|
if req.RemoteAddr != "" {
|
|
|
|
remoteAddr, _, err := net.SplitHostPort(req.RemoteAddr)
|
|
|
|
if err != nil {
|
|
|
|
remoteAddr = req.RemoteAddr
|
|
|
|
}
|
|
|
|
if req.Header.Get("X-Forwarded-For") != "" {
|
|
|
|
req.Header.Set("X-Forwarded-For", req.Header.Get("X-Forwarded-For")+", "+remoteAddr)
|
|
|
|
} else {
|
|
|
|
req.Header.Set("X-Forwarded-For", remoteAddr)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// ClearCookieHeader clear cookie header, except for cookies specified to be kept.
|
|
|
|
func ClearCookieHeader(req *http.Request, keepCookiesNames []string) {
|
|
|
|
var keepCookies []*http.Cookie
|
|
|
|
for _, c := range req.Cookies() {
|
|
|
|
for _, v := range keepCookiesNames {
|
|
|
|
if c.Name == v {
|
|
|
|
keepCookies = append(keepCookies, c)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
req.Header.Del("Cookie")
|
|
|
|
for _, c := range keepCookies {
|
|
|
|
req.AddCookie(c)
|
|
|
|
}
|
|
|
|
}
|
2022-02-09 06:44:38 -06:00
|
|
|
|
|
|
|
// SetProxyResponseHeaders sets proxy response headers.
|
|
|
|
// Sets Content-Security-Policy: sandbox
|
|
|
|
func SetProxyResponseHeaders(header http.Header) {
|
|
|
|
header.Set("Content-Security-Policy", "sandbox")
|
|
|
|
}
|