improve codegen for JSON serialization of response/request modifiers

This commit is contained in:
Kevin Pham
2023-12-04 11:10:55 -06:00
parent 7883b32335
commit c28470e619
5 changed files with 344 additions and 304 deletions

View File

@@ -5,6 +5,8 @@ import (
"go/ast" "go/ast"
"go/parser" "go/parser"
"go/token" "go/token"
"io"
//"io/fs" //"io/fs"
"os" "os"
"path/filepath" "path/filepath"
@@ -12,30 +14,27 @@ import (
//"strings" //"strings"
) )
func modToFactoryMap(fn *ast.FuncDecl) (modMap string) { func responseModToFactoryMap(fn *ast.FuncDecl) (modMap string) {
paramCount := len(fn.Type.Params.List) paramCount := len(fn.Type.Params.List)
name := fn.Name.Name name := fn.Name.Name
var x string var x string
switch paramCount { switch paramCount {
case 0: case 0:
x = fmt.Sprintf(" resModMap[\"%s\"] = func(_ ...string) proxychain.ResponseModification {\n return rx.%s()\n }\n", name, name) x = fmt.Sprintf(" rsmModMap[\"%s\"] = func(_ ...string) proxychain.ResponseModification {\n return tx.%s()\n }\n", name, name)
default: default:
p := []string{} p := []string{}
for i := 0; i < paramCount; i++ { for i := 0; i < paramCount; i++ {
p = append(p, fmt.Sprintf("params[%d]", i)) p = append(p, fmt.Sprintf("params[%d]", i))
} }
params := strings.Join(p, ", ") params := strings.Join(p, ", ")
x = fmt.Sprintf(" resModMap[\"%s\"] = func(params, ...string) proxychain.ResponseModification {\n return rx.%s(%s)\n }\n", name, name, params) x = fmt.Sprintf(" rsmModMap[\"%s\"] = func(params ...string) proxychain.ResponseModification {\n return tx.%s(%s)\n }\n", name, name, params)
} }
return x return x
} }
func main() { func responseModCodeGen(dir string) (code string, err error) {
fset := token.NewFileSet() fset := token.NewFileSet()
// Directory containing your Go files
dir := "../requestmodifiers/"
files, err := os.ReadDir(dir) files, err := os.ReadDir(dir)
if err != nil { if err != nil {
panic(err) panic(err)
@@ -50,37 +49,143 @@ func main() {
// Parse each Go file // Parse each Go file
node, err := parser.ParseFile(fset, filepath.Join(dir, file.Name()), nil, parser.ParseComments) node, err := parser.ParseFile(fset, filepath.Join(dir, file.Name()), nil, parser.ParseComments)
if err != nil { if err != nil {
panic(err) return "", err
} }
ast.Inspect(node, func(n ast.Node) bool { ast.Inspect(node, func(n ast.Node) bool {
fn, ok := n.(*ast.FuncDecl) fn, ok := n.(*ast.FuncDecl)
if ok && fn.Recv == nil && fn.Name.IsExported() { if ok && fn.Recv == nil && fn.Name.IsExported() {
factoryMaps = append(factoryMaps, modToFactoryMap(fn)) factoryMaps = append(factoryMaps, responseModToFactoryMap(fn))
} }
return true return true
}) })
} }
code := fmt.Sprintf(` code = fmt.Sprintf(`
package ruleset_v2 package ruleset_v2
// DO NOT EDIT THIS FILE. It is automatically generated by ladder/proxychain/codegen/codegen.go
// The purpose of this is serialization of rulesets from JSON or YAML into functional options suitable
// for use in proxychains.
import ( import (
"ladder/proxychain" "ladder/proxychain"
rx "ladder/proxychain/responsemodifiers" tx "ladder/proxychain/responsemodifiers"
) )
type ResponseModifierFactory func(params ...string) proxychain.ResponseModification type ResponseModifierFactory func(params ...string) proxychain.ResponseModification
var resModMap map[string]ResponseModifierFactory var rsmModMap map[string]ResponseModifierFactory
// TODO: create codegen using AST parsing of exported methods in ladder/proxychain/responsemodifiers/*.go
func init() { func init() {
resModMap = make(map[string]ResponseModifierFactory) rsmModMap = make(map[string]ResponseModifierFactory)
%s %s
}`, strings.Join(factoryMaps, "\n")) }`, strings.Join(factoryMaps, "\n"))
fmt.Println(code) //fmt.Println(code)
return code, nil
}
func requestModToFactoryMap(fn *ast.FuncDecl) (modMap string) {
paramCount := len(fn.Type.Params.List)
name := fn.Name.Name
var x string
switch paramCount {
case 0:
x = fmt.Sprintf(" rqmModMap[\"%s\"] = func(_ ...string) proxychain.RequestModification {\n return rx.%s()\n }\n", name, name)
default:
p := []string{}
for i := 0; i < paramCount; i++ {
p = append(p, fmt.Sprintf("params[%d]", i))
}
params := strings.Join(p, ", ")
x = fmt.Sprintf(" rqmModMap[\"%s\"] = func(params ...string) proxychain.RequestModification {\n return rx.%s(%s)\n }\n", name, name, params)
}
return x
}
func requestModCodeGen(dir string) (code string, err error) {
fset := token.NewFileSet()
files, err := os.ReadDir(dir)
if err != nil {
panic(err)
}
factoryMaps := []string{}
for _, file := range files {
if filepath.Ext(file.Name()) != ".go" {
continue
}
// Parse each Go file
node, err := parser.ParseFile(fset, filepath.Join(dir, file.Name()), nil, parser.ParseComments)
if err != nil {
return "", err
}
ast.Inspect(node, func(n ast.Node) bool {
fn, ok := n.(*ast.FuncDecl)
if ok && fn.Recv == nil && fn.Name.IsExported() {
factoryMaps = append(factoryMaps, requestModToFactoryMap(fn))
}
return true
})
} }
code = fmt.Sprintf(`
package ruleset_v2
// DO NOT EDIT THIS FILE. It is automatically generated by ladder/proxychain/codegen/codegen.go
// The purpose of this is serialization of rulesets from JSON or YAML into functional options suitable
// for use in proxychains.
import (
"ladder/proxychain"
rx "ladder/proxychain/requestmodifiers"
)
type RequestModifierFactory func(params ...string) proxychain.RequestModification
var rqmModMap map[string]RequestModifierFactory
func init() {
rqmModMap = make(map[string]RequestModifierFactory)
%s
}`, strings.Join(factoryMaps, "\n"))
//fmt.Println(code)
return code, nil
}
func main() {
rqmCode, err := requestModCodeGen("../requestmodifiers/")
if err != nil {
panic(err)
}
//fmt.Println(rqmCode)
fq, err := os.Create("../ruleset/rule_reqmod_types.gen.go")
if err != nil {
panic(err)
}
_, err = io.WriteString(fq, rqmCode)
if err != nil {
panic(err)
}
rsmCode, err := responseModCodeGen("../responsemodifiers/")
if err != nil {
panic(err)
}
//fmt.Println(rsmCode)
fs, err := os.Create("../ruleset/rule_resmod_types.gen.go")
if err != nil {
panic(err)
}
_, err = io.WriteString(fs, rsmCode)
if err != nil {
panic(err)
}
}

View File

@@ -47,7 +47,7 @@ type CustomDialer struct {
*net.Dialer *net.Dialer
} }
func NewCustomDialer(timeout, keepAlive time.Duration) *CustomDialer { func newCustomDialer(timeout, keepAlive time.Duration) *CustomDialer {
return &CustomDialer{ return &CustomDialer{
Dialer: &net.Dialer{ Dialer: &net.Dialer{
Timeout: timeout, Timeout: timeout,

View File

@@ -34,11 +34,24 @@ func (rule *Rule) UnmarshalJSON(data []byte) error {
if err != nil { if err != nil {
return fmt.Errorf("Rule::UnmarshalJSON invalid function call syntax => '%s'", err) return fmt.Errorf("Rule::UnmarshalJSON invalid function call syntax => '%s'", err)
} }
f, exists := resModMap[name] f, exists := rsmModMap[name]
if !exists {
return fmt.Errorf("Rule::UnmarshalJSON => responseModifer '%s' does not exist, please check spelling", err)
}
rule.ResponseModifications = append(rule.ResponseModifications, f(params...))
}
// convert responseModification function call string into actual functional option
for _, rqmModStr := range aux.RequestModifications {
name, params, err := parseFuncCall(rqmModStr)
if err != nil {
return fmt.Errorf("Rule::UnmarshalJSON invalid function call syntax => '%s'", err)
}
f, exists := rqmModMap[name]
if !exists { if !exists {
return fmt.Errorf("Rule::UnmarshalJSON => requestModifier '%s' does not exist, please check spelling", err) return fmt.Errorf("Rule::UnmarshalJSON => requestModifier '%s' does not exist, please check spelling", err)
} }
rule.ResponseModifications = append(rule.ResponseModifications, f(params...)) rule.RequestModifications = append(rule.RequestModifications, f(params...))
} }
return nil return nil

View File

@@ -1,183 +1,182 @@
package ruleset
package ruleset_v2
// DO NOT EDIT THIS FILE. It is automatically generated by ladder/proxychain/codegen/codegen.go
// The purpose of this is serialization of rulesets from JSON or YAML into functional options suitable
// for use in proxychains.
import ( import (
"ladder/proxychain" "ladder/proxychain"
rx "ladder/proxychain/responsemodifiers" rx "ladder/proxychain/requestmodifiers"
) )
type ResponseModifierFactory func(params ...string) proxychain.ResponseModification type RequestModifierFactory func(params ...string) proxychain.RequestModification
var resModMap map[string]ResponseModifierFactory var rqmModMap map[string]RequestModifierFactory
// TODO: create codegen using AST parsing of exported methods in ladder/proxychain/responsemodifiers/*.go
func init() { func init() {
resModMap = make(map[string]ResponseModifierFactory) rqmModMap = make(map[string]RequestModifierFactory)
resModMap["ForwardRequestHeaders"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["ForwardRequestHeaders"] = func(_ ...string) proxychain.RequestModification {
return rx.ForwardRequestHeaders() return rx.ForwardRequestHeaders()
} }
resModMap["MasqueradeAsGoogleBot"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["MasqueradeAsGoogleBot"] = func(_ ...string) proxychain.RequestModification {
return rx.MasqueradeAsGoogleBot() return rx.MasqueradeAsGoogleBot()
} }
resModMap["MasqueradeAsBingBot"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["MasqueradeAsBingBot"] = func(_ ...string) proxychain.RequestModification {
return rx.MasqueradeAsBingBot() return rx.MasqueradeAsBingBot()
} }
resModMap["MasqueradeAsWaybackMachineBot"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["MasqueradeAsWaybackMachineBot"] = func(_ ...string) proxychain.RequestModification {
return rx.MasqueradeAsWaybackMachineBot() return rx.MasqueradeAsWaybackMachineBot()
} }
resModMap["MasqueradeAsFacebookBot"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["MasqueradeAsFacebookBot"] = func(_ ...string) proxychain.RequestModification {
return rx.MasqueradeAsFacebookBot() return rx.MasqueradeAsFacebookBot()
} }
resModMap["MasqueradeAsYandexBot"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["MasqueradeAsYandexBot"] = func(_ ...string) proxychain.RequestModification {
return rx.MasqueradeAsYandexBot() return rx.MasqueradeAsYandexBot()
} }
resModMap["MasqueradeAsBaiduBot"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["MasqueradeAsBaiduBot"] = func(_ ...string) proxychain.RequestModification {
return rx.MasqueradeAsBaiduBot() return rx.MasqueradeAsBaiduBot()
} }
resModMap["MasqueradeAsDuckDuckBot"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["MasqueradeAsDuckDuckBot"] = func(_ ...string) proxychain.RequestModification {
return rx.MasqueradeAsDuckDuckBot() return rx.MasqueradeAsDuckDuckBot()
} }
resModMap["MasqueradeAsYahooBot"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["MasqueradeAsYahooBot"] = func(_ ...string) proxychain.RequestModification {
return rx.MasqueradeAsYahooBot() return rx.MasqueradeAsYahooBot()
} }
resModMap["ModifyDomainWithRegex"] = func(params, ...string) proxychain.ResponseModification { rqmModMap["ModifyDomainWithRegex"] = func(params ...string) proxychain.RequestModification {
return rx.ModifyDomainWithRegex(params[0], params[1]) return rx.ModifyDomainWithRegex(params[0], params[1])
} }
resModMap["SetOutgoingCookie"] = func(params, ...string) proxychain.ResponseModification { rqmModMap["SetOutgoingCookie"] = func(params ...string) proxychain.RequestModification {
return rx.SetOutgoingCookie(params[0], params[1]) return rx.SetOutgoingCookie(params[0], params[1])
} }
resModMap["SetOutgoingCookies"] = func(params, ...string) proxychain.ResponseModification { rqmModMap["SetOutgoingCookies"] = func(params ...string) proxychain.RequestModification {
return rx.SetOutgoingCookies(params[0]) return rx.SetOutgoingCookies(params[0])
} }
resModMap["DeleteOutgoingCookie"] = func(params, ...string) proxychain.ResponseModification { rqmModMap["DeleteOutgoingCookie"] = func(params ...string) proxychain.RequestModification {
return rx.DeleteOutgoingCookie(params[0]) return rx.DeleteOutgoingCookie(params[0])
} }
resModMap["DeleteOutgoingCookies"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["DeleteOutgoingCookies"] = func(_ ...string) proxychain.RequestModification {
return rx.DeleteOutgoingCookies() return rx.DeleteOutgoingCookies()
} }
resModMap["DeleteOutgoingCookiesExcept"] = func(params, ...string) proxychain.ResponseModification { rqmModMap["DeleteOutgoingCookiesExcept"] = func(params ...string) proxychain.RequestModification {
return rx.DeleteOutgoingCookiesExcept(params[0]) return rx.DeleteOutgoingCookiesExcept(params[0])
} }
resModMap["ModifyPathWithRegex"] = func(params, ...string) proxychain.ResponseModification { rqmModMap["ModifyPathWithRegex"] = func(params ...string) proxychain.RequestModification {
return rx.ModifyPathWithRegex(params[0], params[1]) return rx.ModifyPathWithRegex(params[0], params[1])
} }
resModMap["ModifyQueryParams"] = func(params, ...string) proxychain.ResponseModification { rqmModMap["ModifyQueryParams"] = func(params ...string) proxychain.RequestModification {
return rx.ModifyQueryParams(params[0], params[1]) return rx.ModifyQueryParams(params[0], params[1])
} }
resModMap["SetRequestHeader"] = func(params, ...string) proxychain.ResponseModification { rqmModMap["SetRequestHeader"] = func(params ...string) proxychain.RequestModification {
return rx.SetRequestHeader(params[0], params[1]) return rx.SetRequestHeader(params[0], params[1])
} }
resModMap["DeleteRequestHeader"] = func(params, ...string) proxychain.ResponseModification { rqmModMap["DeleteRequestHeader"] = func(params ...string) proxychain.RequestModification {
return rx.DeleteRequestHeader(params[0]) return rx.DeleteRequestHeader(params[0])
} }
resModMap["RequestArchiveIs"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["RequestArchiveIs"] = func(_ ...string) proxychain.RequestModification {
return rx.RequestArchiveIs() return rx.RequestArchiveIs()
} }
resModMap["RequestGoogleCache"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["RequestGoogleCache"] = func(_ ...string) proxychain.RequestModification {
return rx.RequestGoogleCache() return rx.RequestGoogleCache()
} }
resModMap["RequestWaybackMachine"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["RequestWaybackMachine"] = func(_ ...string) proxychain.RequestModification {
return rx.RequestWaybackMachine() return rx.RequestWaybackMachine()
} }
resModMap["NewCustomDialer"] = func(params, ...string) proxychain.ResponseModification { rqmModMap["ResolveWithGoogleDoH"] = func(_ ...string) proxychain.RequestModification {
return rx.NewCustomDialer(params[0])
}
resModMap["ResolveWithGoogleDoH"] = func(_ ...string) proxychain.ResponseModification {
return rx.ResolveWithGoogleDoH() return rx.ResolveWithGoogleDoH()
} }
resModMap["SpoofOrigin"] = func(params, ...string) proxychain.ResponseModification { rqmModMap["SpoofOrigin"] = func(params ...string) proxychain.RequestModification {
return rx.SpoofOrigin(params[0]) return rx.SpoofOrigin(params[0])
} }
resModMap["HideOrigin"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["HideOrigin"] = func(_ ...string) proxychain.RequestModification {
return rx.HideOrigin() return rx.HideOrigin()
} }
resModMap["SpoofReferrer"] = func(params, ...string) proxychain.ResponseModification { rqmModMap["SpoofReferrer"] = func(params ...string) proxychain.RequestModification {
return rx.SpoofReferrer(params[0]) return rx.SpoofReferrer(params[0])
} }
resModMap["HideReferrer"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["HideReferrer"] = func(_ ...string) proxychain.RequestModification {
return rx.HideReferrer() return rx.HideReferrer()
} }
resModMap["SpoofReferrerFromBaiduSearch"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["SpoofReferrerFromBaiduSearch"] = func(_ ...string) proxychain.RequestModification {
return rx.SpoofReferrerFromBaiduSearch() return rx.SpoofReferrerFromBaiduSearch()
} }
resModMap["SpoofReferrerFromBingSearch"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["SpoofReferrerFromBingSearch"] = func(_ ...string) proxychain.RequestModification {
return rx.SpoofReferrerFromBingSearch() return rx.SpoofReferrerFromBingSearch()
} }
resModMap["SpoofReferrerFromGoogleSearch"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["SpoofReferrerFromGoogleSearch"] = func(_ ...string) proxychain.RequestModification {
return rx.SpoofReferrerFromGoogleSearch() return rx.SpoofReferrerFromGoogleSearch()
} }
resModMap["SpoofReferrerFromLinkedInPost"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["SpoofReferrerFromLinkedInPost"] = func(_ ...string) proxychain.RequestModification {
return rx.SpoofReferrerFromLinkedInPost() return rx.SpoofReferrerFromLinkedInPost()
} }
resModMap["SpoofReferrerFromNaverSearch"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["SpoofReferrerFromNaverSearch"] = func(_ ...string) proxychain.RequestModification {
return rx.SpoofReferrerFromNaverSearch() return rx.SpoofReferrerFromNaverSearch()
} }
resModMap["SpoofReferrerFromPinterestPost"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["SpoofReferrerFromPinterestPost"] = func(_ ...string) proxychain.RequestModification {
return rx.SpoofReferrerFromPinterestPost() return rx.SpoofReferrerFromPinterestPost()
} }
resModMap["SpoofReferrerFromQQPost"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["SpoofReferrerFromQQPost"] = func(_ ...string) proxychain.RequestModification {
return rx.SpoofReferrerFromQQPost() return rx.SpoofReferrerFromQQPost()
} }
resModMap["SpoofReferrerFromRedditPost"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["SpoofReferrerFromRedditPost"] = func(_ ...string) proxychain.RequestModification {
return rx.SpoofReferrerFromRedditPost() return rx.SpoofReferrerFromRedditPost()
} }
resModMap["SpoofReferrerFromTumblrPost"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["SpoofReferrerFromTumblrPost"] = func(_ ...string) proxychain.RequestModification {
return rx.SpoofReferrerFromTumblrPost() return rx.SpoofReferrerFromTumblrPost()
} }
resModMap["SpoofReferrerFromTwitterPost"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["SpoofReferrerFromTwitterPost"] = func(_ ...string) proxychain.RequestModification {
return rx.SpoofReferrerFromTwitterPost() return rx.SpoofReferrerFromTwitterPost()
} }
resModMap["SpoofReferrerFromVkontaktePost"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["SpoofReferrerFromVkontaktePost"] = func(_ ...string) proxychain.RequestModification {
return rx.SpoofReferrerFromVkontaktePost() return rx.SpoofReferrerFromVkontaktePost()
} }
resModMap["SpoofReferrerFromWeiboPost"] = func(_ ...string) proxychain.ResponseModification { rqmModMap["SpoofReferrerFromWeiboPost"] = func(_ ...string) proxychain.RequestModification {
return rx.SpoofReferrerFromWeiboPost() return rx.SpoofReferrerFromWeiboPost()
} }
resModMap["SpoofUserAgent"] = func(params, ...string) proxychain.ResponseModification { rqmModMap["SpoofUserAgent"] = func(params ...string) proxychain.RequestModification {
return rx.SpoofUserAgent(params[0]) return rx.SpoofUserAgent(params[0])
} }
resModMap["SpoofXForwardedFor"] = func(params, ...string) proxychain.ResponseModification { rqmModMap["SpoofXForwardedFor"] = func(params ...string) proxychain.RequestModification {
return rx.SpoofXForwardedFor(params[0]) return rx.SpoofXForwardedFor(params[0])
} }

View File

@@ -1,184 +1,107 @@
package ruleset_v2 package ruleset_v2
// DO NOT EDIT THIS FILE. It is automatically generated by ladder/proxychain/codegen/codegen.go
// The purpose of this is serialization of rulesets from JSON or YAML into functional options suitable
// for use in proxychains.
import ( import (
"ladder/proxychain" "ladder/proxychain"
rx "ladder/proxychain/responsemodifiers" tx "ladder/proxychain/responsemodifiers"
) )
type ResponseModifierFactory func(params ...string) proxychain.ResponseModification type ResponseModifierFactory func(params ...string) proxychain.ResponseModification
var resModMap map[string]ResponseModifierFactory var rsmModMap map[string]ResponseModifierFactory
// TODO: create codegen using AST parsing of exported methods in ladder/proxychain/responsemodifiers/*.go
func init() { func init() {
resModMap = make(map[string]ResponseModifierFactory) rsmModMap = make(map[string]ResponseModifierFactory)
resModMap["ForwardRequestHeaders"] = func(_ ...string) proxychain.ResponseModification { rsmModMap["APIContent"] = func(_ ...string) proxychain.ResponseModification {
return rx.ForwardRequestHeaders() return tx.APIContent()
} }
resModMap["MasqueradeAsGoogleBot"] = func(_ ...string) proxychain.ResponseModification { rsmModMap["TestCreateAPIErrReader"] = func(params ...string) proxychain.ResponseModification {
return rx.MasqueradeAsGoogleBot() return tx.TestCreateAPIErrReader(params[0])
} }
resModMap["MasqueradeAsBingBot"] = func(_ ...string) proxychain.ResponseModification { rsmModMap["TestCreateAPIErrReader2"] = func(params ...string) proxychain.ResponseModification {
return rx.MasqueradeAsBingBot() return tx.TestCreateAPIErrReader2(params[0])
} }
resModMap["MasqueradeAsWaybackMachineBot"] = func(_ ...string) proxychain.ResponseModification { rsmModMap["BlockElementRemoval"] = func(params ...string) proxychain.ResponseModification {
return rx.MasqueradeAsWaybackMachineBot() return tx.BlockElementRemoval(params[0])
} }
resModMap["MasqueradeAsFacebookBot"] = func(_ ...string) proxychain.ResponseModification { rsmModMap["BypassCORS"] = func(_ ...string) proxychain.ResponseModification {
return rx.MasqueradeAsFacebookBot() return tx.BypassCORS()
} }
resModMap["MasqueradeAsYandexBot"] = func(_ ...string) proxychain.ResponseModification { rsmModMap["BypassContentSecurityPolicy"] = func(_ ...string) proxychain.ResponseModification {
return rx.MasqueradeAsYandexBot() return tx.BypassContentSecurityPolicy()
} }
resModMap["MasqueradeAsBaiduBot"] = func(_ ...string) proxychain.ResponseModification { rsmModMap["SetContentSecurityPolicy"] = func(params ...string) proxychain.ResponseModification {
return rx.MasqueradeAsBaiduBot() return tx.SetContentSecurityPolicy(params[0])
} }
resModMap["MasqueradeAsDuckDuckBot"] = func(_ ...string) proxychain.ResponseModification { rsmModMap["ForwardResponseHeaders"] = func(_ ...string) proxychain.ResponseModification {
return rx.MasqueradeAsDuckDuckBot() return tx.ForwardResponseHeaders()
} }
resModMap["MasqueradeAsYahooBot"] = func(_ ...string) proxychain.ResponseModification { rsmModMap["GenerateReadableOutline"] = func(_ ...string) proxychain.ResponseModification {
return rx.MasqueradeAsYahooBot() return tx.GenerateReadableOutline()
} }
resModMap["ModifyDomainWithRegex"] = func(params, ...string) proxychain.ResponseModification { rsmModMap["InjectScriptBeforeDOMContentLoaded"] = func(params ...string) proxychain.ResponseModification {
return rx.ModifyDomainWithRegex(params[0], params[1]) return tx.InjectScriptBeforeDOMContentLoaded(params[0])
} }
resModMap["SetOutgoingCookie"] = func(params, ...string) proxychain.ResponseModification { rsmModMap["InjectScriptAfterDOMContentLoaded"] = func(params ...string) proxychain.ResponseModification {
return rx.SetOutgoingCookie(params[0], params[1]) return tx.InjectScriptAfterDOMContentLoaded(params[0])
} }
resModMap["SetOutgoingCookies"] = func(params, ...string) proxychain.ResponseModification { rsmModMap["InjectScriptAfterDOMIdle"] = func(params ...string) proxychain.ResponseModification {
return rx.SetOutgoingCookies(params[0]) return tx.InjectScriptAfterDOMIdle(params[0])
} }
resModMap["DeleteOutgoingCookie"] = func(params, ...string) proxychain.ResponseModification { rsmModMap["DeleteIncomingCookies"] = func(params ...string) proxychain.ResponseModification {
return rx.DeleteOutgoingCookie(params[0]) return tx.DeleteIncomingCookies(params[0])
} }
resModMap["DeleteOutgoingCookies"] = func(_ ...string) proxychain.ResponseModification { rsmModMap["DeleteIncomingCookiesExcept"] = func(params ...string) proxychain.ResponseModification {
return rx.DeleteOutgoingCookies() return tx.DeleteIncomingCookiesExcept(params[0])
} }
resModMap["DeleteOutgoingCookiesExcept"] = func(params, ...string) proxychain.ResponseModification { rsmModMap["SetIncomingCookies"] = func(params ...string) proxychain.ResponseModification {
return rx.DeleteOutgoingCookiesExcept(params[0]) return tx.SetIncomingCookies(params[0])
} }
resModMap["ModifyPathWithRegex"] = func(params, ...string) proxychain.ResponseModification { rsmModMap["SetIncomingCookie"] = func(params ...string) proxychain.ResponseModification {
return rx.ModifyPathWithRegex(params[0], params[1]) return tx.SetIncomingCookie(params[0], params[1])
} }
resModMap["ModifyQueryParams"] = func(params, ...string) proxychain.ResponseModification { rsmModMap["SetResponseHeader"] = func(params ...string) proxychain.ResponseModification {
return rx.ModifyQueryParams(params[0], params[1]) return tx.SetResponseHeader(params[0], params[1])
} }
resModMap["SetRequestHeader"] = func(params, ...string) proxychain.ResponseModification { rsmModMap["DeleteResponseHeader"] = func(params ...string) proxychain.ResponseModification {
return rx.SetRequestHeader(params[0], params[1]) return tx.DeleteResponseHeader(params[0])
} }
resModMap["DeleteRequestHeader"] = func(params, ...string) proxychain.ResponseModification { rsmModMap["PatchDynamicResourceURLs"] = func(_ ...string) proxychain.ResponseModification {
return rx.DeleteRequestHeader(params[0]) return tx.PatchDynamicResourceURLs()
} }
resModMap["RequestArchiveIs"] = func(_ ...string) proxychain.ResponseModification { rsmModMap["PatchGoogleAnalytics"] = func(_ ...string) proxychain.ResponseModification {
return rx.RequestArchiveIs() return tx.PatchGoogleAnalytics()
} }
resModMap["RequestGoogleCache"] = func(_ ...string) proxychain.ResponseModification { rsmModMap["PatchTrackerScripts"] = func(_ ...string) proxychain.ResponseModification {
return rx.RequestGoogleCache() return tx.PatchTrackerScripts()
} }
resModMap["RequestWaybackMachine"] = func(_ ...string) proxychain.ResponseModification { rsmModMap["RewriteHTMLResourceURLs"] = func(_ ...string) proxychain.ResponseModification {
return rx.RequestWaybackMachine() return tx.RewriteHTMLResourceURLs()
}
resModMap["NewCustomDialer"] = func(params, ...string) proxychain.ResponseModification {
return rx.NewCustomDialer(params[0])
}
resModMap["ResolveWithGoogleDoH"] = func(_ ...string) proxychain.ResponseModification {
return rx.ResolveWithGoogleDoH()
}
resModMap["SpoofOrigin"] = func(params, ...string) proxychain.ResponseModification {
return rx.SpoofOrigin(params[0])
}
resModMap["HideOrigin"] = func(_ ...string) proxychain.ResponseModification {
return rx.HideOrigin()
}
resModMap["SpoofReferrer"] = func(params, ...string) proxychain.ResponseModification {
return rx.SpoofReferrer(params[0])
}
resModMap["HideReferrer"] = func(_ ...string) proxychain.ResponseModification {
return rx.HideReferrer()
}
resModMap["SpoofReferrerFromBaiduSearch"] = func(_ ...string) proxychain.ResponseModification {
return rx.SpoofReferrerFromBaiduSearch()
}
resModMap["SpoofReferrerFromBingSearch"] = func(_ ...string) proxychain.ResponseModification {
return rx.SpoofReferrerFromBingSearch()
}
resModMap["SpoofReferrerFromGoogleSearch"] = func(_ ...string) proxychain.ResponseModification {
return rx.SpoofReferrerFromGoogleSearch()
}
resModMap["SpoofReferrerFromLinkedInPost"] = func(_ ...string) proxychain.ResponseModification {
return rx.SpoofReferrerFromLinkedInPost()
}
resModMap["SpoofReferrerFromNaverSearch"] = func(_ ...string) proxychain.ResponseModification {
return rx.SpoofReferrerFromNaverSearch()
}
resModMap["SpoofReferrerFromPinterestPost"] = func(_ ...string) proxychain.ResponseModification {
return rx.SpoofReferrerFromPinterestPost()
}
resModMap["SpoofReferrerFromQQPost"] = func(_ ...string) proxychain.ResponseModification {
return rx.SpoofReferrerFromQQPost()
}
resModMap["SpoofReferrerFromRedditPost"] = func(_ ...string) proxychain.ResponseModification {
return rx.SpoofReferrerFromRedditPost()
}
resModMap["SpoofReferrerFromTumblrPost"] = func(_ ...string) proxychain.ResponseModification {
return rx.SpoofReferrerFromTumblrPost()
}
resModMap["SpoofReferrerFromTwitterPost"] = func(_ ...string) proxychain.ResponseModification {
return rx.SpoofReferrerFromTwitterPost()
}
resModMap["SpoofReferrerFromVkontaktePost"] = func(_ ...string) proxychain.ResponseModification {
return rx.SpoofReferrerFromVkontaktePost()
}
resModMap["SpoofReferrerFromWeiboPost"] = func(_ ...string) proxychain.ResponseModification {
return rx.SpoofReferrerFromWeiboPost()
}
resModMap["SpoofUserAgent"] = func(params, ...string) proxychain.ResponseModification {
return rx.SpoofUserAgent(params[0])
}
resModMap["SpoofXForwardedFor"] = func(params, ...string) proxychain.ResponseModification {
return rx.SpoofXForwardedFor(params[0])
} }
} }