diff options
author | Edwin Kempin <ekempin@google.com> | 2018-03-28 15:08:54 +0200 |
---|---|---|
committer | Edwin Kempin <ekempin@google.com> | 2018-03-29 08:33:30 +0200 |
commit | c00e12670fdf5ae9beae271e11be07facb3a2922 (patch) | |
tree | 6e9afb4e57c081dab10e821881599e3fc0595aa1 | |
parent | 38b149abbc64139e03f46178ab87704f0e804846 (diff) |
Fix removal of email/password on external ID update
Change-Id: Ia8f06bd02dc4aba95d8ff103f33572f8054b39cf
Signed-off-by: Edwin Kempin <ekempin@google.com>
2 files changed, 29 insertions, 0 deletions
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/ExternalIdIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/ExternalIdIT.java index ae59d6f7e7..0f8308cfaa 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/ExternalIdIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/ExternalIdIT.java @@ -873,6 +873,29 @@ public class ExternalIdIT extends AbstractDaemonTest { assertThat(externalIds.byAccount(admin.id)).containsExactlyElementsIn(expectedExternalIds); } + @Test + public void unsetEmail() throws Exception { + ExternalId extId = ExternalId.createWithEmail("x", "1", user.id, "x@example.com"); + extIdsUpdate.create().insert(extId); + + ExternalId extIdWithoutEmail = ExternalId.create("x", "1", user.id); + extIdsUpdate.create().upsert(extIdWithoutEmail); + + assertThat(externalIds.get(extId.key())).isEqualTo(extIdWithoutEmail); + } + + @Test + public void unsetHttpPassword() throws Exception { + ExternalId extId = + ExternalId.createWithPassword(ExternalId.Key.create("y", "1"), user.id, null, "secret"); + extIdsUpdate.create().insert(extId); + + ExternalId extIdWithoutPassword = ExternalId.create("y", "1", user.id); + extIdsUpdate.create().upsert(extIdWithoutPassword); + + assertThat(externalIds.get(extId.key())).isEqualTo(extIdWithoutPassword); + } + private void insertExtIdBehindGerritsBack(ExternalId extId) throws Exception { try (Repository repo = repoManager.openRepository(allUsers); RevWalk rw = new RevWalk(repo); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/ExternalId.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/ExternalId.java index ad119ca588..d89fd9b91e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/ExternalId.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/ExternalId.java @@ -366,11 +366,17 @@ public abstract class ExternalId implements Serializable { // c.setString(...) ensures that account IDs are human readable. c.setString( EXTERNAL_ID_SECTION, externalIdKey, ACCOUNT_ID_KEY, Integer.toString(accountId().get())); + if (email() != null) { c.setString(EXTERNAL_ID_SECTION, externalIdKey, EMAIL_KEY, email()); + } else { + c.unset(EXTERNAL_ID_SECTION, externalIdKey, EMAIL_KEY); } + if (password() != null) { c.setString(EXTERNAL_ID_SECTION, externalIdKey, PASSWORD_KEY, password()); + } else { + c.unset(EXTERNAL_ID_SECTION, externalIdKey, PASSWORD_KEY); } } } |