summaryrefslogtreecommitdiffstats
path: root/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitAdminUser.java
diff options
context:
space:
mode:
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.java68
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);
+ }
}
}
}