From e28b70b5d17eb48d012b31215b12e01b743e14b4 Mon Sep 17 00:00:00 2001 From: Aleksandr Skoblikov Date: Tue, 6 Sep 2022 17:27:15 +0300 Subject: [PATCH 1/2] CB-2408 create disabled user api --- .../schema/service.admin.graphqls | 2 +- .../src/io/cloudbeaver/service/admin/DBWServiceAdmin.java | 2 +- .../cloudbeaver/service/admin/WebServiceBindingAdmin.java | 2 +- .../io/cloudbeaver/service/admin/impl/WebServiceAdmin.java | 4 ++-- .../service/security/CBEmbeddedSecurityController.java | 6 +++--- .../src/io/cloudbeaver/service/security/db/CBDatabase.java | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls b/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls index efdbdbf132..dd27bbb77c 100644 --- a/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls +++ b/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls @@ -108,7 +108,7 @@ extend type Query { listRoles(roleId: ID): [AdminRoleInfo!]! listPermissions: [AdminPermissionInfo!]! - createUser(userId: ID!): AdminUserInfo! + createUser(userId: ID!, enabled: Boolean!): AdminUserInfo! deleteUser(userId: ID!): Boolean createRole(roleId: ID!, roleName: String, description: String): AdminRoleInfo! diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/DBWServiceAdmin.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/DBWServiceAdmin.java index 5c2eb5fc34..357bf83552 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/DBWServiceAdmin.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/DBWServiceAdmin.java @@ -53,7 +53,7 @@ public interface DBWServiceAdmin extends DBWService { @WebAction(requirePermissions = DBWConstants.PERMISSION_ADMIN) @NotNull - AdminUserInfo createUser(@NotNull WebSession webSession, String userName) throws DBWebException; + AdminUserInfo createUser(@NotNull WebSession webSession, String userName, @NotNull Boolean enabled) throws DBWebException; @WebAction(requirePermissions = DBWConstants.PERMISSION_ADMIN) boolean deleteUser(@NotNull WebSession webSession, String userName) throws DBWebException; diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceBindingAdmin.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceBindingAdmin.java index 661b571481..e0a8bef7b6 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceBindingAdmin.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceBindingAdmin.java @@ -50,7 +50,7 @@ public class WebServiceBindingAdmin extends WebServiceBindingBase getService(env).listPermissions(getWebSession(env))) .dataFetcher("createUser", - env -> getService(env).createUser(getWebSession(env), env.getArgument("userId"))) + env -> getService(env).createUser(getWebSession(env), env.getArgument("userId"), env.getArgument("enabled"))) .dataFetcher("deleteUser", env -> getService(env).deleteUser(getWebSession(env), env.getArgument("userId"))) .dataFetcher("createRole", 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 b087a8fda2..3d69bd720d 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 @@ -134,7 +134,7 @@ public class WebServiceAdmin implements DBWServiceAdmin { @NotNull @Override - public AdminUserInfo createUser(@NotNull WebSession webSession, String userName) throws DBWebException { + public AdminUserInfo createUser(@NotNull WebSession webSession, String userName, @NotNull Boolean enabled) throws DBWebException { if (userName.isEmpty()) { throw new DBWebException("Empty user name"); } @@ -142,7 +142,7 @@ public class WebServiceAdmin implements DBWServiceAdmin { try { var securityController = webSession.getAdminSecurityController(); - securityController.createUser(userName, Map.of()); + securityController.createUser(userName, Map.of(), enabled); var smUser = securityController.getUserById(userName); return new AdminUserInfo(webSession, new WebUser(smUser)); } catch (Exception 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 a6d2c5de00..24aeab49a5 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 @@ -107,7 +107,7 @@ public class CBEmbeddedSecurityController implements SMAdminController, SMAuthen // Users @Override - public void createUser(String userId, Map metaParameters) throws DBException { + public void createUser(String userId, Map metaParameters, boolean enabled) throws DBException { if (isSubjectExists(userId)) { throw new DBCException("User or role '" + userId + "' already exists"); } @@ -116,7 +116,7 @@ public class CBEmbeddedSecurityController implements SMAdminController, SMAuthen createAuthSubject(dbCon, userId, SUBJECT_USER); try (PreparedStatement dbStat = dbCon.prepareStatement("INSERT INTO CB_USER(USER_ID,IS_ACTIVE,CREATE_TIME) VALUES(?,?,?)")) { dbStat.setString(1, userId); - dbStat.setString(2, CHAR_BOOL_TRUE); + dbStat.setString(2, enabled ? CHAR_BOOL_TRUE : CHAR_BOOL_FALSE); dbStat.setTimestamp(3, new Timestamp(System.currentTimeMillis())); dbStat.execute(); } @@ -1360,7 +1360,7 @@ public class CBEmbeddedSecurityController implements SMAdminController, SMAuthen userId = userIdFromCredentials; if (!isSubjectExists(userId)) { var newUser = new SMUser(userId); - createUser(newUser.getUserId(), newUser.getMetaParameters()); + createUser(newUser.getUserId(), newUser.getMetaParameters(), true); String defaultRoleName = WebAppUtils.getWebApplication().getAppConfiguration().getDefaultUserRole(); if (!CommonUtils.isEmpty(defaultRoleName)) { setUserRoles(userId, new String[]{defaultRoleName}, userId); 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 6bd385c8b6..a83400ac79 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 @@ -246,7 +246,7 @@ public class CBDatabase { if (adminUser == null) { adminUser = new SMUser(adminName); - adminSecurityController.createUser(adminUser.getUserId(), adminUser.getMetaParameters()); + adminSecurityController.createUser(adminUser.getUserId(), adminUser.getMetaParameters(), true); } if (!CommonUtils.isEmpty(adminPassword)) { From 24c6ef66e77cfc7d2e039c15b8e56a74857d9d59 Mon Sep 17 00:00:00 2001 From: Konstantin Vasilev Date: Fri, 9 Sep 2022 10:39:28 +0300 Subject: [PATCH 2/2] CB-2408 feat(core-authentication): Send enabled option on user creation --- webapp/packages/core-authentication/src/UsersResource.ts | 3 ++- .../src/queries/authentication/users/createUser.gql | 6 +++--- webapp/packages/core-sdk/src/sdk.ts | 7 +++++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/webapp/packages/core-authentication/src/UsersResource.ts b/webapp/packages/core-authentication/src/UsersResource.ts index 929113d4a2..9a577c481e 100644 --- a/webapp/packages/core-authentication/src/UsersResource.ts +++ b/webapp/packages/core-authentication/src/UsersResource.ts @@ -98,13 +98,14 @@ export class UsersResource extends CachedMapResource { const { user } = await this.graphQLService.sdk.createUser({ userId, + enabled, ...this.getDefaultIncludes(), ...this.getIncludesMap(userId), }); try { await this.updateCredentials(userId, credentials); - await this.enableUser(userId, enabled, true); + for (const roleId of roles) { await this.grantRole(userId, roleId, true); } diff --git a/webapp/packages/core-sdk/src/queries/authentication/users/createUser.gql b/webapp/packages/core-sdk/src/queries/authentication/users/createUser.gql index 9f33b54016..45b4c9b5f4 100644 --- a/webapp/packages/core-sdk/src/queries/authentication/users/createUser.gql +++ b/webapp/packages/core-sdk/src/queries/authentication/users/createUser.gql @@ -1,5 +1,5 @@ -query createUser($userId: ID!, $includeMetaParameters: Boolean!, $customIncludeOriginDetails: Boolean!) { - user: createUser(userId: $userId) { +query createUser($userId: ID!, $enabled: Boolean!, $includeMetaParameters: Boolean!, $customIncludeOriginDetails: Boolean!) { + user: createUser(userId: $userId, enabled: $enabled) { ...AdminUserInfo - } + } } \ No newline at end of file diff --git a/webapp/packages/core-sdk/src/sdk.ts b/webapp/packages/core-sdk/src/sdk.ts index 5ae56d4f47..8fc381bcd3 100644 --- a/webapp/packages/core-sdk/src/sdk.ts +++ b/webapp/packages/core-sdk/src/sdk.ts @@ -330,6 +330,7 @@ export interface DriverInfo { promotedScore?: Maybe; providerId?: Maybe; providerProperties: Array; + requiresDatabaseName?: Maybe; requiresServerName?: Maybe; sampleURL?: Maybe; } @@ -957,6 +958,7 @@ export interface QueryCreateRoleArgs { export interface QueryCreateUserArgs { + enabled: Scalars['Boolean']; userId: Scalars['ID']; } @@ -1695,6 +1697,7 @@ export type SaveUserMetaParametersQuery = { setUserMetaParameterValues: boolean export type CreateUserQueryVariables = Exact<{ userId: Scalars['ID']; + enabled: Scalars['Boolean']; includeMetaParameters: Scalars['Boolean']; customIncludeOriginDetails: Scalars['Boolean']; }>; @@ -3099,8 +3102,8 @@ export const SaveUserMetaParametersDocument = ` } `; export const CreateUserDocument = ` - query createUser($userId: ID!, $includeMetaParameters: Boolean!, $customIncludeOriginDetails: Boolean!) { - user: createUser(userId: $userId) { + query createUser($userId: ID!, $enabled: Boolean!, $includeMetaParameters: Boolean!, $customIncludeOriginDetails: Boolean!) { + user: createUser(userId: $userId, enabled: $enabled) { ...AdminUserInfo } }