Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit19c3288

Browse files
committed
Add OAuth2 provider codes and tokens to database
1 parent0b0b03f commit19c3288

21 files changed

+1287
-82
lines changed

‎coderd/database/dbauthz/dbauthz.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -821,13 +821,40 @@ func (q *querier) DeleteOAuth2ProviderAppByID(ctx context.Context, id uuid.UUID)
821821
returnq.db.DeleteOAuth2ProviderAppByID(ctx,id)
822822
}
823823

824+
func (q*querier)DeleteOAuth2ProviderAppCodeByID(ctx context.Context,id uuid.UUID)error {
825+
code,err:=q.db.GetOAuth2ProviderAppCodeByID(ctx,id)
826+
iferr!=nil {
827+
returnerr
828+
}
829+
iferr:=q.authorizeContext(ctx,rbac.ActionDelete,rbac.ResourceOAuth2ProviderAppCodeToken.WithOwner(code.UserID.String()));err!=nil {
830+
returnerr
831+
}
832+
returnq.db.DeleteOAuth2ProviderAppCodeByID(ctx,id)
833+
}
834+
835+
func (q*querier)DeleteOAuth2ProviderAppCodesByAppAndUserID(ctx context.Context,arg database.DeleteOAuth2ProviderAppCodesByAppAndUserIDParams)error {
836+
iferr:=q.authorizeContext(ctx,rbac.ActionDelete,
837+
rbac.ResourceOAuth2ProviderAppCodeToken.WithOwner(arg.UserID.String()));err!=nil {
838+
returnerr
839+
}
840+
returnq.db.DeleteOAuth2ProviderAppCodesByAppAndUserID(ctx,arg)
841+
}
842+
824843
func (q*querier)DeleteOAuth2ProviderAppSecretByID(ctx context.Context,id uuid.UUID)error {
825844
iferr:=q.authorizeContext(ctx,rbac.ActionDelete,rbac.ResourceOAuth2ProviderAppSecret);err!=nil {
826845
returnerr
827846
}
828847
returnq.db.DeleteOAuth2ProviderAppSecretByID(ctx,id)
829848
}
830849

