Don't overwrite existing CheckRedirect

This commit is contained in:
y a t s
2026-02-14 11:51:36 -05:00
parent 8f868a3930
commit 66e6f74a4b
5 changed files with 48 additions and 68 deletions

55
http.go
View File

@@ -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) {