@@ -6,6 +6,7 @@ import (
66 "log"
77 "net"
88 "net/http"
9+ "net/url"
910 "os"
1011 "strings"
1112 "time"
@@ -24,7 +25,7 @@ func main() {
2425 config := flagSet.String("config", "", "path to config file")
2526 showVersion := flagSet.Bool("version", false, "print version string")
2627
27− flagSet.String("http-address", "127.0.0.1:4180", "<addr>:<port> to listen on for HTTP clients")
28+ flagSet.String("http-address", "127.0.0.1:4180", "[http://]<addr>:<port> or unix://<path> to listen on for HTTP clients")
2829 flagSet.String("redirect-url", "", "the OAuth Redirect URL. ie: \"https://internalapp.yourcompany.com/oauth2/callback\"")
2930 flagSet.Var(&upstreams, "upstream", "the http url(s) of the upstream endpoint. If multiple, routing is based on path")
3031 flagSet.Bool("pass-basic-auth", true, "pass HTTP Basic Auth, X-Forwarded-User and X-Forwarded-Email information to upstream")
@@ -88,11 +89,25 @@ func main() {
8889 }
8990 }
9091
91− listener, err := net.Listen("tcp", opts.HttpAddress)
92+ u, err := url.Parse(opts.HttpAddress)
9293 if err != nil {
93− log.Fatalf("FATAL: listen (%s) failed - %s", opts.HttpAddress, err)
94+ log.Fatalf("FATAL: could not parse %#v: %v", opts.HttpAddress, err)
9495 }
95− log.Printf("listening on %s", opts.HttpAddress)
96+
97+ var networkType string
98+ switch u.Scheme {
99+ case "", "http":
100+ networkType = "tcp"
101+ default:
102+ networkType = u.Scheme
103+ }
104+ listenAddr := strings.TrimPrefix(u.String(), u.Scheme+"://")
105+
106+ listener, err := net.Listen(networkType, listenAddr)
107+ if err != nil {
108+ log.Fatalf("FATAL: listen (%s, %s) failed - %s", networkType, listenAddr, err)
109+ }
110+ log.Printf("listening on %s", listenAddr)
96111
97112 server := &http.Server{Handler: oauthproxy}
98113 err = server.Serve(listener)