git.iko.soy/typeable/oauth2-proxy
on master help sign in
Merge pull request #715 from oauth2-proxy/session-nil-time
9a338d8Joel Speed
CHANGELOG.md+1
@@ -11,6 +11,7 @@
11
11
12## Changes since v6.0.0
12## Changes since v6.0.0
13
13
14+- [#715](https://github.com/oauth2-proxy/oauth2-proxy/pull/715) Ensure session times are not nil before printing them (@JoelSpeed)
14- [#714](https://github.com/oauth2-proxy/oauth2-proxy/pull/714) Support passwords with Redis session stores (@NickMeves)
15- [#714](https://github.com/oauth2-proxy/oauth2-proxy/pull/714) Support passwords with Redis session stores (@NickMeves)
15- [#719](https://github.com/oauth2-proxy/oauth2-proxy/pull/719) Add Gosec fixes to areas that are intermittently flagged on PRs (@NickMeves)
16- [#719](https://github.com/oauth2-proxy/oauth2-proxy/pull/719) Add Gosec fixes to areas that are intermittently flagged on PRs (@NickMeves)
16- [#718](https://github.com/oauth2-proxy/oauth2-proxy/pull/718) Allow Logging to stdout with separate Error Log Channel
17- [#718](https://github.com/oauth2-proxy/oauth2-proxy/pull/718) Allow Logging to stdout with separate Error Log Channel
pkg/apis/sessions/session_state.go+2−2
@@ -52,10 +52,10 @@ func (s *SessionState) String() string {
52 if s.IDToken != "" {
52 if s.IDToken != "" {
53 o += " id_token:true"
53 o += " id_token:true"
54 }
54 }
55− if !s.CreatedAt.IsZero() {
55+ if s.CreatedAt != nil && !s.CreatedAt.IsZero() {
56 o += fmt.Sprintf(" created:%s", s.CreatedAt)
56 o += fmt.Sprintf(" created:%s", s.CreatedAt)
57 }
57 }
58− if !s.ExpiresOn.IsZero() {
58+ if s.ExpiresOn != nil && !s.ExpiresOn.IsZero() {
59 o += fmt.Sprintf(" expires:%s", s.ExpiresOn)
59 o += fmt.Sprintf(" expires:%s", s.ExpiresOn)
60 }
60 }
61 if s.RefreshToken != "" {
61 if s.RefreshToken != "" {
pkg/apis/sessions/session_state_test.go+96
@@ -9,6 +9,7 @@ import (
9 "time"
9 "time"
10
10
11 "github.com/oauth2-proxy/oauth2-proxy/pkg/encryption"
11 "github.com/oauth2-proxy/oauth2-proxy/pkg/encryption"
12+ . "github.com/onsi/gomega"
12 "github.com/stretchr/testify/assert"
13 "github.com/stretchr/testify/assert"
13)
14)
14
15
@@ -16,6 +17,101 @@ func timePtr(t time.Time) *time.Time {
16 return &t
17 return &t
17}
18}
18
19
20+func TestString(t *testing.T) {
21+ g := NewWithT(t)
22+ created, err := time.Parse(time.RFC3339, "2000-01-01T00:00:00Z")
23+ g.Expect(err).ToNot(HaveOccurred())
24+ expires, err := time.Parse(time.RFC3339, "2000-01-01T01:00:00Z")
25+ g.Expect(err).ToNot(HaveOccurred())
26+
27+ testCases := []struct {
28+ name string
29+ sessionState *SessionState
30+ expected string
31+ }{
32+ {
33+ name: "Minimal Session",
34+ sessionState: &SessionState{
35+ Email: "email@email.email",
36+ User: "some.user",
37+ PreferredUsername: "preferred.user",
38+ },
39+ expected: "Session{email:email@email.email user:some.user PreferredUsername:preferred.user}",
40+ },
41+ {
42+ name: "Full Session",
43+ sessionState: &SessionState{
44+ Email: "email@email.email",
45+ User: "some.user",
46+ PreferredUsername: "preferred.user",
47+ CreatedAt: &created,
48+ ExpiresOn: &expires,
49+ AccessToken: "access.token",
50+ IDToken: "id.token",
51+ RefreshToken: "refresh.token",
52+ },
53+ expected: "Session{email:email@email.email user:some.user PreferredUsername:preferred.user token:true id_token:true created:2000-01-01 00:00:00 +0000 UTC expires:2000-01-01 01:00:00 +0000 UTC refresh_token:true}",
54+ },
55+ {
56+ name: "With a CreatedAt",
57+ sessionState: &SessionState{
58+ Email: "email@email.email",
59+ User: "some.user",
60+ PreferredUsername: "preferred.user",
61+ CreatedAt: &created,
62+ },
63+ expected: "Session{email:email@email.email user:some.user PreferredUsername:preferred.user created:2000-01-01 00:00:00 +0000 UTC}",
64+ },
65+ {
66+ name: "With an ExpiresOn",
67+ sessionState: &SessionState{
68+ Email: "email@email.email",
69+ User: "some.user",
70+ PreferredUsername: "preferred.user",
71+ ExpiresOn: &expires,
72+ },
73+ expected: "Session{email:email@email.email user:some.user PreferredUsername:preferred.user expires:2000-01-01 01:00:00 +0000 UTC}",
74+ },
75+ {
76+ name: "With an AccessToken",
77+ sessionState: &SessionState{
78+ Email: "email@email.email",
79+ User: "some.user",
80+ PreferredUsername: "preferred.user",
81+ AccessToken: "access.token",
82+ },
83+ expected: "Session{email:email@email.email user:some.user PreferredUsername:preferred.user token:true}",
84+ },
85+ {
86+ name: "With an IDToken",
87+ sessionState: &SessionState{
88+ Email: "email@email.email",
89+ User: "some.user",
90+ PreferredUsername: "preferred.user",
91+ IDToken: "id.token",
92+ },
93+ expected: "Session{email:email@email.email user:some.user PreferredUsername:preferred.user id_token:true}",
94+ },
95+ {
96+ name: "With a RefreshToken",
97+ sessionState: &SessionState{
98+ Email: "email@email.email",
99+ User: "some.user",
100+ PreferredUsername: "preferred.user",
101+ RefreshToken: "refresh.token",
102+ },
103+ expected: "Session{email:email@email.email user:some.user PreferredUsername:preferred.user refresh_token:true}",
104+ },
105+ }
106+
107+ for _, tc := range testCases {
108+ t.Run(tc.name, func(t *testing.T) {
109+ gs := NewWithT(t)
110+ gs.Expect(tc.sessionState.String()).To(Equal(tc.expected))
111+ })
112+ }
113+}
114+
19func TestIsExpired(t *testing.T) {
115func TestIsExpired(t *testing.T) {
20 s := &SessionState{ExpiresOn: timePtr(time.Now().Add(time.Duration(-1) * time.Minute))}
116 s := &SessionState{ExpiresOn: timePtr(time.Now().Add(time.Duration(-1) * time.Minute))}
21 assert.Equal(t, true, s.IsExpired())
117 assert.Equal(t, true, s.IsExpired())