@@ -2,6 +2,7 @@ package manage_test
22
33import (
44 "testing"
5+ "time"
56
67 "gopkg.in/oauth2.v3"
78 "gopkg.in/oauth2.v3/manage"
@@ -41,6 +42,15 @@ func TestManager(t *testing.T) {
4142 Convey ("Token test" , func () {
4243 testManager (tgr , manager )
4344 })
45+
46+ Convey ("zero expiration access token test" , func () {
47+ testZeroAccessExpirationManager (tgr , manager )
48+ testCannotRequestZeroExpirationAccessTokens (tgr , manager )
49+ })
50+
51+ Convey ("zero expiration refresh token test" , func () {
52+ testZeroRefreshExpirationManager (tgr , manager )
53+ })
4454 })
4555}
4656
@@ -107,3 +117,110 @@ func testManager(tgr *oauth2.TokenGenerateRequest, manager oauth2.Manager) {
107117 _ , err = manager .LoadRefreshToken (refreshToken )
108118 So (err , ShouldNotBeNil )
109119}
120+
121+ func testZeroAccessExpirationManager (tgr * oauth2.TokenGenerateRequest , manager oauth2.Manager ) {
122+ config := manage.Config {
123+ AccessTokenExp : 0 , // Set explicitly as we're testing 0 (no) expiration
124+ IsGenerateRefresh : true ,
125+ }
126+ m , ok := manager .(* manage.Manager )
127+ So (ok , ShouldBeTrue )
128+ m .SetAuthorizeCodeTokenCfg (& config )
129+
130+ cti , err := manager .GenerateAuthToken (oauth2 .Code , tgr )
131+ So (err , ShouldBeNil )
132+
133+ code := cti .GetCode ()
134+ So (code , ShouldNotBeEmpty )
135+
136+ atParams := & oauth2.TokenGenerateRequest {
137+ ClientID : tgr .ClientID ,
138+ ClientSecret : "11" ,
139+ RedirectURI : tgr .RedirectURI ,
140+ Code : code ,
141+ }
142+ ati , err := manager .GenerateAccessToken (oauth2 .AuthorizationCode , atParams )
143+ So (err , ShouldBeNil )
144+
145+ accessToken , refreshToken := ati .GetAccess (), ati .GetRefresh ()
146+ So (accessToken , ShouldNotBeEmpty )
147+ So (refreshToken , ShouldNotBeEmpty )
148+
149+ tokenInfo , err := manager .LoadAccessToken (accessToken )
150+ So (err , ShouldBeNil )
151+ So (tokenInfo , ShouldNotBeNil )
152+ So (tokenInfo .GetAccess (), ShouldEqual , accessToken )
153+ So (tokenInfo .GetAccessExpiresIn (), ShouldEqual , 0 )
154+ }
155+
156+ func testCannotRequestZeroExpirationAccessTokens (tgr * oauth2.TokenGenerateRequest , manager oauth2.Manager ) {
157+ config := manage.Config {
158+ AccessTokenExp : time .Hour * 5 ,
159+ }
160+ m , ok := manager .(* manage.Manager )
161+ So (ok , ShouldBeTrue )
162+ m .SetAuthorizeCodeTokenCfg (& config )
163+
164+ cti , err := manager .GenerateAuthToken (oauth2 .Code , tgr )
165+ So (err , ShouldBeNil )
166+
167+ code := cti .GetCode ()
168+ So (code , ShouldNotBeEmpty )
169+
170+ atParams := & oauth2.TokenGenerateRequest {
171+ ClientID : tgr .ClientID ,
172+ ClientSecret : "11" ,
173+ RedirectURI : tgr .RedirectURI ,
174+ AccessTokenExp : 0 , // requesting token without expiration
175+ Code : code ,
176+ }
177+ ati , err := manager .GenerateAccessToken (oauth2 .AuthorizationCode , atParams )
178+ So (err , ShouldBeNil )
179+
180+ accessToken := ati .GetAccess ()
181+ So (accessToken , ShouldNotBeEmpty )
182+ So (ati .GetAccessExpiresIn (), ShouldEqual , time .Hour * 5 )
183+ }
184+
185+ func testZeroRefreshExpirationManager (tgr * oauth2.TokenGenerateRequest , manager oauth2.Manager ) {
186+ config := manage.Config {
187+ RefreshTokenExp : 0 , // Set explicitly as we're testing 0 (no) expiration
188+ IsGenerateRefresh : true ,
189+ }
190+ m , ok := manager .(* manage.Manager )
191+ So (ok , ShouldBeTrue )
192+ m .SetAuthorizeCodeTokenCfg (& config )
193+
194+ cti , err := manager .GenerateAuthToken (oauth2 .Code , tgr )
195+ So (err , ShouldBeNil )
196+
197+ code := cti .GetCode ()
198+ So (code , ShouldNotBeEmpty )
199+
200+ atParams := & oauth2.TokenGenerateRequest {
201+ ClientID : tgr .ClientID ,
202+ ClientSecret : "11" ,
203+ RedirectURI : tgr .RedirectURI ,
204+ AccessTokenExp : time .Hour ,
205+ Code : code ,
206+ }
207+ ati , err := manager .GenerateAccessToken (oauth2 .AuthorizationCode , atParams )
208+ So (err , ShouldBeNil )
209+
210+ accessToken , refreshToken := ati .GetAccess (), ati .GetRefresh ()
211+ So (accessToken , ShouldNotBeEmpty )
212+ So (refreshToken , ShouldNotBeEmpty )
213+
214+ tokenInfo , err := manager .LoadRefreshToken (refreshToken )
215+ So (err , ShouldBeNil )
216+ So (tokenInfo , ShouldNotBeNil )
217+ So (tokenInfo .GetRefresh (), ShouldEqual , refreshToken )
218+ So (tokenInfo .GetRefreshExpiresIn (), ShouldEqual , 0 )
219+
220+ // LoadAccessToken also checks refresh expiry
221+ tokenInfo , err = manager .LoadAccessToken (accessToken )
222+ So (err , ShouldBeNil )
223+ So (tokenInfo , ShouldNotBeNil )
224+ So (tokenInfo .GetRefresh (), ShouldEqual , refreshToken )
225+ So (tokenInfo .GetRefreshExpiresIn (), ShouldEqual , 0 )
226+ }
0 commit comments