2021-02-21 16:31:34 +05:30
|
|
|
package engine
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
|
|
"github.com/go-rod/rod"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// routingRuleHandler handles proxy rule for actions related to request/response modification
|
|
|
|
|
func (p *Page) routingRuleHandler(ctx *rod.Hijack) {
|
2021-11-25 18:54:16 +02:00
|
|
|
// usually browsers don't use chunked transfer encoding, so we set the content-length nevertheless
|
2021-10-20 13:26:47 +02:00
|
|
|
ctx.Request.Req().ContentLength = int64(len(ctx.Request.Body()))
|
|
|
|
|
|
2021-02-21 16:31:34 +05:30
|
|
|
for _, rule := range p.rules {
|
|
|
|
|
if rule.Part != "request" {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-26 11:38:09 +02:00
|
|
|
switch rule.Action {
|
|
|
|
|
case ActionSetMethod:
|
2021-02-21 16:31:34 +05:30
|
|
|
ctx.Request.Req().Method = rule.Args["method"]
|
2021-11-26 11:38:09 +02:00
|
|
|
case ActionAddHeader:
|
2021-02-21 16:31:34 +05:30
|
|
|
ctx.Request.Req().Header.Add(rule.Args["key"], rule.Args["value"])
|
2021-11-26 11:38:09 +02:00
|
|
|
case ActionSetHeader:
|
2021-02-21 16:31:34 +05:30
|
|
|
ctx.Request.Req().Header.Set(rule.Args["key"], rule.Args["value"])
|
2021-11-26 11:38:09 +02:00
|
|
|
case ActionDeleteHeader:
|
2021-02-21 16:31:34 +05:30
|
|
|
ctx.Request.Req().Header.Del(rule.Args["key"])
|
2021-11-26 11:38:09 +02:00
|
|
|
case ActionSetBody:
|
2021-02-21 16:31:34 +05:30
|
|
|
body := rule.Args["body"]
|
|
|
|
|
ctx.Request.Req().ContentLength = int64(len(body))
|
|
|
|
|
ctx.Request.SetBody(body)
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-02-26 13:13:11 +05:30
|
|
|
_ = ctx.LoadResponse(p.instance.browser.httpclient, true)
|
2021-02-21 16:31:34 +05:30
|
|
|
|
|
|
|
|
for _, rule := range p.rules {
|
|
|
|
|
if rule.Part != "response" {
|
|
|
|
|
continue
|
|
|
|
|
}
|
2021-11-25 17:57:22 +02:00
|
|
|
|
2021-11-26 11:38:09 +02:00
|
|
|
switch rule.Action {
|
|
|
|
|
case ActionAddHeader:
|
2021-02-21 16:31:34 +05:30
|
|
|
ctx.Response.Headers().Add(rule.Args["key"], rule.Args["value"])
|
2021-11-26 11:38:09 +02:00
|
|
|
case ActionSetHeader:
|
2021-02-21 16:31:34 +05:30
|
|
|
ctx.Response.Headers().Set(rule.Args["key"], rule.Args["value"])
|
2021-11-26 11:38:09 +02:00
|
|
|
case ActionDeleteHeader:
|
2021-02-21 16:31:34 +05:30
|
|
|
ctx.Response.Headers().Del(rule.Args["key"])
|
2021-11-26 11:38:09 +02:00
|
|
|
case ActionSetBody:
|
2021-02-21 16:31:34 +05:30
|
|
|
body := rule.Args["body"]
|
|
|
|
|
ctx.Response.Headers().Set("Content-Length", fmt.Sprintf("%d", len(body)))
|
|
|
|
|
ctx.Response.SetBody(rule.Args["body"])
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|