Skip to content

Commit e0f8229

Browse files
Merge pull request #1399 from nscuro/fix-v440-updater
Fix v440Updater
2 parents b5b0653 + ebb6209 commit e0f8229

File tree

1 file changed

+62
-22
lines changed

1 file changed

+62
-22
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,30 @@
11
package org.dependencytrack.upgrade.v440;
22

33
import alpine.logging.Logger;
4-
import alpine.model.Permission;
54
import alpine.persistence.AlpineQueryManager;
65
import alpine.upgrade.AbstractUpgradeItem;
6+
import alpine.upgrade.UpgradeException;
77
import org.dependencytrack.auth.Permissions;
88

99
import java.sql.Connection;
10+
import java.sql.PreparedStatement;
11+
import java.sql.ResultSet;
12+
import java.sql.SQLException;
13+
import java.sql.Statement;
1014

1115
public class v440Updater extends AbstractUpgradeItem {
1216

1317
private static final Logger LOGGER = Logger.getLogger(v440Updater.class);
18+
private static final String STMT_1 = "INSERT INTO \"PERMISSION\" (\"NAME\", \"DESCRIPTION\") VALUES (?, ?)";
19+
private static final String STMT_2 = "SELECT \"ID\" FROM \"PERMISSION\" WHERE \"NAME\" = ? LIMIT 1";
20+
private static final String STMT_3 = "SELECT \"u\".\"ID\" FROM \"MANAGEDUSER\" AS \"u\" INNER JOIN \"MANAGEDUSERS_PERMISSIONS\" AS \"up\" ON \"up\".\"MANAGEDUSER_ID\" = \"u\".\"ID\" WHERE \"up\".\"PERMISSION_ID\" = %d";
21+
private static final String STMT_4 = "INSERT INTO \"MANAGEDUSERS_PERMISSIONS\" (\"MANAGEDUSER_ID\", \"PERMISSION_ID\") VALUES (?, ?)";
22+
private static final String STMT_5 = "SELECT \"u\".\"ID\" FROM \"LDAPUSER\" AS \"u\" INNER JOIN \"LDAPUSERS_PERMISSIONS\" AS \"up\" ON \"up\".\"LDAPUSER_ID\" = \"u\".\"ID\" WHERE \"up\".\"PERMISSION_ID\" = %d";
23+
private static final String STMT_6 = "INSERT INTO \"LDAPUSERS_PERMISSIONS\" (\"LDAPUSER_ID\", \"PERMISSION_ID\") VALUES (?, ?)";
24+
private static final String STMT_7 = "SELECT \"u\".\"ID\" FROM \"OIDCUSER\" AS \"u\" INNER JOIN \"OIDCUSERS_PERMISSIONS\" AS \"up\" ON \"up\".\"OIDCUSER_ID\" = \"u\".\"ID\" WHERE \"up\".\"PERMISSION_ID\" = %d";
25+
private static final String STMT_8 = "INSERT INTO \"OIDCUSERS_PERMISSIONS\" (\"OIDCUSER_ID\", \"PERMISSION_ID\") VALUES (?, ?)";
26+
private static final String STMT_9 = "SELECT \"t\".\"ID\" FROM \"TEAM\" AS \"t\" INNER JOIN \"TEAMS_PERMISSIONS\" AS \"tp\" ON \"tp\".\"TEAM_ID\" = \"t\".\"ID\" WHERE \"tp\".\"PERMISSION_ID\" = %d";
27+
private static final String STMT_10 = "INSERT INTO \"TEAMS_PERMISSIONS\" (\"TEAM_ID\", \"PERMISSION_ID\") VALUES (?, ?)";
1428

1529
@Override
1630
public String getSchemaVersion() {
@@ -20,43 +34,69 @@ public String getSchemaVersion() {
2034
@Override
2135
public void executeUpgrade(final AlpineQueryManager qm, final Connection connection) throws Exception {
2236
LOGGER.info("Creating VIEW_VULNERABILITY permission");
23-
final Permission viewVulnPermission = qm.createPermission(Permissions.VIEW_VULNERABILITY.name(), Permissions.VIEW_VULNERABILITY.getDescription());
37+
PreparedStatement ps = connection.prepareStatement(STMT_1);
38+
ps.setString(1, Permissions.VIEW_VULNERABILITY.name());
39+
ps.setString(2, Permissions.VIEW_VULNERABILITY.getDescription());
40+
ps.executeUpdate();
41+
42+
final long viewVulnPermissionId = getPermissionId(connection, Permissions.VIEW_VULNERABILITY);
43+
final long vulnAnalysisPermissionId = getPermissionId(connection, Permissions.VULNERABILITY_ANALYSIS);
2444

2545
LOGGER.info("Granting VIEW_VULNERABILITY permission to managed users with VULNERABILITY_ANALYSIS permission");
26-
for (var user : qm.getManagedUsers()) {
27-
if (user.getPermissions().stream().map(Permission::getName).anyMatch(Permissions.VULNERABILITY_ANALYSIS.name()::equals)) {
28-
LOGGER.info("Granting VIEW_VULNERABILITY permission to managed user " + user.getUsername());
29-
user.getPermissions().add(viewVulnPermission);
30-
qm.persist(user);
46+
try (final Statement stmt = connection.createStatement()) {
47+
final ResultSet rs = stmt.executeQuery(String.format(STMT_3, vulnAnalysisPermissionId));
48+
while (rs.next()) {
49+
ps = connection.prepareStatement(STMT_4);
50+
ps.setLong(1, rs.getLong(1));
51+
ps.setLong(2, viewVulnPermissionId);
52+
ps.executeUpdate();
3153
}
3254
}
3355

3456
LOGGER.info("Granting VIEW_VULNERABILITY permission to LDAP users with VULNERABILITY_ANALYSIS permission");
35-
for (var user : qm.getLdapUsers()) {
36-
if (user.getPermissions().stream().map(Permission::getName).anyMatch(Permissions.VULNERABILITY_ANALYSIS.name()::equals)) {
37-
LOGGER.info("Granting VIEW_VULNERABILITY permission to LDAP user " + user.getUsername());
38-
user.getPermissions().add(viewVulnPermission);
39-
qm.persist(user);
57+
try (final Statement stmt = connection.createStatement()) {
58+
final ResultSet rs = stmt.executeQuery(String.format(STMT_5, vulnAnalysisPermissionId));
59+
while (rs.next()) {
60+
ps = connection.prepareStatement(STMT_6);
61+
ps.setLong(1, rs.getLong(1));
62+
ps.setLong(2, viewVulnPermissionId);
63+
ps.executeUpdate();
4064
}
4165
}
4266

4367
LOGGER.info("Granting VIEW_VULNERABILITY permission to OIDC users with VULNERABILITY_ANALYSIS permission");
44-
for (var user : qm.getOidcUsers()) {
45-
if (user.getPermissions().stream().map(Permission::getName).anyMatch(Permissions.VULNERABILITY_ANALYSIS.name()::equals)) {
46-
LOGGER.info("Granting VIEW_VULNERABILITY permission to OIDC user " + user.getUsername());
47-
user.getPermissions().add(viewVulnPermission);
48-
qm.persist(user);
68+
try (final Statement stmt = connection.createStatement()) {
69+
final ResultSet rs = stmt.executeQuery(String.format(STMT_7, vulnAnalysisPermissionId));
70+
while (rs.next()) {
71+
ps = connection.prepareStatement(STMT_8);
72+
ps.setLong(1, rs.getLong(1));
73+
ps.setLong(2, viewVulnPermissionId);
74+
ps.executeUpdate();
4975
}
5076
}
5177

5278
LOGGER.info("Granting VIEW_VULNERABILITY permission to teams with VULNERABILITY_ANALYSIS permission");
53-
for (var team : qm.getTeams()) {
54-
if (team.getPermissions().stream().map(Permission::getName).anyMatch(Permissions.VULNERABILITY_ANALYSIS.name()::equals)) {
55-
LOGGER.info("Granting VIEW_VULNERABILITY permission to team " + team.getName());
56-
team.getPermissions().add(viewVulnPermission);
57-
qm.persist(team);
79+
try (final Statement stmt = connection.createStatement()) {
80+
final ResultSet rs = stmt.executeQuery(String.format(STMT_9, vulnAnalysisPermissionId));
81+
while (rs.next()) {
82+
ps = connection.prepareStatement(STMT_10);
83+
ps.setLong(1, rs.getLong(1));
84+
ps.setLong(2, viewVulnPermissionId);
85+
ps.executeUpdate();
5886
}
5987
}
6088
}
6189

90+
private long getPermissionId(final Connection connection, final Permissions permission) throws SQLException, UpgradeException {
91+
final PreparedStatement ps = connection.prepareStatement(STMT_2);
92+
ps.setString(1, permission.name());
93+
94+
final ResultSet rs = ps.executeQuery();
95+
if (!rs.next()) {
96+
throw new UpgradeException("Unable to determine ID of permission " + permission.name());
97+
}
98+
99+
return rs.getLong(1);
100+
}
101+
62102
}

0 commit comments

Comments
 (0)