@@ -157,20 +157,21 @@ func TestLogoutFlows(t *testing.T) {
157
157
return & wg
158
158
}
159
159
160
- setupCheckAndAcceptLogoutHandler := func (t * testing.T , wg * sync.WaitGroup , cb func (* testing.T , * hydra.OAuth2LogoutRequest , error )) {
160
+ setupCheckAndAcceptLogoutHandler := func (t * testing.T , wg * sync.WaitGroup , cb func (_ * testing.T , challenge string , _ * hydra.OAuth2LogoutRequest , _ error )) {
161
161
server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
162
162
if wg != nil {
163
163
defer wg .Done ()
164
164
}
165
165
166
- res , _ , err := adminApi .OAuth2API .GetOAuth2LogoutRequest (ctx ).LogoutChallenge (r .URL .Query ().Get ("logout_challenge" )).Execute ()
166
+ challenge := r .URL .Query ().Get ("logout_challenge" )
167
+ res , _ , err := adminApi .OAuth2API .GetOAuth2LogoutRequest (ctx ).LogoutChallenge (challenge ).Execute ()
167
168
if cb != nil {
168
- cb (t , res , err )
169
+ cb (t , challenge , res , err )
169
170
} else {
170
171
require .NoError (t , err )
171
172
}
172
173
173
- v , _ , err := adminApi .OAuth2API .AcceptOAuth2LogoutRequest (ctx ).LogoutChallenge (r . URL . Query (). Get ( "logout_challenge" ) ).Execute ()
174
+ v , _ , err := adminApi .OAuth2API .AcceptOAuth2LogoutRequest (ctx ).LogoutChallenge (challenge ).Execute ()
174
175
require .NoError (t , err )
175
176
require .NotEmpty (t , v .RedirectTo )
176
177
http .Redirect (w , r , v .RedirectTo , http .StatusFound )
@@ -244,7 +245,7 @@ func TestLogoutFlows(t *testing.T) {
244
245
acceptLoginAs (t , subject )
245
246
246
247
wg := newWg (2 )
247
- setupCheckAndAcceptLogoutHandler (t , wg , func (t * testing.T , res * hydra.OAuth2LogoutRequest , err error ) {
248
+ setupCheckAndAcceptLogoutHandler (t , wg , func (t * testing.T , challenge string , res * hydra.OAuth2LogoutRequest , err error ) {
248
249
require .NoError (t , err )
249
250
assert .EqualValues (t , subject , * res .Subject )
250
251
assert .NotEmpty (t , subject , res .Sid )
@@ -277,20 +278,19 @@ func TestLogoutFlows(t *testing.T) {
277
278
acceptLoginAs (t , subject )
278
279
browser := createBrowserWithSession (t , createSampleClient (t ))
279
280
280
- var logoutReq * hydra. OAuth2LogoutRequest
281
- setupCheckAndAcceptLogoutHandler (t , nil , func (t * testing.T , req * hydra.OAuth2LogoutRequest , err error ) {
281
+ var logoutChallenge string
282
+ setupCheckAndAcceptLogoutHandler (t , nil , func (t * testing.T , challenge string , _ * hydra.OAuth2LogoutRequest , err error ) {
282
283
require .NoError (t , err )
283
- logoutReq = req
284
+ logoutChallenge = challenge
284
285
})
285
286
286
287
// run once to log out
287
288
logoutAndExpectPostLogoutPage (t , browser , http .MethodGet , url.Values {}, defaultRedirectedMessage )
288
289
289
- // run again to ensure that the logout challenge is invalid
290
- _ , _ , err := adminApi .OAuth2API .GetOAuth2LogoutRequest (ctx ).LogoutChallenge (logoutReq .GetChallenge ()).Execute ()
291
- assert .Error (t , err )
290
+ require .NotZero (t , logoutChallenge )
292
291
293
- v , _ , err := adminApi .OAuth2API .AcceptOAuth2LogoutRequest (ctx ).LogoutChallenge (logoutReq .GetChallenge ()).Execute ()
292
+ // double-submit: still works
293
+ v , _ , err := adminApi .OAuth2API .AcceptOAuth2LogoutRequest (ctx ).LogoutChallenge (logoutChallenge ).Execute ()
294
294
require .NoError (t , err )
295
295
require .NotEmpty (t , v .RedirectTo )
296
296
@@ -485,7 +485,7 @@ func TestLogoutFlows(t *testing.T) {
485
485
c := createSampleClient (t )
486
486
acceptLoginAs (t , subject )
487
487
488
- setupCheckAndAcceptLogoutHandler (t , nil , func (t * testing.T , res * hydra.OAuth2LogoutRequest , err error ) {
488
+ setupCheckAndAcceptLogoutHandler (t , nil , func (t * testing.T , _ string , _ * hydra.OAuth2LogoutRequest , _ error ) {
489
489
t .Fatalf ("Logout should not have been called" )
490
490
})
491
491
browser := createBrowserWithSession (t , c )
0 commit comments