850+
func (q*querier)DeleteOAuth2ProviderAppTokensByAppAndUserID(ctx context.Context,arg database.DeleteOAuth2ProviderAppTokensByAppAndUserIDParams)error {
851+
iferr:=q.authorizeContext(ctx,rbac.ActionDelete,
852+
rbac.ResourceOAuth2ProviderAppCodeToken.WithOwner(arg.UserID.String()));err!=nil {
853+
returnerr
854+
}
855+
returnq.db.DeleteOAuth2ProviderAppTokensByAppAndUserID(ctx,arg)
856+
}
857+
831858
func (q*querier)DeleteOldProvisionerDaemons(ctx context.Context)error {
832859
iferr:=q.authorizeContext(ctx,rbac.ActionDelete,rbac.ResourceSystem);err!=nil {
833860
returnerr
@@ -1161,6 +1188,18 @@ func (q *querier) GetOAuth2ProviderAppByID(ctx context.Context, id uuid.UUID) (d
11611188
returnq.db.GetOAuth2ProviderAppByID(ctx,id)
11621189
}
11631190

1191+
func (q*querier)GetOAuth2ProviderAppCodeByAppIDAndSecret(ctx context.Context,arg database.GetOAuth2ProviderAppCodeByAppIDAndSecretParams) (database.OAuth2ProviderAppCode,error) {
1192+
returnfetch(q.log,q.auth,q.db.GetOAuth2ProviderAppCodeByAppIDAndSecret)(ctx,arg)
1193+
}
1194+
1195+
func (q*querier)GetOAuth2ProviderAppCodeByID(ctx context.Context,id uuid.UUID) (database.OAuth2ProviderAppCode,error) {
1196+
returnfetch(q.log,q.auth,q.db.GetOAuth2ProviderAppCodeByID)(ctx,id)
1197+
}
1198+
1199+
func (q*querier)GetOAuth2ProviderAppSecretByAppIDAndSecret(ctx context.Context,arg database.GetOAuth2ProviderAppSecretByAppIDAndSecretParams) (database.OAuth2ProviderAppSecret,error) {
1200+
returnfetch(q.log,q.auth,q.db.GetOAuth2ProviderAppSecretByAppIDAndSecret)(ctx,arg)
1201+
}
1202+
11641203
func (q*querier)GetOAuth2ProviderAppSecretByID(ctx context.Context,id uuid.UUID) (database.OAuth2ProviderAppSecret,error) {
11651204
iferr:=q.authorizeContext(ctx,rbac.ActionRead,rbac.ResourceOAuth2ProviderAppSecret);err!=nil {
11661205
return database.OAuth2ProviderAppSecret{},err
@@ -1182,6 +1221,15 @@ func (q *querier) GetOAuth2ProviderApps(ctx context.Context) ([]database.OAuth2P
11821221
returnq.db.GetOAuth2ProviderApps(ctx)
11831222
}
11841223

1224+
func (q*querier)GetOAuth2ProviderAppsByUserID(ctx context.Context,userID uuid.UUID) ([]database.GetOAuth2ProviderAppsByUserIDRow,error) {
1225+
// These two authz checks make sure the caller can read all their own tokens.
1226+
iferr:=q.authorizeContext(ctx,rbac.ActionRead,
1227+
rbac.ResourceOAuth2ProviderAppCodeToken.WithOwner(userID.String()));err!=nil {
1228+
return []database.GetOAuth2ProviderAppsByUserIDRow{},err
1229+
}
1230+
returnfetchWithPostFilter(q.auth,q.db.GetOAuth2ProviderAppsByUserID)(ctx,userID)
1231+
}
1232+
11851233
func (q*querier)GetOAuthSigningKey(ctx context.Context) (string,error) {
11861234
iferr:=q.authorizeContext(ctx,rbac.ActionUpdate,rbac.ResourceSystem);err!=nil {
11871235
return"",err
@@ -2203,13 +2251,32 @@ func (q *querier) InsertOAuth2ProviderApp(ctx context.Context, arg database.Inse
22032251
returnq.db.InsertOAuth2ProviderApp(ctx,arg)
22042252
}
22052253

2254+
func (q*querier)InsertOAuth2ProviderAppCode(ctx context.Context,arg database.InsertOAuth2ProviderAppCodeParams) (database.OAuth2ProviderAppCode,error) {
2255+
iferr:=q.authorizeContext(ctx,rbac.ActionCreate,
2256+
rbac.ResourceOAuth2ProviderAppCodeToken.WithOwner(arg.UserID.String()));err!=nil {
2257+
return database.OAuth2ProviderAppCode{},err
2258+
}
2259+
returnq.db.InsertOAuth2ProviderAppCode(ctx,arg)
2260+
}
2261+
22062262
func (q*querier)InsertOAuth2ProviderAppSecret(ctx context.Context,arg database.InsertOAuth2ProviderAppSecretParams) (database.OAuth2ProviderAppSecret,error) {
22072263
iferr:=q.authorizeContext(ctx,rbac.ActionCreate,rbac.ResourceOAuth2ProviderAppSecret);err!=nil {
22082264
return database.OAuth2ProviderAppSecret{},err
22092265
}
22102266
returnq.db.InsertOAuth2ProviderAppSecret(ctx,arg)
22112267
}
22122268

2269+
func (q*querier)InsertOAuth2ProviderAppToken(ctx context.Context,arg database.InsertOAuth2ProviderAppTokenParams) (database.OAuth2ProviderAppToken,error) {
2270+
key,err:=q.db.GetAPIKeyByID(ctx,arg.APIKeyID)
2271+
iferr!=nil {
2272+
return database.OAuth2ProviderAppToken{},err
2273+
}
2274+
iferr:=q.authorizeContext(ctx,rbac.ActionCreate,rbac.ResourceOAuth2ProviderAppCodeToken.WithOwner(key.UserID.String()));err!=nil {
2275+
return database.OAuth2ProviderAppToken{},err
2276+
}
2277+
returnq.db.InsertOAuth2ProviderAppToken(ctx,arg)
2278+
}
2279+
22132280
func (q*querier)InsertOrganization(ctx context.Context,arg database.InsertOrganizationParams) (database.Organization,error) {
22142281
returninsert(q.log,q.auth,rbac.ResourceOrganization,q.db.InsertOrganization)(ctx,arg)
22152282
}

‎coderd/database/dbauthz/dbauthz_test.go

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2265,6 +2265,16 @@ func (s *MethodTestSuite) TestOAuth2ProviderAppSecrets() {
22652265
})
22662266
check.Args(secret.ID).Asserts(rbac.ResourceOAuth2ProviderAppSecret,rbac.ActionRead).Returns(secret)
22672267
}))
2268+
s.Run("GetOAuth2ProviderAppSecretByAppIDAndSecret",s.Subtest(func(db database.Store,check*expects) {
2269+
app:=dbgen.OAuth2ProviderApp(s.T(),db, database.OAuth2ProviderApp{})
2270+
secret:=dbgen.OAuth2ProviderAppSecret(s.T(),db, database.OAuth2ProviderAppSecret{
2271+
AppID:app.ID,
2272+
})
2273+
check.Args(database.GetOAuth2ProviderAppSecretByAppIDAndSecretParams{
2274+
AppID:app.ID,
2275+
HashedSecret:secret.HashedSecret,
2276+
}).Asserts(rbac.ResourceOAuth2ProviderAppSecret,rbac.ActionRead).Returns(secret)
2277+
}))
22682278
s.Run("InsertOAuth2ProviderAppSecret",s.Subtest(func(db database.Store,check*expects) {
22692279
app:=dbgen.OAuth2ProviderApp(s.T(),db, database.OAuth2ProviderApp{})
22702280
check.Args(database.InsertOAuth2ProviderAppSecretParams{
@@ -2290,3 +2300,123 @@ func (s *MethodTestSuite) TestOAuth2ProviderAppSecrets() {
22902300
check.Args(secret.ID).Asserts(rbac.ResourceOAuth2ProviderAppSecret,rbac.ActionDelete)
22912301
}))
22922302
}
2303+
2304+
func (s*MethodTestSuite)TestOAuth2ProviderAppCodes() {
2305+
s.Run("GetOAuth2ProviderAppCodeByID",s.Subtest(func(db database.Store,check*expects) {
2306+
user:=dbgen.User(s.T(),db, database.User{})
2307+
app:=dbgen.OAuth2ProviderApp(s.T(),db, database.OAuth2ProviderApp{})
2308+
code:=dbgen.OAuth2ProviderAppCode(s.T(),db, database.OAuth2ProviderAppCode{
2309+
AppID:app.ID,
2310+
UserID:user.ID,
2311+
})
2312+
check.Args(code.ID).Asserts(rbac.ResourceOAuth2ProviderAppCodeToken.WithOwner(user.ID.String()),rbac.ActionRead).Returns(code)
2313+
}))
2314+
s.Run("GetOAuth2ProviderAppCodeByAppIDAndSecret",s.Subtest(func(db database.Store,check*expects) {
2315+
user:=dbgen.User(s.T(),db, database.User{})
2316+
app:=dbgen.OAuth2ProviderApp(s.T(),db, database.OAuth2ProviderApp{})
2317+
code:=dbgen.OAuth2ProviderAppCode(s.T(),db, database.OAuth2ProviderAppCode{
2318+
AppID:app.ID,
2319+
UserID:user.ID,
2320+
})
2321+
check.Args(database.GetOAuth2ProviderAppCodeByAppIDAndSecretParams{
2322+
AppID:app.ID,
2323+
HashedSecret:code.HashedSecret,
2324+
}).Asserts(rbac.ResourceOAuth2ProviderAppCodeToken.WithOwner(user.ID.String()),rbac.ActionRead).Returns(code)
2325+
}))
2326+
s.Run("InsertOAuth2ProviderAppCode",s.Subtest(func(db database.Store,check*expects) {
2327+
user:=dbgen.User(s.T(),db, database.User{})
2328+
app:=dbgen.OAuth2ProviderApp(s.T(),db, database.OAuth2ProviderApp{})
2329+
check.Args(database.InsertOAuth2ProviderAppCodeParams{
2330+
AppID:app.ID,
2331+
UserID:user.ID,
2332+
}).Asserts(rbac.ResourceOAuth2ProviderAppCodeToken.WithOwner(user.ID.String()),rbac.ActionCreate)
2333+
}))
2334+
s.Run("DeleteOAuth2ProviderAppCodeByID",s.Subtest(func(db database.Store,check*expects) {
2335+
user:=dbgen.User(s.T(),db, database.User{})
2336+
app:=dbgen.OAuth2ProviderApp(s.T(),db, database.OAuth2ProviderApp{})
2337+
code:=dbgen.OAuth2ProviderAppCode(s.T(),db, database.OAuth2ProviderAppCode{
2338+
AppID:app.ID,
2339+
UserID:user.ID,
2340+
})
2341+
check.Args(code.ID).Asserts(rbac.ResourceOAuth2ProviderAppCodeToken.WithOwner(user.ID.String()),rbac.ActionDelete)
2342+
}))
2343+
s.Run("DeleteOAuth2ProviderAppCodesByAppAndUserID",s.Subtest(func(db database.Store,check*expects) {
2344+
user:=dbgen.User(s.T(),db, database.User{})
2345+
app:=dbgen.OAuth2ProviderApp(s.T(),db, database.OAuth2ProviderApp{})
2346+
fori:=0;i<5;i++ {
2347+
_=dbgen.OAuth2ProviderAppCode(s.T(),db, database.OAuth2ProviderAppCode{
2348+
AppID:app.ID,
2349+
UserID:user.ID,
2350+
})
2351+
}
2352+
check.Args(database.DeleteOAuth2ProviderAppCodesByAppAndUserIDParams{
2353+
AppID:app.ID,
2354+
UserID:user.ID,
2355+
}).Asserts(rbac.ResourceOAuth2ProviderAppCodeToken.WithOwner(user.ID.String()),rbac.ActionDelete)
2356+
}))
2357+
}
2358+
2359+
func (s*MethodTestSuite)TestOAuth2ProviderAppTokens() {
2360+
s.Run("GetOAuth2ProviderAppsByUserID",s.Subtest(func(db database.Store,check*expects) {
2361+
user:=dbgen.User(s.T(),db, database.User{})
2362+
key,_:=dbgen.APIKey(s.T(),db, database.APIKey{
2363+
UserID:user.ID,
2364+
})
2365+
app:=dbgen.OAuth2ProviderApp(s.T(),db, database.OAuth2ProviderApp{})
2366+
_=dbgen.OAuth2ProviderApp(s.T(),db, database.OAuth2ProviderApp{})
2367+
secret:=dbgen.OAuth2ProviderAppSecret(s.T(),db, database.OAuth2ProviderAppSecret{
2368+
AppID:app.ID,
2369+
})
2370+
fori:=0;i<5;i++ {
2371+
_=dbgen.OAuth2ProviderAppToken(s.T(),db, database.OAuth2ProviderAppToken{
2372+
AppSecretID:secret.ID,
2373+
APIKeyID:key.ID,
2374+
})
2375+
}
2376+
check.Args(user.ID).Asserts(rbac.ResourceOAuth2ProviderAppCodeToken.WithOwner(user.ID.String()),rbac.ActionRead).Returns([]database.GetOAuth2ProviderAppsByUserIDRow{
2377+
{
2378+
OAuth2ProviderApp: database.OAuth2ProviderApp{
2379+
ID:app.ID,
2380+
CallbackURL:app.CallbackURL,
2381+
Icon:app.Icon,
2382+
Name:app.Name,
2383+
},
2384+
TokenCount:5,
2385+
},
2386+
})
2387+
}))
2388+
s.Run("InsertOAuth2ProviderAppToken",s.Subtest(func(db database.Store,check*expects) {
2389+
user:=dbgen.User(s.T(),db, database.User{})
2390+
key,_:=dbgen.APIKey(s.T(),db, database.APIKey{
2391+
UserID:user.ID,
2392+
})
2393+
app:=dbgen.OAuth2ProviderApp(s.T(),db, database.OAuth2ProviderApp{})
2394+
secret:=dbgen.OAuth2ProviderAppSecret(s.T(),db, database.OAuth2ProviderAppSecret{
2395+
AppID:app.ID,
2396+
})
2397+
check.Args(database.InsertOAuth2ProviderAppTokenParams{
2398+
AppSecretID:secret.ID,
2399+
APIKeyID:key.ID,
2400+
}).Asserts(rbac.ResourceOAuth2ProviderAppCodeToken.WithOwner(user.ID.String()),rbac.ActionCreate)
2401+
}))
2402+
s.Run("DeleteOAuth2ProviderAppTokensByAppAndUserID",s.Subtest(func(db database.Store,check*expects) {
2403+
user:=dbgen.User(s.T(),db, database.User{})
2404+
key,_:=dbgen.APIKey(s.T(),db, database.APIKey{
2405+
UserID:user.ID,
2406+
})
2407+
app:=dbgen.OAuth2ProviderApp(s.T(),db, database.OAuth2ProviderApp{})
2408+
secret:=dbgen.OAuth2ProviderAppSecret(s.T(),db, database.OAuth2ProviderAppSecret{
2409+
AppID:app.ID,
2410+
})
2411+
fori:=0;i<5;i++ {
2412+
_=dbgen.OAuth2ProviderAppToken(s.T(),db, database.OAuth2ProviderAppToken{
2413+
AppSecretID:secret.ID,
2414+
APIKeyID:key.ID,
2415+
})
2416+
}
2417+
check.Args(database.DeleteOAuth2ProviderAppTokensByAppAndUserIDParams{
2418+
AppID:app.ID,
2419+
UserID:user.ID,
2420+
}).Asserts(rbac.ResourceOAuth2ProviderAppCodeToken.WithOwner(user.ID.String()),rbac.ActionDelete)
2421+
}))
2422+
}

‎coderd/database/dbgen/dbgen.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,32 @@ func OAuth2ProviderAppSecret(t testing.TB, db database.Store, seed database.OAut
704704
returnapp
705705
}
706706

707+
funcOAuth2ProviderAppCode(t testing.TB,db database.Store,seed database.OAuth2ProviderAppCode) database.OAuth2ProviderAppCode {
708+
code,err:=db.InsertOAuth2ProviderAppCode(genCtx, database.InsertOAuth2ProviderAppCodeParams{
709+
ID:takeFirst(seed.ID,uuid.New()),
710+
CreatedAt:takeFirst(seed.CreatedAt,dbtime.Now()),
711+
ExpiresAt:takeFirst(seed.CreatedAt,dbtime.Now()),
712+
HashedSecret:takeFirstSlice(seed.HashedSecret, []byte("hashed-secret")),
713+
AppID:takeFirst(seed.AppID,uuid.New()),
714+
UserID:takeFirst(seed.UserID,uuid.New()),
715+
})
716+
require.NoError(t,err,"insert oauth2 app code")
717+
returncode
718+
}
719+
720+
funcOAuth2ProviderAppToken(t testing.TB,db database.Store,seed database.OAuth2ProviderAppToken) database.OAuth2ProviderAppToken {
721+
token,err:=db.InsertOAuth2ProviderAppToken(genCtx, database.InsertOAuth2ProviderAppTokenParams{
722+
ID:takeFirst(seed.ID,uuid.New()),
723+
CreatedAt:takeFirst(seed.CreatedAt,dbtime.Now()),
724+
ExpiresAt:takeFirst(seed.CreatedAt,dbtime.Now()),
725+
HashedSecret:takeFirstSlice(seed.HashedSecret, []byte("hashed-secret")),
726+
AppSecretID:takeFirst(seed.AppSecretID,uuid.New()),
727+
APIKeyID:takeFirst(seed.APIKeyID,uuid.New().String()),
728+
})
729+
require.NoError(t,err,"insert oauth2 app token")
730+
returntoken
731+
}
732+
707733
funcmust[Vany](vV,errerror)V {
708734
iferr!=nil {
709735
panic(err)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp