diff options
Diffstat (limited to 'gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitAdminUser.java')
-rw-r--r-- | gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitAdminUser.java | 68 |
1 files changed, 46 insertions, 22 deletions
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitAdminUser.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitAdminUser.java index 0fadff44a3..d02de6c0af 100644 --- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitAdminUser.java +++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitAdminUser.java @@ -17,21 +17,26 @@ package com.google.gerrit.pgm.init; import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.base.Strings; +import com.google.common.collect.ImmutableSet; import com.google.gerrit.common.TimeUtil; import com.google.gerrit.extensions.client.AuthType; +import com.google.gerrit.pgm.init.api.AllUsersNameOnInitProvider; import com.google.gerrit.pgm.init.api.ConsoleUI; import com.google.gerrit.pgm.init.api.InitFlags; import com.google.gerrit.pgm.init.api.InitStep; +import com.google.gerrit.pgm.init.api.SequencesOnInit; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.AccountGroup; -import com.google.gerrit.reviewdb.client.AccountGroupMember; -import com.google.gerrit.reviewdb.client.AccountGroupName; import com.google.gerrit.reviewdb.client.AccountSshKey; import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.account.AccountState; -import com.google.gerrit.server.account.ExternalId; +import com.google.gerrit.server.account.externalids.ExternalId; +import com.google.gerrit.server.config.AllUsersName; +import com.google.gerrit.server.group.InternalGroup; import com.google.gerrit.server.index.account.AccountIndex; import com.google.gerrit.server.index.account.AccountIndexCollection; +import com.google.gerrit.server.index.group.GroupIndex; +import com.google.gerrit.server.index.group.GroupIndexCollection; import com.google.gwtorm.server.SchemaFactory; import com.google.inject.Inject; import java.io.IOException; @@ -39,29 +44,41 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import org.apache.commons.validator.routines.EmailValidator; public class InitAdminUser implements InitStep { - private final ConsoleUI ui; private final InitFlags flags; + private final ConsoleUI ui; + private final AllUsersNameOnInitProvider allUsers; + private final AccountsOnInit accounts; private final VersionedAuthorizedKeysOnInit.Factory authorizedKeysFactory; private final ExternalIdsOnInit externalIds; + private final SequencesOnInit sequencesOnInit; + private final GroupsOnInit groupsOnInit; private SchemaFactory<ReviewDb> dbFactory; - private AccountIndexCollection indexCollection; + private AccountIndexCollection accountIndexCollection; + private GroupIndexCollection groupIndexCollection; @Inject InitAdminUser( InitFlags flags, ConsoleUI ui, + AllUsersNameOnInitProvider allUsers, + AccountsOnInit accounts, VersionedAuthorizedKeysOnInit.Factory authorizedKeysFactory, - ExternalIdsOnInit externalIds) { + ExternalIdsOnInit externalIds, + SequencesOnInit sequencesOnInit, + GroupsOnInit groupsOnInit) { this.flags = flags; this.ui = ui; + this.allUsers = allUsers; + this.accounts = accounts; this.authorizedKeysFactory = authorizedKeysFactory; this.externalIds = externalIds; + this.sequencesOnInit = sequencesOnInit; + this.groupsOnInit = groupsOnInit; } @Override @@ -73,8 +90,13 @@ public class InitAdminUser implements InitStep { } @Inject(optional = true) - void set(AccountIndexCollection indexCollection) { - this.indexCollection = indexCollection; + void set(AccountIndexCollection accountIndexCollection) { + this.accountIndexCollection = accountIndexCollection; + } + + @Inject(optional = true) + void set(GroupIndexCollection groupIndexCollection) { + this.groupIndexCollection = groupIndexCollection; } @Override @@ -85,10 +107,10 @@ public class InitAdminUser implements InitStep { } try (ReviewDb db = dbFactory.open()) { - if (db.accounts().anyAccounts().toList().isEmpty()) { + if (!accounts.hasAnyAccount()) { ui.header("Gerrit Administrator"); if (ui.yesno(true, "Create administrator user")) { - Account.Id id = new Account.Id(db.nextAccountId()); + Account.Id id = new Account.Id(sequencesOnInit.nextAccountId(db)); String username = ui.readString("admin", "username"); String name = ui.readString("Administrator", "name"); String httpPassword = ui.readString("secret", "HTTP password"); @@ -101,18 +123,16 @@ public class InitAdminUser implements InitStep { if (email != null) { extIds.add(ExternalId.createEmail(id, email)); } - externalIds.insert(db, extIds); + externalIds.insert("Add external IDs for initial admin user", extIds); Account a = new Account(id, TimeUtil.nowTs()); a.setFullName(name); a.setPreferredEmail(email); - db.accounts().insert(Collections.singleton(a)); + accounts.insert(a); - AccountGroupName adminGroupName = - db.accountGroupNames().get(new AccountGroup.NameKey("Administrators")); - AccountGroupMember m = - new AccountGroupMember(new AccountGroupMember.Key(id, adminGroupName.getId())); - db.accountGroupMembers().insert(Collections.singleton(m)); + AccountGroup adminGroup = + groupsOnInit.getExistingGroup(db, new AccountGroup.NameKey("Administrators")); + groupsOnInit.addGroupMember(db, adminGroup.getGroupUUID(), id); if (sshKey != null) { VersionedAuthorizedKeysOnInit authorizedKeys = authorizedKeysFactory.create(id).load(); @@ -120,13 +140,17 @@ public class InitAdminUser implements InitStep { authorizedKeys.save("Add SSH key for initial admin user\n"); } - AccountGroup adminGroup = db.accountGroups().get(adminGroupName.getId()); AccountState as = - new AccountState( - a, Collections.singleton(adminGroup.getGroupUUID()), extIds, new HashMap<>()); - for (AccountIndex accountIndex : indexCollection.getWriteIndexes()) { + new AccountState(new AllUsersName(allUsers.get()), a, extIds, new HashMap<>()); + for (AccountIndex accountIndex : accountIndexCollection.getWriteIndexes()) { accountIndex.replace(as); } + + InternalGroup adminInternalGroup = + InternalGroup.create(adminGroup, ImmutableSet.of(id), ImmutableSet.of()); + for (GroupIndex groupIndex : groupIndexCollection.getWriteIndexes()) { + groupIndex.replace(adminInternalGroup); + } } } } |