Fix "Authentication required" in serviceuser plugin

This error occurred when serviceuser plugin tried to parse a
GroupsCollection via public REST API of the core when
ValidateServiceUserCommits tried to resolve the committer as a service
user.

Bug: Issue 14193
Change-Id: Idb9ba5bcbd38cd5c81cc90731397b75290b31ea7
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetOwner.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetOwner.java
index 31c2eb6..7686d4b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetOwner.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetOwner.java
@@ -30,6 +30,8 @@
 import com.google.gerrit.server.project.ProjectLevelConfig;
 import com.google.gerrit.server.restapi.group.GroupJson;
 import com.google.gerrit.server.restapi.group.GroupsCollection;
+import com.google.gerrit.server.util.ManualRequestContext;
+import com.google.gerrit.server.util.OneOffRequestContext;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
@@ -39,28 +41,33 @@
   private final String pluginName;
   private final ProjectCache projectCache;
   private final GroupJson json;
+  private final OneOffRequestContext requestContext;
 
   @Inject
   GetOwner(
       GroupsCollection groups,
       @PluginName String pluginName,
       ProjectCache projectCache,
-      GroupJson json) {
+      GroupJson json,
+      OneOffRequestContext requestContext) {
     this.groups = groups;
     this.pluginName = pluginName;
     this.projectCache = projectCache;
     this.json = json;
+    this.requestContext = requestContext;
   }
 
   @Override
   public Response<GroupInfo> apply(ServiceUserResource rsrc)
       throws RestApiException, PermissionBackendException {
-    ProjectLevelConfig storage = projectCache.getAllProjects().getConfig(pluginName + ".db");
-    String owner = storage.get().getString(USER, rsrc.getUser().getUserName().get(), KEY_OWNER);
-    if (owner != null) {
-      GroupDescription.Basic group =
-          groups.parse(TopLevelResource.INSTANCE, IdString.fromDecoded(owner)).getGroup();
-      return Response.<GroupInfo>ok(json.format(group));
+    try (ManualRequestContext ctx = requestContext.open()) {
+      ProjectLevelConfig storage = projectCache.getAllProjects().getConfig(pluginName + ".db");
+      String owner = storage.get().getString(USER, rsrc.getUser().getUserName().get(), KEY_OWNER);
+      if (owner != null) {
+        GroupDescription.Basic group =
+            groups.parse(TopLevelResource.INSTANCE, IdString.fromDecoded(owner)).getGroup();
+        return Response.<GroupInfo>ok(json.format(group));
+      }
     }
     return Response.none();
   }