mirror of
https://gitgud.io/yats/cerberus.git
synced 2026-05-02 02:32:18 -04:00
Don't overwrite existing CheckRedirect
This commit is contained in:
55
http.go
55
http.go
@@ -34,14 +34,16 @@ func NewChallenge(ctx context.Context, hc http.Client, host string) (Challenge,
|
||||
return Challenge{}, err
|
||||
}
|
||||
|
||||
// Update host url in case we get redirected across domains.
|
||||
hc.CheckRedirect = func(req *http.Request, via []*http.Request) error {
|
||||
rh := req.URL.Host
|
||||
if rh != u.Host && strings.HasPrefix(rh, "kiwifarms") {
|
||||
u.Host = rh
|
||||
}
|
||||
if hc.CheckRedirect == nil {
|
||||
// Update host url in case we get redirected across domains.
|
||||
hc.CheckRedirect = func(req *http.Request, via []*http.Request) error {
|
||||
rh := req.URL.Host
|
||||
if rh != u.Host && strings.HasPrefix(rh, "kiwifarms") {
|
||||
u.Host = rh
|
||||
}
|
||||
|
||||
return nil
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
req, err := http.NewRequestWithContext(ctx, "GET", u.String(), nil)
|
||||
@@ -95,31 +97,7 @@ func Submit(ctx context.Context, hc http.Client, s Solution, redirect string) (*
|
||||
s.Redirect = redirect
|
||||
}
|
||||
|
||||
resp, err := postSolution(ctx, hc, s)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// This feels gross, but it works.
|
||||
for s.Steps > 0 {
|
||||
resp.Body.Close()
|
||||
|
||||
c, err := NewChallenge(ctx, hc, s.host.String())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
s, err = Solve(ctx, c)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
resp, err = Submit(ctx, hc, s, redirect)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
return postSolution(ctx, hc, s)
|
||||
}
|
||||
|
||||
func parseHost(addr string) (*url.URL, error) {
|
||||
@@ -144,18 +122,7 @@ func postSolution(ctx context.Context, hc http.Client, s Solution) (*http.Respon
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := hc.Do(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// TODO: Additionally verify failure from response JSON. Maybe include resp body in err type.
|
||||
// Rejected solution response: status=400 body={"success":false,"reason":"invalid_solution","action":"retry"}
|
||||
if resp.StatusCode == 400 {
|
||||
return resp, &ErrInvalidSolution{s}
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
return hc.Do(req)
|
||||
}
|
||||
|
||||
func parseTags(r io.Reader) (Challenge, error) {
|
||||
|
||||
Reference in New Issue
Block a user