summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdwin Kempin <ekempin@google.com>2018-03-28 15:08:54 +0200
committerEdwin Kempin <ekempin@google.com>2018-03-29 08:33:30 +0200
commitc00e12670fdf5ae9beae271e11be07facb3a2922 (patch)
tree6e9afb4e57c081dab10e821881599e3fc0595aa1
parent38b149abbc64139e03f46178ab87704f0e804846 (diff)
Fix removal of email/password on external ID update
Change-Id: Ia8f06bd02dc4aba95d8ff103f33572f8054b39cf Signed-off-by: Edwin Kempin <ekempin@google.com>
-rw-r--r--gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/account/ExternalIdIT.java23
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/account/externalids/ExternalId.java6
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);
}
}
}