git.iko.soy/typeable/oauth2-proxy
on master help sign in
Check SaveSession works when an existing session is present
2e2327aJoel Speed
pkg/sessions/redis/redis_store.go+8−1
@@ -195,7 +195,14 @@ func (store *SessionStore) storeValue(value string, expiresOn time.Time, request
195 var ticket *TicketData
195 var ticket *TicketData
196 if requestCookie != nil {
196 if requestCookie != nil {
197 var err error
197 var err error
198+ val, _, ok := cookie.Validate(requestCookie, store.CookieOptions.CookieSecret, store.CookieOptions.CookieExpire)
199+ if !ok {
200+ ticket, err = newTicket()
201+ if err != nil {
202+ return "", fmt.Errorf("error creating new ticket: %s", err)
203+ }
204+ }
198− ticket, err = decodeTicket(store.CookieOptions.CookieName, requestCookie.Value)
205+ ticket, err = decodeTicket(store.CookieOptions.CookieName, val)
199 if err != nil {
206 if err != nil {
200 return "", err
207 return "", err
201 }
208 }
pkg/sessions/session_store_test.go+36−8
@@ -137,17 +137,45 @@ var _ = Describe("NewSessionStore", func() {
137
137
138 SessionStoreInterfaceTests := func(persistent bool) {
138 SessionStoreInterfaceTests := func(persistent bool) {
139 Context("when Save is called", func() {
139 Context("when Save is called", func() {
140+ Context("with no existing session", func() {
140− BeforeEach(func() {
141+ BeforeEach(func() {
141− err := ss.Save(response, request, session)
142+ err := ss.Save(response, request, session)
142− Expect(err).ToNot(HaveOccurred())
143+ Expect(err).ToNot(HaveOccurred())
143− })
144+ })
144
145
145− It("sets a `set-cookie` header in the response", func() {
146+ It("sets a `set-cookie` header in the response", func() {
146− Expect(response.Header().Get("set-cookie")).ToNot(BeEmpty())
147+ Expect(response.Header().Get("set-cookie")).ToNot(BeEmpty())
148+ })
149+
150+ It("Ensures the session CreatedAt is not zero", func() {
151+ Expect(session.CreatedAt.IsZero()).To(BeFalse())
152+ })
147 })
153 })
148
154
149− It("Ensures the session CreatedAt is not zero", func() {
155+ Context("with an expired saved session", func() {
150− Expect(session.CreatedAt.IsZero()).To(BeFalse())
156+ var err error
157+ BeforeEach(func() {
158+ By("saving a session")
159+ req := httptest.NewRequest("GET", "http://example.com/", nil)
160+ saveResp := httptest.NewRecorder()
161+ err = ss.Save(saveResp, req, session)
162+ Expect(err).ToNot(HaveOccurred())
163+
164+ By("and clearing the session")
165+ for _, c := range saveResp.Result().Cookies() {
166+ request.AddCookie(c)
167+ }
168+ clearResp := httptest.NewRecorder()
169+ err = ss.Clear(clearResp, request)
170+ Expect(err).ToNot(HaveOccurred())
171+
172+ By("then saving a request with the cleared session")
173+ err = ss.Save(response, request, session)
174+ })
175+
176+ It("no error should occur", func() {
177+ Expect(err).ToNot(HaveOccurred())
178+ })
151 })
179 })
152
180
153 CheckCookieOptions()
181 CheckCookieOptions()