Skip to content

Commit 42948f2

Browse files
committed
fix(proxy): invalid Read on closed Body again
1 parent 72e8380 commit 42948f2

File tree

3 files changed

+22
-47
lines changed

3 files changed

+22
-47
lines changed

common/response.go

Lines changed: 0 additions & 30 deletions
This file was deleted.

handler/main.go

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ package handler
22

33
import (
44
"context"
5+
"fmt"
56
"net/http"
6-
7-
"github.com/RoyXiang/plexproxy/common"
7+
"net/http/httptest"
88
)
99

1010
func getRequestParam(r *http.Request, key string, delete bool) string {
@@ -24,24 +24,29 @@ func getRequestParam(r *http.Request, key string, delete bool) string {
2424
return result
2525
}
2626

27-
func (w *fakeCloseReadCloser) Close() error {
27+
func newMockHTTPRespWriter() *mockHTTPRespWriter {
28+
return &mockHTTPRespWriter{
29+
httptest.NewRecorder(),
30+
}
31+
}
32+
33+
func (w *mockHTTPRespWriter) WriteResponse() error {
2834
return nil
2935
}
3036

31-
func (w *fakeCloseReadCloser) RealClose() error {
32-
if w.ReadCloser == nil {
33-
return nil
37+
func (w *mockHTTPRespWriter) WriteRespHeaders(status int, header http.Header) error {
38+
w.WriteHeader(status)
39+
for header, val := range header {
40+
w.Header()[header] = val
3441
}
35-
return w.ReadCloser.Close()
42+
return nil
43+
}
44+
45+
func (w *mockHTTPRespWriter) Read(_ []byte) (int, error) {
46+
return 0, fmt.Errorf("mockHTTPRespWriter doesn't implement io.Reader")
3647
}
3748

3849
func Handler(w http.ResponseWriter, r *http.Request) {
39-
if r.Body != nil {
40-
r.Body = &fakeCloseReadCloser{r.Body}
41-
defer func() {
42-
_ = r.Body.(*fakeCloseReadCloser).RealClose()
43-
}()
44-
}
4550
proxy.ServeHTTP(w, r)
4651
}
4752

@@ -54,7 +59,7 @@ func TimelineHandler(w http.ResponseWriter, r *http.Request) {
5459
request := r.Clone(context.Background())
5560
go func() {
5661
getRequestParam(request, headerToken, true)
57-
plaxtProxy.ServeHTTP(common.NewCustomResponseWriter(), request)
62+
plaxtProxy.ServeHTTP(newMockHTTPRespWriter(), request)
5863
}()
5964
}
6065

handler/structs.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package handler
22

33
import (
4-
"io"
4+
"net/http/httptest"
55
)
66

77
type ctxKeyType struct{}
88

9-
type fakeCloseReadCloser struct {
10-
io.ReadCloser
9+
type mockHTTPRespWriter struct {
10+
*httptest.ResponseRecorder
1111
}

0 commit comments

Comments
 (0)