Skip to content

Commit 70cedd6

Browse files
committed
Clean up dbmem funcs
1 parent d4d6e51 commit 70cedd6

File tree

1 file changed

+68
-81
lines changed

1 file changed

+68
-81
lines changed

coderd/database/dbmem/dbmem.go

Lines changed: 68 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,48 +1168,43 @@ func (q *FakeQuerier) DeleteOAuth2ProviderAppByID(_ context.Context, id uuid.UUI
11681168
q.mutex.Lock()
11691169
defer q.mutex.Unlock()
11701170

1171-
for index, app := range q.oauth2ProviderApps {
1172-
if app.ID == id {
1173-
q.oauth2ProviderApps[index] = q.oauth2ProviderApps[len(q.oauth2ProviderApps)-1]
1174-
q.oauth2ProviderApps = q.oauth2ProviderApps[:len(q.oauth2ProviderApps)-1]
1171+
index := slices.IndexFunc(q.oauth2ProviderApps, func(app database.OAuth2ProviderApp) bool {
1172+
return app.ID == id
1173+
})
11751174

1176-
// Cascade delete into secrets.
1177-
var deletedSecretIDs []uuid.UUID
1178-
var secrets []database.OAuth2ProviderAppSecret
1179-
for _, secret := range q.oauth2ProviderAppSecrets {
1180-
if secret.AppID == id {
1181-
deletedSecretIDs = append(deletedSecretIDs, secret.ID)
1182-
} else {
1183-
secrets = append(secrets, secret)
1184-
}
1185-
}
1186-
q.oauth2ProviderAppSecrets = secrets
1187-
1188-
// Cascade delete into tokens.
1189-
var keyIDsToDelete []string
1190-
var tokens []database.OAuth2ProviderAppToken
1191-
for _, token := range q.oauth2ProviderAppTokens {
1192-
if slice.Contains(deletedSecretIDs, token.AppSecretID) {
1193-
keyIDsToDelete = append(keyIDsToDelete, token.APIKeyID)
1194-
} else {
1195-
tokens = append(tokens, token)
1196-
}
1197-
}
1198-
q.oauth2ProviderAppTokens = tokens
1175+
if index < 0 {
1176+
return sql.ErrNoRows
1177+
}
11991178

1200-
// Delete from API keys.
1201-
var keys []database.APIKey
1202-
for _, key := range q.apiKeys {
1203-
if !slices.Contains(keyIDsToDelete, key.ID) {
1204-
keys = append(keys, key)
1205-
}
1206-
}
1207-
q.apiKeys = keys
1179+
q.oauth2ProviderApps[index] = q.oauth2ProviderApps[len(q.oauth2ProviderApps)-1]
1180+
q.oauth2ProviderApps = q.oauth2ProviderApps[:len(q.oauth2ProviderApps)-1]
12081181

1209-
return nil
1182+
// Cascade delete secrets associated with the deleted app.
1183+
var deletedSecretIDs []uuid.UUID
1184+
q.oauth2ProviderAppSecrets = slices.DeleteFunc(q.oauth2ProviderAppSecrets, func(secret database.OAuth2ProviderAppSecret) bool {
1185+
matches := secret.AppID == id
1186+
if matches {
1187+
deletedSecretIDs = append(deletedSecretIDs, secret.ID)
12101188
}
1211-
}
1212-
return sql.ErrNoRows
1189+
return matches
1190+
})
1191+
1192+
// Cascade delete tokens through the deleted secrets.
1193+
var keyIDsToDelete []string
1194+
q.oauth2ProviderAppTokens = slices.DeleteFunc(q.oauth2ProviderAppTokens, func(token database.OAuth2ProviderAppToken) bool {
1195+
matches := slice.Contains(deletedSecretIDs, token.AppSecretID)
1196+
if matches {
1197+
keyIDsToDelete = append(keyIDsToDelete, token.APIKeyID)
1198+
}
1199+
return matches
1200+
})
1201+
1202+
// Cascade delete API keys linked to the deleted tokens.
1203+
q.apiKeys = slices.DeleteFunc(q.apiKeys, func(key database.APIKey) bool {
1204+
return slices.Contains(keyIDsToDelete, key.ID)
1205+
})
1206+
1207+
return nil
12131208
}
12141209

12151210
func (q *FakeQuerier) DeleteOAuth2ProviderAppCodeByID(_ context.Context, id uuid.UUID) error {
@@ -1249,36 +1244,33 @@ func (q *FakeQuerier) DeleteOAuth2ProviderAppSecretByID(_ context.Context, id uu
12491244
q.mutex.Lock()
12501245
defer q.mutex.Unlock()
12511246

1252-
for index, secret := range q.oauth2ProviderAppSecrets {
1253-
if secret.ID == id {
1254-
q.oauth2ProviderAppSecrets[index] = q.oauth2ProviderAppSecrets[len(q.oauth2ProviderAppSecrets)-1]
1255-
q.oauth2ProviderAppSecrets = q.oauth2ProviderAppSecrets[:len(q.oauth2ProviderAppSecrets)-1]
1256-
1257-
// Cascade delete into tokens.
1258-
var keyIDsToDelete []string
1259-
var tokens []database.OAuth2ProviderAppToken
1260-
for _, token := range q.oauth2ProviderAppTokens {
1261-
if token.AppSecretID == id {
1262-
keyIDsToDelete = append(keyIDsToDelete, token.APIKeyID)
1263-
} else {
1264-
tokens = append(tokens, token)
1265-
}
1266-
}
1267-
q.oauth2ProviderAppTokens = tokens
1247+
index := slices.IndexFunc(q.oauth2ProviderAppSecrets, func(secret database.OAuth2ProviderAppSecret) bool {
1248+
return secret.ID == id
1249+
})
12681250

1269-
// Delete from API keys.
1270-
var keys []database.APIKey
1271-
for _, key := range q.apiKeys {
1272-
if !slices.Contains(keyIDsToDelete, key.ID) {
1273-
keys = append(keys, key)
1274-
}
1275-
}
1276-
q.apiKeys = keys
1251+
if index < 0 {
1252+
return sql.ErrNoRows
1253+
}
12771254

1278-
return nil
1255+
q.oauth2ProviderAppSecrets[index] = q.oauth2ProviderAppSecrets[len(q.oauth2ProviderAppSecrets)-1]
1256+
q.oauth2ProviderAppSecrets = q.oauth2ProviderAppSecrets[:len(q.oauth2ProviderAppSecrets)-1]
1257+
1258+
// Cascade delete tokens created through the deleted secret.
1259+
var keyIDsToDelete []string
1260+
q.oauth2ProviderAppTokens = slices.DeleteFunc(q.oauth2ProviderAppTokens, func(token database.OAuth2ProviderAppToken) bool {
1261+
matches := token.AppSecretID == id
1262+
if matches {
1263+
keyIDsToDelete = append(keyIDsToDelete, token.APIKeyID)
12791264
}
1280-
}
1281-
return sql.ErrNoRows
1265+
return matches
1266+
})
1267+
1268+
// Cascade delete API keys linked to the deleted tokens.
1269+
q.apiKeys = slices.DeleteFunc(q.apiKeys, func(key database.APIKey) bool {
1270+
return slices.Contains(keyIDsToDelete, key.ID)
1271+
})
1272+
1273+
return nil
12821274
}
12831275

12841276
func (q *FakeQuerier) DeleteOAuth2ProviderAppTokensByAppAndUserID(_ context.Context, arg database.DeleteOAuth2ProviderAppTokensByAppAndUserIDParams) error {
@@ -1291,32 +1283,27 @@ func (q *FakeQuerier) DeleteOAuth2ProviderAppTokensByAppAndUserID(_ context.Cont
12911283
defer q.mutex.Unlock()
12921284

12931285
var keyIDsToDelete []string
1294-
var tokens []database.OAuth2ProviderAppToken
1295-
for _, token := range q.oauth2ProviderAppTokens {
1286+
q.oauth2ProviderAppTokens = slices.DeleteFunc(q.oauth2ProviderAppTokens, func(token database.OAuth2ProviderAppToken) bool {
12961287
// Join secrets and keys to see if the token matches.
12971288
secretIdx := slices.IndexFunc(q.oauth2ProviderAppSecrets, func(secret database.OAuth2ProviderAppSecret) bool {
12981289
return secret.ID == token.AppSecretID
12991290
})
13001291
keyIdx := slices.IndexFunc(q.apiKeys, func(key database.APIKey) bool {
13011292
return key.ID == token.APIKeyID
13021293
})
1303-
if secretIdx != -1 && q.oauth2ProviderAppSecrets[secretIdx].AppID == arg.AppID &&
1304-
keyIdx != -1 && q.apiKeys[keyIdx].UserID == arg.UserID {
1294+
matches := secretIdx != -1 &&
1295+
q.oauth2ProviderAppSecrets[secretIdx].AppID == arg.AppID &&
1296+
keyIdx != -1 && q.apiKeys[keyIdx].UserID == arg.UserID
1297+
if matches {
13051298
keyIDsToDelete = append(keyIDsToDelete, token.APIKeyID)
1306-
} else {
1307-
tokens = append(tokens, token)
13081299
}
1309-
}
1310-
q.oauth2ProviderAppTokens = tokens
1300+
return matches
1301+
})
13111302

1312-
// Cascade delete into API keys.
1313-
var keys []database.APIKey
1314-
for _, key := range q.apiKeys {
1315-
if !slices.Contains(keyIDsToDelete, key.ID) {
1316-
keys = append(keys, key)
1317-
}
1318-
}
1319-
q.apiKeys = keys
1303+
// Cascade delete API keys linked to the deleted tokens.
1304+
q.apiKeys = slices.DeleteFunc(q.apiKeys, func(key database.APIKey) bool {
1305+
return slices.Contains(keyIDsToDelete, key.ID)
1306+
})
13201307

13211308
return nil
13221309
}

0 commit comments

Comments
 (0)