@@ -18,6 +18,8 @@ import (
18
18
19
19
"github.com/coder/coder/v2/coderd/coderdtest"
20
20
"github.com/coder/coder/v2/coderd/coderdtest/oidctest"
21
+ "github.com/coder/coder/v2/coderd/database"
22
+ "github.com/coder/coder/v2/coderd/database/dbauthz"
21
23
"github.com/coder/coder/v2/coderd/database/dbtime"
22
24
"github.com/coder/coder/v2/coderd/externalauth"
23
25
"github.com/coder/coder/v2/coderd/httpapi"
@@ -198,6 +200,66 @@ func TestExternalAuthManagement(t *testing.T) {
198
200
require .Len (t , list .Providers , 2 )
199
201
require .Len (t , list .Links , 0 )
200
202
})
203
+ t .Run ("RefreshAllProviders" , func (t * testing.T ) {
204
+ t .Parallel ()
205
+ const githubID = "fake-github"
206
+ const gitlabID = "fake-gitlab"
207
+
208
+ githubCalled := false
209
+ githubApp := oidctest .NewFakeIDP (t , oidctest .WithServing (), oidctest .WithRefresh (func (email string ) error {
210
+ githubCalled = true
211
+ return nil
212
+ }))
213
+ gitlabCalled := false
214
+ gitlab := oidctest .NewFakeIDP (t , oidctest .WithServing (), oidctest .WithRefresh (func (email string ) error {
215
+ gitlabCalled = true
216
+ return nil
217
+ }))
218
+
219
+ owner , db := coderdtest .NewWithDatabase (t , & coderdtest.Options {
220
+ ExternalAuthConfigs : []* externalauth.Config {
221
+ githubApp .ExternalAuthConfig (t , githubID , nil , func (cfg * externalauth.Config ) {
222
+ cfg .Type = codersdk .EnhancedExternalAuthProviderGitHub .String ()
223
+ }),
224
+ gitlab .ExternalAuthConfig (t , gitlabID , nil , func (cfg * externalauth.Config ) {
225
+ cfg .Type = codersdk .EnhancedExternalAuthProviderGitLab .String ()
226
+ }),
227
+ },
228
+ })
229
+ ownerUser := coderdtest .CreateFirstUser (t , owner )
230
+ // Just a regular user
231
+ client , user := coderdtest .CreateAnotherUser (t , owner , ownerUser .OrganizationID )
232
+ ctx := testutil .Context (t , testutil .WaitLong )
233
+
234
+ // Log into github & gitlab
235
+ githubApp .ExternalLogin (t , client )
236
+ gitlab .ExternalLogin (t , client )
237
+
238
+ links , err := db .GetExternalAuthLinksByUserID (
239
+ dbauthz .As (ctx , coderdtest .AuthzUserSubject (user , ownerUser .OrganizationID )), user .ID )
240
+ require .NoError (t , err )
241
+ require .Len (t , links , 2 )
242
+
243
+ // Expire the links
244
+ for _ , l := range links {
245
+ _ , err := db .UpdateExternalAuthLink (dbauthz .As (ctx , coderdtest .AuthzUserSubject (user , ownerUser .OrganizationID )), database.UpdateExternalAuthLinkParams {
246
+ ProviderID : l .ProviderID ,
247
+ UserID : l .UserID ,
248
+ UpdatedAt : dbtime .Now (),
249
+ OAuthAccessToken : l .OAuthAccessToken ,
250
+ OAuthRefreshToken : l .OAuthRefreshToken ,
251
+ OAuthExpiry : time .Now ().Add (time .Hour * - 1 ),
252
+ OAuthExtra : l .OAuthExtra ,
253
+ })
254
+ require .NoErrorf (t , err , "expire key for %s" , l .ProviderID )
255
+ }
256
+
257
+ list , err := client .ListExternalAuths (ctx )
258
+ require .NoError (t , err )
259
+ require .Len (t , list .Links , 2 )
260
+ require .True (t , githubCalled , "github should be refreshed" )
261
+ require .True (t , gitlabCalled , "gitlab should be refreshed" )
262
+ })
201
263
}
202
264
203
265
func TestExternalAuthDevice (t * testing.T ) {
0 commit comments