git.iko.soy/typeable/oauth2-proxy
on master help sign in
Merge branch 'master' into gcphealthcheck
189bda3Tim Spencer
CHANGELOG.md+1
@@ -3,6 +3,7 @@
3## Changes since v3.1.0
3## Changes since v3.1.0
4
4
5- [#110](https://github.com/pusher/oauth2_proxy/pull/110) Added GCP healthcheck option (@timothy-spencer)
5- [#110](https://github.com/pusher/oauth2_proxy/pull/110) Added GCP healthcheck option (@timothy-spencer)
6+- [#112](https://github.com/pusher/oauth2_proxy/pull/112) Improve websocket support (@gyson)
6- [#63](https://github.com/pusher/oauth2_proxy/pull/63) Use encoding/json for SessionState serialization (@yaegashi)
7- [#63](https://github.com/pusher/oauth2_proxy/pull/63) Use encoding/json for SessionState serialization (@yaegashi)
7 - Use JSON to encode session state to be stored in browser cookies
8 - Use JSON to encode session state to be stored in browser cookies
8 - Implement legacy decode function to support existing cookies generated by older versions
9 - Implement legacy decode function to support existing cookies generated by older versions
logging_handler.go+10
@@ -4,6 +4,8 @@
4package main
4package main
5
5
6import (
6import (
7+ "bufio"
8+ "errors"
7 "fmt"
9 "fmt"
8 "io"
10 "io"
9 "net"
11 "net"
@@ -32,6 +34,14 @@ func (l *responseLogger) Header() http.Header {
32 return l.w.Header()
34 return l.w.Header()
33}
35}
34
36
37+// Support Websocket
38+func (l *responseLogger) Hijack() (rwc net.Conn, buf *bufio.ReadWriter, err error) {
39+ if hj, ok := l.w.(http.Hijacker); ok {
40+ return hj.Hijack()
41+ }
42+ return nil, nil, errors.New("http.Hijacker is not available on writer")
43+}
44+
35// ExtractGAPMetadata extracts and removes GAP headers from the ResponseWriter's
45// ExtractGAPMetadata extracts and removes GAP headers from the ResponseWriter's
36// Header
46// Header
37func (l *responseLogger) ExtractGAPMetadata() {
47func (l *responseLogger) ExtractGAPMetadata() {
logging_handler_test.go+5
@@ -24,6 +24,11 @@ func TestLoggingHandler_ServeHTTP(t *testing.T) {
24 for _, test := range tests {
24 for _, test := range tests {
25 buf := bytes.NewBuffer(nil)
25 buf := bytes.NewBuffer(nil)
26 handler := func(w http.ResponseWriter, req *http.Request) {
26 handler := func(w http.ResponseWriter, req *http.Request) {
27+ _, ok := w.(http.Hijacker)
28+ if !ok {
29+ t.Error("http.Hijacker is not available")
30+ }
31+
27 w.Write([]byte("test"))
32 w.Write([]byte("test"))
28 }
33 }
29
34
oauthproxy.go+1−1
@@ -110,7 +110,7 @@ func (u *UpstreamProxy) ServeHTTP(w http.ResponseWriter, r *http.Request) {
110 r.Header.Set("GAP-Auth", w.Header().Get("GAP-Auth"))
110 r.Header.Set("GAP-Auth", w.Header().Get("GAP-Auth"))
111 u.auth.SignRequest(r)
111 u.auth.SignRequest(r)
112 }
112 }
113− if u.wsHandler != nil && r.Header.Get("Connection") == "Upgrade" && r.Header.Get("Upgrade") == "websocket" {
113+ if u.wsHandler != nil && strings.ToLower(r.Header.Get("Connection")) == "upgrade" && r.Header.Get("Upgrade") == "websocket" {
114 u.wsHandler.ServeHTTP(w, r)
114 u.wsHandler.ServeHTTP(w, r)
115 } else {
115 } else {
116 u.handler.ServeHTTP(w, r)
116 u.handler.ServeHTTP(w, r)