@@ -1,6 +1,7 @@
11package providers
22
33import (
4+ "fmt"
45 "strings"
56 "testing"
67 "time"
@@ -30,6 +31,7 @@ func TestSessionStateSerialization(t *testing.T) {
3031 ss, err := DecodeSessionState(encoded, c)
3132 t.Logf("%#v", ss)
3233 assert.Equal(t, nil, err)
34+ assert.Equal(t, "user", ss.User)
3335 assert.Equal(t, s.Email, ss.Email)
3436 assert.Equal(t, s.AccessToken, ss.AccessToken)
3537 assert.Equal(t, s.ExpiresOn.Unix(), ss.ExpiresOn.Unix())
@@ -39,14 +41,50 @@ func TestSessionStateSerialization(t *testing.T) {
3941 ss, err = DecodeSessionState(encoded, c2)
4042 t.Logf("%#v", ss)
4143 assert.Equal(t, nil, err)
44+ assert.Equal(t, "user", ss.User)
4245 assert.Equal(t, s.Email, ss.Email)
4346 assert.Equal(t, s.ExpiresOn.Unix(), ss.ExpiresOn.Unix())
4447 assert.NotEqual(t, s.AccessToken, ss.AccessToken)
4548 assert.NotEqual(t, s.RefreshToken, ss.RefreshToken)
4649}
4750
48−func TestSessionStateSerializationNoCipher(t *testing.T) {
51+func TestSessionStateSerializationWithUser(t *testing.T) {
52+ c, err := cookie.NewCipher([]byte(secret))
53+ assert.Equal(t, nil, err)
54+ c2, err := cookie.NewCipher([]byte(altSecret))
55+ assert.Equal(t, nil, err)
56+ s := &SessionState{
57+ User: "just-user",
58+ Email: "user@domain.com",
59+ AccessToken: "token1234",
60+ ExpiresOn: time.Now().Add(time.Duration(1) * time.Hour),
61+ RefreshToken: "refresh4321",
62+ }
63+ encoded, err := s.EncodeSessionState(c)
64+ assert.Equal(t, nil, err)
65+ assert.Equal(t, 3, strings.Count(encoded, "|"))
66+
67+ ss, err := DecodeSessionState(encoded, c)
68+ t.Logf("%#v", ss)
69+ assert.Equal(t, nil, err)
70+ assert.Equal(t, s.User, ss.User)
71+ assert.Equal(t, s.Email, ss.Email)
72+ assert.Equal(t, s.AccessToken, ss.AccessToken)
73+ assert.Equal(t, s.ExpiresOn.Unix(), ss.ExpiresOn.Unix())
74+ assert.Equal(t, s.RefreshToken, ss.RefreshToken)
75+
76+ // ensure a different cipher can't decode properly (ie: it gets gibberish)
77+ ss, err = DecodeSessionState(encoded, c2)
78+ t.Logf("%#v", ss)
79+ assert.Equal(t, nil, err)
80+ assert.Equal(t, s.User, ss.User)
81+ assert.Equal(t, s.Email, ss.Email)
82+ assert.Equal(t, s.ExpiresOn.Unix(), ss.ExpiresOn.Unix())
83+ assert.NotEqual(t, s.AccessToken, ss.AccessToken)
84+ assert.NotEqual(t, s.RefreshToken, ss.RefreshToken)
85+}
4986
87+func TestSessionStateSerializationNoCipher(t *testing.T) {
5088 s := &SessionState{
5189 Email: "user@domain.com",
5290 AccessToken: "token1234",
@@ -55,25 +93,51 @@ func TestSessionStateSerializationNoCipher(t *testing.T) {
5593 }
5694 encoded, err := s.EncodeSessionState(nil)
5795 assert.Equal(t, nil, err)
58− assert.Equal(t, s.Email, encoded)
96+ expected := fmt.Sprintf("email:%s user:", s.Email)
97+ assert.Equal(t, expected, encoded)
5998
6099 // only email should have been serialized
61100 ss, err := DecodeSessionState(encoded, nil)
62101 assert.Equal(t, nil, err)
102+ assert.Equal(t, "user", ss.User)
63103 assert.Equal(t, s.Email, ss.Email)
64104 assert.Equal(t, "", ss.AccessToken)
65105 assert.Equal(t, "", ss.RefreshToken)
66106}
67107
68−func TestSessionStateUserOrEmail(t *testing.T) {
108+func TestSessionStateSerializationNoCipherWithUser(t *testing.T) {
109+ s := &SessionState{
110+ User: "just-user",
111+ Email: "user@domain.com",
112+ AccessToken: "token1234",
113+ ExpiresOn: time.Now().Add(time.Duration(1) * time.Hour),
114+ RefreshToken: "refresh4321",
115+ }
116+ encoded, err := s.EncodeSessionState(nil)
117+ assert.Equal(t, nil, err)
118+ expected := fmt.Sprintf("email:%s user:%s", s.Email, s.User)
119+ assert.Equal(t, expected, encoded)
120+
121+ // only email should have been serialized
122+ ss, err := DecodeSessionState(encoded, nil)
123+ assert.Equal(t, nil, err)
124+ assert.Equal(t, s.User, ss.User)
125+ assert.Equal(t, s.Email, ss.Email)
126+ assert.Equal(t, "", ss.AccessToken)
127+ assert.Equal(t, "", ss.RefreshToken)
128+}
69129
130+func TestSessionStateAccountInfo(t *testing.T) {
70131 s := &SessionState{
71132 Email: "user@domain.com",
72133 User: "just-user",
73134 }
74− assert.Equal(t, "user@domain.com", s.userOrEmail())
135+ expected := fmt.Sprintf("email:%v user:%v", s.Email, s.User)
136+ assert.Equal(t, expected, s.accountInfo())
137+
75138 s.Email = ""
76− assert.Equal(t, "just-user", s.userOrEmail())
139+ expected = fmt.Sprintf("email:%v user:%v", s.Email, s.User)
140+ assert.Equal(t, expected, s.accountInfo())
77141}
78142
79143func TestExpired(t *testing.T) {