From fff6f19dbd2172b2367f856e400f55a2dc064b7a Mon Sep 17 00:00:00 2001 From: David Ostrovsky Date: Thu, 29 Aug 2013 21:32:16 +0200 Subject: [PATCH] Prevent injecting IdentifiedUser for project REST endpoints To support gathering of all UiActions (i. e. REST endpoints) defined for project resource, we can not support injection of IdentifiedUser because the actions gathering take also place when user is not authenticated. Refactor the code to not need injection of IdentifiedUser. Change-Id: I3bbfc4701685adfd0e04b12cedc6dff86c9c105b --- .../gerrit/server/git/MetaDataUpdate.java | 19 ++++++++++++------- .../google/gerrit/server/project/SetHead.java | 7 ++++--- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MetaDataUpdate.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MetaDataUpdate.java index dc08a6c4e9..43e09757a1 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MetaDataUpdate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MetaDataUpdate.java @@ -19,6 +19,7 @@ import com.google.gerrit.server.GerritPersonIdent; import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.extensions.events.GitReferenceUpdated; import com.google.inject.Inject; +import com.google.inject.Provider; import com.google.inject.assistedinject.Assisted; import org.eclipse.jgit.errors.RepositoryNotFoundException; @@ -35,30 +36,34 @@ public class MetaDataUpdate { private final InternalFactory factory; private final GitRepositoryManager mgr; private final PersonIdent serverIdent; - private final PersonIdent userIdent; + private final Provider identifiedUser; @Inject User(InternalFactory factory, GitRepositoryManager mgr, - @GerritPersonIdent PersonIdent serverIdent, IdentifiedUser currentUser) { + @GerritPersonIdent PersonIdent serverIdent, + Provider identifiedUser) { this.factory = factory; this.mgr = mgr; this.serverIdent = serverIdent; - this.userIdent = currentUser.newCommitterIdent( // - serverIdent.getWhen(), // - serverIdent.getTimeZone()); + this.identifiedUser = identifiedUser; } public PersonIdent getUserPersonIdent() { - return userIdent; + return createPersonIdent(); } public MetaDataUpdate create(Project.NameKey name) throws RepositoryNotFoundException, IOException { MetaDataUpdate md = factory.create(name, mgr.openRepository(name)); - md.getCommitBuilder().setAuthor(userIdent); + md.getCommitBuilder().setAuthor(createPersonIdent()); md.getCommitBuilder().setCommitter(serverIdent); return md; } + + private PersonIdent createPersonIdent() { + return identifiedUser.get().newCommitterIdent( + serverIdent.getWhen(), serverIdent.getTimeZone()); + } } public static class Server { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/SetHead.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/SetHead.java index 3e7a42fc9e..2f8e26d767 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/SetHead.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/SetHead.java @@ -25,6 +25,7 @@ import com.google.gerrit.server.auth.AuthException; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.project.SetHead.Input; import com.google.inject.Inject; +import com.google.inject.Provider; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.eclipse.jgit.lib.Constants; @@ -40,10 +41,10 @@ public class SetHead implements RestModifyView { } private final GitRepositoryManager repoManager; - private final IdentifiedUser identifiedUser; + private final Provider identifiedUser; @Inject - SetHead(GitRepositoryManager repoManager, IdentifiedUser identifiedUser) { + SetHead(GitRepositoryManager repoManager, Provider identifiedUser) { this.repoManager = repoManager; this.identifiedUser = identifiedUser; } @@ -73,7 +74,7 @@ public class SetHead implements RestModifyView { if (!repo.getRef(Constants.HEAD).getTarget().getName().equals(ref)) { final RefUpdate u = repo.updateRef(Constants.HEAD, true); - u.setRefLogIdent(identifiedUser.newRefLogIdent()); + u.setRefLogIdent(identifiedUser.get().newRefLogIdent()); RefUpdate.Result res = u.link(ref); switch(res) { case NO_CHANGE: