Merge "Define user scope when parsing server config"
This commit is contained in:
		| @@ -16,6 +16,8 @@ package com.google.gerrit.server.config; | ||||
|  | ||||
| import com.google.gerrit.reviewdb.client.AccountGroup; | ||||
| import com.google.gerrit.server.account.GroupBackend; | ||||
| import com.google.gerrit.server.util.ServerRequestContext; | ||||
| import com.google.gerrit.server.util.ThreadLocalRequestContext; | ||||
| import com.google.inject.Inject; | ||||
|  | ||||
| import org.eclipse.jgit.lib.Config; | ||||
| @@ -25,8 +27,10 @@ import java.util.Collections; | ||||
| public class GitReceivePackGroupsProvider extends GroupSetProvider { | ||||
|   @Inject | ||||
|   public GitReceivePackGroupsProvider(GroupBackend gb, | ||||
|       @GerritServerConfig Config config) { | ||||
|     super(gb, config, "receive", null, "allowGroup"); | ||||
|       @GerritServerConfig Config config, | ||||
|       ThreadLocalRequestContext threadContext, | ||||
|       ServerRequestContext serverCtx) { | ||||
|     super(gb, config, threadContext, serverCtx, "receive", null, "allowGroup"); | ||||
|  | ||||
|     // If no group was set, default to "registered users" | ||||
|     // | ||||
|   | ||||
| @@ -16,6 +16,8 @@ package com.google.gerrit.server.config; | ||||
|  | ||||
| import com.google.gerrit.reviewdb.client.AccountGroup; | ||||
| import com.google.gerrit.server.account.GroupBackend; | ||||
| import com.google.gerrit.server.util.ServerRequestContext; | ||||
| import com.google.gerrit.server.util.ThreadLocalRequestContext; | ||||
| import com.google.inject.Inject; | ||||
|  | ||||
| import org.eclipse.jgit.lib.Config; | ||||
| @@ -26,8 +28,10 @@ import java.util.HashSet; | ||||
| public class GitUploadPackGroupsProvider extends GroupSetProvider { | ||||
|   @Inject | ||||
|   public GitUploadPackGroupsProvider(GroupBackend gb, | ||||
|       @GerritServerConfig Config config) { | ||||
|     super(gb, config, "upload", null, "allowGroup"); | ||||
|       @GerritServerConfig Config config, | ||||
|       ThreadLocalRequestContext threadContext, | ||||
|       ServerRequestContext serverCtx) { | ||||
|     super(gb, config, threadContext, serverCtx, "upload", null, "allowGroup"); | ||||
|  | ||||
|     // If no group was set, default to "registered users" and "anonymous" | ||||
|     // | ||||
|   | ||||
| @@ -19,6 +19,9 @@ import com.google.gerrit.common.data.GroupReference; | ||||
| import com.google.gerrit.reviewdb.client.AccountGroup; | ||||
| import com.google.gerrit.server.account.GroupBackend; | ||||
| import com.google.gerrit.server.account.GroupBackends; | ||||
| import com.google.gerrit.server.util.RequestContext; | ||||
| import com.google.gerrit.server.util.ServerRequestContext; | ||||
| import com.google.gerrit.server.util.ThreadLocalRequestContext; | ||||
| import com.google.inject.Inject; | ||||
| import com.google.inject.Provider; | ||||
|  | ||||
| @@ -37,19 +40,26 @@ public abstract class GroupSetProvider implements | ||||
|  | ||||
|   @Inject | ||||
|   protected GroupSetProvider(GroupBackend groupBackend, | ||||
|       @GerritServerConfig Config config, String section, | ||||
|       @GerritServerConfig Config config, | ||||
|       ThreadLocalRequestContext threadContext, | ||||
|       ServerRequestContext serverCtx, String section, | ||||
|       String subsection, String name) { | ||||
|     String[] groupNames = config.getStringList(section, subsection, name); | ||||
|     ImmutableSet.Builder<AccountGroup.UUID> builder = ImmutableSet.builder(); | ||||
|     for (String n : groupNames) { | ||||
|       GroupReference g = GroupBackends.findBestSuggestion(groupBackend, n); | ||||
|       if (g == null) { | ||||
|         log.warn("Group \"{0}\" not in database, skipping.", n); | ||||
|       } else { | ||||
|         builder.add(g.getUUID()); | ||||
|     RequestContext ctx = threadContext.setContext(serverCtx); | ||||
|     try { | ||||
|       String[] groupNames = config.getStringList(section, subsection, name); | ||||
|       ImmutableSet.Builder<AccountGroup.UUID> builder = ImmutableSet.builder(); | ||||
|       for (String n : groupNames) { | ||||
|         GroupReference g = GroupBackends.findBestSuggestion(groupBackend, n); | ||||
|         if (g == null) { | ||||
|           log.warn("Group \"{}\" not in database, skipping.", n); | ||||
|         } else { | ||||
|           builder.add(g.getUUID()); | ||||
|         } | ||||
|       } | ||||
|       groupIds = builder.build(); | ||||
|     } finally { | ||||
|       threadContext.setContext(ctx); | ||||
|     } | ||||
|     groupIds = builder.build(); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   | ||||
| @@ -15,6 +15,8 @@ | ||||
| package com.google.gerrit.server.config; | ||||
|  | ||||
| import com.google.gerrit.server.account.GroupBackend; | ||||
| import com.google.gerrit.server.util.ServerRequestContext; | ||||
| import com.google.gerrit.server.util.ThreadLocalRequestContext; | ||||
| import com.google.inject.Inject; | ||||
|  | ||||
| import org.eclipse.jgit.lib.Config; | ||||
| @@ -33,7 +35,9 @@ import org.eclipse.jgit.lib.Config; | ||||
| public class ProjectOwnerGroupsProvider extends GroupSetProvider { | ||||
|   @Inject | ||||
|   public ProjectOwnerGroupsProvider(GroupBackend gb, | ||||
|       @GerritServerConfig final Config config) { | ||||
|     super(gb, config, "repository", "*", "ownerGroup"); | ||||
|       @GerritServerConfig final Config config, | ||||
|       ThreadLocalRequestContext context, | ||||
|       ServerRequestContext serverCtx) { | ||||
|     super(gb, config, context, serverCtx, "repository", "*", "ownerGroup"); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,48 @@ | ||||
| // Copyright (C) 2013 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.server.util; | ||||
|  | ||||
| import com.google.gerrit.reviewdb.server.ReviewDb; | ||||
| import com.google.gerrit.server.CurrentUser; | ||||
| import com.google.gerrit.server.InternalUser; | ||||
| import com.google.inject.Provider; | ||||
| import com.google.inject.ProvisionException; | ||||
| import com.google.inject.Inject; | ||||
|  | ||||
| /** RequestContext with an InternalUser making the internals visible. */ | ||||
| public class ServerRequestContext implements RequestContext { | ||||
|   private final InternalUser user; | ||||
|  | ||||
|   @Inject | ||||
|   ServerRequestContext(InternalUser.Factory userFactory) { | ||||
|     this.user = userFactory.create(); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public CurrentUser getCurrentUser() { | ||||
|     return user; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public Provider<ReviewDb> getReviewDbProvider() { | ||||
|     return new Provider<ReviewDb>() { | ||||
|       @Override | ||||
|       public ReviewDb get() { | ||||
|         throw new ProvisionException( | ||||
|             "Automatic ReviewDb only available in request scope"); | ||||
|       } | ||||
|     }; | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Shawn Pearce
					Shawn Pearce