34 lines
1.0 KiB
Go
34 lines
1.0 KiB
Go
package responsemodifiers
|
|
|
|
import (
|
|
_ "embed"
|
|
"io"
|
|
"ladder/proxychain"
|
|
"strings"
|
|
)
|
|
|
|
//go:embed patch_google_analytics.js
|
|
var gaPatch string
|
|
|
|
// PatchGoogleAnalytics replaces any request to google analytics with a no-op stub function.
|
|
// Some sites will not display content until GA is loaded, so we fake one instead.
|
|
// Credit to Raymond Hill @ github.com/gorhill/uBlock
|
|
func PatchGoogleAnalytics() proxychain.ResponseModification {
|
|
return func(chain *proxychain.ProxyChain) error {
|
|
|
|
// preflight check
|
|
isGADomain := chain.Request.URL.Host == "www.google-analytics.com" || chain.Request.URL.Host == "google-analytics.com"
|
|
isGAPath := strings.HasSuffix(chain.Request.URL.Path, "analytics.js")
|
|
if !(isGADomain || isGAPath) {
|
|
return nil
|
|
}
|
|
|
|
// send modified js payload to client containing
|
|
// stub functions from patch_google_analytics.js
|
|
gaPatchReader := io.NopCloser(strings.NewReader(gaPatch))
|
|
chain.Response.Body = gaPatchReader
|
|
chain.Context.Set("content-type", "text/javascript")
|
|
return nil
|
|
}
|
|
}
|