git.iko.soy/typeable/oauth2-proxy
on master help sign in
Adds failing test for using upstream Host header.
commit20a152261c6712c1ac7e2de8fbc24231be635b92 authorJohn Boxall <john@mobify.com> dateSun 30 Nov 2014, 17:12 (12 years ago) parentade9502
2 files changed+41−1
oauthproxy.go+5−1 oauthproxy_test.go+36
oauthproxy.go+5−1
@@ -46,6 +46,10 @@ type OauthProxy struct {
4646 compiledRegex []*regexp.Regexp
4747}
4848
49+func NewReverseProxy(target *url.URL) (proxy *httputil.ReverseProxy) {
50+ return httputil.NewSingleHostReverseProxy(target)
51+}
52+
4953func NewOauthProxy(opts *Options, validator func(string) bool) *OauthProxy {
5054 login, _ := url.Parse("https://accounts.google.com/o/oauth2/auth")
5155 redeem, _ := url.Parse("https://accounts.google.com/o/oauth2/token")
@@ -54,7 +58,7 @@ func NewOauthProxy(opts *Options, validator func(string) bool) *OauthProxy {
5458 path := u.Path
5559 u.Path = ""
5660 log.Printf("mapping path %q => upstream %q", path, u)
57− serveMux.Handle(path, httputil.NewSingleHostReverseProxy(u))
61+ serveMux.Handle(path, NewReverseProxy(u))
5862 }
5963 for _, u := range opts.CompiledRegex {
6064 log.Printf("compiled skip-auth-regex => %q", u)
oauthproxy_test.gonew file+36
@@ -0,0 +1,36 @@
1+package main
2+
3+import (
4+ "io/ioutil"
5+ "net"
6+ "net/http"
7+ "net/http/httptest"
8+ "net/url"
9+ "testing"
10+)
11+
12+func TestNewReverseProxy(t *testing.T) {
13+ backend := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
14+ w.WriteHeader(200)
15+ hostname, _, _ := net.SplitHostPort(r.Host)
16+ w.Write([]byte(hostname))
17+ }))
18+ defer backend.Close()
19+
20+ backendURL, _ := url.Parse(backend.URL)
21+ backendHostname := "upstream.127.0.0.1.xip.io"
22+ _, backendPort, _ := net.SplitHostPort(backendURL.Host)
23+ backendHost := net.JoinHostPort(backendHostname, backendPort)
24+ proxyURL, _ := url.Parse(backendURL.Scheme + "://" + backendHost + "/")
25+
26+ proxyHandler := NewReverseProxy(proxyURL)
27+ frontend := httptest.NewServer(proxyHandler)
28+ defer frontend.Close()
29+
30+ getReq, _ := http.NewRequest("GET", frontend.URL, nil)
31+ res, _ := http.DefaultClient.Do(getReq)
32+ bodyBytes, _ := ioutil.ReadAll(res.Body)
33+ if g, e := string(bodyBytes), backendHostname; g != e {
34+ t.Errorf("got body %q; expected %q", g, e)
35+ }
36+}