Skip to content

Commit 4ba30a9

Browse files
authored
Merge pull request #1126 from DependencyTrack/dupe-oidcgroups
2 parents c1f0123 + ea33591 commit 4ba30a9

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

src/main/resources/migration/changelog-v5.6.0.xml

+49
Original file line numberDiff line numberDiff line change
@@ -1349,4 +1349,53 @@
13491349
ALTER TABLE "VULNERABILITY" ALTER COLUMN "SEVERITY" TYPE severity USING "SEVERITY"::severity;
13501350
</sql>
13511351
</changeSet>
1352+
1353+
<changeSet id="v5.6.0-19" author="nscuro">
1354+
<sql>
1355+
-- Identify OIDC groups with duplicate names.
1356+
WITH cte_duplicate_group AS (
1357+
SELECT "NAME" AS name
1358+
, MIN("ID") AS canonical_id
1359+
FROM "OIDCGROUP"
1360+
GROUP BY "NAME"
1361+
HAVING COUNT(*) &gt; 1
1362+
),
1363+
-- Delete mappings of duplicate OIDC groups.
1364+
cte_deleted_mapping AS (
1365+
DELETE FROM "MAPPEDOIDCGROUP"
1366+
USING cte_duplicate_group
1367+
, "OIDCGROUP"
1368+
WHERE "MAPPEDOIDCGROUP"."GROUP_ID" = "OIDCGROUP"."ID"
1369+
AND "OIDCGROUP"."NAME" = cte_duplicate_group.name
1370+
AND "OIDCGROUP"."ID" != cte_duplicate_group.canonical_id
1371+
RETURNING "OIDCGROUP"."NAME" AS group_name
1372+
, "MAPPEDOIDCGROUP"."TEAM_ID" AS team_id
1373+
, "MAPPEDOIDCGROUP"."UUID" AS uuid
1374+
),
1375+
-- Delete duplicate OIDC groups.
1376+
cte_deleted_group AS (
1377+
DELETE FROM "OIDCGROUP"
1378+
USING cte_duplicate_group
1379+
WHERE "OIDCGROUP"."NAME" = cte_duplicate_group.name
1380+
AND "OIDCGROUP"."ID" != cte_duplicate_group.canonical_id
1381+
RETURNING "OIDCGROUP"."ID" AS id
1382+
)
1383+
-- Re-create deleted mappings, but using the canonical group ID.
1384+
INSERT INTO "MAPPEDOIDCGROUP" ("GROUP_ID", "TEAM_ID", "UUID")
1385+
SELECT "OIDCGROUP"."ID"
1386+
, cte_deleted_mapping.team_id
1387+
, cte_deleted_mapping.uuid
1388+
FROM cte_deleted_mapping
1389+
INNER JOIN "OIDCGROUP"
1390+
ON "OIDCGROUP"."NAME" = cte_deleted_mapping.group_name
1391+
-- This condition mostly just forces evaluation of cte_deleted_group.
1392+
WHERE "OIDCGROUP"."ID" NOT IN (SELECT id FROM cte_deleted_group)
1393+
-- If the duplicate groups had overlapping mappings, we'll get conflicts here.
1394+
ON CONFLICT ("TEAM_ID", "GROUP_ID") DO NOTHING
1395+
</sql>
1396+
1397+
<createIndex tableName="OIDCGROUP" indexName="OIDCGROUP_NAME_IDX" unique="true">
1398+
<column name="NAME"/>
1399+
</createIndex>
1400+
</changeSet>
13521401
</databaseChangeLog>

0 commit comments

Comments
 (0)