redirect to original path after login (#24)
* redirect to original path after login * tests for new redirect behaviour * fixed comment * added redirect fix to changelog
This commit is contained in:
		
							parent
							
								
									440d2f32bf
								
							
						
					
					
						commit
						090ff11923
					
				|  | @ -10,6 +10,8 @@ | ||||||
| - [#21](https://github.com/pusher/oauth2_proxy/pull/21) Docker Improvement (@yaegashi) | - [#21](https://github.com/pusher/oauth2_proxy/pull/21) Docker Improvement (@yaegashi) | ||||||
|   - Move Docker base image from debian to alpine |   - Move Docker base image from debian to alpine | ||||||
|   - Install ca-certificates in docker image |   - Install ca-certificates in docker image | ||||||
|  | - [#24](https://github.com/pusher/oauth2_proxy/pull/24) Redirect fix (@agentgonzo) | ||||||
|  |   - After a successful login, you will be redirected to your original URL rather than / | ||||||
| 
 | 
 | ||||||
| # v3.0.0 | # v3.0.0 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -564,8 +564,11 @@ func (p *OAuthProxy) GetRedirect(req *http.Request) (redirect string, err error) | ||||||
| 
 | 
 | ||||||
| 	redirect = req.Form.Get("rd") | 	redirect = req.Form.Get("rd") | ||||||
| 	if redirect == "" || !strings.HasPrefix(redirect, "/") || strings.HasPrefix(redirect, "//") { | 	if redirect == "" || !strings.HasPrefix(redirect, "/") || strings.HasPrefix(redirect, "//") { | ||||||
|  | 		redirect = req.URL.Path | ||||||
|  | 		if strings.HasPrefix(redirect, p.ProxyPrefix) { | ||||||
| 			redirect = "/" | 			redirect = "/" | ||||||
| 		} | 		} | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -18,6 +18,7 @@ import ( | ||||||
| 	"github.com/mbland/hmacauth" | 	"github.com/mbland/hmacauth" | ||||||
| 	"github.com/pusher/oauth2_proxy/providers" | 	"github.com/pusher/oauth2_proxy/providers" | ||||||
| 	"github.com/stretchr/testify/assert" | 	"github.com/stretchr/testify/assert" | ||||||
|  | 	"github.com/stretchr/testify/require" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func init() { | func init() { | ||||||
|  | @ -837,3 +838,36 @@ func TestRequestSignaturePostRequest(t *testing.T) { | ||||||
| 	assert.Equal(t, 200, st.rw.Code) | 	assert.Equal(t, 200, st.rw.Code) | ||||||
| 	assert.Equal(t, st.rw.Body.String(), "signatures match") | 	assert.Equal(t, st.rw.Body.String(), "signatures match") | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func TestGetRedirect(t *testing.T) { | ||||||
|  | 	options := NewOptions() | ||||||
|  | 	_ = options.Validate() | ||||||
|  | 	require.NotEmpty(t, options.ProxyPrefix) | ||||||
|  | 	proxy := NewOAuthProxy(options, func(s string) bool { return false }) | ||||||
|  | 
 | ||||||
|  | 	tests := []struct { | ||||||
|  | 		name             string | ||||||
|  | 		url              string | ||||||
|  | 		expectedRedirect string | ||||||
|  | 	}{ | ||||||
|  | 		{ | ||||||
|  | 			name:             "request outside of ProxyPrefix redirects to original URL", | ||||||
|  | 			url:              "/foo/bar", | ||||||
|  | 			expectedRedirect: "/foo/bar", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name:             "request under ProxyPrefix redirects to root", | ||||||
|  | 			url:              proxy.ProxyPrefix + "/foo/bar", | ||||||
|  | 			expectedRedirect: "/", | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 	for _, tt := range tests { | ||||||
|  | 		t.Run(tt.name, func(t *testing.T) { | ||||||
|  | 			req, _ := http.NewRequest("GET", tt.url, nil) | ||||||
|  | 			redirect, err := proxy.GetRedirect(req) | ||||||
|  | 
 | ||||||
|  | 			assert.NoError(t, err) | ||||||
|  | 			assert.Equal(t, tt.expectedRedirect, redirect) | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue