From 753e594fb92e60dc2586b4053d8db8d1225d6f78 Mon Sep 17 00:00:00 2001 From: "kailong.fu" Date: Fri, 27 Oct 2023 10:25:41 +0800 Subject: [PATCH 1/3] enable websocket support --- modules/context/response.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/modules/context/response.go b/modules/context/response.go index 2f271f211b83a..57f778dcd71c1 100644 --- a/modules/context/response.go +++ b/modules/context/response.go @@ -4,9 +4,13 @@ package context import ( + "bufio" + "net" "net/http" web_types "code.gitea.io/gitea/modules/web/types" + + "github.com/pkg/errors" ) // ResponseWriter represents a response writer for HTTP @@ -30,6 +34,15 @@ type Response struct { status int befores []func(ResponseWriter) beforeExecuted bool + hijacker http.Hijacker +} + +func (r *Response) Hijack() (net.Conn, *bufio.ReadWriter, error) { + h, ok := r.hijacker.(http.Hijacker) + if !ok { + return nil, nil, errors.New("hijack not supported") + } + return h.Hijack() } // Write writes bytes to HTTP endpoint @@ -95,9 +108,11 @@ func WrapResponseWriter(resp http.ResponseWriter) *Response { if v, ok := resp.(*Response); ok { return v } + hijacker, _ := resp.(http.Hijacker) return &Response{ ResponseWriter: resp, status: 0, befores: make([]func(ResponseWriter), 0), + hijacker: hijacker, } } From 62a9e83fe2d2a8d8f8a45acc5757a7462aa300b3 Mon Sep 17 00:00:00 2001 From: "kailong.fu" Date: Fri, 27 Oct 2023 10:34:11 +0800 Subject: [PATCH 2/3] enable websocket support --- modules/context/response.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/modules/context/response.go b/modules/context/response.go index 57f778dcd71c1..84122a1cfb5d6 100644 --- a/modules/context/response.go +++ b/modules/context/response.go @@ -38,11 +38,10 @@ type Response struct { } func (r *Response) Hijack() (net.Conn, *bufio.ReadWriter, error) { - h, ok := r.hijacker.(http.Hijacker) - if !ok { - return nil, nil, errors.New("hijack not supported") + if r.hijacker == nil { + return nil, nil, errors.New("http.Hijacker not implemented by underlying http.ResponseWriter") } - return h.Hijack() + return r.hijacker.Hijack() } // Write writes bytes to HTTP endpoint From b89517c2948ad6116d8094fad276f1ab741b8ba4 Mon Sep 17 00:00:00 2001 From: dragon Date: Sat, 28 Oct 2023 19:22:54 +0800 Subject: [PATCH 3/3] remove deprecated package --- modules/context/response.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/context/response.go b/modules/context/response.go index 84122a1cfb5d6..d1b61500afd92 100644 --- a/modules/context/response.go +++ b/modules/context/response.go @@ -5,12 +5,11 @@ package context import ( "bufio" + "errors" "net" "net/http" web_types "code.gitea.io/gitea/modules/web/types" - - "github.com/pkg/errors" ) // ResponseWriter represents a response writer for HTTP