From f4e84de1ae8d57e7fbec03a30a5df1c729eb95db Mon Sep 17 00:00:00 2001 From: Shawn Pearce Date: Sun, 19 Feb 2017 20:43:53 -0800 Subject: [PATCH] Convert viewCaches to PermissionBackend Change-Id: Id07c11d605b628815a709a13b8f0bd693ce9fe9a --- .../gerrit/metrics/dropwizard/GetMetric.java | 14 +++++++++----- .../gerrit/metrics/dropwizard/ListMetrics.java | 15 ++++++++++----- .../metrics/dropwizard/MetricsCollection.java | 12 ++++++++---- .../server/account/CapabilityControl.java | 8 +------- .../gerrit/server/config/CachesCollection.java | 18 ++++++++---------- 5 files changed, 36 insertions(+), 31 deletions(-) diff --git a/gerrit-server/src/main/java/com/google/gerrit/metrics/dropwizard/GetMetric.java b/gerrit-server/src/main/java/com/google/gerrit/metrics/dropwizard/GetMetric.java index 52e35c332d..f0ae97eddf 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/metrics/dropwizard/GetMetric.java +++ b/gerrit-server/src/main/java/com/google/gerrit/metrics/dropwizard/GetMetric.java @@ -17,10 +17,14 @@ package com.google.gerrit.metrics.dropwizard; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.CurrentUser; +import com.google.gerrit.server.permissions.GlobalPermission; +import com.google.gerrit.server.permissions.PermissionBackend; +import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.inject.Inject; import org.kohsuke.args4j.Option; class GetMetric implements RestReadView { + private final PermissionBackend permissionBackend; private final CurrentUser user; private final DropWizardMetricMaker metrics; @@ -28,16 +32,16 @@ class GetMetric implements RestReadView { boolean dataOnly; @Inject - GetMetric(CurrentUser user, DropWizardMetricMaker metrics) { + GetMetric(PermissionBackend permissionBackend, CurrentUser user, DropWizardMetricMaker metrics) { + this.permissionBackend = permissionBackend; this.user = user; this.metrics = metrics; } @Override - public MetricJson apply(MetricResource resource) throws AuthException { - if (!user.getCapabilities().canViewCaches()) { - throw new AuthException("restricted to viewCaches"); - } + public MetricJson apply(MetricResource resource) + throws AuthException, PermissionBackendException { + permissionBackend.user(user).check(GlobalPermission.VIEW_CACHES); return new MetricJson( resource.getMetric(), metrics.getAnnotations(resource.getName()), dataOnly); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/metrics/dropwizard/ListMetrics.java b/gerrit-server/src/main/java/com/google/gerrit/metrics/dropwizard/ListMetrics.java index 891f4aca60..59f6b97a48 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/metrics/dropwizard/ListMetrics.java +++ b/gerrit-server/src/main/java/com/google/gerrit/metrics/dropwizard/ListMetrics.java @@ -19,6 +19,9 @@ import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.config.ConfigResource; +import com.google.gerrit.server.permissions.GlobalPermission; +import com.google.gerrit.server.permissions.PermissionBackend; +import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.inject.Inject; import java.util.ArrayList; import java.util.List; @@ -28,6 +31,7 @@ import java.util.TreeMap; import org.kohsuke.args4j.Option; class ListMetrics implements RestReadView { + private final PermissionBackend permissionBackend; private final CurrentUser user; private final DropWizardMetricMaker metrics; @@ -43,16 +47,17 @@ class ListMetrics implements RestReadView { List query = new ArrayList<>(); @Inject - ListMetrics(CurrentUser user, DropWizardMetricMaker metrics) { + ListMetrics( + PermissionBackend permissionBackend, CurrentUser user, DropWizardMetricMaker metrics) { + this.permissionBackend = permissionBackend; this.user = user; this.metrics = metrics; } @Override - public Map apply(ConfigResource resource) throws AuthException { - if (!user.getCapabilities().canViewCaches()) { - throw new AuthException("restricted to viewCaches"); - } + public Map apply(ConfigResource resource) + throws AuthException, PermissionBackendException { + permissionBackend.user(user).check(GlobalPermission.VIEW_CACHES); SortedMap out = new TreeMap<>(); List prefixes = new ArrayList<>(query.size()); diff --git a/gerrit-server/src/main/java/com/google/gerrit/metrics/dropwizard/MetricsCollection.java b/gerrit-server/src/main/java/com/google/gerrit/metrics/dropwizard/MetricsCollection.java index 2686f1f350..6abf17c4c3 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/metrics/dropwizard/MetricsCollection.java +++ b/gerrit-server/src/main/java/com/google/gerrit/metrics/dropwizard/MetricsCollection.java @@ -23,6 +23,9 @@ import com.google.gerrit.extensions.restapi.ResourceNotFoundException; import com.google.gerrit.extensions.restapi.RestView; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.config.ConfigResource; +import com.google.gerrit.server.permissions.GlobalPermission; +import com.google.gerrit.server.permissions.PermissionBackend; +import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; @@ -31,6 +34,7 @@ import com.google.inject.Singleton; class MetricsCollection implements ChildCollection { private final DynamicMap> views; private final Provider list; + private final PermissionBackend permissionBackend; private final Provider user; private final DropWizardMetricMaker metrics; @@ -38,10 +42,12 @@ class MetricsCollection implements ChildCollection> views, Provider list, + PermissionBackend permissionBackend, Provider user, DropWizardMetricMaker metrics) { this.views = views; this.list = list; + this.permissionBackend = permissionBackend; this.user = user; this.metrics = metrics; } @@ -58,10 +64,8 @@ class MetricsCollection implements ChildCollection> views; private final Provider list; + private final PermissionBackend permissionBackend; private final Provider self; private final DynamicMap> cacheMap; private final PostCaches postCaches; @@ -48,11 +51,13 @@ public class CachesCollection CachesCollection( DynamicMap> views, Provider list, + PermissionBackend permissionBackend, Provider self, DynamicMap> cacheMap, PostCaches postCaches) { this.views = views; this.list = list; + this.permissionBackend = permissionBackend; this.self = self; this.cacheMap = cacheMap; this.postCaches = postCaches; @@ -65,15 +70,8 @@ public class CachesCollection @Override public CacheResource parse(ConfigResource parent, IdString id) - throws AuthException, ResourceNotFoundException { - CurrentUser user = self.get(); - if (user instanceof AnonymousUser) { - throw new AuthException("Authentication required"); - } else if (!user.isIdentifiedUser()) { - throw new ResourceNotFoundException(); - } else if (!user.getCapabilities().canViewCaches()) { - throw new AuthException("not allowed to view caches"); - } + throws AuthException, ResourceNotFoundException, PermissionBackendException { + permissionBackend.user(self).check(GlobalPermission.VIEW_CACHES); String cacheName = id.get(); String pluginName = "gerrit";