@@ -47,6 +47,7 @@ type OAuthProxy struct {
47 RobotsPath string
47 RobotsPath string
48 PingPath string
48 PingPath string
49 SignInPath string
49 SignInPath string
50 OAuthStartPath string
51 OAuthStartPath string
51 OAuthCallbackPath string
52 OAuthCallbackPath string
52 AuthOnlyPath string
53 AuthOnlyPath string
@@ -183,6 +184,7 @@ func NewOAuthProxy(opts *Options, validator func(string) bool) *OAuthProxy {
183 RobotsPath: "/robots.txt",
184 RobotsPath: "/robots.txt",
184 PingPath: "/ping",
185 PingPath: "/ping",
185 SignInPath: fmt.Sprintf("%s/sign_in", opts.ProxyPrefix),
186 SignInPath: fmt.Sprintf("%s/sign_in", opts.ProxyPrefix),
187+ SignOutPath: fmt.Sprintf("%s/sign_out", opts.ProxyPrefix),
186 OAuthStartPath: fmt.Sprintf("%s/start", opts.ProxyPrefix),
188 OAuthStartPath: fmt.Sprintf("%s/start", opts.ProxyPrefix),
187 OAuthCallbackPath: fmt.Sprintf("%s/callback", opts.ProxyPrefix),
189 OAuthCallbackPath: fmt.Sprintf("%s/callback", opts.ProxyPrefix),
188 AuthOnlyPath: fmt.Sprintf("%s/auth", opts.ProxyPrefix),
190 AuthOnlyPath: fmt.Sprintf("%s/auth", opts.ProxyPrefix),
@@ -420,6 +422,8 @@ func (p *OAuthProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
420 p.serveMux.ServeHTTP(rw, req)
422 p.serveMux.ServeHTTP(rw, req)
421 case path == p.SignInPath:
423 case path == p.SignInPath:
422 p.SignIn(rw, req)
424 p.SignIn(rw, req)
425+ case path == p.SignOutPath:
423 case path == p.OAuthStartPath:
427 case path == p.OAuthStartPath:
424 p.OAuthStart(rw, req)
428 p.OAuthStart(rw, req)
425 case path == p.OAuthCallbackPath:
429 case path == p.OAuthCallbackPath:
@@ -448,6 +452,11 @@ func (p *OAuthProxy) SignIn(rw http.ResponseWriter, req *http.Request) {
455+func (p *OAuthProxy) SignOut(rw http.ResponseWriter, req *http.Request) {
456+ p.ClearCookie(rw, req)
457+ http.Redirect(rw, req, "/", 302)
451func (p *OAuthProxy) OAuthStart(rw http.ResponseWriter, req *http.Request) {
460func (p *OAuthProxy) OAuthStart(rw http.ResponseWriter, req *http.Request) {
452 redirect, err := p.GetRedirect(req)
461 redirect, err := p.GetRedirect(req)
453 if err != nil {
462 if err != nil {