diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBApplication.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBApplication.java index ef1ca06451..34fdcd4023 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBApplication.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBApplication.java @@ -702,7 +702,7 @@ public abstract class CBApplication extends BaseWebApplication implements WebAut public Map readConfigurationFile(File configFile) throws DBException { try (Reader reader = new InputStreamReader(new FileInputStream(configFile), StandardCharsets.UTF_8)) { return JSONUtils.parseMap(getGson(), reader); - } catch (IOException e) { + } catch (Exception e) { throw new DBException("Error parsing server configuration", e); } } diff --git a/server/bundles/io.cloudbeaver.service.security/src/io/cloudbeaver/service/security/db/CBDatabase.java b/server/bundles/io.cloudbeaver.service.security/src/io/cloudbeaver/service/security/db/CBDatabase.java index fe791b7689..83607ab788 100644 --- a/server/bundles/io.cloudbeaver.service.security/src/io/cloudbeaver/service/security/db/CBDatabase.java +++ b/server/bundles/io.cloudbeaver.service.security/src/io/cloudbeaver/service/security/db/CBDatabase.java @@ -60,6 +60,7 @@ import java.net.InetAddress; import java.nio.charset.StandardCharsets; import java.sql.*; import java.util.*; +import java.util.stream.Collectors; /** * Database management @@ -275,7 +276,7 @@ public class CBDatabase { } @Nullable - CBDatabaseInitialData getInitialData() { + CBDatabaseInitialData getInitialData() throws DBException { String initialDataPath = databaseConfiguration.getInitialDataConfiguration(); if (CommonUtils.isEmpty(initialDataPath)) { return null; @@ -287,8 +288,7 @@ public class CBDatabase { Gson gson = new GsonBuilder().setLenient().create(); return gson.fromJson(reader, CBDatabaseInitialData.class); } catch (Exception e) { - log.error("Error loading initial data configuration", e); - return null; + throw new DBException("Error loading initial data configuration", e); } } @@ -412,15 +412,26 @@ public class CBDatabase { String adminName = initialData.getAdminName(); String adminPassword = initialData.getAdminPassword(); - - if (!CommonUtils.isEmpty(initialData.getTeams())) { + List initialTeams = initialData.getTeams(); + String defaultTeam = application.getAppConfiguration().getDefaultUserTeam(); + if (CommonUtils.isNotEmpty(defaultTeam)) { + Set initialTeamNames = initialTeams == null + ? Set.of() + : initialTeams.stream().map(SMTeam::getTeamId).collect(Collectors.toSet()); + if (!initialTeamNames.contains(defaultTeam)) { + throw new DBException("Initial teams configuration doesn't contain default team " + defaultTeam); + } + } + if (!CommonUtils.isEmpty(initialTeams)) { // Create teams - for (SMTeam team : initialData.getTeams()) { + for (SMTeam team : initialTeams) { adminSecurityController.createTeam(team.getTeamId(), team.getName(), team.getDescription(), adminName); if (adminName != null && !application.isMultiNode()) { - adminSecurityController.setSubjectPermissions(team.getTeamId(), + adminSecurityController.setSubjectPermissions( + team.getTeamId(), new ArrayList<>(team.getPermissions()), - adminName); + adminName + ); } } }