From a124513d1f1ec3940f39e326802c4ad0c5cf1ddc Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Mon, 23 Apr 2018 16:41:34 +0200 Subject: [PATCH] SONAR-10599 Synchronize login during authentication --- .../org/sonar/db/version/rows-h2.sql | 2 +- .../org/sonar/db/version/schema-h2.ddl | 11 +- .../organization/OrganizationMemberDao.java | 19 +- .../OrganizationMemberMapper.java | 4 +- .../org/sonar/db/property/PropertiesDao.java | 4 + .../sonar/db/property/PropertiesMapper.java | 2 + .../main/java/org/sonar/db/user/UserDao.java | 26 +- .../main/java/org/sonar/db/user/UserDto.java | 20 +- .../java/org/sonar/db/user/UserMapper.java | 8 + .../organization/OrganizationMemberMapper.xml | 14 +- .../sonar/db/property/PropertiesMapper.xml | 10 + .../org/sonar/db/user/UserMapper.xml | 41 ++- .../db/organization/OrganizationDbTester.java | 6 +- .../OrganizationMemberDaoTest.java | 22 +- .../UserWithPermissionTemplateDaoTest.java | 228 ++++++++---- .../sonar/db/property/PropertiesDaoTest.java | 160 +++++---- .../sonar/db/user/GroupMembershipDaoTest.java | 8 +- .../java/org/sonar/db/user/UserDaoTest.java | 83 +++-- .../java/org/sonar/db/user/UserDbTester.java | 14 +- .../java/org/sonar/db/user/UserTesting.java | 14 +- .../select_only_enable_users.xml | 65 ---- .../users_with_permissions.xml | 62 ---- ...missions_should_be_sorted_by_user_name.xml | 58 --- .../version/v72/AddExternalIdToUsers.java | 46 +++ .../version/v72/AddUniqueIndexesOnUsers.java | 62 ++++ .../db/migration/version/v72/DbVersion72.java | 7 + .../MakeSomeColumnsOfUsersNotNullable.java | 72 ++++ .../v72/PopulateExternalIdOnUsers.java | 53 +++ ...xternalIdentityToExternalLoginOnUsers.java | 46 +++ ...uesFromExternalColumnsAndLoginOfUsers.java | 75 ++++ .../version/v72/AddExternalIdToUsersTest.java | 55 +++ .../v72/AddUniqueIndexesOnUsersTest.java | 56 +++ .../version/v72/DbVersion72Test.java | 2 +- ...MakeSomeColumnsOfUsersNotNullableTest.java | 62 ++++ .../v72/PopulateExternalIdOnUsersTest.java | 95 +++++ ...nalIdentityToExternalLoginOnUsersTest.java | 58 +++ ...romExternalColumnsAndLoginOfUsersTest.java | 119 ++++++ .../v72/AddExternalIdToUsersTest/users.sql | 22 ++ .../v72/AddUniqueIndexesOnUsersTest/users.sql | 23 ++ .../users.sql | 23 ++ .../PopulateExternalIdOnUsersTest/users.sql | 23 ++ .../users.sql | 23 ++ .../users.sql | 23 ++ .../org/sonarqube/qa/util/GroupTester.java | 5 + .../org/sonarqube/qa/util/UserTester.java | 2 +- .../EmailAlreadyExistsException.java | 2 +- .../UserIdentityAuthenticator.java | 84 +++-- .../step/SendIssueNotificationsStep.java | 2 +- .../notification/MyNewIssuesNotification.java | 5 +- .../notification/NewIssuesNotification.java | 19 +- .../NewIssuesNotificationFactory.java | 11 +- .../server/organization/ws/DeleteAction.java | 6 +- .../sonar/server/user/ExternalIdentity.java | 12 +- .../org/sonar/server/user/UpdateUser.java | 23 +- .../org/sonar/server/user/UserUpdater.java | 93 +++-- .../org/sonar/server/user/index/UserDoc.java | 11 +- .../sonar/server/user/index/UserIndex.java | 15 - .../user/index/UserIndexDefinition.java | 2 + .../sonar/server/user/index/UserIndexer.java | 42 ++- .../server/user/ws/ChangePasswordAction.java | 23 +- .../sonar/server/user/ws/CreateAction.java | 15 +- .../sonar/server/user/ws/CurrentAction.java | 2 +- .../sonar/server/user/ws/SearchAction.java | 2 +- .../sonar/server/user/ws/UpdateAction.java | 30 +- .../sonar/server/user/ws/UserJsonWriter.java | 2 +- .../server/authentication/InitFilterTest.java | 2 +- .../LocalAuthenticationTest.java | 7 +- .../OAuth2CallbackFilterTest.java | 2 +- .../authentication/SsoAuthenticatorTest.java | 4 +- .../UserIdentityAuthenticatorTest.java | 106 +++++- .../issue/ScmAccountToUserLoaderTest.java | 51 ++- .../step/SendIssueNotificationsStepTest.java | 2 +- .../MyNewIssuesEmailTemplateTest.java | 45 +-- .../MyNewIssuesNotificationTest.java | 3 +- .../NewIssuesEmailTemplateTest.java | 42 +-- .../NewIssuesNotificationTest.java | 283 +++++++-------- .../server/issue/ws/SearchActionTest.java | 6 +- .../measure/custom/ws/CreateActionTest.java | 7 +- .../measure/custom/ws/MetricsActionTest.java | 12 +- .../measure/custom/ws/SearchActionTest.java | 11 +- .../measure/custom/ws/UpdateActionTest.java | 6 +- .../organization/ws/CreateActionTest.java | 14 +- .../ws/RemoveMemberActionTest.java | 28 +- .../server/user/DeprecatedUserFinderTest.java | 57 ++- .../server/user/ExternalIdentityTest.java | 21 +- .../org/sonar/server/user/NewUserTest.java | 7 +- .../server/user/ServerUserSessionTest.java | 250 ++++++++----- .../server/user/UserUpdaterCreateTest.java | 327 ++++------------- .../user/UserUpdaterReactivateTest.java | 339 ++++++++++++++++++ .../server/user/UserUpdaterUpdateTest.java | 301 ++++++++++------ .../server/user/index/UserIndexTest.java | 30 +- .../server/user/index/UserIndexerTest.java | 67 +++- .../user/ws/ChangePasswordActionTest.java | 134 +++---- .../server/user/ws/CreateActionTest.java | 47 ++- .../server/user/ws/CurrentActionTest.java | 6 +- .../server/user/ws/DeactivateActionTest.java | 16 +- .../server/user/ws/SearchActionTest.java | 16 +- .../server/user/ws/UpdateActionTest.java | 15 +- .../server/authentication/UserIdentity.java | 30 ++ .../authentication/UserIdentityTest.java | 58 ++- .../src/main/java/FakeBaseIdProvider.java | 22 +- .../src/main/java/FakeOAuth2IdProvider.java | 20 +- .../org/sonarqube/tests/Category6Suite.java | 3 - .../tests/user/BaseIdentityProviderTest.java | 311 +++++++++------- .../user/OAuth2IdentityProviderTest.java | 23 +- .../OrganizationIdentityProviderTest.java | 24 +- .../tests/user/RealmAuthenticationTest.java | 19 +- .../tests/user/SonarCloudUserSuite.java | 5 + .../sonarqube/tests/user/UsersPageTest.java | 2 +- 109 files changed, 3318 insertions(+), 1697 deletions(-) delete mode 100644 server/sonar-db-dao/src/test/resources/org/sonar/db/permission/template/UserWithPermissionTemplateDaoTest/select_only_enable_users.xml delete mode 100644 server/sonar-db-dao/src/test/resources/org/sonar/db/permission/template/UserWithPermissionTemplateDaoTest/users_with_permissions.xml delete mode 100644 server/sonar-db-dao/src/test/resources/org/sonar/db/permission/template/UserWithPermissionTemplateDaoTest/users_with_permissions_should_be_sorted_by_user_name.xml create mode 100644 server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v72/AddExternalIdToUsers.java create mode 100644 server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v72/AddUniqueIndexesOnUsers.java create mode 100644 server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v72/MakeSomeColumnsOfUsersNotNullable.java create mode 100644 server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v72/PopulateExternalIdOnUsers.java create mode 100644 server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v72/RenameExternalIdentityToExternalLoginOnUsers.java create mode 100644 server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v72/UpdateNullValuesFromExternalColumnsAndLoginOfUsers.java create mode 100644 server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/AddExternalIdToUsersTest.java create mode 100644 server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/AddUniqueIndexesOnUsersTest.java create mode 100644 server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/MakeSomeColumnsOfUsersNotNullableTest.java create mode 100644 server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/PopulateExternalIdOnUsersTest.java create mode 100644 server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/RenameExternalIdentityToExternalLoginOnUsersTest.java create mode 100644 server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/UpdateNullValuesFromExternalColumnsAndLoginOfUsersTest.java create mode 100644 server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v72/AddExternalIdToUsersTest/users.sql create mode 100644 server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v72/AddUniqueIndexesOnUsersTest/users.sql create mode 100644 server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v72/MakeSomeColumnsOfUsersNotNullableTest/users.sql create mode 100644 server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v72/PopulateExternalIdOnUsersTest/users.sql create mode 100644 server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v72/RenameExternalIdentityToExternalLoginOnUsersTest/users.sql create mode 100644 server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v72/UpdateNullValuesFromExternalColumnsAndLoginOfUsersTest/users.sql create mode 100644 server/sonar-server/src/test/java/org/sonar/server/user/UserUpdaterReactivateTest.java diff --git a/server/sonar-db-core/src/main/resources/org/sonar/db/version/rows-h2.sql b/server/sonar-db-core/src/main/resources/org/sonar/db/version/rows-h2.sql index 95b8cf51d7b..48d8e16cc66 100644 --- a/server/sonar-db-core/src/main/resources/org/sonar/db/version/rows-h2.sql +++ b/server/sonar-db-core/src/main/resources/org/sonar/db/version/rows-h2.sql @@ -1,4 +1,4 @@ -INSERT INTO USERS(ID, UUID, LOGIN, NAME, EMAIL, EXTERNAL_IDENTITY, EXTERNAL_IDENTITY_PROVIDER, USER_LOCAL, CRYPTED_PASSWORD, SALT, HASH_METHOD, IS_ROOT, ONBOARDED, CREATED_AT, UPDATED_AT) VALUES (1, 'UuidnciQUUs7Zd3KPvFD', 'admin', 'Administrator', '', 'admin', 'sonarqube', true, '$2a$12$uCkkXmhW5ThVK8mpBvnXOOJRLd64LJeHTeCkSuB3lfaR2N0AYBaSi', null, 'BCRYPT', false, false, '1418215735482', '1418215735482'); +INSERT INTO USERS(ID, UUID, LOGIN, NAME, EMAIL, EXTERNAL_ID, EXTERNAL_LOGIN, EXTERNAL_IDENTITY_PROVIDER, USER_LOCAL, CRYPTED_PASSWORD, SALT, HASH_METHOD, IS_ROOT, ONBOARDED, CREATED_AT, UPDATED_AT) VALUES (1, 'UuidnciQUUs7Zd3KPvFD', 'admin', 'Administrator', '', 'admin', 'admin', 'sonarqube', true, '$2a$12$uCkkXmhW5ThVK8mpBvnXOOJRLd64LJeHTeCkSuB3lfaR2N0AYBaSi', null, 'BCRYPT', false, false, '1418215735482', '1418215735482'); ALTER TABLE USERS ALTER COLUMN ID RESTART WITH 2; INSERT INTO GROUPS(ID, ORGANIZATION_UUID, NAME, DESCRIPTION, CREATED_AT, UPDATED_AT) VALUES (1, 'AVdqnciQUUs7Zd3KPvFD', 'sonar-administrators', 'System administrators', '2011-09-26 22:27:51.0', '2011-09-26 22:27:51.0'); diff --git a/server/sonar-db-core/src/main/resources/org/sonar/db/version/schema-h2.ddl b/server/sonar-db-core/src/main/resources/org/sonar/db/version/schema-h2.ddl index 46b8deff215..896cadc48bb 100644 --- a/server/sonar-db-core/src/main/resources/org/sonar/db/version/schema-h2.ddl +++ b/server/sonar-db-core/src/main/resources/org/sonar/db/version/schema-h2.ddl @@ -454,8 +454,8 @@ CREATE INDEX "IX_ARP_ON_ACTIVE_RULE_ID" ON "ACTIVE_RULE_PARAMETERS" ("ACTIVE_RUL CREATE TABLE "USERS" ( "ID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1), - "UUID" VARCHAR(40), - "LOGIN" VARCHAR(255), + "UUID" VARCHAR(40) NOT NULL, + "LOGIN" VARCHAR(255) NOT NULL, "NAME" VARCHAR(200), "EMAIL" VARCHAR(100), "CRYPTED_PASSWORD" VARCHAR(100), @@ -463,8 +463,9 @@ CREATE TABLE "USERS" ( "HASH_METHOD" VARCHAR(10), "ACTIVE" BOOLEAN DEFAULT TRUE, "SCM_ACCOUNTS" VARCHAR(4000), - "EXTERNAL_IDENTITY" VARCHAR(255), - "EXTERNAL_IDENTITY_PROVIDER" VARCHAR(100), + "EXTERNAL_ID" VARCHAR(255) NOT NULL, + "EXTERNAL_LOGIN" VARCHAR(255) NOT NULL, + "EXTERNAL_IDENTITY_PROVIDER" VARCHAR(100) NOT NULL, "IS_ROOT" BOOLEAN NOT NULL, "USER_LOCAL" BOOLEAN, "ONBOARDED" BOOLEAN NOT NULL, @@ -473,7 +474,9 @@ CREATE TABLE "USERS" ( "HOMEPAGE_TYPE" VARCHAR(40), "HOMEPAGE_PARAMETER" VARCHAR(40) ); +CREATE UNIQUE INDEX "USERS_UUID" ON "USERS" ("UUID"); CREATE UNIQUE INDEX "USERS_LOGIN" ON "USERS" ("LOGIN"); +CREATE UNIQUE INDEX "UNIQ_EXTERNAL_ID" ON "USERS" ("EXTERNAL_IDENTITY_PROVIDER", "EXTERNAL_ID"); CREATE INDEX "USERS_UPDATED_AT" ON "USERS" ("UPDATED_AT"); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberDao.java index cd7cb05eca5..3762ca7b575 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberDao.java @@ -38,8 +38,8 @@ public class OrganizationMemberDao implements Dao { return Optional.ofNullable(mapper(dbSession).select(organizationUuid, userId)); } - public List selectLoginsByOrganizationUuid(DbSession dbSession, String organizationUuid) { - return mapper(dbSession).selectLogins(organizationUuid); + public List selectUserUuidsByOrganizationUuid(DbSession dbSession, String organizationUuid) { + return mapper(dbSession).selectUserUuids(organizationUuid); } public List selectUserIdsByOrganizationUuid(DbSession dbSession, String organizationUuid) { @@ -67,20 +67,19 @@ public class OrganizationMemberDao implements Dao { } /** - * - * @param loginOrganizationConsumer {@link BiConsumer} (login, organization uuid) + * @param userUuidOrganizationConsumer {@link BiConsumer} (uuid, organization uuid) */ - public void selectForUserIndexing(DbSession dbSession, Collection logins, BiConsumer loginOrganizationConsumer) { - executeLargeInputsWithoutOutput(logins, list -> mapper(dbSession).selectForIndexing(list) - .forEach(row -> loginOrganizationConsumer.accept(row.get("login"), row.get("organizationUuid")))); + public void selectForUserIndexing(DbSession dbSession, Collection uuids, BiConsumer userUuidOrganizationConsumer) { + executeLargeInputsWithoutOutput(uuids, list -> mapper(dbSession).selectForIndexing(list) + .forEach(row -> userUuidOrganizationConsumer.accept(row.get("uuid"), row.get("organizationUuid")))); } /** * - * @param loginOrganizationConsumer {@link BiConsumer} (login, organization uuid) + * @param userUuidOrganizationConsumer {@link BiConsumer} (uuid, organization uuid) */ - public void selectAllForUserIndexing(DbSession dbSession, BiConsumer loginOrganizationConsumer) { + public void selectAllForUserIndexing(DbSession dbSession, BiConsumer userUuidOrganizationConsumer) { mapper(dbSession).selectAllForIndexing() - .forEach(row -> loginOrganizationConsumer.accept(row.get("login"), row.get("organizationUuid"))); + .forEach(row -> userUuidOrganizationConsumer.accept(row.get("uuid"), row.get("organizationUuid"))); } } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberMapper.java index 15ab9922f94..defe8395dd2 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationMemberMapper.java @@ -29,11 +29,11 @@ public interface OrganizationMemberMapper { Set selectOrganizationUuidsByUser(@Param("userId") int userId); - List selectLogins(String organizationUuid); + List selectUserUuids(String organizationUuid); List selectUserIds(String organizationUuid); - List> selectForIndexing(@Param("logins") List logins); + List> selectForIndexing(@Param("uuids") List uuids); List> selectAllForIndexing(); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesDao.java index d50118a5db7..c892dc9c205 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesDao.java @@ -161,6 +161,10 @@ public class PropertiesDao implements Dao { return executeLargeInputs(componentIds, getMapper(session)::selectByComponentIds); } + public List selectByKeyAndMatchingValue(DbSession session, String key, String value) { + return getMapper(session).selectByKeyAndMatchingValue(key, value); + } + /** * Saves the specified property and its value. *

diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesMapper.java index 0e50bac5528..d2d181739e2 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesMapper.java @@ -42,6 +42,8 @@ public interface PropertiesMapper { List selectByQuery(@Param("query") PropertyQuery query); + List selectByKeyAndMatchingValue(@Param("key") String key, @Param("value") String value); + List selectDescendantModuleProperties(@Param("moduleUuid") String moduleUuid, @Param(value = "scope") String scope, @Param(value = "excludeDisabled") boolean excludeDisabled); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDao.java index 73c04c6e179..4bd8de97b52 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDao.java @@ -58,6 +58,11 @@ public class UserDao implements Dao { return mapper(session).selectUser(userId); } + @CheckForNull + public UserDto selectByUuid(DbSession session, String uuid) { + return mapper(session).selectByUuid(uuid); + } + /** * Select users by ids, including disabled users. An empty list is returned * if list of ids is empty, without any db round trips. @@ -82,6 +87,14 @@ public class UserDao implements Dao { return executeLargeInputs(logins, mapper(session)::selectByLogins); } + /** + * Select users by uuids, including disabled users. An empty list is returned + * if list of uuids is empty, without any db round trips. + */ + public List selectByUuids(DbSession session, Collection uuids) { + return executeLargeInputs(uuids, mapper(session)::selectByUuids); + } + /** * Gets a list users by their logins. The result does NOT contain {@code null} values for users not found, so * the size of result may be less than the number of keys. @@ -165,12 +178,17 @@ public class UserDao implements Dao { return mapper(dbSession).selectByEmail(email.toLowerCase(Locale.ENGLISH)); } - public void scrollByLogins(DbSession dbSession, Collection logins, Consumer consumer) { + @CheckForNull + public UserDto selectByExternalIdAndIdentityProvider(DbSession dbSession, String externalId, String externalIdentityProvider) { + return mapper(dbSession).selectByExternalIdAndIdentityProvider(externalId, externalIdentityProvider); + } + + public void scrollByUuids(DbSession dbSession, Collection uuids, Consumer consumer) { UserMapper mapper = mapper(dbSession); - executeLargeInputsWithoutOutput(logins, - pageOfLogins -> mapper - .selectByLogins(pageOfLogins) + executeLargeInputsWithoutOutput(uuids, + pageOfUuids -> mapper + .selectByUuids(pageOfUuids) .forEach(consumer)); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDto.java index 5c2cd93a2f3..129d636730c 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDto.java @@ -41,7 +41,8 @@ public class UserDto { private String email; private boolean active = true; private String scmAccounts; - private String externalIdentity; + private String externalId; + private String externalLogin; private String externalIdentityProvider; // Hashed password that may be null in case of external authentication private String cryptedPassword; @@ -151,12 +152,21 @@ public class UserDto { } } - public String getExternalIdentity() { - return externalIdentity; + public String getExternalId() { + return externalId; } - public UserDto setExternalIdentity(String authorithy) { - this.externalIdentity = authorithy; + public UserDto setExternalId(String externalId) { + this.externalId = externalId; + return this; + } + + public String getExternalLogin() { + return externalLogin; + } + + public UserDto setExternalLogin(String externalLogin) { + this.externalLogin = externalLogin; return this; } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserMapper.java index e02486dce16..c83c98a739a 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserMapper.java @@ -27,6 +27,9 @@ import org.sonar.api.user.UserQuery; public interface UserMapper { + @CheckForNull + UserDto selectByUuid(String uuid); + @CheckForNull UserDto selectByLogin(String login); @@ -50,11 +53,16 @@ public interface UserMapper { List selectByLogins(List logins); + List selectByUuids(List uuids); + List selectByIds(@Param("ids") List ids); @CheckForNull UserDto selectByEmail(String email); + @CheckForNull + UserDto selectByExternalIdAndIdentityProvider(@Param("externalId") String externalId, @Param("externalIdentityProvider") String externalExternalIdentityProvider); + void scrollAll(ResultHandler handler); /** diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/organization/OrganizationMemberMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/organization/OrganizationMemberMapper.xml index 49ca6e65af5..68e3767c9e4 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/organization/OrganizationMemberMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/organization/OrganizationMemberMapper.xml @@ -17,8 +17,8 @@ and om.user_id = #{userId, jdbcType=INTEGER} - + select u.uuid from organization_members om inner join users u on om.user_id = u.id where om.organization_uuid=#{organizationUuid,jdbcType=VARCHAR} @@ -37,17 +37,17 @@ diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/property/PropertiesMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/property/PropertiesMapper.xml index eb6f2943942..246bc8090d1 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/property/PropertiesMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/property/PropertiesMapper.xml @@ -179,6 +179,16 @@ and ps.organization_uuid=#{organizationUuid,jdbcType=VARCHAR} + + insert into properties ( diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserMapper.xml index 5626e1c4c68..f28b9383fdd 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserMapper.xml @@ -14,7 +14,8 @@ u.salt as "salt", u.crypted_password as "cryptedPassword", u.hash_method as "hashMethod", - u.external_identity as "externalIdentity", + u.external_id as "externalId", + u.external_login as "externalLogin", u.external_identity_provider as "externalIdentityProvider", u.user_local as "local", u.is_root as "root", @@ -25,6 +26,13 @@ u.homepage_parameter as "homepageParameter" + + + + + +