diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/session/WebSession.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/session/WebSession.java index a27191c09e..8af1ef9b81 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/session/WebSession.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/session/WebSession.java @@ -326,6 +326,10 @@ public class WebSession extends BaseWebSession if (!project.isShared() || application.isConfigurationMode()) { getWorkspace().setActiveProject(sessionProject); } + log.info(String.format( + "Project created: [ID=%s, Name=%s, Type=%s, Creator=%s]", + project.getId(), project.getName(), project.getType(), project.getCreator() + )); return sessionProject; } @@ -933,6 +937,11 @@ public class WebSession extends BaseWebSession */ public void deleteSessionProject(@Nullable WebSessionProjectImpl project) { if (project != null) { + RMProject rmProject = project.getRMProject(); + log.info(String.format( + "Project deleted: [ID=%s, Name=%s, Type=%s, Creator=%s]", + rmProject.getId(), rmProject.getName(), rmProject.getType(), rmProject.getCreator() + )); project.dispose(); } getWorkspace().removeProject(project); diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/ConnectionControllerCE.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/ConnectionControllerCE.java index 2db4cf62fb..ad37459eb5 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/ConnectionControllerCE.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/ConnectionControllerCE.java @@ -112,6 +112,11 @@ public class ConnectionControllerCE implements ConnectionController { WSConstants.EventAction.CREATE, WSDataSourceProperty.CONFIGURATION ); + log.info(String.format( + "New connection was created: [info=%s, user=%s]", + WebServiceUtils.getConnectionContainerInfo(newDataSource), + webSession.getUserId() + )); return connectionInfo; } @@ -219,6 +224,11 @@ public class ConnectionControllerCE implements ConnectionController { property ); } + log.info(String.format( + "Connection updated: [info=%s, userId=%s]", + WebServiceUtils.getConnectionContainerInfo(dataSource), + webSession.getUser() + )); return connectionInfo; } @@ -240,6 +250,12 @@ public class ConnectionControllerCE implements ConnectionController { WSConstants.EventAction.DELETE, WSDataSourceProperty.CONFIGURATION ); + + log.info(String.format( + "Connection deleted: [info=%s, userId=%s]", + WebServiceUtils.getConnectionContainerInfo(connectionInfo.getDataSourceContainer()), + webSession.getUserId() + )); return true; } diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java index ccd1592eb5..0d4d00e7ab 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java @@ -39,7 +39,6 @@ import org.jkiss.code.NotNull; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.Log; -import org.jkiss.dbeaver.model.DBConstants; import org.jkiss.dbeaver.model.DBPDataSourceContainer; import org.jkiss.dbeaver.model.app.DBPDataSourceRegistry; import org.jkiss.dbeaver.model.app.DBPProject; @@ -291,6 +290,7 @@ public class WebServiceAdmin implements DBWServiceAdmin { try { var adminSecurityController = webSession.getAdminSecurityController(); adminSecurityController.addUserTeams(user, new String[]{team}, grantor.getUserId()); + return true; } catch (Exception e) { throw new DBWebException("Error granting team", e); @@ -403,6 +403,7 @@ public class WebServiceAdmin implements DBWServiceAdmin { @Override public Boolean setUserAuthRole(WebSession webSession, String userId, String authRole) throws DBWebException { try { + log.info(String.format("User set auth role: [grantorUserId=%s]", webSession.getUserId())); webSession.getAdminSecurityController().setUserAuthRole(userId, authRole); return true; } catch (Exception e) { @@ -518,6 +519,12 @@ public class WebServiceAdmin implements DBWServiceAdmin { } catch (DBException e) { throw new DBWebException("Error saving server configuration", e); } + log.info(String.format( + "Auth provider configuration created: [id=%s, provider=%s, userId=%s]", + providerConfig.getId(), + providerConfig.getProvider(), + webSession.getUserId() + )); return new WebAuthProviderConfiguration(authProvider, providerConfig); } @@ -531,6 +538,7 @@ public class WebServiceAdmin implements DBWServiceAdmin { } catch (DBException e) { throw new DBWebException("Error saving server configuration", e); } + log.info(String.format("Auth provider configuration deleted: [id=%s, userId=%s]", id, webSession.getUserId())); return true; } return false; diff --git a/server/bundles/io.cloudbeaver.service.data.transfer/src/io/cloudbeaver/service/data/transfer/impl/WebServiceDataTransfer.java b/server/bundles/io.cloudbeaver.service.data.transfer/src/io/cloudbeaver/service/data/transfer/impl/WebServiceDataTransfer.java index 310be78fe5..3e1047d82b 100644 --- a/server/bundles/io.cloudbeaver.service.data.transfer/src/io/cloudbeaver/service/data/transfer/impl/WebServiceDataTransfer.java +++ b/server/bundles/io.cloudbeaver.service.data.transfer/src/io/cloudbeaver/service/data/transfer/impl/WebServiceDataTransfer.java @@ -173,6 +173,8 @@ public class WebServiceDataTransfer implements DBWServiceDataTransfer { @Nullable WebSQLResultsInfo resultsInfo ) { sqlProcessor.getWebSession().addInfoMessage("Export data"); + log.info(String.format("Data export started: [userId=%s]", sqlProcessor.getWebSession().getUserId())); + DataTransferProcessorDescriptor processor = DataTransferRegistry.getInstance().getProcessor(parameters.getProcessorId()); String uniqueFileName = makeUniqueFileName(sqlProcessor, processor, parameters.getProcessorProperties()); var outputSettings = parameters.getOutputSettings(); @@ -204,6 +206,7 @@ public class WebServiceDataTransfer implements DBWServiceDataTransfer { webSession.addInfoMessage("Import data"); DataTransferProcessorDescriptor processor = DataTransferRegistry.getInstance().getProcessor(processorId); + log.info(String.format("Data import started: [userId=%s]", webSession.getUserId())); DBSDataContainer dataContainer = sqlContext.getDataContainer(); WebAsyncTaskProcessor runnable = new WebAsyncTaskProcessor<>() { @Override diff --git a/server/bundles/io.cloudbeaver.service.rm/src/io/cloudbeaver/service/rm/impl/WebServiceRM.java b/server/bundles/io.cloudbeaver.service.rm/src/io/cloudbeaver/service/rm/impl/WebServiceRM.java index 82da13d2b7..be715f71ef 100644 --- a/server/bundles/io.cloudbeaver.service.rm/src/io/cloudbeaver/service/rm/impl/WebServiceRM.java +++ b/server/bundles/io.cloudbeaver.service.rm/src/io/cloudbeaver/service/rm/impl/WebServiceRM.java @@ -28,6 +28,7 @@ import io.cloudbeaver.utils.WebEventUtils; import org.jkiss.code.NotNull; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.DBException; +import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.model.rm.RMController; import org.jkiss.dbeaver.model.rm.RMProject; import org.jkiss.dbeaver.model.rm.RMResource; @@ -49,6 +50,8 @@ import java.util.Set; */ public class WebServiceRM implements DBWServiceRM { + private static final Log log = Log.getLog(WebServiceRM.class); + @Override public RMProject[] listProjects(@NotNull WebSession webSession) throws DBWebException { try { @@ -374,6 +377,13 @@ public class WebServiceRM implements DBWServiceRM { new HashSet<>(subjectIds), new HashSet<>(permissions) ); + log.info("Project permissions deleted: [projectIds=%s, subjectIds=%s, permissions=%s, madeBy=%s]" + .formatted( + String.join(",", projectIds), + String.join(",", subjectIds), + String.join(",", permissions), + webSession.getUserId() + )); return true; } catch (Exception e) { throw new DBWebException("Error deleting project permissions", e); @@ -396,6 +406,13 @@ public class WebServiceRM implements DBWServiceRM { new HashSet<>(permissions), webSession.getUserId() ); + log.info("Project permissions added: [projectIds=%s, subjectIds=%s, permissions=%s, madeBy=%s]" + .formatted( + String.join(",", projectIds), + String.join(",", subjectIds), + String.join(",", permissions), + webSession.getUserId() + )); return true; } catch (Exception e) { throw new DBWebException("Error adding project permissions", e); diff --git a/server/bundles/io.cloudbeaver.service.security/src/io/cloudbeaver/service/security/CBEmbeddedSecurityController.java b/server/bundles/io.cloudbeaver.service.security/src/io/cloudbeaver/service/security/CBEmbeddedSecurityController.java index 202ae16846..2e7d91a165 100644 --- a/server/bundles/io.cloudbeaver.service.security/src/io/cloudbeaver/service/security/CBEmbeddedSecurityController.java +++ b/server/bundles/io.cloudbeaver.service.security/src/io/cloudbeaver/service/security/CBEmbeddedSecurityController.java @@ -170,6 +170,7 @@ public class CBEmbeddedSecurityController dbStat.setString(4, defaultAuthRole); } dbStat.execute(); + log.info(String.format("New user created: [userId=%s]", userId)); } saveSubjectMetas(dbCon, userId, metaParameters); String defaultTeamName = getDefaultUserTeam(); @@ -222,6 +223,7 @@ public class CBEmbeddedSecurityController } var event = new WSUserDeletedEvent(userId); application.getEventController().addEvent(event); + log.info(String.format("User deleted: [userId=%s]", userId)); } public void setUserTeams(String userId, String[] teamIds, String grantorId) throws DBCException { @@ -286,6 +288,12 @@ public class CBEmbeddedSecurityController } catch (SQLException e) { throw new RuntimeException(e); } + log.info(String.format( + "User set team role: [userId=%s,teamId=%s, role=%s]", + userId, + teamId, + teamRole + )); } //TODO implement add/delete user teams api @@ -358,6 +366,7 @@ public class CBEmbeddedSecurityController Set currentUserTeams = getCurrentUserTeams(dbCon, userId); + List resultTeamIds = new ArrayList<>(); try (PreparedStatement dbStat = dbCon.prepareStatement( "INSERT INTO {table_prefix}CB_USER_TEAM" + "(USER_ID,TEAM_ID,GRANT_TIME,GRANTED_BY) VALUES(?,?,?,?)") @@ -366,6 +375,7 @@ public class CBEmbeddedSecurityController if (currentUserTeams.contains(teamId)) { continue; } + resultTeamIds.add(teamId); dbStat.setString(1, userId); dbStat.setString(2, teamId); dbStat.setTimestamp(3, new Timestamp(System.currentTimeMillis())); @@ -373,6 +383,12 @@ public class CBEmbeddedSecurityController dbStat.execute(); } } + log.info(String.format( + "User added to team: [userId=%s,team=%s, grantorUserId=%s]", + userId, + String.join(",", resultTeamIds), + grantorId + )); } protected void deleteUserTeams( @@ -392,6 +408,7 @@ public class CBEmbeddedSecurityController } dbStat.execute(); } + log.info(String.format("User deleted from team: [userId=%s,teamIds=%s]", userId, String.join(",", teamIds))); } @NotNull @@ -773,6 +790,7 @@ public class CBEmbeddedSecurityController dbStat.setString(2, userId); dbStat.executeUpdate(); } + log.info(String.format("User updated: [userId=%s, isActive=%s]", userId, enabled)); } @Override @@ -803,6 +821,7 @@ public class CBEmbeddedSecurityController if (dbStat.executeUpdate() <= 0) { throw new SMException("User not found"); } + log.info(String.format("User set auth role: [userId=%s,role=%s]", userId, authRole)); } } @@ -902,6 +921,7 @@ public class CBEmbeddedSecurityController } catch (SQLException e) { throw new DBCException("Error saving user credentials in database", e); } + log.info(String.format("Set credentials for user: [userId=%s,providerId=%s]", userId, authProviderId)); } @Override @@ -916,6 +936,7 @@ public class CBEmbeddedSecurityController } catch (SQLException e) { throw new DBCException("Error deleting user credentials", e); } + log.info(String.format("User credentials deleted: [userId=%s, providerId=%s]", userId, authProviderId)); } @Nullable