private long addAccountAgreements( ReviewDb db, ProjectConfig config, List<AccountGroup.UUID> adminGroupUUIDs, Map<Integer, ContributorAgreement> agreements) throws SQLException, OrmException { Statement stmt = ((JdbcSchema) db).getConnection().createStatement(); try { ResultSet rs = stmt.executeQuery( "SELECT account_id, cla_id, accepted_on, reviewed_by," + " reviewed_on, review_comments " + "FROM account_agreements WHERE status = 'V'"); try { long minTime = TimeUtil.nowMs(); while (rs.next()) { Account.Id accountId = new Account.Id(rs.getInt(1)); Account.Id reviewerId = new Account.Id(rs.getInt(4)); if (rs.wasNull()) { reviewerId = accountId; } int claId = rs.getInt(2); ContributorAgreement agreement = agreements.get(claId); if (agreement == null) { continue; // Agreement is invalid } Timestamp acceptedOn = rs.getTimestamp(3); minTime = Math.min(minTime, acceptedOn.getTime()); // Enter Agreement GroupReference individualGroup = getOrCreateGroupForIndividuals(db, config, adminGroupUUIDs, agreement); AccountGroup.Id groupId = db.accountGroups().byUUID(individualGroup.getUUID()).toList().get(0).getId(); final AccountGroupMember.Key key = new AccountGroupMember.Key(accountId, groupId); AccountGroupMember m = db.accountGroupMembers().get(key); if (m == null) { m = new AccountGroupMember(key); db.accountGroupMembersAudit() .insert( Collections.singleton(new AccountGroupMemberAudit(m, reviewerId, acceptedOn))); db.accountGroupMembers().insert(Collections.singleton(m)); } } return minTime; } finally { rs.close(); } } finally { stmt.close(); } }
@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; } try (ReviewDb db = dbFactory.open()) { 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 httpPassword = ui.readString("secret", "HTTP password"); AccountSshKey sshKey = readSshKey(id); String email = readEmail(sshKey); 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)); if (sshKey != null) { db.accountSshKeys().insert(Collections.singleton(sshKey)); } } } } }