Improve websocket support

This commit is contained in:
gyson 2019-03-22 17:19:38 -04:00
parent ca89bb833d
commit 978c0a33e4
3 changed files with 16 additions and 1 deletions

View File

@ -4,6 +4,8 @@
package main package main
import ( import (
"bufio"
"errors"
"fmt" "fmt"
"io" "io"
"net" "net"
@ -32,6 +34,14 @@ func (l *responseLogger) Header() http.Header {
return l.w.Header() return l.w.Header()
} }
// Support Websocket
func (l *responseLogger) Hijack() (rwc net.Conn, buf *bufio.ReadWriter, err error) {
if hj, ok := l.w.(http.Hijacker); ok {
return hj.Hijack()
}
return nil, nil, errors.New("http.Hijacker is not available on writer")
}
// ExtractGAPMetadata extracts and removes GAP headers from the ResponseWriter's // ExtractGAPMetadata extracts and removes GAP headers from the ResponseWriter's
// Header // Header
func (l *responseLogger) ExtractGAPMetadata() { func (l *responseLogger) ExtractGAPMetadata() {

View File

@ -24,6 +24,11 @@ func TestLoggingHandler_ServeHTTP(t *testing.T) {
for _, test := range tests { for _, test := range tests {
buf := bytes.NewBuffer(nil) buf := bytes.NewBuffer(nil)
handler := func(w http.ResponseWriter, req *http.Request) { handler := func(w http.ResponseWriter, req *http.Request) {
_, ok := w.(http.Hijacker)
if !ok {
t.Error("http.Hijacker is not available")
}
w.Write([]byte("test")) w.Write([]byte("test"))
} }

View File

@ -110,7 +110,7 @@ func (u *UpstreamProxy) ServeHTTP(w http.ResponseWriter, r *http.Request) {
r.Header.Set("GAP-Auth", w.Header().Get("GAP-Auth")) r.Header.Set("GAP-Auth", w.Header().Get("GAP-Auth"))
u.auth.SignRequest(r) u.auth.SignRequest(r)
} }
if u.wsHandler != nil && r.Header.Get("Connection") == "Upgrade" && r.Header.Get("Upgrade") == "websocket" { if u.wsHandler != nil && strings.ToLower(r.Header.Get("Connection")) == "upgrade" && r.Header.Get("Upgrade") == "websocket" {
u.wsHandler.ServeHTTP(w, r) u.wsHandler.ServeHTTP(w, r)
} else { } else {
u.handler.ServeHTTP(w, r) u.handler.ServeHTTP(w, r)