git.iko.soy/typeable/oauth2-proxy
on master help sign in
Ensure SessionStores can handle recieving cookies for the wrong implementation

(cherry picked from commit 131206cf41697543583751ac2714287898c19ad0)

commit4721da02f2516a68f2504126a0f60cdcd0d35ac6 authorJoel Speed <Joel.speed@hotmail.co.uk> dateThu 30 May 2019, 11:55 (7 years ago) parentc1ae0ca
2 files changed+28−1
pkg/sessions/redis/redis_store.go+6−1 pkg/sessions/session_store_test.go+22
pkg/sessions/redis/redis_store.go+6−1
@@ -237,7 +237,12 @@ func (store *SessionStore) getTicket(requestCookie *http.Cookie) (*TicketData, e
237237 }
238238
239239 // Valid cookie, decode the ticket
240− return decodeTicket(store.CookieOptions.CookieName, val)
240+ ticket, err := decodeTicket(store.CookieOptions.CookieName, val)
241+ if err != nil {
242+ // If we can't decode the ticket we have to create a new one
243+ return newTicket()
244+ }
245+ return ticket, nil
241246}
242247
243248func newTicket() (*TicketData, error) {
pkg/sessions/session_store_test.go+22
@@ -16,6 +16,7 @@ import (
1616 "github.com/pusher/oauth2_proxy/cookie"
1717 "github.com/pusher/oauth2_proxy/pkg/apis/options"
1818 sessionsapi "github.com/pusher/oauth2_proxy/pkg/apis/sessions"
19+ "github.com/pusher/oauth2_proxy/pkg/cookies"
1920 "github.com/pusher/oauth2_proxy/pkg/sessions"
2021 sessionscookie "github.com/pusher/oauth2_proxy/pkg/sessions/cookie"
2122 "github.com/pusher/oauth2_proxy/pkg/sessions/redis"
@@ -153,6 +154,27 @@ var _ = Describe("NewSessionStore", func() {
153154 })
154155 })
155156
157+ Context("with a broken session", func() {
158+ BeforeEach(func() {
159+ By("Using a valid cookie with a different providers session encoding")
160+ broken := "BrokenSessionFromADifferentSessionImplementation"
161+ value := cookie.SignedValue(cookieOpts.CookieSecret, cookieOpts.CookieName, broken, time.Now())
162+ cookie := cookies.MakeCookieFromOptions(request, cookieOpts.CookieName, value, cookieOpts, cookieOpts.CookieExpire, time.Now())
163+ request.AddCookie(cookie)
164+
165+ err := ss.Save(response, request, session)
166+ Expect(err).ToNot(HaveOccurred())
167+ })
168+
169+ It("sets a `set-cookie` header in the response", func() {
170+ Expect(response.Header().Get("set-cookie")).ToNot(BeEmpty())
171+ })
172+
173+ It("Ensures the session CreatedAt is not zero", func() {
174+ Expect(session.CreatedAt.IsZero()).To(BeFalse())
175+ })
176+ })
177+
156178 Context("with an expired saved session", func() {
157179 var err error
158180 BeforeEach(func() {