@@ -348,13 +348,12 @@ func NewProcessCookieTest(opts ProcessCookieTestOpts) *ProcessCookieTest {
348348
349349 pc_test .opts = NewOptions ()
350350 pc_test .opts .Upstreams = append (pc_test .opts .Upstreams , "unused" )
351- pc_test .opts .CookieSecret = "foobar"
352351 pc_test .opts .ClientID = "bazquux"
353352 pc_test .opts .ClientSecret = "xyzzyplugh"
354353 pc_test .opts .CookieSecret = "0123456789abcdef"
355354 // First, set the CookieRefresh option so proxy.AesCipher is created,
356355 // needed to encrypt the access_token.
357- pc_test .opts .CookieRefresh = time .Duration ( 24 ) * time . Hour
356+ pc_test .opts .CookieRefresh = time .Hour
358357 pc_test .opts .Validate ()
359358
360359 pc_test .proxy = NewOauthProxy (pc_test .opts , func (email string ) bool {
@@ -379,14 +378,13 @@ func NewProcessCookieTestWithDefaults() *ProcessCookieTest {
379378 })
380379}
381380
382- func (p * ProcessCookieTest ) MakeCookie (value , access_token string ) * http.Cookie {
383- cookie_value , _ := buildCookieValue (
384- value , p .proxy .AesCipher , access_token )
385- return p .proxy .MakeCookie (p .req , cookie_value , p .opts .CookieExpire )
381+ func (p * ProcessCookieTest ) MakeCookie (value , access_token string , ref time.Time ) * http.Cookie {
382+ cookie_value , _ := buildCookieValue (value , p .proxy .AesCipher , access_token )
383+ return p .proxy .MakeCookie (p .req , cookie_value , p .opts .CookieExpire , ref )
386384}
387385
388386func (p * ProcessCookieTest ) AddCookie (value , access_token string ) {
389- p .req .AddCookie (p .MakeCookie (value , access_token ))
387+ p .req .AddCookie (p .MakeCookie (value , access_token , time . Now () ))
390388}
391389
392390func (p * ProcessCookieTest ) ProcessCookie () (email , user , access_token string , ok bool ) {
@@ -416,15 +414,16 @@ func TestProcessCookieFailIfParsingCookieValueFails(t *testing.T) {
416414 pc_test .proxy .AesCipher , "my_access_token" )
417415 pc_test .req .AddCookie (pc_test .proxy .MakeCookie (
418416 pc_test .req , value + "some bogus bytes" ,
419- pc_test .opts .CookieExpire ))
417+ pc_test .opts .CookieExpire , time . Now () ))
420418 _ , _ , _ , ok := pc_test .ProcessCookie ()
421419 assert .Equal (t , false , ok )
422420}
423421
424422func TestProcessCookieRefreshNotSet (t * testing.T ) {
425423 pc_test := NewProcessCookieTestWithDefaults ()
426424 pc_test .proxy .CookieExpire = time .Duration (23 ) * time .Hour
427- cookie := pc_test .MakeCookie ("michael.bland@gsa.gov" , "" )
425+ reference := time .Now ().Add (time .Duration (- 2 ) * time .Hour )
426+ cookie := pc_test .MakeCookie ("michael.bland@gsa.gov" , "" , reference )
428427 pc_test .req .AddCookie (cookie )
429428
430429 _ , _ , _ , ok := pc_test .ProcessCookie ()
@@ -435,36 +434,70 @@ func TestProcessCookieRefreshNotSet(t *testing.T) {
435434func TestProcessCookieRefresh (t * testing.T ) {
436435 pc_test := NewProcessCookieTestWithDefaults ()
437436 pc_test .proxy .CookieExpire = time .Duration (23 ) * time .Hour
438- cookie := pc_test .MakeCookie ("michael.bland@gsa.gov" , "my_access_token" )
437+ reference := time .Now ().Add (time .Duration (- 2 ) * time .Hour )
438+ cookie := pc_test .MakeCookie ("michael.bland@gsa.gov" , "my_access_token" , reference )
439439 pc_test .req .AddCookie (cookie )
440440
441- pc_test .proxy .CookieRefresh = time .Duration ( 24 ) * time . Hour
441+ pc_test .proxy .CookieRefresh = time .Hour
442442 _ , _ , _ , ok := pc_test .ProcessCookie ()
443443 assert .Equal (t , true , ok )
444444 assert .NotEqual (t , []string (nil ), pc_test .rw .HeaderMap ["Set-Cookie" ])
445445}
446446
447447func TestProcessCookieRefreshThresholdNotCrossed (t * testing.T ) {
448448 pc_test := NewProcessCookieTestWithDefaults ()
449- pc_test .proxy .CookieExpire = time .Duration (25 ) * time .Hour
450- cookie := pc_test .MakeCookie ("michael.bland@gsa.gov" , "my_access_token" )
449+ pc_test .proxy .CookieExpire = time .Duration (23 ) * time .Hour
450+ reference := time .Now ().Add (time .Duration (- 30 ) * time .Minute )
451+ cookie := pc_test .MakeCookie ("michael.bland@gsa.gov" , "my_access_token" , reference )
451452 pc_test .req .AddCookie (cookie )
452453
453- pc_test .proxy .CookieRefresh = time .Duration ( 24 ) * time . Hour
454+ pc_test .proxy .CookieRefresh = time .Hour
454455 _ , _ , _ , ok := pc_test .ProcessCookie ()
455456 assert .Equal (t , true , ok )
456457 assert .Equal (t , []string (nil ), pc_test .rw .HeaderMap ["Set-Cookie" ])
457458}
458459
460+ func TestProcessCookieFailIfCookieExpired (t * testing.T ) {
461+ pc_test := NewProcessCookieTestWithDefaults ()
462+ pc_test .proxy .CookieExpire = time .Duration (24 ) * time .Hour
463+ reference := time .Now ().Add (time .Duration (25 ) * time .Hour * - 1 )
464+ cookie := pc_test .MakeCookie ("michael.bland@gsa.gov" , "my_access_token" , reference )
465+ pc_test .req .AddCookie (cookie )
466+
467+ if _ , _ , _ , ok := pc_test .ProcessCookie (); ok {
468+ t .Error ("ProcessCookie() should have failed" )
469+ }
470+ if set_cookie := pc_test .rw .HeaderMap ["Set-Cookie" ]; set_cookie != nil {
471+ t .Error ("expected Set-Cookie to be nil, instead was: " , set_cookie )
472+ }
473+ }
474+
475+ func TestProcessCookieFailIfRefreshSetAndCookieExpired (t * testing.T ) {
476+ pc_test := NewProcessCookieTestWithDefaults ()
477+ pc_test .proxy .CookieExpire = time .Duration (24 ) * time .Hour
478+ reference := time .Now ().Add (time .Duration (25 ) * time .Hour * - 1 )
479+ cookie := pc_test .MakeCookie ("michael.bland@gsa.gov" , "my_access_token" , reference )
480+ pc_test .req .AddCookie (cookie )
481+
482+ pc_test .proxy .CookieRefresh = time .Hour
483+ if _ , _ , _ , ok := pc_test .ProcessCookie (); ok {
484+ t .Error ("ProcessCookie() should have failed" )
485+ }
486+ if set_cookie := pc_test .rw .HeaderMap ["Set-Cookie" ]; set_cookie != nil {
487+ t .Error ("expected Set-Cookie to be nil, instead was: " , set_cookie )
488+ }
489+ }
490+
459491func TestProcessCookieFailIfRefreshSetAndTokenNoLongerValid (t * testing.T ) {
460492 pc_test := NewProcessCookieTest (ProcessCookieTestOpts {
461493 provider_validate_cookie_response : false ,
462494 })
463495 pc_test .proxy .CookieExpire = time .Duration (23 ) * time .Hour
464- cookie := pc_test .MakeCookie ("michael.bland@gsa.gov" , "my_access_token" )
496+ reference := time .Now ().Add (time .Duration (- 24 ) * time .Hour )
497+ cookie := pc_test .MakeCookie ("michael.bland@gsa.gov" , "my_access_token" , reference )
465498 pc_test .req .AddCookie (cookie )
466499
467- pc_test .proxy .CookieRefresh = time .Duration ( 24 ) * time . Hour
500+ pc_test .proxy .CookieRefresh = time .Hour
468501 _ , _ , _ , ok := pc_test .ProcessCookie ()
469502 assert .Equal (t , false , ok )
470503 assert .Equal (t , []string (nil ), pc_test .rw .HeaderMap ["Set-Cookie" ])
@@ -475,10 +508,11 @@ func TestProcessCookieFailIfRefreshSetAndUserNoLongerValid(t *testing.T) {
475508 pc_test .validate_user = false
476509
477510 pc_test .proxy .CookieExpire = time .Duration (23 ) * time .Hour
478- cookie := pc_test .MakeCookie ("michael.bland@gsa.gov" , "my_access_token" )
511+ reference := time .Now ().Add (time .Duration (- 2 ) * time .Hour )
512+ cookie := pc_test .MakeCookie ("michael.bland@gsa.gov" , "my_access_token" , reference )
479513 pc_test .req .AddCookie (cookie )
480514
481- pc_test .proxy .CookieRefresh = time .Duration ( 24 ) * time . Hour
515+ pc_test .proxy .CookieRefresh = time .Hour
482516 _ , _ , _ , ok := pc_test .ProcessCookie ()
483517 assert .Equal (t , false , ok )
484518 assert .Equal (t , []string (nil ), pc_test .rw .HeaderMap ["Set-Cookie" ])
0 commit comments