Skip to content
Snippets Groups Projects

Fix user lookup

Closed Christopher Guindon requested to merge github/fork/davido/fix_user_lookup into master
1 file
+ 43
33
Compare changes
  • Side-by-side
  • Inline
@@ -9,28 +9,13 @@
*/
package org.eclipse.foundation.gerrit.validation;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.ExecutionException;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import com.google.gerrit.entities.Account;
import com.google.gerrit.entities.Project;
import com.google.gerrit.extensions.annotations.Listen;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.account.AccountException;
import com.google.gerrit.server.account.AccountManager;
import com.google.gerrit.server.account.GroupCache;
import com.google.gerrit.server.account.externalids.ExternalId;
import com.google.gerrit.server.account.externalids.ExternalIds;
import com.google.gerrit.server.config.PluginConfig;
import com.google.gerrit.server.config.PluginConfigFactory;
import com.google.gerrit.server.events.CommitReceivedEvent;
@@ -42,14 +27,25 @@ import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.permissions.RefPermission;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.ExecutionException;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import org.eclipse.jgit.errors.ConfigInvalidException;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.revwalk.FooterKey;
import org.eclipse.jgit.revwalk.FooterLine;
import org.eclipse.jgit.revwalk.RevCommit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import retrofit2.Response;
/**
@@ -98,19 +94,26 @@ public class EclipseCommitValidationListener implements CommitValidationListener
private static final String CFG__CLIENT_SECRET = "clientSecret";
private static final String CFG__CLIENT_ID = "clientId";
private static final Logger log = LoggerFactory.getLogger(EclipseCommitValidationListener.class);
private static final String ECA_DOCUMENTATION = "Please see http://wiki.eclipse.org/ECA";
static final Logger log = LoggerFactory.getLogger(EclipseCommitValidationListener.class);
@Inject AccountManager accountManager;
@Inject IdentifiedUser.GenericFactory factory;
@Inject PermissionBackend permissionBackend;
@Inject GroupCache groupCache;
private final ExternalIds externalIds;
private final IdentifiedUser.GenericFactory factory;
private final PermissionBackend permissionBackend;
private final GroupCache groupCache;
private final APIService apiService;
@Inject
public EclipseCommitValidationListener(PluginConfigFactory cfgFactory) {
public EclipseCommitValidationListener(
ExternalIds externalIds,
IdentifiedUser.GenericFactory factory,
PermissionBackend permissionBackend,
GroupCache groupCache,
PluginConfigFactory cfgFactory) {
this.externalIds = externalIds;
this.factory = factory;
this.permissionBackend = permissionBackend;
this.groupCache = groupCache;
PluginConfig config = cfgFactory.getFromGerritConfig(PLUGIN_NAME, true);
RetrofitFactory retrofitFactory =
new RetrofitFactory(
@@ -421,14 +424,21 @@ public class EclipseCommitValidationListener implements CommitValidationListener
*
* We look up both using mailto: and gerrit:
*/
Optional<Account.Id> id = accountManager.lookup(ExternalId.SCHEME_MAILTO + author.getEmailAddress());
if (!id.isPresent())
Optional<ExternalId> id =
externalIds.get(
ExternalId.Key.create(ExternalId.SCHEME_MAILTO, author.getEmailAddress()));
if (!id.isPresent()) {
id =
accountManager.lookup(
ExternalId.SCHEME_GERRIT + author.getEmailAddress().toLowerCase());
if (!id.isPresent()) return Optional.empty();
return Optional.of(factory.create(id.get()));
} catch (AccountException e) {
externalIds.get(
ExternalId.Key.create(
ExternalId.SCHEME_GERRIT, author.getEmailAddress().toLowerCase()));
if (!id.isPresent()) {
return Optional.empty();
}
}
return Optional.of(factory.create(id.get().accountId()));
} catch (ConfigInvalidException | IOException e) {
log.error("Cannot retrieve external id", e);
return Optional.empty();
}
}
Loading