Merge "Merge branch 'stable-2.10'"
diff --git a/gerrit-pgm/BUCK b/gerrit-pgm/BUCK
index ded6e34..e9b40cc 100644
--- a/gerrit-pgm/BUCK
+++ b/gerrit-pgm/BUCK
@@ -46,6 +46,7 @@
'//lib:gwtjsonrpc',
'//lib:gwtorm',
'//lib:h2',
+ '//lib/commons:validator',
'//lib/mina:sshd',
],
provided_deps = ['//gerrit-launcher:launcher'],
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
new file mode 100644
index 0000000..c1f0090
--- /dev/null
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitAdminUser.java
@@ -0,0 +1,116 @@
+// Copyright (C) 2014 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.pgm.init;
+
+import com.google.common.base.Strings;
+import com.google.gerrit.common.TimeUtil;
+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.reviewdb.client.Account;
+import com.google.gerrit.reviewdb.client.AccountExternalId;
+import com.google.gerrit.reviewdb.client.AccountGroup;
+import com.google.gerrit.reviewdb.client.AccountGroupMember;
+import com.google.gerrit.reviewdb.client.AuthType;
+import com.google.gerrit.reviewdb.server.ReviewDb;
+import com.google.gwtorm.server.SchemaFactory;
+import com.google.inject.Inject;
+
+import org.apache.commons.validator.routines.EmailValidator;
+
+import java.util.Collections;
+
+public class InitAdminUser implements InitStep {
+ private final ConsoleUI ui;
+ private final InitFlags flags;
+ private SchemaFactory<ReviewDb> dbFactory;
+
+ @Inject
+ InitAdminUser(
+ InitFlags flags,
+ ConsoleUI ui) {
+ this.flags = flags;
+ this.ui = ui;
+ }
+
+ @Override
+ public void run() {
+ }
+
+ @Inject(optional = true)
+ void set(SchemaFactory<ReviewDb> dbFactory) {
+ this.dbFactory = dbFactory;
+ }
+
+ @Override
+ public void postRun() throws Exception {
+ AuthType authType =
+ flags.cfg.getEnum(AuthType.values(), "auth", null, "type", null);
+ if (authType != AuthType.DEVELOPMENT_BECOME_ANY_ACCOUNT) {
+ return;
+ }
+
+ ReviewDb db = dbFactory.open();
+ try {
+ if (db.accounts().anyAccounts().toList().isEmpty()) {
+ ui.header("Gerrit Administrator");
+ if (ui.yesno(true, "Create administrator user")) {
+ Account.Id id = new Account.Id(db.nextAccountId());
+ String username = ui.readString("admin", "username");
+ String name = ui.readString("Administrator", "name");
+ String email = readEmail();
+ String httpPassword = ui.readString("secret", "HTTP password");
+
+ AccountExternalId extUser =
+ new AccountExternalId(id, new AccountExternalId.Key(
+ AccountExternalId.SCHEME_USERNAME, username));
+ if (!Strings.isNullOrEmpty(httpPassword)) {
+ extUser.setPassword(httpPassword);
+ }
+ db.accountExternalIds().insert(Collections.singleton(extUser));
+
+ if (email != null) {
+ AccountExternalId extMailto =
+ new AccountExternalId(id, new AccountExternalId.Key(
+ AccountExternalId.SCHEME_MAILTO, email));
+ extMailto.setEmailAddress(email);
+ db.accountExternalIds().insert(Collections.singleton(extMailto));
+ }
+
+ Account a = new Account(id, TimeUtil.nowTs());
+ a.setFullName(name);
+ a.setPreferredEmail(email);
+ db.accounts().insert(Collections.singleton(a));
+
+ AccountGroupMember m =
+ new AccountGroupMember(new AccountGroupMember.Key(id,
+ new AccountGroup.Id(1)));
+ db.accountGroupMembers().insert(Collections.singleton(m));
+ }
+ }
+ } finally {
+ db.close();
+ }
+ }
+
+ private String readEmail() {
+ String email = ui.readString("admin@example.com", "email");
+ if (email != null && !EmailValidator.getInstance().isValid(email)) {
+ ui.message("error: invalid email address\n");
+ return readEmail();
+ }
+ return email;
+ }
+}
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitModule.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitModule.java
index 1dd9df2..8d08520 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitModule.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitModule.java
@@ -53,6 +53,7 @@
}
step().to(InitIndex.class);
step().to(InitAuth.class);
+ step().to(InitAdminUser.class);
step().to(InitLabels.class);
step().to(InitSendEmail.class);
if (standalone) {