Adapt to the Gerrit master ExternalId refactoring
Gerrit master does not have anymore AccountExternalId and needs a
different way to look for account ids from the username.
Change-Id: I408ee04f6c36ea306272e22b8ca47fd2a9065438
diff --git a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/IdentifiedUserGitHubLoginProvider.java b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/IdentifiedUserGitHubLoginProvider.java
index 4ea4494..c5c7161 100644
--- a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/IdentifiedUserGitHubLoginProvider.java
+++ b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/IdentifiedUserGitHubLoginProvider.java
@@ -15,7 +15,6 @@
package com.googlesource.gerrit.plugins.github.oauth;
import com.google.gerrit.common.Nullable;
-import com.google.gerrit.reviewdb.client.AccountExternalId;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.account.AccountCache;
import com.google.gerrit.server.account.AccountState;
@@ -34,7 +33,7 @@
private static final Logger log =
LoggerFactory.getLogger(IdentifiedUserGitHubLoginProvider.class);
public static final String EXTERNAL_ID_PREFIX =
- AccountExternalId.SCHEME_EXTERNAL + OAuthWebFilter.GITHUB_EXT_ID;
+ ExternalId.SCHEME_EXTERNAL + ":" + OAuthWebFilter.GITHUB_EXT_ID;
private final Provider<IdentifiedUser> userProvider;
private final GitHubOAuthConfig config;
@@ -80,7 +79,7 @@
AccountState account = accountCache.getByUsername(username);
Collection<ExternalId> externalIds = account.getExternalIds();
for (ExternalId accountExternalId : externalIds) {
- String key = accountExternalId.asAccountExternalId().getKey().get();
+ String key = accountExternalId.key().get();
if (key.startsWith(EXTERNAL_ID_PREFIX)) {
return new AccessToken(key.substring(EXTERNAL_ID_PREFIX.length()));
}
diff --git a/github-plugin/src/main/java/com/google/gerrit/server/account/AccountImporter.java b/github-plugin/src/main/java/com/google/gerrit/server/account/AccountImporter.java
index ef9ba3c..dd8f712 100644
--- a/github-plugin/src/main/java/com/google/gerrit/server/account/AccountImporter.java
+++ b/github-plugin/src/main/java/com/google/gerrit/server/account/AccountImporter.java
@@ -23,54 +23,48 @@
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Account.Id;
-import com.google.gerrit.reviewdb.client.AccountExternalId;
-import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.account.CreateAccount.Factory;
+import com.google.gerrit.server.account.externalids.ExternalId;
+import com.google.gerrit.server.account.externalids.ExternalIdsUpdate;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
-import com.google.inject.Provider;
import java.io.IOException;
-import java.util.Arrays;
import org.apache.http.HttpStatus;
import org.eclipse.jgit.errors.ConfigInvalidException;
public class AccountImporter {
private final Factory createAccountFactory;
- private final Provider<ReviewDb> schema;
+ private final ExternalIdsUpdate.Server externalIdsUpdateServer;
@Inject
public AccountImporter(
- final CreateAccount.Factory createAccountFactory, final Provider<ReviewDb> schema) {
+ final CreateAccount.Factory createAccountFactory,
+ ExternalIdsUpdate.Server externalIdsUpdateServer) {
this.createAccountFactory = createAccountFactory;
- this.schema = schema;
+ this.externalIdsUpdateServer = externalIdsUpdateServer;
}
public Account.Id importAccount(String login, String name, String email)
throws IOException, BadRequestException, ResourceConflictException,
UnprocessableEntityException, OrmException, ConfigInvalidException {
- try (ReviewDb db = schema.get()) {
- CreateAccount createAccount = createAccountFactory.create(login);
- AccountInput accountInput = new AccountInput();
- accountInput.email = email;
- accountInput.username = login;
- accountInput.name = MoreObjects.firstNonNull(name, login);
- Response<AccountInfo> accountResponse =
- createAccount.apply(TopLevelResource.INSTANCE, accountInput);
- if (accountResponse.statusCode() != HttpStatus.SC_CREATED) {
- throw new IOException(
- "Cannot import GitHub account "
- + login
- + ": HTTP Status "
- + accountResponse.statusCode());
- }
- Id accountId = new Account.Id(accountResponse.value()._accountId.intValue());
- db.accountExternalIds()
- .insert(
- Arrays.asList(
- new AccountExternalId(
- accountId,
- new AccountExternalId.Key(AccountExternalId.SCHEME_GERRIT, login))));
- return accountId;
+ CreateAccount createAccount = createAccountFactory.create(login);
+ AccountInput accountInput = new AccountInput();
+ accountInput.email = email;
+ accountInput.username = login;
+ accountInput.name = MoreObjects.firstNonNull(name, login);
+ Response<AccountInfo> accountResponse =
+ createAccount.apply(TopLevelResource.INSTANCE, accountInput);
+ if (accountResponse.statusCode() != HttpStatus.SC_CREATED) {
+ throw new IOException(
+ "Cannot import GitHub account "
+ + login
+ + ": HTTP Status "
+ + accountResponse.statusCode());
}
+ Id accountId = new Account.Id(accountResponse.value()._accountId.intValue());
+ externalIdsUpdateServer
+ .create()
+ .insert(ExternalId.create(ExternalId.SCHEME_GERRIT, login, accountId));
+ return accountId;
}
}
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GitHubOAuthServiceProvider.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GitHubOAuthServiceProvider.java
index 7a52be1..7ee4dbf 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GitHubOAuthServiceProvider.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GitHubOAuthServiceProvider.java
@@ -19,7 +19,7 @@
import com.google.gerrit.extensions.auth.oauth.OAuthToken;
import com.google.gerrit.extensions.auth.oauth.OAuthUserInfo;
import com.google.gerrit.extensions.auth.oauth.OAuthVerifier;
-import com.google.gerrit.reviewdb.client.AccountExternalId;
+import com.google.gerrit.server.account.externalids.ExternalId;
import com.google.inject.Inject;
import com.googlesource.gerrit.plugins.github.oauth.GitHubOAuthConfig;
import com.googlesource.gerrit.plugins.github.oauth.OAuthProtocol;
@@ -65,7 +65,7 @@
GHMyself myself = hub.getMyself();
String login = myself.getLogin();
return new OAuthUserInfo(
- AccountExternalId.SCHEME_GERRIT + login, login, myself.getEmail(), myself.getName(), null);
+ ExternalId.SCHEME_GERRIT + login, login, myself.getEmail(), myself.getName(), null);
}
@Override
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/filters/GitHubOAuthFilter.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/filters/GitHubOAuthFilter.java
index 5316d13..60f3132 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/filters/GitHubOAuthFilter.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/filters/GitHubOAuthFilter.java
@@ -15,7 +15,6 @@
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
-import com.google.gerrit.reviewdb.client.AccountExternalId;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.account.AccountCache;
@@ -71,17 +70,21 @@
if (!hubLogin.isLoggedIn()
&& !OAuthFilter.skipOAuth((HttpServletRequest) request)
&& user.isIdentifiedUser()) {
- AccountExternalId gitHubExtId = getGitHubExternalId(user);
+ ExternalId gitHubExtId = getGitHubExternalId(user);
String oauthToken =
- gitHubExtId.getSchemeRest().substring(OAuthWebFilter.GITHUB_EXT_ID.length());
+ gitHubExtId
+ .key()
+ .get()
+ .substring(
+ ExternalId.SCHEME_EXTERNAL.length() + OAuthWebFilter.GITHUB_EXT_ID.length() + 1);
hubLogin.login(new AccessToken(oauthToken));
}
chain.doFilter(request, response);
}
- private AccountExternalId getGitHubExternalId(CurrentUser user) {
+ private ExternalId getGitHubExternalId(CurrentUser user) {
Collection<ExternalId> accountExtIds =
accountCache.get(((IdentifiedUser) user).getAccountId()).getExternalIds();
Collection<ExternalId> gitHubExtId =
@@ -101,7 +104,7 @@
throw new IllegalStateException(
"Current Gerrit user " + user.getUserName() + " has no GitHub OAuth external ID");
}
- return gitHubExtId.iterator().next().asAccountExternalId();
+ return gitHubExtId.iterator().next();
}
@Override
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestImportJob.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestImportJob.java
index f0bf9df..646737e 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestImportJob.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestImportJob.java
@@ -20,13 +20,13 @@
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
import com.google.gerrit.reviewdb.client.Account;
-import com.google.gerrit.reviewdb.client.AccountExternalId;
import com.google.gerrit.reviewdb.client.Change.Id;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.client.Project.NameKey;
-import com.google.gerrit.reviewdb.server.AccountExternalIdAccess;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.account.AccountImporter;
+import com.google.gerrit.server.account.externalids.ExternalId;
+import com.google.gerrit.server.account.externalids.ExternalIds;
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.project.ProjectCache;
import com.google.gerrit.server.project.ProjectState;
@@ -39,6 +39,7 @@
import com.googlesource.gerrit.plugins.github.oauth.ScopedProvider;
import java.io.IOException;
import java.util.List;
+import java.util.Optional;
import org.eclipse.jgit.api.FetchCommand;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
@@ -82,6 +83,7 @@
private final int prId;
private final GitRepositoryManager repoMgr;
private final int jobIndex;
+ private final ExternalIds externalIds;
private PullRequestCreateChange createChange;
private Project project;
private GitJobStatus status;
@@ -98,6 +100,7 @@
AccountImporter accountImporter,
GitHubRepository.Factory gitHubRepoFactory,
ScopedProvider<GitHubLogin> ghLoginProvider,
+ ExternalIds externalIds,
@Assisted("index") int jobIndex,
@Assisted("organisation") String organisation,
@Assisted("name") String repoName,
@@ -114,6 +117,7 @@
this.status = new GitJobStatus(jobIndex);
this.schema = schema;
this.accountImporter = accountImporter;
+ this.externalIds = externalIds;
}
private Project fetchGerritProject(
@@ -212,14 +216,20 @@
ReviewDb db, String login, String name, String email)
throws OrmException, BadRequestException, ResourceConflictException,
UnprocessableEntityException, IOException, ConfigInvalidException {
- AccountExternalId.Key userExtKey =
- new AccountExternalId.Key(AccountExternalId.SCHEME_USERNAME, login);
- AccountExternalIdAccess gerritExtIds = db.accountExternalIds();
- AccountExternalId userExtId = gerritExtIds.get(userExtKey);
- if (userExtId == null) {
- return accountImporter.importAccount(login, name, email);
+ Optional<ExternalId> gerritId = externalIdByScheme(ExternalId.SCHEME_GERRIT, login);
+ if (gerritId.isPresent()) {
+ return gerritId.get().accountId();
}
- return userExtId.getAccountId();
+ return accountImporter.importAccount(login, name, email);
+ }
+
+ private Optional<ExternalId> externalIdByScheme(String scheme, String id) {
+ try {
+ return Optional.ofNullable(externalIds.get(ExternalId.Key.create(scheme, id)));
+ } catch (IOException | ConfigInvalidException e) {
+ LOG.error("Unable to get external id for " + scheme + ":" + id, e);
+ return Optional.empty();
+ }
}
private String getChangeMessage(GHPullRequest pr) {