* fixes deletion of splitted cookies * three minor adjustments to improve the tests * changed cookie name matching to regex * Update oauthproxy.go Co-Authored-By: einfachchr <einfachchr@gmail.com> * removed unused variable * Changelog
This commit is contained in:
		
							parent
							
								
									cfd1fd83bd
								
							
						
					
					
						commit
						f715c9371b
					
				|  | @ -2,6 +2,7 @@ | ||||||
| 
 | 
 | ||||||
| ## Changes since v3.1.0 | ## Changes since v3.1.0 | ||||||
| 
 | 
 | ||||||
|  | - [#70](https://github.com/pusher/oauth2_proxy/pull/70) Fix handling of splitted cookies (@einfachchr) | ||||||
| - [#92](https://github.com/pusher/oauth2_proxy/pull/92) Merge websocket proxy feature from openshift/oauth-proxy (@butzist) | - [#92](https://github.com/pusher/oauth2_proxy/pull/92) Merge websocket proxy feature from openshift/oauth-proxy (@butzist) | ||||||
| - [#57](https://github.com/pusher/oauth2_proxy/pull/57) Fall back to using OIDC Subject instead of Email (@aigarius) | - [#57](https://github.com/pusher/oauth2_proxy/pull/57) Fall back to using OIDC Subject instead of Email (@aigarius) | ||||||
| - [#85](https://github.com/pusher/oauth2_proxy/pull/85) Use non-root user in docker images (@kskewes) | - [#85](https://github.com/pusher/oauth2_proxy/pull/85) Use non-root user in docker images (@kskewes) | ||||||
|  |  | ||||||
|  | @ -452,9 +452,18 @@ func (p *OAuthProxy) SetCSRFCookie(rw http.ResponseWriter, req *http.Request, va | ||||||
| // ClearSessionCookie creates a cookie to unset the user's authentication cookie
 | // ClearSessionCookie creates a cookie to unset the user's authentication cookie
 | ||||||
| // stored in the user's session
 | // stored in the user's session
 | ||||||
| func (p *OAuthProxy) ClearSessionCookie(rw http.ResponseWriter, req *http.Request) { | func (p *OAuthProxy) ClearSessionCookie(rw http.ResponseWriter, req *http.Request) { | ||||||
| 	cookies := p.MakeSessionCookie(req, "", time.Hour*-1, time.Now()) | 	var cookies []*http.Cookie | ||||||
| 	for _, clr := range cookies { | 
 | ||||||
| 		http.SetCookie(rw, clr) | 	// matches CookieName, CookieName_<number>
 | ||||||
|  | 	var cookieNameRegex = regexp.MustCompile(fmt.Sprintf("^%s(_\\d+)?$", p.CookieName)) | ||||||
|  | 
 | ||||||
|  | 	for _, c := range req.Cookies() { | ||||||
|  | 		if cookieNameRegex.MatchString(c.Name) { | ||||||
|  | 			clearCookie := p.makeCookie(req, c.Name, "", time.Hour*-1, time.Now()) | ||||||
|  | 
 | ||||||
|  | 			http.SetCookie(rw, clearCookie) | ||||||
|  | 			cookies = append(cookies, clearCookie) | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// ugly hack because default domain changed
 | 	// ugly hack because default domain changed
 | ||||||
|  |  | ||||||
|  | @ -1064,3 +1064,47 @@ func TestAjaxForbiddendRequest(t *testing.T) { | ||||||
| 	mime := rh.Get("Content-Type") | 	mime := rh.Get("Content-Type") | ||||||
| 	assert.NotEqual(t, applicationJSON, mime) | 	assert.NotEqual(t, applicationJSON, mime) | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func TestClearSplitCookie(t *testing.T) { | ||||||
|  | 	p := OAuthProxy{CookieName: "oauth2", CookieDomain: "abc"} | ||||||
|  | 	var rw = httptest.NewRecorder() | ||||||
|  | 	req := httptest.NewRequest("get", "/", nil) | ||||||
|  | 
 | ||||||
|  | 	req.AddCookie(&http.Cookie{ | ||||||
|  | 		Name:  "test1", | ||||||
|  | 		Value: "test1", | ||||||
|  | 	}) | ||||||
|  | 	req.AddCookie(&http.Cookie{ | ||||||
|  | 		Name:  "oauth2_0", | ||||||
|  | 		Value: "oauth2_0", | ||||||
|  | 	}) | ||||||
|  | 	req.AddCookie(&http.Cookie{ | ||||||
|  | 		Name:  "oauth2_1", | ||||||
|  | 		Value: "oauth2_1", | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	p.ClearSessionCookie(rw, req) | ||||||
|  | 	header := rw.Header() | ||||||
|  | 
 | ||||||
|  | 	assert.Equal(t, 2, len(header["Set-Cookie"]), "should have 3 set-cookie header entries") | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func TestClearSingleCookie(t *testing.T) { | ||||||
|  | 	p := OAuthProxy{CookieName: "oauth2", CookieDomain: "abc"} | ||||||
|  | 	var rw = httptest.NewRecorder() | ||||||
|  | 	req := httptest.NewRequest("get", "/", nil) | ||||||
|  | 
 | ||||||
|  | 	req.AddCookie(&http.Cookie{ | ||||||
|  | 		Name:  "test1", | ||||||
|  | 		Value: "test1", | ||||||
|  | 	}) | ||||||
|  | 	req.AddCookie(&http.Cookie{ | ||||||
|  | 		Name:  "oauth2", | ||||||
|  | 		Value: "oauth2", | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	p.ClearSessionCookie(rw, req) | ||||||
|  | 	header := rw.Header() | ||||||
|  | 
 | ||||||
|  | 	assert.Equal(t, 1, len(header["Set-Cookie"]), "should have 1 set-cookie header entries") | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue