@@ -348,13 +348,12 @@ func NewProcessCookieTest(opts ProcessCookieTestOpts) *ProcessCookieTest {
349 pc_test.opts = NewOptions()
349 pc_test.opts = NewOptions()
350 pc_test.opts.Upstreams = append(pc_test.opts.Upstreams, "unused")
350 pc_test.opts.Upstreams = append(pc_test.opts.Upstreams, "unused")
351− pc_test.opts.CookieSecret = "foobar"
352 pc_test.opts.ClientID = "bazquux"
351 pc_test.opts.ClientID = "bazquux"
353 pc_test.opts.ClientSecret = "xyzzyplugh"
352 pc_test.opts.ClientSecret = "xyzzyplugh"
354 pc_test.opts.CookieSecret = "0123456789abcdef"
353 pc_test.opts.CookieSecret = "0123456789abcdef"
355 // First, set the CookieRefresh option so proxy.AesCipher is created,
354 // First, set the CookieRefresh option so proxy.AesCipher is created,
356 // needed to encrypt the access_token.
355 // needed to encrypt the access_token.
357− pc_test.opts.CookieRefresh = time.Duration(24) * time.Hour
356+ pc_test.opts.CookieRefresh = time.Hour
358 pc_test.opts.Validate()
357 pc_test.opts.Validate()
360 pc_test.proxy = NewOauthProxy(pc_test.opts, func(email string) bool {
359 pc_test.proxy = NewOauthProxy(pc_test.opts, func(email string) bool {
@@ -379,14 +378,13 @@ func NewProcessCookieTestWithDefaults() *ProcessCookieTest {
382−func (p *ProcessCookieTest) MakeCookie(value, access_token string) *http.Cookie {
381+func (p *ProcessCookieTest) MakeCookie(value, access_token string, ref time.Time) *http.Cookie {
383− cookie_value, _ := buildCookieValue(
384− value, p.proxy.AesCipher, access_token)
382+ cookie_value, _ := buildCookieValue(value, p.proxy.AesCipher, access_token)
385− return p.proxy.MakeCookie(p.req, cookie_value, p.opts.CookieExpire)
383+ return p.proxy.MakeCookie(p.req, cookie_value, p.opts.CookieExpire, ref)
388func (p *ProcessCookieTest) AddCookie(value, access_token string) {
386func (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()))
392func (p *ProcessCookieTest) ProcessCookie() (email, user, access_token string, ok bool) {
390func (p *ProcessCookieTest) ProcessCookie() (email, user, access_token string, ok bool) {
@@ -416,7 +414,7 @@ func TestProcessCookieFailIfParsingCookieValueFails(t *testing.T) {
416 pc_test.proxy.AesCipher, "my_access_token")
414 pc_test.proxy.AesCipher, "my_access_token")
417 pc_test.req.AddCookie(pc_test.proxy.MakeCookie(
415 pc_test.req.AddCookie(pc_test.proxy.MakeCookie(
418 pc_test.req, value+"some bogus bytes",
416 pc_test.req, value+"some bogus bytes",
419− pc_test.opts.CookieExpire))
417+ pc_test.opts.CookieExpire, time.Now()))
420 _, _, _, ok := pc_test.ProcessCookie()
418 _, _, _, ok := pc_test.ProcessCookie()
421 assert.Equal(t, false, ok)
419 assert.Equal(t, false, ok)
@@ -424,7 +422,8 @@ func TestProcessCookieFailIfParsingCookieValueFails(t *testing.T) {
424func TestProcessCookieRefreshNotSet(t *testing.T) {
422func TestProcessCookieRefreshNotSet(t *testing.T) {
425 pc_test := NewProcessCookieTestWithDefaults()
423 pc_test := NewProcessCookieTestWithDefaults()
426 pc_test.proxy.CookieExpire = time.Duration(23) * time.Hour
424 pc_test.proxy.CookieExpire = time.Duration(23) * time.Hour
425+ reference := time.Now().Add(time.Duration(-2) * time.Hour)
427− cookie := pc_test.MakeCookie("michael.bland@gsa.gov", "")
426+ cookie := pc_test.MakeCookie("michael.bland@gsa.gov", "", reference)
428 pc_test.req.AddCookie(cookie)
427 pc_test.req.AddCookie(cookie)
430 _, _, _, ok := pc_test.ProcessCookie()
429 _, _, _, ok := pc_test.ProcessCookie()
@@ -435,10 +434,11 @@ func TestProcessCookieRefreshNotSet(t *testing.T) {
435func TestProcessCookieRefresh(t *testing.T) {
434func TestProcessCookieRefresh(t *testing.T) {
436 pc_test := NewProcessCookieTestWithDefaults()
435 pc_test := NewProcessCookieTestWithDefaults()
437 pc_test.proxy.CookieExpire = time.Duration(23) * time.Hour
436 pc_test.proxy.CookieExpire = time.Duration(23) * time.Hour
437+ reference := time.Now().Add(time.Duration(-2) * time.Hour)
438− cookie := pc_test.MakeCookie("michael.bland@gsa.gov", "my_access_token")
438+ cookie := pc_test.MakeCookie("michael.bland@gsa.gov", "my_access_token", reference)
439 pc_test.req.AddCookie(cookie)
439 pc_test.req.AddCookie(cookie)
441− pc_test.proxy.CookieRefresh = time.Duration(24) * time.Hour
441+ pc_test.proxy.CookieRefresh = time.Hour
442 _, _, _, ok := pc_test.ProcessCookie()
442 _, _, _, ok := pc_test.ProcessCookie()
443 assert.Equal(t, true, ok)
443 assert.Equal(t, true, ok)
444 assert.NotEqual(t, []string(nil), pc_test.rw.HeaderMap["Set-Cookie"])
444 assert.NotEqual(t, []string(nil), pc_test.rw.HeaderMap["Set-Cookie"])
@@ -446,25 +446,58 @@ func TestProcessCookieRefresh(t *testing.T) {
447func TestProcessCookieRefreshThresholdNotCrossed(t *testing.T) {
447func TestProcessCookieRefreshThresholdNotCrossed(t *testing.T) {
448 pc_test := NewProcessCookieTestWithDefaults()
448 pc_test := NewProcessCookieTestWithDefaults()
449− pc_test.proxy.CookieExpire = time.Duration(25) * time.Hour
449+ pc_test.proxy.CookieExpire = time.Duration(23) * time.Hour
450+ reference := time.Now().Add(time.Duration(-30) * time.Minute)
450− cookie := pc_test.MakeCookie("michael.bland@gsa.gov", "my_access_token")
451+ cookie := pc_test.MakeCookie("michael.bland@gsa.gov", "my_access_token", reference)
451 pc_test.req.AddCookie(cookie)
452 pc_test.req.AddCookie(cookie)
453− pc_test.proxy.CookieRefresh = time.Duration(24) * time.Hour
454+ pc_test.proxy.CookieRefresh = time.Hour
454 _, _, _, ok := pc_test.ProcessCookie()
455 _, _, _, ok := pc_test.ProcessCookie()
455 assert.Equal(t, true, ok)
456 assert.Equal(t, true, ok)
456 assert.Equal(t, []string(nil), pc_test.rw.HeaderMap["Set-Cookie"])
457 assert.Equal(t, []string(nil), pc_test.rw.HeaderMap["Set-Cookie"])
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)
467+ if _, _, _, ok := pc_test.ProcessCookie(); ok {
468+ t.Error("ProcessCookie() should have failed")
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)
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)
482+ pc_test.proxy.CookieRefresh = time.Hour
483+ if _, _, _, ok := pc_test.ProcessCookie(); ok {
484+ t.Error("ProcessCookie() should have failed")
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)
459func TestProcessCookieFailIfRefreshSetAndTokenNoLongerValid(t *testing.T) {
491func TestProcessCookieFailIfRefreshSetAndTokenNoLongerValid(t *testing.T) {
460 pc_test := NewProcessCookieTest(ProcessCookieTestOpts{
492 pc_test := NewProcessCookieTest(ProcessCookieTestOpts{
461 provider_validate_cookie_response: false,
493 provider_validate_cookie_response: false,
463 pc_test.proxy.CookieExpire = time.Duration(23) * time.Hour
495 pc_test.proxy.CookieExpire = time.Duration(23) * time.Hour
496+ reference := time.Now().Add(time.Duration(-24) * time.Hour)
464− cookie := pc_test.MakeCookie("michael.bland@gsa.gov", "my_access_token")
497+ cookie := pc_test.MakeCookie("michael.bland@gsa.gov", "my_access_token", reference)
465 pc_test.req.AddCookie(cookie)
498 pc_test.req.AddCookie(cookie)
467− pc_test.proxy.CookieRefresh = time.Duration(24) * time.Hour
500+ pc_test.proxy.CookieRefresh = time.Hour
468 _, _, _, ok := pc_test.ProcessCookie()
501 _, _, _, ok := pc_test.ProcessCookie()
469 assert.Equal(t, false, ok)
502 assert.Equal(t, false, ok)
470 assert.Equal(t, []string(nil), pc_test.rw.HeaderMap["Set-Cookie"])
503 assert.Equal(t, []string(nil), pc_test.rw.HeaderMap["Set-Cookie"])
@@ -475,10 +508,11 @@ func TestProcessCookieFailIfRefreshSetAndUserNoLongerValid(t *testing.T) {
475 pc_test.validate_user = false
508 pc_test.validate_user = false
477 pc_test.proxy.CookieExpire = time.Duration(23) * time.Hour
510 pc_test.proxy.CookieExpire = time.Duration(23) * time.Hour
511+ reference := time.Now().Add(time.Duration(-2) * time.Hour)
478− cookie := pc_test.MakeCookie("michael.bland@gsa.gov", "my_access_token")
512+ cookie := pc_test.MakeCookie("michael.bland@gsa.gov", "my_access_token", reference)
479 pc_test.req.AddCookie(cookie)
513 pc_test.req.AddCookie(cookie)
481− pc_test.proxy.CookieRefresh = time.Duration(24) * time.Hour
515+ pc_test.proxy.CookieRefresh = time.Hour
482 _, _, _, ok := pc_test.ProcessCookie()
516 _, _, _, ok := pc_test.ProcessCookie()
483 assert.Equal(t, false, ok)
517 assert.Equal(t, false, ok)
484 assert.Equal(t, []string(nil), pc_test.rw.HeaderMap["Set-Cookie"])
518 assert.Equal(t, []string(nil), pc_test.rw.HeaderMap["Set-Cookie"])